瀏覽代碼

Fixed issues with absolute paths and relative paths: made it so in the TPR, relative paths are used only if the file is within the project directory.

git-svn-id: file:///var/svn/tigccpp/trunk@389 9552661e-59e3-4036-b4f2-dbe53926924f
joeyadams 18 年之前
父節點
當前提交
f4e87a5b10
共有 3 個文件被更改,包括 22 次插入5 次删除
  1. 11 5
      ktigcc/mainform.ui.h
  2. 9 0
      ktigcc/tpr.cxx
  3. 2 0
      ktigcc/tpr.h

+ 11 - 5
ktigcc/mainform.ui.h

@@ -622,7 +622,7 @@ void MainForm::fileOpen_addList(QListViewItem *category,void *fileListV,void *di
   for (i=0;i<e;i++)
   {
     tmp=*reinterpret_cast<const KURL *>(dir);
-    tmp.setFileName(fileList->path[i]);
+    kurlNewFileName(tmp,fileList->path[i]);
     caption=fileList->path[i];
     p=caption.findRev('.');
     if (p>=0) caption.truncate(p);
@@ -708,13 +708,19 @@ void MainForm::fileSave_loadList(QListViewItem *category,void *fileListV,const Q
   {
     if (IS_FILE(item))
     {
-      QString relPath=KURL::relativePath(base_dir,static_cast<ListViewFile *>(item)->fileName);
-      
+      QString absPath=static_cast<ListViewFile *>(item)->fileName;
+      QString relPath=KURL::relativePath(base_dir,absPath);
       if (relPath.find("./")==0)
+      {
         relPath=relPath.mid(2);
+      }
+      else if (relPath.find("../")==0)
+      {
+        relPath=absPath;
+      }
       
       tmpPath=*new_dir;
-      tmpPath.setFileName(relPath);
+      kurlNewFileName(tmpPath,relPath);
       static_cast<ListViewFile *>(item)->fileName=tmpPath.path();
       saveFileText(tmpPath.path(),static_cast<ListViewFile *>(item)->textBuffer);
       
@@ -1184,7 +1190,7 @@ void MainForm::newFile( QListViewItem *parent, QString text, const char *iconNam
   tmp+='/';
   tmp+="New File";
   tmpK.setPath(projectFileName);
-  tmpK.setFileName(tmp);
+  kurlNewFileName(tmpK,tmp);
   tmp=tmpK.path();
   if (projectFileName.isEmpty())
   {

+ 9 - 0
ktigcc/tpr.cxx

@@ -29,6 +29,7 @@
 #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)
@@ -700,3 +701,11 @@ int saveFileText(const char *fileName,QString &fileText)
   fclose(f);
   return 0;
 }
+
+void kurlNewFileName(KURL &dir,const QString &newFileName)
+{
+  if (newFileName[0]=='/')
+    dir.setPath(newFileName);
+  else
+    dir.setFileName(newFileName);
+}

+ 2 - 0
ktigcc/tpr.h

@@ -150,3 +150,5 @@ QString loadFileText(const char *fileName);
 
 int saveTPR(const QString &fileName,TPRDataStruct *src);
 int saveFileText(const char *fileName,QString &fileText);
+
+void kurlNewFileName(KURL &dir,const QString &newFileName);