From 5df933be257fe6dc0657ad90bd63f441f84a998f Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Wed, 16 Nov 2011 18:47:17 +0100 Subject: [PATCH] New actions: new, save and close database. --- src/gui/DatabaseManager.cpp | 75 +++++++++++++++++++++++++++++++------ src/gui/DatabaseManager.h | 6 ++- src/gui/MainWindow.cpp | 15 +++++++- src/gui/MainWindow.h | 3 ++ src/gui/MainWindow.ui | 30 +++++++++++++-- 5 files changed, 113 insertions(+), 16 deletions(-) diff --git a/src/gui/DatabaseManager.cpp b/src/gui/DatabaseManager.cpp index aac637bd..6b92005d 100644 --- a/src/gui/DatabaseManager.cpp +++ b/src/gui/DatabaseManager.cpp @@ -42,6 +42,15 @@ DatabaseManager::DatabaseManager(QTabWidget* tabWidget) connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int))); } +void DatabaseManager::newDatabase() +{ + DatabaseManagerStruct dbStruct; + Database* db = new Database(); + dbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget); + + insertDatabase(db, dbStruct); +} + void DatabaseManager::openDatabase() { QString fileName = QFileDialog::getOpenFileName(m_window, tr("Open database"), QString(), @@ -82,12 +91,7 @@ void DatabaseManager::openDatabase(const QString& fileName) dbStruct.file = file.take(); dbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget); - m_dbList.insert(db, dbStruct); - - m_tabWidget->addTab(dbStruct.dbWidget, ""); - updateTabName(db); - - connect(db->metadata(), SIGNAL(nameTextChanged(Database*)), SLOT(updateTabName(Database*))); + insertDatabase(db, dbStruct); } void DatabaseManager::closeDatabase(Database* db) @@ -108,11 +112,38 @@ void DatabaseManager::closeDatabase(Database* db) delete db; } +void DatabaseManager::saveDatabase(Database* db) +{ + DatabaseManagerStruct& dbStruct = m_dbList[db]; + + // TODO ensure that the data is actually written to disk + dbStruct.file->reset(); + m_writer.writeDatabase(dbStruct.file, db); + dbStruct.file->resize(dbStruct.file->pos()); + dbStruct.file->flush(); + + dbStruct.modified = false; + 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::updateTabName(Database* db) { int index = databaseIndex(db); @@ -120,14 +151,26 @@ void DatabaseManager::updateTabName(Database* db) const DatabaseManagerStruct& dbStruct = m_dbList.value(db); - QString filename = QFileInfo(*dbStruct.file).completeBaseName(); - QString tabName; - if (db->metadata()->name().isEmpty()) { - tabName = filename; + + if (dbStruct.file) { + + QString filename = QFileInfo(*dbStruct.file).completeBaseName(); + + if (db->metadata()->name().isEmpty()) { + tabName = filename; + } + else { + tabName = QString("%1 [%2]").arg(db->metadata()->name().arg(filename)); + } } else { - tabName = QString("%1 [%2]").arg(db->metadata()->name().arg(filename)); + if (db->metadata()->name().isEmpty()) { + tabName = tr("New database"); + } + else { + tabName = QString("%1 [%2]").arg(db->metadata()->name().arg(tr("New database"))); + } } m_tabWidget->setTabText(index, tabName); @@ -153,3 +196,13 @@ Database* DatabaseManager::indexDatabase(int index) return 0; } + +void DatabaseManager::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) +{ + m_dbList.insert(db, dbStruct); + + m_tabWidget->addTab(dbStruct.dbWidget, ""); + updateTabName(db); + + connect(db->metadata(), SIGNAL(nameTextChanged(Database*)), SLOT(updateTabName(Database*))); +} diff --git a/src/gui/DatabaseManager.h b/src/gui/DatabaseManager.h index 6a583f05..d562f477 100644 --- a/src/gui/DatabaseManager.h +++ b/src/gui/DatabaseManager.h @@ -44,11 +44,14 @@ class DatabaseManager : public QObject public: DatabaseManager(QTabWidget* tabWidget); void openDatabase(const QString& fileName); + void saveDatabase(Database* db); void closeDatabase(Database* db); public Q_SLOTS: + void newDatabase(); void openDatabase(); - void closeDatabase(int index); + void saveDatabase(int index = -1); + void closeDatabase(int index = -1); private Q_SLOTS: void updateTabName(Database* db); @@ -56,6 +59,7 @@ private Q_SLOTS: private: int databaseIndex(Database* db); Database* indexDatabase(int index); + void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct); QTabWidget* m_tabWidget; QWidget* m_window; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 65c45119..e367c8e3 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -28,6 +28,19 @@ MainWindow::MainWindow() m_dbManager = new DatabaseManager(tabWidget); - connect(actionOpenDatabase, SIGNAL(triggered()), m_dbManager, SLOT(openDatabase())); + connect(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(actionDatabaseClose, SIGNAL(triggered()), m_dbManager, SLOT(closeDatabase())); connect(actionQuit, SIGNAL(triggered()), SLOT(close())); } + +void MainWindow::currentTabChanged(int index) +{ + bool hasTab = (index != -1); + + actionDatabaseSave->setEnabled(hasTab); + actionDatabaseClose->setEnabled(hasTab); +} diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index eb2a3f85..253b5db8 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -30,6 +30,9 @@ class MainWindow : public QMainWindow, private Ui::MainWindow public: MainWindow(); +private Q_SLOTS: + void currentTabChanged(int index); + private: DatabaseManager* m_dbManager; }; diff --git a/src/gui/MainWindow.ui b/src/gui/MainWindow.ui index b00924ff..1178e825 100644 --- a/src/gui/MainWindow.ui +++ b/src/gui/MainWindow.ui @@ -41,9 +41,12 @@ - File + Database - + + + + @@ -67,11 +70,32 @@ About - + Open database + + + false + + + Save database + + + + + false + + + Close database + + + + + New database + +