diff options
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/mainwindow.cpp | 163 | ||||
-rw-r--r-- | qt-ui/mainwindow.h | 3 | ||||
-rw-r--r-- | qt-ui/mainwindow.ui | 26 |
3 files changed, 192 insertions, 0 deletions
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 <QTableView> #include <QDesktopWidget> #include <QDesktopServices> +#include <QStringList> +#include <QSettings> #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<QAction *>(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 @@ <addaction name="actionExportUDDF"/> <addaction name="actionPrint"/> <addaction name="actionPreferences"/> + <addaction name="separator"/> + <addaction name="actionRecent1"/> + <addaction name="actionRecent2"/> + <addaction name="actionRecent3"/> + <addaction name="actionRecent4"/> + <addaction name="separator"/> <addaction name="actionQuit"/> </widget> <widget class="QMenu" name="menuLog"> @@ -937,6 +943,26 @@ <string>F11</string> </property> </action> + <action name="actionRecent1"> + <property name="visible"> + <bool>false</bool> + </property> + </action> + <action name="actionRecent2"> + <property name="visible"> + <bool>false</bool> + </property> + </action> + <action name="actionRecent3"> + <property name="visible"> + <bool>false</bool> + </property> + </action> + <action name="actionRecent4"> + <property name="visible"> + <bool>false</bool> + </property> + </action> </widget> <customwidgets> <customwidget> |