ide; fixed ide rendered useless at compiling when ide binary that's being run is...
[sdk] / ide / src / project / ProjectView.ec
index 3318c9e..57b7118 100644 (file)
@@ -70,6 +70,7 @@ static char * iconNames[] =
    "<:ecere>status/folderOpen.png",                /*openFolder*/
    "<:ecere>mimeTypes/textEcereSource.png",        /*ecFile*/
    "<:ecere>mimeTypes/textEcereHeader.png",        /*ehFile*/
+   "<:ecere>mimeTypes/textCSource.png",            /*sFile*/ // TODO: change sFile icon to differentiate from cFile icon
    "<:ecere>mimeTypes/textCSource.png",            /*cFile*/
    "<:ecere>mimeTypes/textCHeader.png",            /*hFile*/
    "<:ecere>mimeTypes/textC++Source.png",          /*cppFile*/
@@ -546,19 +547,36 @@ class ProjectView : Window
       return project.GetRelativePath(filePath, relativePath);
    }
 
-   ProjectNode GetNodeFromWindow(Window document, Project project)
+   ProjectNode GetNodeFromWindow(Window document, Project project, bool isCObject)
    {
       if(document.fileName)
       {
          char winFileName[MAX_LOCATION];
          char * documentFileName = GetSlashPathBuffer(winFileName, document.fileName);
-         for(p : ide.workspace.projects)
+         ProjectNode node;
+         Project prj;
+         if(isCObject)
+         {
+            char name[MAX_FILENAME];
+            GetLastDirectory(documentFileName, name);
+            ChangeExtension(name, "ec", name);
+            for(p : ide.workspace.projects)
+            {
+               prj = project ? project : p;
+               if((node = prj.topNode.Find(name, false)))
+                  return node;
+               if(project) break;
+            }
+         }
+         else
          {
-            Project prj = project ? project : p;
-            ProjectNode node;
-            if((node = prj.topNode.FindByFullPath(documentFileName, false)))
-               return node;
-            if(project) break;
+            for(p : ide.workspace.projects)
+            {
+               prj = project ? project : p;
+               if((node = prj.topNode.FindByFullPath(documentFileName, false)))
+                  return node;
+               if(project) break;
+            }
          }
       }
       return null;
@@ -595,7 +613,7 @@ class ProjectView : Window
 
    bool ProjectPrepareCompiler(Project project, CompilerConfig compiler)
    {
-      if(!project.GenerateCrossPlatformMk() || !project.GenerateCompilerCf(compiler))
+      if(!project.GenerateCrossPlatformMk(app.includeFile) || !project.GenerateCompilerCf(compiler))
          ide.outputView.buildBox.Logf($"Error generating compiler configuration (Is the project/config directory writable?)\n");
       return true;
    }
@@ -711,7 +729,7 @@ class ProjectView : Window
       {
          if(document.modifiedDocument)
          {
-            ProjectNode node = GetNodeFromWindow(document, prj);
+            ProjectNode node = GetNodeFromWindow(document, prj, false);
             if(node && !document.MenuFileSave(null, 0))
             {
                result = false;
@@ -808,7 +826,7 @@ class ProjectView : Window
       }
       else
       {
-         ProjectNode node = GetNodeFromWindow(ide.activeClient, null);
+         ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false);
          if(node)
             prj = node.project;
       }
@@ -834,7 +852,7 @@ class ProjectView : Window
       }
       else
       {
-         ProjectNode node = GetNodeFromWindow(ide.activeClient, null);
+         ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false);
          if(node)
             prj = node.project;
       }
@@ -867,7 +885,7 @@ class ProjectView : Window
       }
       else
       {
-         ProjectNode node = GetNodeFromWindow(ide.activeClient, null);
+         ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false);
          if(node)
             prj = node.project;
       }
@@ -903,7 +921,7 @@ class ProjectView : Window
       }
       else
       {
-         ProjectNode node = GetNodeFromWindow(ide.activeClient, null);
+         ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false);
          if(node)
             prj = node.project;
       }
@@ -942,7 +960,7 @@ class ProjectView : Window
       }
       else
       {
-         ProjectNode node = GetNodeFromWindow(ide.activeClient, null);
+         ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false);
          if(node)
             prj = node.project;
       }
@@ -982,7 +1000,7 @@ class ProjectView : Window
       }
       else
       {
-         ProjectNode node = GetNodeFromWindow(ide.activeClient, null);
+         ProjectNode node = GetNodeFromWindow(ide.activeClient, null, false);
          if(node)
             prj = node.project;
       }
@@ -1007,7 +1025,7 @@ class ProjectView : Window
       {
          if(document.modifiedDocument)
          {
-            ProjectNode n = GetNodeFromWindow(document, project);
+            ProjectNode n = GetNodeFromWindow(document, project, mode == cObject ? true : false);
             for(node : nodes)
             {
                if(n && n.IsInNode(node) && !document.MenuFileSave(null, 0))
@@ -1059,7 +1077,7 @@ class ProjectView : Window
       {
          if(document.modifiedDocument)
          {
-            ProjectNode n = GetNodeFromWindow(document, project);
+            ProjectNode n = GetNodeFromWindow(document, project, false);
             for(node : nodes)
             {
                if(n && n.IsInNode(node) && !document.MenuFileSave(null, 0))
@@ -1078,6 +1096,8 @@ class ProjectView : Window
          result = false;
          if(ProjectPrepareForToolchain(project, normal, true, true, compiler, config))
          {
+            Map<String, NameCollisionInfo> namesInfo { };
+            project.topNode.GenMakefileGetNameCollisionInfo(namesInfo, config);
             for(node : nodes)
             {
                if(node.GetIsExcluded(config))
@@ -1091,10 +1111,12 @@ class ProjectView : Window
                      ide.outputView.buildBox.Logf($"Deleteing intermediate objects for %s %s in project %s...\n",
                            node.type == file ? $"single file" : $"folder", node.name, project.name);
 
-                  node.DeleteIntermediateFiles(compiler, config);
+                  node.DeleteIntermediateFiles(compiler, config, namesInfo, false);
                   result = true;
                }
             }
+            namesInfo.Free();
+            delete namesInfo;
          }
          delete compiler;
       }
@@ -1196,6 +1218,7 @@ class ProjectView : Window
    {
       CompilerConfig compiler = ideSettings.GetCompilerConfig(ide.workspace.compiler);
 
+      // This call really does not belong here:
       ide.UpdateToolBarActiveConfigs(false);
       for(config : project.configurations)
          ProjectPrepareMakefile(project, forceExists, compiler, config);
@@ -1601,7 +1624,7 @@ class ProjectView : Window
    {
       DataRow row = addTo ? addTo.AddRow() : fileList.AddRow();
 
-      row.tag = (int)node;
+      row.tag = (int64)node;
       node.row = row;
 
       if(node.type == resources)
@@ -1801,7 +1824,7 @@ class ProjectView : Window
             }
             Update(null);
             folderNode.row = parentNode.row.AddRowAfter(after ? after.row : null);
-            folderNode.row.tag = (int)folderNode;
+            folderNode.row.tag = (int64)folderNode;
                
             folderNode.row.SetData(null, folderNode);
             fileList.currentRow = folderNode.row;
@@ -1930,7 +1953,7 @@ class ProjectView : Window
          }
          Update(null);
          result.row = parentNode.row.AddRowAfter(after ? after.row : null);
-         result.row.tag = (int)result;
+         result.row.tag = (int64)result;
          result.row.SetData(null, result);
       }
       return result;
@@ -1972,7 +1995,7 @@ class ProjectView : Window
          Update(null);
          project.ModifiedAllConfigs(true, false, false, true);
          projectNode.row = parentNode.row.AddRowAfter(after ? after.row : null);
-         projectNode.row.tag =(int)projectNode;
+         projectNode.row.tag =(int64)projectNode;
             
          projectNode.row.SetData(null, projectNode);
          fileList.currentRow = projectNode.row;