Browse Source

Implement recent project list.

git-svn-id: file:///var/svn/tigccpp/trunk@432 9552661e-59e3-4036-b4f2-dbe53926924f
kevinkofler 18 years ago
parent
commit
768ff60c0d
4 changed files with 123 additions and 17 deletions
  1. 4 2
      ktigcc/ktigcc.cpp
  2. 2 2
      ktigcc/ktigcc.h
  3. 30 13
      ktigcc/mainform.ui
  4. 87 0
      ktigcc/mainform.ui.h

+ 4 - 2
ktigcc/ktigcc.cpp

@@ -25,6 +25,7 @@
 #include <kcmdlineargs.h>
 #include <kaboutdata.h>
 #include <qtextcodec.h>
+#include <kconfig.h>
 #include "mainform.h"
 using namespace std;
 void qCleanupImages_ktigcc();
@@ -33,7 +34,7 @@ void qInitImages_ktigcc();
 const char *tigcc_base;
 char tempdir[]="/tmp/ktigccXXXXXX";
 char *quill_drv;
-KApplication *papp;
+KConfig *pconfig;
 KAboutData *pabout;
 
 int main( int argc, char *argv[] )
@@ -59,10 +60,11 @@ int main( int argc, char *argv[] )
   pabout=&about;
   KCmdLineArgs::init(argc,argv,&about);
   KApplication app;
-  papp=&app;
   // Readd the images KDE kindly removes...
   qCleanupImages_ktigcc();
   qInitImages_ktigcc();
+  KConfig config("ktigccrc");
+  pconfig=&config;
   
   if ((tigcc_base = getenv("TIGCC")) == NULL) {
     fprintf(stderr, "Fatal error: TIGCC is not defined in the environment. "

+ 2 - 2
ktigcc/ktigcc.h

@@ -19,7 +19,7 @@
 */
 
 #include <cstddef>
-#include <kapplication.h>
+#include <kconfig.h>
 #include <kaboutdata.h>
 
 extern const char *tigcc_base;
@@ -28,5 +28,5 @@ extern char tempdir[];
 extern void write_temp_file(const char *filename, const char *data, const size_t len);
 extern void delete_temp_file(const char *filename);
 extern void force_qt_assistant_page(int n);
-extern KApplication *papp;
+extern KConfig *pconfig;
 extern KAboutData *pabout;

+ 30 - 13
ktigcc/mainform.ui

@@ -673,9 +673,6 @@
         <property name="text">
             <string>Recent File 1</string>
         </property>
-        <property name="menuText">
-            <string>Recent File 1</string>
-        </property>
     </action>
     <action>
         <property name="name">
@@ -684,9 +681,6 @@
         <property name="text">
             <string>Recent File 2</string>
         </property>
-        <property name="menuText">
-            <string>Recent File 2</string>
-        </property>
     </action>
     <action>
         <property name="name">
@@ -695,9 +689,6 @@
         <property name="text">
             <string>Recent File 3</string>
         </property>
-        <property name="menuText">
-            <string>Recent File 3</string>
-        </property>
     </action>
     <action>
         <property name="name">
@@ -706,9 +697,6 @@
         <property name="text">
             <string>Recent File 4</string>
         </property>
-        <property name="menuText">
-            <string>Recent File 4</string>
-        </property>
     </action>
     <action>
         <property name="name">
@@ -1317,6 +1305,30 @@
         <receiver>MainForm</receiver>
         <slot>fileTreeItemRenamed(QListViewItem*,int,const QString&amp;)</slot>
     </connection>
+    <connection>
+        <sender>fileRecent1Action</sender>
+        <signal>activated()</signal>
+        <receiver>MainForm</receiver>
+        <slot>fileRecent1()</slot>
+    </connection>
+    <connection>
+        <sender>fileRecent2Action</sender>
+        <signal>activated()</signal>
+        <receiver>MainForm</receiver>
+        <slot>fileRecent2()</slot>
+    </connection>
+    <connection>
+        <sender>fileRecent3Action</sender>
+        <signal>activated()</signal>
+        <receiver>MainForm</receiver>
+        <slot>fileRecent3()</slot>
+    </connection>
+    <connection>
+        <sender>fileRecent4Action</sender>
+        <signal>activated()</signal>
+        <receiver>MainForm</receiver>
+        <slot>fileRecent4()</slot>
+    </connection>
 </connections>
 <includes>
     <include location="local" impldecl="in implementation">mainform.ui.h</include>
@@ -1359,16 +1371,21 @@
     <slot>m_view_cursorPositionChanged()</slot>
     <slot>m_view_textChanged()</slot>
     <slot>fileTreeItemRenamed( QListViewItem * item, int col, const QString &amp; newName )</slot>
+    <slot>fileRecent1()</slot>
+    <slot>fileRecent2()</slot>
+    <slot>fileRecent3()</slot>
+    <slot>fileRecent4()</slot>
 </slots>
 <functions>
     <function access="private" specifier="non virtual">clearProject()</function>
     <function access="private" specifier="non virtual" returnType="QString">findFilter( unsigned short job )</function>
     <function returnType="QString">SGetFileName( int mode, const QString &amp; fileFilter, const QString &amp; caption, QWidget * parent )</function>
     <function returnType="QStringList">SGetFileName_Multiple( const QString &amp; fileFilter, const QString &amp; caption, QWidget * parent )</function>
+    <function access="private" specifier="non virtual">updateRecent()</function>
     <function access="private" specifier="non virtual" returnType="QListViewItem *">openFile( QListViewItem * category, QListViewItem * parent, const QString &amp; fileCaption, const QString &amp; fileName )</function>
     <function access="private" specifier="static" returnType="QListViewItem *">createFolder( QListViewItem * parent, const QString &amp; name )</function>
     <function access="private" specifier="non virtual">fileOpen_addList( QListViewItem * category, void * fileListV, void * dir, const QString &amp; open_file )</function>
-    <function access="private" specifier="non virtual">openProject( const QString &amp; filename )</function>
+    <function access="private" specifier="non virtual">openProject( const QString &amp; fileName )</function>
     <function access="private" specifier="non virtual">fileSave_saveAs( QListViewItem * theItem )</function>
     <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>fileSave_fromto( const QString &amp; lastProj, const QString &amp; nextProj )</function>

+ 87 - 0
ktigcc/mainform.ui.h

@@ -481,6 +481,12 @@ void MainForm::init()
   lastDirectory=TIGCCProjectDirectory;
   projectFileName="";
   projectIsDirty=FALSE;
+  pconfig->setGroup("Recent files");
+  QString mostrecent=pconfig->readEntry("Recent file 1");
+  if (!mostrecent.isNull())
+    openProject(mostrecent);
+  else
+    updateRecent();
   startTimer(100);
 }
 
@@ -641,6 +647,51 @@ QStringList MainForm::SGetFileName_Multiple(const QString &fileFilter,const QStr
   return ret;
 }
 
+void MainForm::updateRecent()
+{
+  pconfig->setGroup("Recent files");
+  QString recent=pconfig->readEntry("Recent file 1");
+  if (recent.isNull())
+    fileRecent1Action->setVisible(FALSE);
+  else {
+    QString recentcut=recent.mid(recent.findRev('/')+1);
+    recentcut.truncate(recentcut.findRev('.'));
+    fileRecent1Action->setVisible(TRUE);
+    fileRecent1Action->setText(recentcut);
+    fileRecent1Action->setStatusTip(recent);
+  }
+  recent=pconfig->readEntry("Recent file 2");
+  if (recent.isNull())
+    fileRecent2Action->setVisible(FALSE);
+  else {
+    QString recentcut=recent.mid(recent.findRev('/')+1);
+    recentcut.truncate(recentcut.findRev('.'));
+    fileRecent2Action->setVisible(TRUE);
+    fileRecent2Action->setText(recentcut);
+    fileRecent2Action->setStatusTip(recent);
+  }
+  recent=pconfig->readEntry("Recent file 3");
+  if (recent.isNull())
+    fileRecent3Action->setVisible(FALSE);
+  else {
+    QString recentcut=recent.mid(recent.findRev('/')+1);
+    recentcut.truncate(recentcut.findRev('.'));
+    fileRecent3Action->setVisible(TRUE);
+    fileRecent3Action->setText(recentcut);
+    fileRecent3Action->setStatusTip(recent);
+  }
+  recent=pconfig->readEntry("Recent file 4");
+  if (recent.isNull())
+    fileRecent4Action->setVisible(FALSE);
+  else {
+    QString recentcut=recent.mid(recent.findRev('/')+1);
+    recentcut.truncate(recentcut.findRev('.'));
+    fileRecent4Action->setVisible(TRUE);
+    fileRecent4Action->setText(recentcut);
+    fileRecent4Action->setStatusTip(recent);
+  }
+}
+
 QListViewItem * MainForm::openFile(QListViewItem * category, QListViewItem * parent, const QString &fileCaption, const QString &fileName)
 {
   QListViewItem *item=NULL, *next=parent->firstChild();
@@ -768,6 +819,22 @@ void MainForm::openProject(const QString &fileName)
   libopts=TPRData.libopts;
   updateLeftStatusLabel();
   updateRightStatusLabel();
+  pconfig->setGroup("Recent files");
+  unsigned i,j;
+  // Find recent file to overwrite. If it isn't one of the first 3, by
+  // elimination, it is the last, thus the test only goes up to <4, not <=4.
+  for (i=1;i<4;i++) {
+    QString recenti=pconfig->readEntry(QString("Recent file %1").arg(i));
+    if (recenti.isNull() || !recenti.compare(fileName))
+      break;
+  }
+  // Move entries up
+  for (j=i;j>1;j--) {
+    pconfig->writeEntry(QString("Recent file %1").arg(j),pconfig->readEntry(QString("Recent file %1").arg(j-1)));
+  }
+  // The first recent file is the current project.
+  pconfig->writeEntry("Recent file 1",fileName);
+  updateRecent();
 }
 
 void MainForm::fileOpen()
@@ -780,6 +847,26 @@ void MainForm::fileOpen()
   openProject(fileName);
 }
 
+void MainForm::fileRecent1()
+{
+  openProject(fileRecent1Action->statusTip());
+}
+
+void MainForm::fileRecent2()
+{
+  openProject(fileRecent2Action->statusTip());
+}
+
+void MainForm::fileRecent3()
+{
+  openProject(fileRecent3Action->statusTip());
+}
+
+void MainForm::fileRecent4()
+{
+  openProject(fileRecent4Action->statusTip());
+}
+
 void MainForm::fileSave_saveAs(QListViewItem *theItem)
 {
   if (!IS_FILE(theItem))