From 51e49cabe879361ce19a900bd5e93a745d5d2200 Mon Sep 17 00:00:00 2001 From: Peinthor Rene Date: Sat, 28 Jan 2012 21:54:54 +0100 Subject: [PATCH] add a recent files menu, mostly taken from qt sample code --- src/mainwindow.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++- src/mainwindow.h | 23 +++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index fb6f58a0..ab4765e3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -8,8 +8,8 @@ #include #include "qmessagebox.h" -//#include "q3filedialog.h" #include +#include #include "qfile.h" #include "qapplication.h" @@ -75,6 +75,7 @@ void mainForm::init() this->setWindowIcon( QPixmap( applicationIconName ) ); buttonNext->setEnabled(false); buttonPrevious->setEnabled(false); + updateRecentFileActions(); if(!editWin){ @@ -129,6 +130,7 @@ void mainForm::fileOpen(const QString & fileName) editModifyTableAction->setEnabled(true); editCreateIndexAction->setEnabled(true); editDeleteIndexAction->setEnabled(true); + setCurrentFile(wFile); } else { QString err = "An error occurred: "; err.append(db.lastErrorMessage); @@ -175,6 +177,7 @@ void mainForm::fileNew() editModifyTableAction->setEnabled(true); editCreateIndexAction->setEnabled(true); editDeleteIndexAction->setEnabled(true); + setCurrentFile(fileName); } } @@ -1288,4 +1291,49 @@ void mainForm::on_edit_field(){ } } +void mainForm::openRecentFile() +{ + QAction *action = qobject_cast(sender()); + if (action) + fileOpen(action->data().toString()); +} +void mainForm::updateRecentFileActions() +{ + QSettings settings(sOrganisation, sApplicationNameShort); + QStringList files = settings.value("recentFileList").toStringList(); + + + int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles); + + for (int i = 0; i < numRecentFiles; ++i) { + QString text = tr("&%1 %2").arg(i + 1).arg(files[i]); + recentFileActs[i]->setText(text); + recentFileActs[i]->setData(files[i]); + recentFileActs[i]->setVisible(true); + } + for (int j = numRecentFiles; j < MaxRecentFiles; ++j) + recentFileActs[j]->setVisible(false); + + recentSeparatorAct->setVisible(numRecentFiles > 0); +} + +void mainForm::setCurrentFile(const QString &fileName) +{ + setWindowFilePath(fileName); + + QSettings settings(sOrganisation, sApplicationNameShort); + QStringList files = settings.value("recentFileList").toStringList(); + files.removeAll(fileName); + files.prepend(fileName); + while (files.size() > MaxRecentFiles) + files.removeLast(); + + settings.setValue("recentFileList", files); + + foreach (QWidget *widget, QApplication::topLevelWidgets()) { + mainForm *mainWin = qobject_cast(widget); + if (mainWin) + mainWin->updateRecentFileActions(); + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 6e557df8..3b7b4889 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -135,6 +135,11 @@ public: QMenu *EditMenu; QMenu *ViewMenu; QMenu *PopupMenu; + QMenu *recentFilesMenu; + + enum { MaxRecentFiles = 5 }; + QAction *recentFileActs[MaxRecentFiles]; + QAction *recentSeparatorAct; void setupUi(QMainWindow *mainForm) { @@ -178,6 +183,13 @@ public: fntR.setBold(true); fileRevertAction->setFont(fntR); + // Recent dbs + for(int i = 0; i < MaxRecentFiles; ++i) { + recentFileActs[i] = new QAction(mainForm); + recentFileActs[i]->setVisible(false); + mainForm->connect(recentFileActs[i], SIGNAL(triggered()), mainForm, SLOT(openRecentFile())); + } + //** Exit fileExitAction = new QAction(mainForm); @@ -599,6 +611,12 @@ public: fileMenu->addAction(importMenu->menuAction()); //fileMenu->addAction(fileExportAction); fileMenu->addAction(exportMenu->menuAction()); + + recentSeparatorAct = fileMenu->addSeparator(); + for(int i = 0; i < MaxRecentFiles; ++i) + fileMenu->addAction(recentFileActs[i]); + + fileMenu->addSeparator(); fileMenu->addAction(fileExitAction); importMenu->addAction(fileImportSQLAction); @@ -979,6 +997,10 @@ public: QIntValidator * gotoValidator; QString defaultlocation; +private: + void updateRecentFileActions(); + void setCurrentFile(const QString& fileName); + public slots: virtual void on_tree_context_menu(const QPoint & qPoint); virtual void on_tree_selection_changed(); @@ -1034,6 +1056,7 @@ public slots: virtual void importDatabaseFromSQL(); virtual void openPreferences(); virtual void updatePreferences(); + virtual void openRecentFile(); protected: DBBrowserDB db;