summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLukáš Lalinský <lalinsky@gmail.com>2008-12-07 11:14:52 +0100
committerLukáš Lalinský <lalinsky@gmail.com>2008-12-07 11:14:52 +0100
commit7a17710fcb72e21e819351d1c74124545685986e (patch)
tree4b4ff9e596fb633168652bad110faadf49a9e7f2 /src
parentc98761516ee1b61c0b0440faab3c13e8fbf34861 (diff)
downloaddbmodel-7a17710fcb72e21e819351d1c74124545685986e.tar.xz
Add a list of recently used files
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp3
-rw-r--r--src/mainwindow.cpp90
-rw-r--r--src/mainwindow.h11
3 files changed, 94 insertions, 10 deletions
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 <QIcon>
#include <QImage>
#include <QSvgGenerator>
+#include <QSettings>
#include <QMessageBox>
#include <QDebug>
#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")));
@@ -202,14 +215,27 @@ MainWindow::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<QAction *>(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<MainWindow *>(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