From 4cb8cffe3f1bd97c300d7c311ae68f4073e19fd3 Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Fri, 30 Dec 2011 18:43:24 +0100 Subject: Rename DatabaseManager to DatabaseTabWidget and turn it into a QTabWidget. --- src/CMakeLists.txt | 4 +- src/gui/DatabaseManager.cpp | 322 ------------------------------------------ src/gui/DatabaseManager.h | 90 ------------ src/gui/DatabaseTabWidget.cpp | 322 ++++++++++++++++++++++++++++++++++++++++++ src/gui/DatabaseTabWidget.h | 90 ++++++++++++ src/gui/MainWindow.cpp | 27 ++-- src/gui/MainWindow.h | 3 - src/gui/MainWindow.ui | 12 +- 8 files changed, 436 insertions(+), 434 deletions(-) delete mode 100644 src/gui/DatabaseManager.cpp delete mode 100644 src/gui/DatabaseManager.h create mode 100644 src/gui/DatabaseTabWidget.cpp create mode 100644 src/gui/DatabaseTabWidget.h (limited to 'src') diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 10eb8fd83..79fadb40f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -46,7 +46,7 @@ set(keepassx_SOURCES format/KeePass2Writer.cpp format/KeePass2XmlReader.cpp format/KeePass2XmlWriter.cpp - gui/DatabaseManager.cpp + gui/DatabaseTabWidget.cpp gui/DatabaseWidget.cpp gui/EditEntryWidget.cpp gui/EditGroupWidget.cpp @@ -72,7 +72,7 @@ set(keepassx_MOC core/Entry.h core/Group.h core/Metadata.h - gui/DatabaseManager.h + gui/DatabaseTabWidget.h gui/DatabaseWidget.h gui/EditEntryWidget.h gui/EditGroupWidget.h diff --git a/src/gui/DatabaseManager.cpp b/src/gui/DatabaseManager.cpp deleted file mode 100644 index 29063447a..000000000 --- a/src/gui/DatabaseManager.cpp +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Copyright (C) 2011 Felix Geyer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 or (at your option) - * version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "DatabaseManager.h" - -#include -#include - -#include "core/Database.h" -#include "core/Metadata.h" -#include "format/KeePass2XmlReader.h" -#include "gui/DatabaseWidget.h" -#include "gui/FileDialog.h" -#include "gui/EntryView.h" -#include "gui/GroupView.h" -#include "gui/KeyOpenDialog.h" - -DatabaseManagerStruct::DatabaseManagerStruct() - : file(0) - , dbWidget(0) - , modified(false) - , readOnly(false) -{ -} - -DatabaseManager::DatabaseManager(QTabWidget* tabWidget) - : m_tabWidget(tabWidget) - , m_window(tabWidget->window()) -{ - connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int))); - connect(m_tabWidget, SIGNAL(currentChanged(int)), SLOT(emitEntrySelectionChanged())); -} - -void DatabaseManager::newDatabase() -{ - DatabaseManagerStruct dbStruct; - Database* db = new Database(); - dbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget); - - insertDatabase(db, dbStruct); -} - -void DatabaseManager::openDatabase() -{ - QString fileName = fileDialog()->getOpenFileName(m_window, tr("Open database"), QString(), - tr("KeePass 2 Database").append(" (*.kdbx)")); - if (!fileName.isEmpty()) { - openDatabase(fileName); - } -} - -void DatabaseManager::openDatabase(const QString& fileName) -{ - QScopedPointer file(new QFile(fileName)); - // TODO error handling - if (!file->open(QIODevice::ReadWrite)) { - if (!file->open(QIODevice::ReadOnly)) { - // can only open read-only - m_curDbStruct.readOnly = true; - } - else { - // can't open - return; - } - } - - m_curDbStruct.file = file.take(); - m_curDbStruct.fileName = QFileInfo(fileName).absoluteFilePath(); - - openDatabaseDialog(); -} - -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(); -} - -void DatabaseManager::openDatabaseRead() -{ - m_curDbStruct.file->reset(); - Database* db = m_reader.readDatabase(m_curDbStruct.file, m_curKeyDialog->key()); - delete m_curKeyDialog; - m_curKeyDialog = 0; - - 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::emitEntrySelectionChanged() -{ - DatabaseWidget* dbWidget = currentDatabaseWidget(); - - bool isSingleEntrySelected = false; - if (dbWidget) { - isSingleEntrySelected = dbWidget->entryView()->isSingleEntrySelected(); - } - - Q_EMIT entrySelectionChanged(isSingleEntrySelected); -} - -void DatabaseManager::closeDatabase(Database* db) -{ - Q_ASSERT(db); - - const DatabaseManagerStruct& dbStruct = m_dbList.value(db); - - if (dbStruct.modified) { - // TODO message box - } - - int index = databaseIndex(db); - Q_ASSERT(index != -1); - - m_tabWidget->removeTab(index); - delete dbStruct.dbWidget; - delete db; -} - -void DatabaseManager::saveDatabase(Database* db) -{ - DatabaseManagerStruct& dbStruct = m_dbList[db]; - - // TODO ensure that the data is actually written to disk - if (dbStruct.file) { - dbStruct.file->reset(); - m_writer.writeDatabase(dbStruct.file, db); - dbStruct.file->resize(dbStruct.file->pos()); - dbStruct.file->flush(); - - dbStruct.modified = false; - updateTabName(db); - } - else { - saveDatabaseAs(db); - } -} - -void DatabaseManager::saveDatabaseAs(Database* db) -{ - DatabaseManagerStruct& dbStruct = m_dbList[db]; - QString oldFileName; - if (dbStruct.file) { - oldFileName = dbStruct.fileName; - } - QString fileName = fileDialog()->getSaveFileName(m_window, tr("Save database as"), - oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)")); - if (!fileName.isEmpty()) { - delete dbStruct.file; - QScopedPointer file(new QFile(fileName)); - // TODO error handling - if (!file->open(QIODevice::ReadWrite)) { - return; - } - dbStruct.file = file.take(); - // TODO ensure that the data is actually written to disk - m_writer.writeDatabase(dbStruct.file, db); - dbStruct.file->flush(); - - dbStruct.modified = false; - dbStruct.fileName = QFileInfo(fileName).absoluteFilePath(); - updateTabName(db); - } -} - -void DatabaseManager::closeDatabase(int index) -{ - if (index == -1) { - index = m_tabWidget->currentIndex(); - } - - closeDatabase(indexDatabase(index)); -} - -void DatabaseManager::saveDatabase(int index) -{ - if (index == -1) { - index = m_tabWidget->currentIndex(); - } - - saveDatabase(indexDatabase(index)); -} - -void DatabaseManager::saveDatabaseAs(int index) -{ - if (index == -1) { - index = m_tabWidget->currentIndex(); - } - saveDatabaseAs(indexDatabase(index)); -} - -void DatabaseManager::createEntry() -{ - currentDatabaseWidget()->createEntry(); -} - -void DatabaseManager::editEntry() -{ - currentDatabaseWidget()->switchToEntryEdit(); -} - -void DatabaseManager::createGroup() -{ - currentDatabaseWidget()->createGroup(); -} - -void DatabaseManager::editGroup() -{ - currentDatabaseWidget()->switchToGroupEdit(); -} - -void DatabaseManager::updateTabName(Database* db) -{ - int index = databaseIndex(db); - Q_ASSERT(index != -1); - - const DatabaseManagerStruct& dbStruct = m_dbList.value(db); - - QString tabName; - - if (dbStruct.file) { - QFileInfo fileInfo(*dbStruct.file); - - if (db->metadata()->name().isEmpty()) { - tabName = fileInfo.fileName(); - } - else { - tabName = db->metadata()->name(); - } - - m_tabWidget->setTabToolTip(index, dbStruct.fileName); - } - else { - if (db->metadata()->name().isEmpty()) { - tabName = tr("New database"); - } - else { - tabName = QString("%1 [%2]").arg(db->metadata()->name(), tr("New database")); - } - } - - m_tabWidget->setTabText(index, tabName); -} - -int DatabaseManager::databaseIndex(Database* db) -{ - QWidget* dbWidget = m_dbList.value(db).dbWidget; - return m_tabWidget->indexOf(dbWidget); -} - -Database* DatabaseManager::indexDatabase(int index) -{ - QWidget* dbWidget = m_tabWidget->widget(index); - - QHashIterator i(m_dbList); - while (i.hasNext()) { - i.next(); - if (i.value().dbWidget == dbWidget) { - return i.key(); - } - } - - return 0; -} - -void DatabaseManager::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) -{ - m_dbList.insert(db, dbStruct); - - m_tabWidget->addTab(dbStruct.dbWidget, ""); - updateTabName(db); - int index = databaseIndex(db); - m_tabWidget->setCurrentIndex(index); - - connect(db->metadata(), SIGNAL(nameTextChanged(Database*)), SLOT(updateTabName(Database*))); - connect(dbStruct.dbWidget->entryView(), SIGNAL(entrySelectionChanged()), SLOT(emitEntrySelectionChanged())); -} - -DatabaseWidget* DatabaseManager::currentDatabaseWidget() -{ - Database* db = indexDatabase(m_tabWidget->currentIndex()); - if (db) { - return m_dbList[db].dbWidget; - } - else { - return 0; - } -} diff --git a/src/gui/DatabaseManager.h b/src/gui/DatabaseManager.h deleted file mode 100644 index 90ceb1baa..000000000 --- a/src/gui/DatabaseManager.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2011 Felix Geyer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 or (at your option) - * version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef KEEPASSX_DATABASEMANAGER_H -#define KEEPASSX_DATABASEMANAGER_H - -#include -#include - -#include "format/KeePass2Reader.h" -#include "format/KeePass2Writer.h" - -class DatabaseWidget; -class KeyOpenDialog; -class QFile; -class QTabWidget; - -struct DatabaseManagerStruct -{ - DatabaseManagerStruct(); - - QFile* file; - DatabaseWidget* dbWidget; - QString fileName; - bool modified; - bool readOnly; -}; - -class DatabaseManager : public QObject -{ - Q_OBJECT - -public: - DatabaseManager(QTabWidget* tabWidget); - void openDatabase(const QString& fileName); - void saveDatabase(Database* db); - void saveDatabaseAs(Database* db); - void closeDatabase(Database* db); - DatabaseWidget* currentDatabaseWidget(); - -public Q_SLOTS: - void newDatabase(); - void openDatabase(); - void saveDatabase(int index = -1); - void saveDatabaseAs(int index = -1); - void closeDatabase(int index = -1); - void createEntry(); - void editEntry(); - void createGroup(); - void editGroup(); - -private Q_SLOTS: - void updateTabName(Database* db); - void openDatabaseDialog(); - void openDatabaseRead(); - void openDatabaseCleanup(); - void emitEntrySelectionChanged(); - -Q_SIGNALS: - void entrySelectionChanged(bool singleEntrySelected); - -private: - int databaseIndex(Database* db); - Database* indexDatabase(int index); - void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct); - - QTabWidget* m_tabWidget; - QWidget* m_window; - KeePass2Reader m_reader; - KeePass2Writer m_writer; - QHash m_dbList; - DatabaseManagerStruct m_curDbStruct; - KeyOpenDialog* m_curKeyDialog; -}; - -#endif // KEEPASSX_DATABASEMANAGER_H diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp new file mode 100644 index 000000000..847bd7e86 --- /dev/null +++ b/src/gui/DatabaseTabWidget.cpp @@ -0,0 +1,322 @@ +/* + * Copyright (C) 2011 Felix Geyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "DatabaseTabWidget.h" + +#include +#include + +#include "core/Database.h" +#include "core/Metadata.h" +#include "format/KeePass2XmlReader.h" +#include "gui/DatabaseWidget.h" +#include "gui/FileDialog.h" +#include "gui/EntryView.h" +#include "gui/GroupView.h" +#include "gui/KeyOpenDialog.h" + +DatabaseManagerStruct::DatabaseManagerStruct() + : file(0) + , dbWidget(0) + , modified(false) + , readOnly(false) +{ +} + +DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) + : QTabWidget(parent) + , m_window(parent->window()) +{ + connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int))); + connect(this, SIGNAL(currentChanged(int)), SLOT(emitEntrySelectionChanged())); +} + +void DatabaseTabWidget::newDatabase() +{ + DatabaseManagerStruct dbStruct; + Database* db = new Database(); + dbStruct.dbWidget = new DatabaseWidget(db, this); + + insertDatabase(db, dbStruct); +} + +void DatabaseTabWidget::openDatabase() +{ + QString fileName = fileDialog()->getOpenFileName(m_window, tr("Open database"), QString(), + tr("KeePass 2 Database").append(" (*.kdbx)")); + if (!fileName.isEmpty()) { + openDatabase(fileName); + } +} + +void DatabaseTabWidget::openDatabase(const QString& fileName) +{ + QScopedPointer file(new QFile(fileName)); + // TODO error handling + if (!file->open(QIODevice::ReadWrite)) { + if (!file->open(QIODevice::ReadOnly)) { + // can only open read-only + m_curDbStruct.readOnly = true; + } + else { + // can't open + return; + } + } + + m_curDbStruct.file = file.take(); + m_curDbStruct.fileName = QFileInfo(fileName).absoluteFilePath(); + + openDatabaseDialog(); +} + +void DatabaseTabWidget::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(); +} + +void DatabaseTabWidget::openDatabaseRead() +{ + m_curDbStruct.file->reset(); + Database* db = m_reader.readDatabase(m_curDbStruct.file, m_curKeyDialog->key()); + delete m_curKeyDialog; + m_curKeyDialog = 0; + + if (!db) { + openDatabaseDialog(); + } + else { + m_curDbStruct.dbWidget = new DatabaseWidget(db, this); + insertDatabase(db, m_curDbStruct); + m_curDbStruct = DatabaseManagerStruct(); + } +} + +void DatabaseTabWidget::openDatabaseCleanup() +{ + delete m_curKeyDialog; + m_curKeyDialog = 0; + + if (m_curDbStruct.file) { + delete m_curDbStruct.file; + } + m_curDbStruct = DatabaseManagerStruct(); +} + +void DatabaseTabWidget::emitEntrySelectionChanged() +{ + DatabaseWidget* dbWidget = currentDatabaseWidget(); + + bool isSingleEntrySelected = false; + if (dbWidget) { + isSingleEntrySelected = dbWidget->entryView()->isSingleEntrySelected(); + } + + Q_EMIT entrySelectionChanged(isSingleEntrySelected); +} + +void DatabaseTabWidget::closeDatabase(Database* db) +{ + Q_ASSERT(db); + + const DatabaseManagerStruct& dbStruct = m_dbList.value(db); + + if (dbStruct.modified) { + // TODO message box + } + + int index = databaseIndex(db); + Q_ASSERT(index != -1); + + removeTab(index); + delete dbStruct.dbWidget; + delete db; +} + +void DatabaseTabWidget::saveDatabase(Database* db) +{ + DatabaseManagerStruct& dbStruct = m_dbList[db]; + + // TODO ensure that the data is actually written to disk + if (dbStruct.file) { + dbStruct.file->reset(); + m_writer.writeDatabase(dbStruct.file, db); + dbStruct.file->resize(dbStruct.file->pos()); + dbStruct.file->flush(); + + dbStruct.modified = false; + updateTabName(db); + } + else { + saveDatabaseAs(db); + } +} + +void DatabaseTabWidget::saveDatabaseAs(Database* db) +{ + DatabaseManagerStruct& dbStruct = m_dbList[db]; + QString oldFileName; + if (dbStruct.file) { + oldFileName = dbStruct.fileName; + } + QString fileName = fileDialog()->getSaveFileName(m_window, tr("Save database as"), + oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)")); + if (!fileName.isEmpty()) { + delete dbStruct.file; + QScopedPointer file(new QFile(fileName)); + // TODO error handling + if (!file->open(QIODevice::ReadWrite)) { + return; + } + dbStruct.file = file.take(); + // TODO ensure that the data is actually written to disk + m_writer.writeDatabase(dbStruct.file, db); + dbStruct.file->flush(); + + dbStruct.modified = false; + dbStruct.fileName = QFileInfo(fileName).absoluteFilePath(); + updateTabName(db); + } +} + +void DatabaseTabWidget::closeDatabase(int index) +{ + if (index == -1) { + index = currentIndex(); + } + + closeDatabase(indexDatabase(index)); +} + +void DatabaseTabWidget::saveDatabase(int index) +{ + if (index == -1) { + index = currentIndex(); + } + + saveDatabase(indexDatabase(index)); +} + +void DatabaseTabWidget::saveDatabaseAs(int index) +{ + if (index == -1) { + index = currentIndex(); + } + saveDatabaseAs(indexDatabase(index)); +} + +void DatabaseTabWidget::createEntry() +{ + currentDatabaseWidget()->createEntry(); +} + +void DatabaseTabWidget::editEntry() +{ + currentDatabaseWidget()->switchToEntryEdit(); +} + +void DatabaseTabWidget::createGroup() +{ + currentDatabaseWidget()->createGroup(); +} + +void DatabaseTabWidget::editGroup() +{ + currentDatabaseWidget()->switchToGroupEdit(); +} + +void DatabaseTabWidget::updateTabName(Database* db) +{ + int index = databaseIndex(db); + Q_ASSERT(index != -1); + + const DatabaseManagerStruct& dbStruct = m_dbList.value(db); + + QString tabName; + + if (dbStruct.file) { + QFileInfo fileInfo(*dbStruct.file); + + if (db->metadata()->name().isEmpty()) { + tabName = fileInfo.fileName(); + } + else { + tabName = db->metadata()->name(); + } + + setTabToolTip(index, dbStruct.fileName); + } + else { + if (db->metadata()->name().isEmpty()) { + tabName = tr("New database"); + } + else { + tabName = QString("%1 [%2]").arg(db->metadata()->name(), tr("New database")); + } + } + + setTabText(index, tabName); +} + +int DatabaseTabWidget::databaseIndex(Database* db) +{ + QWidget* dbWidget = m_dbList.value(db).dbWidget; + return indexOf(dbWidget); +} + +Database* DatabaseTabWidget::indexDatabase(int index) +{ + QWidget* dbWidget = widget(index); + + QHashIterator i(m_dbList); + while (i.hasNext()) { + i.next(); + if (i.value().dbWidget == dbWidget) { + return i.key(); + } + } + + return 0; +} + +void DatabaseTabWidget::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) +{ + m_dbList.insert(db, dbStruct); + + addTab(dbStruct.dbWidget, ""); + updateTabName(db); + int index = databaseIndex(db); + setCurrentIndex(index); + + connect(db->metadata(), SIGNAL(nameTextChanged(Database*)), SLOT(updateTabName(Database*))); + connect(dbStruct.dbWidget->entryView(), SIGNAL(entrySelectionChanged()), SLOT(emitEntrySelectionChanged())); +} + +DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() +{ + Database* db = indexDatabase(currentIndex()); + if (db) { + return m_dbList[db].dbWidget; + } + else { + return 0; + } +} diff --git a/src/gui/DatabaseTabWidget.h b/src/gui/DatabaseTabWidget.h new file mode 100644 index 000000000..2c42be2b3 --- /dev/null +++ b/src/gui/DatabaseTabWidget.h @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2011 Felix Geyer + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef KEEPASSX_DATABASEMANAGER_H +#define KEEPASSX_DATABASEMANAGER_H + +#include +#include +#include + +#include "format/KeePass2Reader.h" +#include "format/KeePass2Writer.h" + +class DatabaseWidget; +class KeyOpenDialog; +class QFile; +class QTabWidget; + +struct DatabaseManagerStruct +{ + DatabaseManagerStruct(); + + QFile* file; + DatabaseWidget* dbWidget; + QString fileName; + bool modified; + bool readOnly; +}; + +class DatabaseTabWidget : public QTabWidget +{ + Q_OBJECT + +public: + DatabaseTabWidget(QWidget* parent); + void openDatabase(const QString& fileName); + void saveDatabase(Database* db); + void saveDatabaseAs(Database* db); + void closeDatabase(Database* db); + DatabaseWidget* currentDatabaseWidget(); + +public Q_SLOTS: + void newDatabase(); + void openDatabase(); + void saveDatabase(int index = -1); + void saveDatabaseAs(int index = -1); + void closeDatabase(int index = -1); + void createEntry(); + void editEntry(); + void createGroup(); + void editGroup(); + +private Q_SLOTS: + void updateTabName(Database* db); + void openDatabaseDialog(); + void openDatabaseRead(); + void openDatabaseCleanup(); + void emitEntrySelectionChanged(); + +Q_SIGNALS: + void entrySelectionChanged(bool singleEntrySelected); + +private: + int databaseIndex(Database* db); + Database* indexDatabase(int index); + void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct); + + QWidget* m_window; + KeePass2Reader m_reader; + KeePass2Writer m_writer; + QHash 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 0adb11f86..f8cb7d00e 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -20,7 +20,6 @@ #include "core/Database.h" #include "core/Metadata.h" -#include "gui/DatabaseManager.h" #include "gui/DatabaseWidget.h" MainWindow::MainWindow() @@ -28,21 +27,19 @@ MainWindow::MainWindow() { m_ui->setupUi(this); - m_dbManager = new DatabaseManager(m_ui->tabWidget); - connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(currentTabChanged(int))); - connect(m_dbManager, SIGNAL(entrySelectionChanged(bool)), m_ui->actionEntryEdit, SLOT(setEnabled(bool))); - connect(m_dbManager, SIGNAL(entrySelectionChanged(bool)), m_ui->actionEntryDelete, SLOT(setEnabled(bool))); - - 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->actionEntryNew, SIGNAL(triggered()), m_dbManager, SLOT(createEntry())); - connect(m_ui->actionEntryEdit, SIGNAL(triggered()), m_dbManager, SLOT(editEntry())); - connect(m_ui->actionGroupNew, SIGNAL(triggered()), m_dbManager, SLOT(createGroup())); - connect(m_ui->actionGroupEdit, SIGNAL(triggered()), m_dbManager, SLOT(editGroup())); + connect(m_ui->tabWidget, SIGNAL(entrySelectionChanged(bool)), m_ui->actionEntryEdit, SLOT(setEnabled(bool))); + connect(m_ui->tabWidget, SIGNAL(entrySelectionChanged(bool)), m_ui->actionEntryDelete, SLOT(setEnabled(bool))); + + connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(newDatabase())); + connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, SLOT(openDatabase())); + connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabase())); + connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseAs())); + connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, SLOT(closeDatabase())); + connect(m_ui->actionEntryNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(createEntry())); + connect(m_ui->actionEntryEdit, SIGNAL(triggered()), m_ui->tabWidget, SLOT(editEntry())); + connect(m_ui->actionGroupNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(createGroup())); + connect(m_ui->actionGroupEdit, SIGNAL(triggered()), m_ui->tabWidget, SLOT(editGroup())); connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(close())); } diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 2f20fd230..b4185660f 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -20,8 +20,6 @@ #include -class Database; -class DatabaseManager; namespace Ui { class MainWindow; } @@ -39,7 +37,6 @@ private Q_SLOTS: private: QScopedPointer m_ui; - DatabaseManager* m_dbManager; Q_DISABLE_COPY(MainWindow) }; diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index 3fe4a1b96..d49a7757e 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -16,7 +16,7 @@ - + -1 @@ -36,7 +36,7 @@ 0 0 800 - 21 + 20 @@ -188,6 +188,14 @@ + + + DatabaseTabWidget + QTabWidget +
gui/DatabaseTabWidget.h
+ 1 +
+
-- cgit v1.2.3