diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/DatabaseManager.cpp | 56 | ||||
-rw-r--r-- | src/gui/DatabaseManager.h | 7 | ||||
-rw-r--r-- | src/gui/MainWindow.cpp | 34 | ||||
-rw-r--r-- | src/gui/MainWindow.h | 11 |
4 files changed, 76 insertions, 32 deletions
diff --git a/src/gui/DatabaseManager.cpp b/src/gui/DatabaseManager.cpp index 106eeadb0..36ecdf0e8 100644 --- a/src/gui/DatabaseManager.cpp +++ b/src/gui/DatabaseManager.cpp @@ -62,14 +62,12 @@ void DatabaseManager::openDatabase() void DatabaseManager::openDatabase(const QString& fileName) { - DatabaseManagerStruct dbStruct; - QScopedPointer<QFile> file(new QFile(fileName)); // TODO error handling if (!file->open(QIODevice::ReadWrite)) { if (!file->open(QIODevice::ReadOnly)) { // can only open read-only - dbStruct.readOnly = true; + m_curDbStruct.readOnly = true; } else { // can't open @@ -77,22 +75,47 @@ void DatabaseManager::openDatabase(const QString& fileName) } } - Database* db; + m_curDbStruct.file = file.take(); + m_curDbStruct.fileName = QFileInfo(fileName).absoluteFilePath(); - do { - QScopedPointer<KeyOpenDialog> keyDialog(new KeyOpenDialog(fileName, m_window)); - if (keyDialog->exec() == QDialog::Rejected) { - return; - } + openDatabaseDialog(); +} - file->reset(); - db = m_reader.readDatabase(file.data(), keyDialog->key()); - } while (!db); +void DatabaseManager::openDatabaseDialog() +{ + m_curKeyDialog = new KeyOpenDialog(m_curDbStruct.fileName, m_window); + connect(m_curKeyDialog, SIGNAL(accepted()), SLOT(openDatabaseRead())); + connect(m_curKeyDialog, SIGNAL(rejected()), SLOT(openDatabaseCleanup())); + m_curKeyDialog->setModal(true); + m_curKeyDialog->show(); +} - dbStruct.file = file.take(); - dbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget); +void DatabaseManager::openDatabaseRead() +{ + m_curDbStruct.file->reset(); + Database* db = m_reader.readDatabase(m_curDbStruct.file, m_curKeyDialog->key()); + delete m_curKeyDialog; + m_curKeyDialog = 0; - insertDatabase(db, dbStruct); + if (!db) { + openDatabaseDialog(); + } + else { + m_curDbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget); + insertDatabase(db, m_curDbStruct); + m_curDbStruct = DatabaseManagerStruct(); + } +} + +void DatabaseManager::openDatabaseCleanup() +{ + delete m_curKeyDialog; + m_curKeyDialog = 0; + + if (m_curDbStruct.file) { + delete m_curDbStruct.file; + } + m_curDbStruct = DatabaseManagerStruct(); } void DatabaseManager::closeDatabase(Database* db) @@ -151,6 +174,7 @@ void DatabaseManager::saveDatabaseAs(Database* db) dbStruct.file->flush(); dbStruct.modified = false; + dbStruct.fileName = QFileInfo(fileName).absoluteFilePath(); updateTabName(db); } } @@ -200,7 +224,7 @@ void DatabaseManager::updateTabName(Database* db) tabName = db->metadata()->name(); } - m_tabWidget->setTabToolTip(index, fileInfo.absoluteFilePath()); + m_tabWidget->setTabToolTip(index, dbStruct.fileName); } else { if (db->metadata()->name().isEmpty()) { diff --git a/src/gui/DatabaseManager.h b/src/gui/DatabaseManager.h index 9f93614da..aa48b24f9 100644 --- a/src/gui/DatabaseManager.h +++ b/src/gui/DatabaseManager.h @@ -24,6 +24,7 @@ #include "format/KeePass2Reader.h" #include "format/KeePass2Writer.h" +class KeyOpenDialog; class QFile; class QTabWidget; @@ -33,6 +34,7 @@ struct DatabaseManagerStruct QFile* file; QWidget* dbWidget; + QString fileName; bool modified; bool readOnly; }; @@ -57,6 +59,9 @@ public Q_SLOTS: private Q_SLOTS: void updateTabName(Database* db); + void openDatabaseDialog(); + void openDatabaseRead(); + void openDatabaseCleanup(); private: int databaseIndex(Database* db); @@ -68,6 +73,8 @@ private: KeePass2Reader m_reader; KeePass2Writer m_writer; QHash<Database*, DatabaseManagerStruct> m_dbList; + DatabaseManagerStruct m_curDbStruct; + KeyOpenDialog* m_curKeyDialog; }; #endif // KEEPASSX_DATABASEMANAGER_H diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 813e400cc..550789d3b 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -16,6 +16,7 @@ */ #include "MainWindow.h" +#include "ui_MainWindow.h" #include "core/Database.h" #include "core/Metadata.h" @@ -23,28 +24,33 @@ #include "gui/DatabaseWidget.h" MainWindow::MainWindow() + : m_ui(new Ui::MainWindow()) { - setupUi(this); + m_ui->setupUi(this); - m_dbManager = new DatabaseManager(tabWidget); + m_dbManager = new DatabaseManager(m_ui->tabWidget); - connect(tabWidget, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int))); + connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int))); - connect(actionDatabaseNew, SIGNAL(triggered()), m_dbManager, SLOT(newDatabase())); - connect(actionDatabaseOpen, SIGNAL(triggered()), m_dbManager, SLOT(openDatabase())); - connect(actionDatabaseSave, SIGNAL(triggered()), m_dbManager, SLOT(saveDatabase())); - connect(actionDatabaseSaveAs, SIGNAL(triggered()), m_dbManager, SLOT(saveDatabaseAs())); - connect(actionDatabaseClose, SIGNAL(triggered()), m_dbManager, SLOT(closeDatabase())); - connect(actionQuit, SIGNAL(triggered()), SLOT(close())); + connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_dbManager, SLOT(newDatabase())); + connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_dbManager, SLOT(openDatabase())); + connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_dbManager, SLOT(saveDatabase())); + connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_dbManager, SLOT(saveDatabaseAs())); + connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_dbManager, SLOT(closeDatabase())); + connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(close())); +} + +MainWindow::~MainWindow() +{ } void MainWindow::currentTabChanged(int index) { bool hasTab = (index != -1); - actionDatabaseSave->setEnabled(hasTab); - actionDatabaseSaveAs->setEnabled(hasTab); - actionDatabaseClose->setEnabled(hasTab); - actionEntryNew->setEnabled(hasTab); - actionGroupNew->setEnabled(hasTab); + m_ui->actionDatabaseSave->setEnabled(hasTab); + m_ui->actionDatabaseSaveAs->setEnabled(hasTab); + m_ui->actionDatabaseClose->setEnabled(hasTab); + m_ui->actionEntryNew->setEnabled(hasTab); + m_ui->actionGroupNew->setEnabled(hasTab); } diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 253b5db88..2f20fd230 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -18,23 +18,30 @@ #ifndef KEEPASSX_MAINWINDOW_H #define KEEPASSX_MAINWINDOW_H -#include "ui_MainWindow.h" +#include <QtGui/QMainWindow> class Database; class DatabaseManager; +namespace Ui { + class MainWindow; +} -class MainWindow : public QMainWindow, private Ui::MainWindow +class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); + ~MainWindow(); private Q_SLOTS: void currentTabChanged(int index); private: + QScopedPointer<Ui::MainWindow> m_ui; DatabaseManager* m_dbManager; + + Q_DISABLE_COPY(MainWindow) }; #endif // KEEPASSX_MAINWINDOW_H |