add a recent files menu, mostly taken from qt sample code

This commit is contained in:
Peinthor Rene
2012-01-28 21:54:54 +01:00
parent cc30734e48
commit 51e49cabe8
2 changed files with 72 additions and 1 deletions

View File

@@ -8,8 +8,8 @@
#include <QWhatsThis>
#include "qmessagebox.h"
//#include "q3filedialog.h"
#include <QtGui/QFileDialog>
#include <QSettings>
#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<QAction *>(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<mainForm *>(widget);
if (mainWin)
mainWin->updateRecentFileActions();
}
}

View File

@@ -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;