aboutsummaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/mainwindow.cpp163
-rw-r--r--qt-ui/mainwindow.h3
-rw-r--r--qt-ui/mainwindow.ui26
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>