if(projectView && projectView.project)
{
bool isCObject = false;
- ProjectNode node = projectView.GetNodeFromWindow(client, null, false, false);
- if(!node && (node = projectView.GetNodeFromWindow(client, null, false, true)))
+ ProjectNode node = projectView.GetNodeFromWindow(client, null, true, false, null);
+ if(!node && (node = projectView.GetNodeFromWindow(client, null, true, true, null)))
isCObject = true;
if(node)
{
{
if(projectView)
{
- bool result = false;
bool isCObject = false;
- ProjectNode node = null;
- for(p : ide.workspace.projects)
- {
- node = projectView.GetNodeFromWindow(activeClient, p, true, false);
- if(node) break;
- }
- if(!node && (node = projectView.GetNodeFromWindow(activeClient, null, true, true)))
- isCObject = true;
+ bool isExcluded = false;
+ ProjectNode node = projectView.GetNodeForCompilationFromWindow(activeClient, true, &isExcluded, &isCObject);
if(node)
{
- List<ProjectNode> nodes { };
- nodes.Add(node);
- projectView.Compile(node.project, nodes, mods.ctrl && mods.shift, isCObject ? cObject : normal);
- delete nodes;
- result = true;
+ if(isExcluded)
+ ide.outputView.buildBox.Logf($"%s %s is excluded from current build configuration.\n", isCObject ? "Object file" : "File", node.name);
+ else
+ {
+ List<ProjectNode> nodes { };
+ nodes.Add(node);
+ projectView.Compile(node.project, nodes, mods.ctrl && mods.shift, isCObject ? cObject : normal);
+ delete nodes;
+ }
}
- if(!result && node)
- ide.outputView.buildBox.Logf($"File %s is excluded from current build configuration.\n", node.name);
}
return true;
}
return project.topNode.Find(moduleName, false) != null;
}
- ProjectNode GetNodeFromWindow(Window document, Project project, bool skipExcluded, bool isCObject)
+ ProjectNode GetNodeForCompilationFromWindow(Window document, bool nonExcludedFirst, bool * isExcluded, bool * isCObject)
{
+ ProjectNode node = null;
+ if(nonExcludedFirst)
+ node = GetNodeFromWindow(document, null, false, false, isExcluded);
+ if(!node)
+ node = GetNodeFromWindow(document, null, true, false, isExcluded);
+ if(!node && nonExcludedFirst)
+ {
+ node = GetNodeFromWindow(document, null, false, true, isExcluded);
+ if(isCObject && node) *isCObject = true;
+ }
+ if(!node)
+ {
+ node = GetNodeFromWindow(document, null, true, true, isExcluded);
+ if(isCObject && node) *isCObject = true;
+ }
+ return node;
+ }
+
+ ProjectNode GetNodeFromWindow(Window document, Project project, bool allNodes, bool isCObject, bool * isNodeExcluded)
+ {
+ ProjectNode node = null;
if(document.fileName)
{
+ bool excluded;
char winFileName[MAX_LOCATION];
char * documentFileName = GetSlashPathBuffer(winFileName, document.fileName);
- ProjectNode node;
Project prj;
+ ProjectNode n;
if(isCObject)
{
char name[MAX_FILENAME];
for(p : ide.workspace.projects)
{
prj = project ? project : p;
- if((node = prj.topNode.Find(name, false)))
+ if((n = prj.topNode.Find(name, false)))
{
- if(!skipExcluded || !node.GetIsExcluded(prj.config))
- return node;
+ if(allNodes || !(excluded = n.GetIsExcluded(prj.config)))
+ {
+ node = n;
+ break;
+ }
}
if(project) break;
}
{
for(p : ide.workspace.projects)
{
+ Project pr = p;
prj = project ? project : p;
- if((node = prj.topNode.FindByFullPath(documentFileName, false)))
+ if((n = prj.topNode.FindByFullPath(documentFileName, false)))
{
- if(!skipExcluded || !node.GetIsExcluded(prj.config))
- return node;
+ if(allNodes || !(excluded = n.GetIsExcluded(prj.config)))
+ {
+ node = n;
+ break;
+ }
}
if(project) break;
}
}
+ if(node && isNodeExcluded)
+ *isNodeExcluded = excluded;
}
- return null;
+ return node;
}
// ((( UTILITY FUNCTIONS )))
{
if(document.modifiedDocument)
{
- ProjectNode node = GetNodeFromWindow(document, prj, false, false);
+ ProjectNode node = GetNodeFromWindow(document, prj, true, false, null);
if(node && !document.MenuFileSave(null, 0))
{
result = false;
}
else
{
- ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false);
+ ProjectNode node = GetNodeForCompilationFromWindow(ide.activeClient, true, null, null);
if(node)
prj = node.project;
}
}
else
{
- ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false);
+ ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null);
if(node)
prj = node.project;
}
}
else
{
- ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false);
+ ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null);
if(node)
prj = node.project;
}
}
else
{
- ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false);
+ ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null);
if(node)
prj = node.project;
}
else
{
// TODO: a file can belong to more than one project, ask which one to clean
- ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false);
+ ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null);
if(node) prj = node.project;
if(projects.count == 0)
projects.Add(prj);
}
else
{
- ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false);
+ ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null);
if(node)
prj = node.project;
}
{
if(document.modifiedDocument)
{
- ProjectNode n = GetNodeFromWindow(document, project, false, mode == cObject ? true : false);
+ ProjectNode n = GetNodeFromWindow(document, project, true, mode == cObject ? true : false, null);
for(node : nodes)
{
if(n && n.IsInNode(node) && !document.MenuFileSave(null, 0))
{
if(document.modifiedDocument)
{
- ProjectNode n = GetNodeFromWindow(document, project, false, false);
+ ProjectNode n = GetNodeFromWindow(document, project, true, false, null);
for(node : nodes)
{
if(n && n.IsInNode(node) && !document.MenuFileSave(null, 0))