From 51220f26ef712c31a9a7213807787829d4bb4818 Mon Sep 17 00:00:00 2001 From: Boris Barbulovski Date: Thu, 13 Feb 2014 22:48:07 +0100 Subject: Add recent files to main menu. Add(up to four) recent files to File main menu. Signed-off-by: Boris Barbulovski Signed-off-by: Dirk Hohndel --- qt-ui/mainwindow.cpp | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++ qt-ui/mainwindow.h | 3 + qt-ui/mainwindow.ui | 26 ++++++++ 3 files changed, 192 insertions(+) (limited to 'qt-ui') diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index 8795b93df..309da500e 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -17,6 +17,8 @@ #include #include #include +#include +#include #include "divelistview.h" #include "starwidget.h" @@ -56,6 +58,10 @@ MainWindow::MainWindow() : QMainWindow(), connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlanner, SLOT(settingsChanged())); connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlannerWidget, SLOT(settingsChanged())); connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), TankInfoModel::instance(), SLOT(update())); + connect(ui.actionRecent1, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool))); + connect(ui.actionRecent2, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool))); + connect(ui.actionRecent3, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool))); + connect(ui.actionRecent4, SIGNAL(triggered(bool)), this, SLOT(recentFileTriggered(bool))); ui.mainErrorMessage->hide(); initialUiSetup(); @@ -688,6 +694,160 @@ MainTab* MainWindow::information() return ui.InfoWidget; } +void MainWindow::loadRecentFiles(QSettings *s) +{ + QStringList files; + bool modified = false; + + s->beginGroup("Recent_Files"); + for (int c = 1; c <= 4; c++) + { + QString key = QString("File_%1").arg(c); + if (s->contains(key)) + { + QString file = s->value(key).toString(); + + if (QFile::exists(file)) + { + files.append(file); + } + else + { + modified = true; + } + } + else + { + break; + } + } + + if (modified) + { + for (int c = 0; c < 4; c++) + { + QString key = QString("File_%1").arg(c + 1); + + if (files.count() > c) + { + s->setValue(key, files.at(c)); + } + else + { + if (s->contains(key)) + { + s->remove(key); + } + } + } + + s->sync(); + } + s->endGroup(); + + for (int c = 0; c < 4; c++) + { + QAction *action = this->findChild(QString("actionRecent%1").arg(c + 1)); + + if (files.count() > c) + { + QFileInfo fi(files.at(c)); + action->setText(fi.fileName()); + action->setToolTip(fi.absoluteFilePath()); + action->setVisible(true); + } + else + { + action->setVisible(false); + } + } +} + +void MainWindow::addRecentFile(const QStringList &newFiles) +{ + QStringList files; + QSettings s; + + if (newFiles.isEmpty()) + { + return; + } + + s.beginGroup("Recent_Files"); + + for (int c = 1; c <= 4; c++) + { + QString key = QString("File_%1").arg(c); + if (s.contains(key)) + { + QString file = s.value(key).toString(); + + files.append(file); + } + else + { + break; + } + } + + foreach(const QString &file, newFiles) + { + int index = files.indexOf(file); + + if (index >= 0) + { + files.removeAt(index); + } + } + + foreach(const QString &file, newFiles) + { + if (QFile::exists(file)) + { + files.prepend(file); + } + } + + while(files.count() > 4) + { + files.removeLast(); + } + + for (int c = 0; c < 4; c++) + { + QString key = QString("File_%1").arg(c + 1); + + if (files.count() > c) + { + s.setValue(key, files.at(c)); + } + else + { + if (s.contains(key)) + { + s.remove(key); + } + } + } + s.endGroup(); + s.sync(); + + loadRecentFiles(&s); +} + +void MainWindow::recentFileTriggered(bool checked) +{ + Q_UNUSED(checked); + + QAction *actionRecent = (QAction *)sender(); + + const QString &filename = actionRecent->toolTip(); + + updateLastUsedDir(QFileInfo(filename).dir().path()); + on_actionClose_triggered(); + loadFiles(QStringList() << filename); +} + void MainWindow::file_save_as(void) { QString filename; @@ -708,6 +868,7 @@ void MainWindow::file_save_as(void) set_filename(filename.toUtf8().data(), true); setTitle(MWTF_FILENAME); mark_divelist_changed(false); + addRecentFile(QStringList() << filename); } } @@ -731,6 +892,7 @@ void MainWindow::file_save(void) } save_dives(existing_filename); mark_divelist_changed(false); + addRecentFile(QStringList() << QString(existing_filename)); } void MainWindow::showError(QString message) @@ -803,6 +965,7 @@ void MainWindow::loadFiles(const QStringList fileNames) } process_dives(false, false); + addRecentFile(fileNames); refreshDisplay(); ui.actionAutoGroup->setChecked(autogroup); diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index deacdec76..24d3d701f 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -45,6 +45,8 @@ public: static MainWindow *instance(); ProfileGraphicsView *graphics(); MainTab *information(); + void loadRecentFiles(QSettings *s); + void addRecentFile(const QStringList &newFiles); DiveListView *dive_list(); GlobeGPS *globe(); void showError(QString message); @@ -60,6 +62,7 @@ public: QTabWidget *tabWidget(); private slots: /* file menu action */ + void recentFileTriggered(bool checked); void on_actionNew_triggered(); void on_actionOpen_triggered(); void on_actionSave_triggered(); diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui index 8de11eaad..7f6c672a3 100644 --- a/qt-ui/mainwindow.ui +++ b/qt-ui/mainwindow.ui @@ -607,6 +607,12 @@ + + + + + + @@ -937,6 +943,26 @@ F11 + + + false + + + + + false + + + + + false + + + + + false + + -- cgit v1.2.3-70-g09d2