From: Rejean Loyer Date: Sat, 8 Feb 2014 18:16:46 +0000 (-0500) Subject: ide; (#1037) fix f7/ctrlF7 compilation selecting wrong file/project when file exclusi... X-Git-Tag: 0.44.09.9~74 X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?p=sdk;a=commitdiff_plain;h=f7373df9b6963d0f63c6710ca991036b7296811d ide; (#1037) fix f7/ctrlF7 compilation selecting wrong file/project when file exclusion and/or same file in multiple projects are involved. --- diff --git a/ide/src/designer/CodeEditor.ec b/ide/src/designer/CodeEditor.ec index 37e4348..addb173 100644 --- a/ide/src/designer/CodeEditor.ec +++ b/ide/src/designer/CodeEditor.ec @@ -1407,9 +1407,7 @@ class CodeEditor : Window { if(ide.projectView) { - ProjectNode node = ide.projectView.GetNodeFromWindow(this, null, true, false); - if(!node) - node = ide.projectView.GetNodeFromWindow(this, null, true, true); + ProjectNode node = ide.projectView.GetNodeForCompilationFromWindow(this, false, null, null); if(!node) { char * s; @@ -2093,7 +2091,7 @@ class CodeEditor : Window ProjectView projectView = ide.projectView; if(projectView) { - ProjectNode node = projectView.GetNodeFromWindow(this, null, false, false); + ProjectNode node = projectView.GetNodeFromWindow(this, null, true, false, null); if(node && node.modified) { node.modified = false; diff --git a/ide/src/ide.ec b/ide/src/ide.ec index 1a40ff2..ff94368 100644 --- a/ide/src/ide.ec +++ b/ide/src/ide.ec @@ -2920,8 +2920,8 @@ class IDEWorkSpace : Window 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) { @@ -2938,26 +2938,21 @@ class IDEWorkSpace : Window { 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 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 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; } diff --git a/ide/src/project/ProjectView.ec b/ide/src/project/ProjectView.ec index b206050..294b130 100644 --- a/ide/src/project/ProjectView.ec +++ b/ide/src/project/ProjectView.ec @@ -578,14 +578,36 @@ class ProjectView : Window 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]; @@ -594,10 +616,13 @@ class ProjectView : Window 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; } @@ -606,17 +631,23 @@ class ProjectView : Window { 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 ))) @@ -767,7 +798,7 @@ class ProjectView : Window { 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; @@ -859,7 +890,7 @@ class ProjectView : Window } else { - ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false); + ProjectNode node = GetNodeForCompilationFromWindow(ide.activeClient, true, null, null); if(node) prj = node.project; } @@ -889,7 +920,7 @@ class ProjectView : Window } else { - ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false); + ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null); if(node) prj = node.project; } @@ -922,7 +953,7 @@ class ProjectView : Window } else { - ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false); + ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null); if(node) prj = node.project; } @@ -956,7 +987,7 @@ class ProjectView : Window } else { - ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false); + ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null); if(node) prj = node.project; } @@ -1030,7 +1061,7 @@ class ProjectView : Window 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); @@ -1074,7 +1105,7 @@ class ProjectView : Window } else { - ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false, false); + ProjectNode node = GetNodeFromWindow(ide.activeClient, null, true, false, null); if(node) prj = node.project; } @@ -1099,7 +1130,7 @@ class ProjectView : Window { 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)) @@ -1150,7 +1181,7 @@ class ProjectView : Window { 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))