ide; (#1037) fix f7/ctrlF7 compilation selecting wrong file/project when file exclusi...
authorRejean Loyer <redj@ecere.com>
Sat, 8 Feb 2014 18:16:46 +0000 (13:16 -0500)
committerJerome St-Louis <jerome@ecere.com>
Mon, 10 Feb 2014 21:58:43 +0000 (04:58 +0700)
ide/src/designer/CodeEditor.ec
ide/src/ide.ec
ide/src/project/ProjectView.ec

index 37e4348..addb173 100644 (file)
@@ -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;
index 1a40ff2..ff94368 100644 (file)
@@ -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<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;
                      }
index b206050..294b130 100644 (file)
@@ -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))