ide; fixed ide says '<path> file is not part of any project, it can't be compiled...
authorRejean Loyer <rejean.loyer@gmail.com>
Tue, 5 Mar 2013 07:26:07 +0000 (02:26 -0500)
committerJerome St-Louis <jerome@ecere.com>
Wed, 6 Mar 2013 13:26:50 +0000 (08:26 -0500)
ide/src/designer/CodeEditor.ec
ide/src/ide.ec
ide/src/project/Project.ec
ide/src/project/ProjectNode.ec
ide/src/project/ProjectView.ec

index 1cad0f7..238b979 100644 (file)
@@ -769,7 +769,7 @@ class CodeEditor : Window
       ProjectView projectView = ide.projectView;
       if(projectView)
       {
-         ProjectNode node = projectView.GetNodeFromWindow(this, null);
+         ProjectNode node = projectView.GetNodeFromWindow(this, null, false);
          if(node)
          {
             node.modified = modifiedDocument;
@@ -1372,7 +1372,9 @@ class CodeEditor : Window
          {
             if(ide.projectView)
             {
-               ProjectNode node = ide.projectView.GetNodeFromWindow(this, null);
+               ProjectNode node = ide.projectView.GetNodeFromWindow(this, null, false);
+               if(!node)
+                  node = ide.projectView.GetNodeFromWindow(this, null, true);
                if(!node)
                {
                   char * s;
@@ -2077,7 +2079,7 @@ class CodeEditor : Window
          ProjectView projectView = ide.projectView;
          if(projectView)
          {
-            ProjectNode node = projectView.GetNodeFromWindow(this, null);
+            ProjectNode node = projectView.GetNodeFromWindow(this, null, false);
             if(node && node.modified)
             {
                node.modified = false;
index 3b6df9e..9877539 100644 (file)
@@ -2552,11 +2552,17 @@ class IDEWorkSpace : Window
 
             if(projectView && projectView.project)
             {
-               ProjectNode node = projectView.GetNodeFromWindow(client, null);
+               bool isCObject = false;
+               ProjectNode node = projectView.GetNodeFromWindow(client, null, false);
+               if(!node && (node = projectView.GetNodeFromWindow(client, null, true)))
+                  isCObject = true;
                if(node)
                {
-                  char name[1024];
-                  sprintf(name, $"Compile %s", node.name);
+                  char nodeName[MAX_FILENAME];
+                  char name[MAX_FILENAME+96];
+                  if(isCObject)
+                     ChangeExtension(node.name, "c", nodeName);
+                  sprintf(name, $"Compile %s", isCObject ? nodeName : node.name);
                   projectCompileItem = 
                   {
                      copyText = true, text = name, c, ctrlF7, disabled = projectView.buildInProgress;
@@ -2566,16 +2572,19 @@ class IDEWorkSpace : Window
                         if(projectView)
                         {
                            bool result = false;
+                           bool isCObject = false;
                            ProjectNode node = null;
                            for(p : ide.workspace.projects)
                            {
-                              node = projectView.GetNodeFromWindow(activeClient, p);
+                              node = projectView.GetNodeFromWindow(activeClient, p, false);
                               //if(node && projectView.Compile(node.project, node, mods.ctrl && mods.shift))
+                              if(!node && (node = projectView.GetNodeFromWindow(activeClient, null, true)))
+                                 isCObject = true;
                               if(node)
                               {
                                  List<ProjectNode> nodes { };
                                  nodes.Add(node);
-                                 projectView.Compile(node.project, nodes, mods.ctrl && mods.shift, normal);
+                                 projectView.Compile(node.project, nodes, mods.ctrl && mods.shift, isCObject ? cObject : normal);
                                  delete nodes;
 
                                  result = true;
index 1943dd6..92fe195 100644 (file)
@@ -726,7 +726,7 @@ char * GetConfigName(ProjectConfig config)
    return config ? config.name : "Common";
 }
 
-public enum SingleFileCompileMode { normal, debugPrecompile, debugCompile, debugGenerateSymbols };
+public enum SingleFileCompileMode { normal, debugPrecompile, debugCompile, debugGenerateSymbols, cObject };
 
 class Project : struct
 {
@@ -1800,7 +1800,7 @@ private:
                   ide.outputView.buildBox.Logf($"File %s is excluded from current build configuration.\n", node.name);
                else
                {
-                  node.DeleteIntermediateFiles(compiler, config, namesInfo);
+                  node.DeleteIntermediateFiles(compiler, config, namesInfo, mode == cObject ? true : false);
                   node.GetTargets(config, namesInfo, objDirExp.dir, makeTargets);
                }
             }
@@ -1834,13 +1834,13 @@ private:
          GetIDECompilerConfigsDir(cfDir, true, true);
          sprintf(command, "%s %sCF_DIR=\"%s\"%s%s COMPILER=%s -j%d %s%s%s -C \"%s\"%s -f \"%s\"",
                compiler.makeCommand,
-               mode == normal ? "" : (mode == debugPrecompile ? "ECP_DEBUG=y " : mode == debugCompile ? "ECC_DEBUG=y " : mode == debugGenerateSymbols ? "ECS_DEBUG=y " : ""),
+               mode == debugPrecompile ? "ECP_DEBUG=y " : mode == debugCompile ? "ECC_DEBUG=y " : mode == debugGenerateSymbols ? "ECS_DEBUG=y " : "",
                cfDir,
                crossCompiling ? " TARGET_PLATFORM=" : "", targetPlatform,
                compilerName, numJobs,
                compiler.ccacheEnabled ? "CCACHE=y " : "",
                compiler.distccEnabled ? "DISTCC=y " : "",
-               (String)makeTargets, topNode.path, (justPrint || mode != normal) ? " -n" : "", makeFilePath);
+               (String)makeTargets, topNode.path, (justPrint || (mode != normal && mode != cObject)) ? " -n" : "", makeFilePath);
          if(justPrint)
             ide.outputView.buildBox.Logf("%s\n", command);
          if((f = DualPipeOpen(PipeOpenMode { output = true, error = true, input = true }, command)))
@@ -1851,7 +1851,7 @@ private:
                ProcessPipeOutputRaw(f);
                result = true;
             }
-            else if(mode != normal)
+            else if(mode != normal && mode != cObject)
             {
                char line[65536];
                while(!f.Eof())
index 6ac134c..37fcffd 100644 (file)
@@ -2302,7 +2302,7 @@ private:
       }
    }
 
-   void DeleteIntermediateFiles(CompilerConfig compiler, ProjectConfig prjConfig, Map<String, NameCollisionInfo> namesInfo)
+   void DeleteIntermediateFiles(CompilerConfig compiler, ProjectConfig prjConfig, Map<String, NameCollisionInfo> namesInfo, bool onlyCObject)
    {
       if(type == file)
       {
@@ -2324,7 +2324,7 @@ private:
          PathCatSlash(fileName, objDir.dir);
          PathCatSlash(fileName, name);
 
-         if(!strcmp(extension, "ec"))
+         if(!onlyCObject && !strcmp(extension, "ec"))
          {
             ChangeExtension(fileName, "c", fileName);
             if(FileExists(fileName)) DeleteFile(fileName);
@@ -2350,7 +2350,7 @@ private:
          for(child : files)
          {
             if(child.type != resources && (child.type == folder || !child.GetIsExcluded(prjConfig)))
-               child.DeleteIntermediateFiles(compiler, prjConfig, namesInfo);
+               child.DeleteIntermediateFiles(compiler, prjConfig, namesInfo, onlyCObject);
          }
       }
    }
index 7eff355..8d63cdf 100644 (file)
@@ -547,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;
@@ -712,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;
@@ -809,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;
       }
@@ -835,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;
       }
@@ -868,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;
       }
@@ -904,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;
       }
@@ -943,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;
       }
@@ -983,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;
       }
@@ -1008,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))
@@ -1060,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))
@@ -1094,7 +1111,7 @@ 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, namesInfo);
+                  node.DeleteIntermediateFiles(compiler, config, namesInfo, false);
                   result = true;
                }
             }