From 7a17710fcb72e21e819351d1c74124545685986e Mon Sep 17 00:00:00 2001 From: Lukáš Lalinský Date: Sun, 7 Dec 2008 11:14:52 +0100 Subject: Add a list of recently used files --- src/main.cpp | 3 ++ src/mainwindow.cpp | 90 ++++++++++++++++++++++++++++++++++++++++++++++++------ src/mainwindow.h | 11 +++++++ 3 files changed, 94 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/main.cpp b/src/main.cpp index 79a7a4b..0b7ece9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -25,6 +25,9 @@ main(int argc, char **argv) Q_INIT_RESOURCE(dbmodel); QApplication app(argc, argv); + QCoreApplication::setOrganizationName("Lukas Lalinsky"); + QCoreApplication::setApplicationName("Database Modeller"); + QTranslator translator; translator.load("dbmodel_" + QLocale::system().name(), ":/translations/"); app.installTranslator(&translator); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1afb262..2a22ec6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include "mainwindow.h" @@ -49,7 +50,7 @@ MainWindow::~MainWindow() void MainWindow::setupUi() { - setWindowTitle(tr("DB Model")); + setWindowTitle(tr("Database Modeller")); resize(QSize(780, 580)); setupToolBar(); @@ -103,6 +104,12 @@ MainWindow::setupActions() m_actionExportPNG->setText(tr("Export...")); connect(m_actionExportPNG, SIGNAL(triggered(bool)), SLOT(exportPNG())); + for (int i = 0; i < MaxRecentFiles; i++) { + m_actionRecentFile[i] = new QAction(this); + m_actionRecentFile[i]->setVisible(false); + connect(m_actionRecentFile[i], SIGNAL(triggered()), this, SLOT(openRecentFile())); + } + m_actionSwitchMode[0] = new QAction(this); m_actionSwitchMode[0]->setText(tr("Select")); m_actionSwitchMode[0]->setIcon(QIcon(":/icons/cr16-action-mouse_pointer.png")); @@ -184,7 +191,13 @@ MainWindow::setupMenuBar() menu->addAction(m_actionSave); menu->addAction(m_actionSaveAs); menu->addSeparator(); + menu->addAction(m_actionExportPNG); + m_actionRecentFilesSeparator = menu->addSeparator(); + for (int i = 0; i < MaxRecentFiles; i++) + menu->addAction(m_actionRecentFile[i]); + updateRecentFileActions(); + menu->addSeparator(); menu->addAction(tr("&Quit"), this, SLOT(close()), QKeySequence(tr("Ctrl+Q"))); @@ -201,15 +214,28 @@ MainWindow::deleteSelectedItems() m_model->deleteSelectedItems(); } +void +MainWindow::loadFile(const QString &fileName) +{ + DiagramDocument *model = new DiagramDocument(this); + model->load(fileName); + newModel(model); + addRecentFile(fileName); +} + +void +MainWindow::saveFile(const QString &fileName) +{ + m_model->save(fileName); + addRecentFile(fileName); +} + void MainWindow::open() { QString fileName = QFileDialog::getOpenFileName(this, QString(), QString(), "Database Model (*.dmf)"); - if (!fileName.isNull()) { - DiagramDocument *model = new DiagramDocument(this); - model->load(fileName); - newModel(model); - } + if (!fileName.isNull()) + loadFile(fileName); } void @@ -220,7 +246,7 @@ MainWindow::save() saveAs(); } else { - m_model->save(fileName); + saveFile(fileName); } } @@ -228,9 +254,8 @@ void MainWindow::saveAs() { QString fileName = QFileDialog::getSaveFileName(this, QString(), m_model->fileName(), "Database Model (*.dmf)"); - if (!fileName.isNull()) { - m_model->save(fileName); - } + if (!fileName.isNull()) + saveFile(fileName); } void @@ -328,3 +353,48 @@ MainWindow::currentUndoStack() { return m_undoGroup->activeStack(); } + +void +MainWindow::openRecentFile() +{ + QAction *action = qobject_cast(sender()); + if (action) + loadFile(action->data().toString()); +} + +void +MainWindow::addRecentFile(const QString &fileName) +{ + QSettings settings; + 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()) { + MainWindow *mainWin = qobject_cast(widget); + if (mainWin) + mainWin->updateRecentFileActions(); + } +} + +void +MainWindow::updateRecentFileActions() +{ + QSettings settings; + 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(QFileInfo(files[i]).fileName()); + m_actionRecentFile[i]->setText(text); + m_actionRecentFile[i]->setData(files[i]); + m_actionRecentFile[i]->setVisible(true); + } + for (int j = numRecentFiles; j < MaxRecentFiles; ++j) + m_actionRecentFile[j]->setVisible(false); + + m_actionRecentFilesSeparator->setVisible(numRecentFiles > 0); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index bd8e6f8..d8de166 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -53,6 +53,13 @@ public slots: void exportPNG(); void setViewScale(const QString &scale); + void loadFile(const QString &fileName); + void saveFile(const QString &fileName); + + void addRecentFile(const QString &fileName); + void openRecentFile(); + void updateRecentFileActions(); + protected: void setupUi(); void setupActions(); @@ -73,6 +80,10 @@ private: QAction *m_actionSave; QAction *m_actionSaveAs; QAction *m_actionExportPNG; + + enum { MaxRecentFiles = 5 }; + QAction *m_actionRecentFilesSeparator; + QAction *m_actionRecentFile[MaxRecentFiles]; }; #endif -- cgit v1.2.3-54-g00ecf