changeset 359:550650bbb959 feature_91

Add "Open Recent". Fixes #91
author Chris Cannam
date Thu, 17 Mar 2011 16:35:38 +0000 (2011-03-17)
parents ea6f76c0aa76
children f34848e8094b
files mainwindow.cpp mainwindow.h
diffstat 2 files changed, 37 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mainwindow.cpp	Thu Mar 17 13:52:57 2011 +0000
+++ b/mainwindow.cpp	Thu Mar 17 16:35:38 2011 +0000
@@ -29,6 +29,7 @@
 #include <QToolButton>
 #include <QSettings>
 #include <QInputDialog>
+#include <QWidgetAction>
 #include <QRegExp>
 #include <QShortcut>
 #include <QUrl>
@@ -129,6 +130,7 @@
     cs->addDefaultName(getUserInfo());
 
     hgTest();
+    updateRecentMenu();
 }
 
 
@@ -1078,11 +1080,11 @@
 
         QSettings settings;
         settings.beginGroup("General");
-        QString lastChoice = settings.value("lastopentype", "local").toString();
+        QString lastChoice = settings.value("lastopentype", "remote").toString();
         if (lastChoice != "local" &&
             lastChoice != "remote" &&
             lastChoice != "init") {
-            lastChoice = "local";
+            lastChoice = "remote";
         }
 
         d->setCurrentChoice(lastChoice);
@@ -1121,6 +1123,14 @@
     }
 }
 
+void MainWindow::recentMenuActivated()
+{
+    QAction *a = qobject_cast<QAction *>(sender());
+    if (!a) return;
+    QString local = a->text();
+    open(local);
+}
+
 void MainWindow::changeRemoteRepo()
 {
     // This will involve rewriting the local .hgrc
@@ -1311,7 +1321,7 @@
 {
     return (QMessageBox::question
             (this, tr("Folder has no repository"),
-             tr("<qt><b>Initialise a repository here?</b><br><br>You asked to open \"%1\".<br>This folder does not contain a Mercurial repository.<br><br>Would you like to initialise a repository here?</qt>")
+             tr("<qt><b>Initialise a repository here?</b><br><br>You asked to open \"%1\".<br>This folder is not a Mercurial working copy.<br><br>Would you like to initialise a repository here?</qt>")
              .arg(xmlEncode(arg)),
              QMessageBox::Ok | QMessageBox::Cancel,
              QMessageBox::Ok)
@@ -2217,6 +2227,7 @@
         m_stateUnknown = false;
         enableDisableActions();
         m_hgTabs->updateHistory();
+        updateRecentMenu();
     }
 }
 
@@ -2505,6 +2516,24 @@
     }
 }
 
+
+void MainWindow::updateRecentMenu()
+{
+    m_recentMenu->clear();
+    RecentFiles rf("Recent-local");
+    QStringList recent = rf.getRecent();
+    if (recent.empty()) {
+        QLabel *label = new QLabel(tr("No recent local repositories"));
+        QWidgetAction *wa = new QWidgetAction(m_recentMenu);
+        wa->setDefaultWidget(label);
+        return;
+    }
+    foreach (QString r, recent) {
+        QAction *a = m_recentMenu->addAction(r);
+        connect(a, SIGNAL(activated()), this, SLOT(recentMenuActivated()));
+    }
+}
+
 void MainWindow::createActions()
 {
     //File actions
@@ -2584,6 +2613,7 @@
     m_fileMenu = menuBar()->addMenu(tr("File"));
 
     m_fileMenu -> addAction(m_openAct);
+    m_recentMenu = m_fileMenu->addMenu(tr("Open Recent"));
     m_fileMenu -> addAction(m_changeRemoteRepoAct);
     m_fileMenu -> addSeparator();
 
--- a/mainwindow.h	Thu Mar 17 13:52:57 2011 +0000
+++ b/mainwindow.h	Thu Mar 17 16:35:38 2011 +0000
@@ -58,6 +58,7 @@
     void about();
     void settings();
     void open();
+    void recentMenuActivated();
     void changeRemoteRepo();
     void startupDialog();
     void clearSelections();
@@ -115,6 +116,8 @@
     void hgQueryParents();
     void hgLog();
     void hgLogIncremental(QStringList prune);
+
+    void updateRecentMenu();
     void createActions();
     void connectActions();
     void connectTabsSignals();
@@ -215,6 +218,7 @@
 
     // Menus
     QMenu *m_fileMenu;
+    QMenu *m_recentMenu;
     QMenu *m_advancedMenu;
     QMenu *m_helpMenu;