浏览代码

Broke up extractFileTreeInfo by creating a separate routine that lists all the file paths in every category of the project. The routine is extractAllFileNames.
Created a new function for checking if a file name is available based on a given list (follows the .o rules correctly) called checkFileName. It depends on a list generated by extractAllFileNames.
Corrected new file uniquification (I still need to know if you want new file names to be based on all file names of all types like the Windows IDE does)


git-svn-id: file:///var/svn/tigccpp/trunk@391 9552661e-59e3-4036-b4f2-dbe53926924f

joeyadams 18 年之前
父节点
当前提交
b0a41f43f4
共有 4 个文件被更改,包括 94 次插入24 次删除
  1. 2 1
      ktigcc/mainform.ui
  2. 48 22
      ktigcc/mainform.ui.h
  3. 43 1
      ktigcc/tpr.cxx
  4. 1 0
      ktigcc/tpr.h

+ 2 - 1
ktigcc/mainform.ui

@@ -1369,7 +1369,8 @@
     <function access="private" specifier="non virtual">fileSave_loadList( QListViewItem * category, void * fileListV, const QString &amp; base_dir, void * dir_new, QString * open_file )</function>
     <function returnType="int">fileSave_fromto( const QString &amp; lastProj, const QString &amp; nextProj )</function>
     <function access="private" specifier="non virtual">updateSizes()</function>
-    <function access="private" specifier="non virtual">extractFileTreeInfo( QListViewItem * parent, QListViewItem * * p_category, QStringList * p_allFiles, QString * p_folderPath )</function>
+    <function access="private" specifier="non virtual" returnType="QStringList">extractAllFileNames( void )</function>
+    <function access="private" specifier="non virtual">extractFileTreeInfo( QListViewItem * parent, QListViewItem * * p_category, QString * p_folderPath )</function>
     <function access="private" specifier="non virtual">newFile( QListViewItem * parent, QString text, const char * iconName )</function>
     <function access="private" specifier="non virtual">newFile( QListViewItem * parent )</function>
     <function access="private" specifier="non virtual" returnType="QListViewItem *">resolveParent( QListViewItem * category )</function>

+ 48 - 22
ktigcc/mainform.ui.h

@@ -1066,11 +1066,45 @@ void MainForm::fileTreeContextMenuRequested(QListViewItem *item,
   }
 }
 
+QStringList MainForm::extractAllFileNames(void)
+{
+  QListViewItem *item=rootListItem->firstChild(),*next;
+  QStringList allFiles;
+  while (item)
+  {
+    if (IS_FOLDER(item))
+    {
+      next=item->firstChild();
+      if (next)
+      {
+        item=next;
+        continue;
+      }
+    }
+    if (IS_FILE(item))
+    {
+      allFiles << (static_cast<ListViewFile *>(item)->fileName);
+    }
+    next=item->nextSibling();
+    while (!next)
+    {
+      next=item->parent();
+      if (next==rootListItem||!next)
+      {
+        return allFiles;
+      }
+      item=next;
+      next=item->nextSibling();
+    }
+    item=next;
+  }
+  return allFiles;
+}
+
 //you put in parent, and it gives you the rest, but you must have a place to put it all.
-void MainForm::extractFileTreeInfo(QListViewItem *parent,QListViewItem **p_category,QStringList *p_allFiles,QString *p_folderPath)
+void MainForm::extractFileTreeInfo(QListViewItem *parent,QListViewItem **p_category,QString *p_folderPath)
 {
   QListViewItem *category=parent,*item,*next;
-  QStringList allFiles;
   QString tmp=QString::null;
   int o;
   while (category->parent()->rtti()==0x716CC0) category=category->parent();
@@ -1084,10 +1118,6 @@ void MainForm::extractFileTreeInfo(QListViewItem *parent,QListViewItem **p_categ
       tmp+=item->text(0);
       *p_folderPath=tmp;
     }
-    if (IS_FILE(item))
-    {
-      allFiles << (static_cast<ListViewFile *>(item)->fileName);
-    }
     if (IS_FOLDER(item))
     {
       next=item->firstChild();
@@ -1121,23 +1151,19 @@ mfnf_seeknext:
     }
     item=next;
   }
-  *p_allFiles=allFiles;
 }
 
 void MainForm::newFile( QListViewItem *parent, QString text, const char *iconName )
 {
   QListViewItem *item=NULL, *next=parent->firstChild();
   QString tmp,oldtmp,suffix,caption;
-  QStringList allFiles;
+  QStringList allFiles=extractAllFileNames();
   QListViewItem *category;
   KURL tmpK;
-  int i;
   int tryNum;
   for (; IS_FILE(next); next=item->nextSibling())
     item=next;
-  ListViewFile *newFile=item?new ListViewFile(parent,item)
-                        :new ListViewFile(parent);
-  extractFileTreeInfo(parent,&category,&allFiles,&tmp);
+  extractFileTreeInfo(parent,&category,&tmp);
   
   suffix="";
   if (category==hFilesListItem)
@@ -1156,6 +1182,7 @@ void MainForm::newFile( QListViewItem *parent, QString text, const char *iconNam
     suffix="a";
   else if (category==txtFilesListItem)
     suffix="txt";
+  suffix='.'+suffix;
   
   tmp+='/';
   tmp+="New File";
@@ -1170,22 +1197,21 @@ void MainForm::newFile( QListViewItem *parent, QString text, const char *iconNam
     if (tmp[o]=='/')
       tmp=tmp.mid(o+1);
   }
+  
   caption="New File";
   oldtmp=tmp+' ';
-  suffix='.'+suffix;
   tmp+=suffix;
   tryNum=1;
-mfnf_retry:
-  for (i=allFiles.count()-1;i>=0;i--)
+  while (!checkFileName(tmp,allFiles))
   {
-    if (!tmp.compare(allFiles[i]))
-    {
-      tryNum++;
-      tmp=oldtmp+QString("%1").arg(tryNum)+suffix;
-      caption="New File "+QString("%1").arg(tryNum);
-      goto mfnf_retry;
-    }
+    tryNum++;
+    tmp=oldtmp+QString("%1").arg(tryNum)+suffix;
+    caption="New File "+QString("%1").arg(tryNum);
   }
+  
+  ListViewFile *newFile=item?new ListViewFile(parent,item)
+                        :new ListViewFile(parent);
+  
   newFile->fileName=tmp;
   
   newFile->setText(0,caption);

+ 43 - 1
ktigcc/tpr.cxx

@@ -29,7 +29,6 @@
 #include <kcmdlineargs.h>
 #include <kaboutdata.h>
 #include <qtextcodec.h>
-#include <kurl.h>
 #include "tpr.h"
 
 #define find_param(s_,t_) find_param_ex((s_),(t_),sizeof(t_)-1)
@@ -709,3 +708,46 @@ void kurlNewFileName(KURL &dir,const QString &newFileName)
   else
     dir.setFileName(newFileName);
 }
+
+QString pullOutFileSuffix(const QString &srcFileName,QString &destFileName)
+{
+  int a,b;
+  QString ret;
+  destFileName=srcFileName;
+  a=destFileName.findRev('.');
+  b=destFileName.findRev('/');
+  if (a<0)
+    return QString::null;
+  if (a<b)
+    return QString::null;
+  ret=destFileName.mid(a+1);
+  destFileName.truncate(a);
+  return ret;
+}
+#include "kmessagebox.h"
+int checkFileName(const QString &fileName,const QStringList &fileNameList)
+{
+  int i;
+  QString fileName_name,fileName_suffix;
+  QString name,suffix;
+  KMessageBox::sorry(NULL,QString("\'%1\'").arg(fileName),"Warning");
+  fileName_suffix=pullOutFileSuffix(fileName,fileName_name);
+  for (i=fileNameList.count()-1;i>=0;i--)
+  {
+    suffix=pullOutFileSuffix(fileNameList[i],name);
+    if (!suffix.compare("c")||!suffix.compare("s")||!suffix.compare("asm")||!suffix.compare("o"))
+    {
+      if (!fileName_suffix.compare("c")||!fileName_suffix.compare("s")||!fileName_suffix.compare("asm")||!fileName_suffix.compare("o"))
+      {
+        if (!name.compare(fileName_name))
+          return 0;
+      }
+    }
+    else
+    {
+      if (!fileNameList[i].compare(fileName))
+        return 0;
+    }
+  }
+  return 1;
+}

+ 1 - 0
ktigcc/tpr.h

@@ -152,3 +152,4 @@ int saveTPR(const QString &fileName,TPRDataStruct *src);
 int saveFileText(const char *fileName,QString &fileText);
 
 void kurlNewFileName(KURL &dir,const QString &newFileName);
+int checkFileName(const QString &fileName,const QStringList &fileNameList);