mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-08-03 12:06:25 -04:00
New actions: new, save and close database.
This commit is contained in:
parent
0ba03920df
commit
5df933be25
5 changed files with 113 additions and 16 deletions
|
@ -42,6 +42,15 @@ DatabaseManager::DatabaseManager(QTabWidget* tabWidget)
|
||||||
connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int)));
|
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()
|
void DatabaseManager::openDatabase()
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(m_window, tr("Open database"), QString(),
|
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.file = file.take();
|
||||||
dbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget);
|
dbStruct.dbWidget = new DatabaseWidget(db, m_tabWidget);
|
||||||
|
|
||||||
m_dbList.insert(db, dbStruct);
|
insertDatabase(db, dbStruct);
|
||||||
|
|
||||||
m_tabWidget->addTab(dbStruct.dbWidget, "");
|
|
||||||
updateTabName(db);
|
|
||||||
|
|
||||||
connect(db->metadata(), SIGNAL(nameTextChanged(Database*)), SLOT(updateTabName(Database*)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseManager::closeDatabase(Database* db)
|
void DatabaseManager::closeDatabase(Database* db)
|
||||||
|
@ -108,11 +112,38 @@ void DatabaseManager::closeDatabase(Database* db)
|
||||||
delete 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)
|
void DatabaseManager::closeDatabase(int index)
|
||||||
{
|
{
|
||||||
|
if (index == -1) {
|
||||||
|
index = m_tabWidget->currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
closeDatabase(indexDatabase(index));
|
closeDatabase(indexDatabase(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DatabaseManager::saveDatabase(int index)
|
||||||
|
{
|
||||||
|
if (index == -1) {
|
||||||
|
index = m_tabWidget->currentIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
saveDatabase(indexDatabase(index));
|
||||||
|
}
|
||||||
|
|
||||||
void DatabaseManager::updateTabName(Database* db)
|
void DatabaseManager::updateTabName(Database* db)
|
||||||
{
|
{
|
||||||
int index = databaseIndex(db);
|
int index = databaseIndex(db);
|
||||||
|
@ -120,15 +151,27 @@ void DatabaseManager::updateTabName(Database* db)
|
||||||
|
|
||||||
const DatabaseManagerStruct& dbStruct = m_dbList.value(db);
|
const DatabaseManagerStruct& dbStruct = m_dbList.value(db);
|
||||||
|
|
||||||
|
QString tabName;
|
||||||
|
|
||||||
|
if (dbStruct.file) {
|
||||||
|
|
||||||
QString filename = QFileInfo(*dbStruct.file).completeBaseName();
|
QString filename = QFileInfo(*dbStruct.file).completeBaseName();
|
||||||
|
|
||||||
QString tabName;
|
|
||||||
if (db->metadata()->name().isEmpty()) {
|
if (db->metadata()->name().isEmpty()) {
|
||||||
tabName = filename;
|
tabName = filename;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tabName = QString("%1 [%2]").arg(db->metadata()->name().arg(filename));
|
tabName = QString("%1 [%2]").arg(db->metadata()->name().arg(filename));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
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);
|
m_tabWidget->setTabText(index, tabName);
|
||||||
}
|
}
|
||||||
|
@ -153,3 +196,13 @@ Database* DatabaseManager::indexDatabase(int index)
|
||||||
|
|
||||||
return 0;
|
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*)));
|
||||||
|
}
|
||||||
|
|
|
@ -44,11 +44,14 @@ class DatabaseManager : public QObject
|
||||||
public:
|
public:
|
||||||
DatabaseManager(QTabWidget* tabWidget);
|
DatabaseManager(QTabWidget* tabWidget);
|
||||||
void openDatabase(const QString& fileName);
|
void openDatabase(const QString& fileName);
|
||||||
|
void saveDatabase(Database* db);
|
||||||
void closeDatabase(Database* db);
|
void closeDatabase(Database* db);
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
|
void newDatabase();
|
||||||
void openDatabase();
|
void openDatabase();
|
||||||
void closeDatabase(int index);
|
void saveDatabase(int index = -1);
|
||||||
|
void closeDatabase(int index = -1);
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void updateTabName(Database* db);
|
void updateTabName(Database* db);
|
||||||
|
@ -56,6 +59,7 @@ private Q_SLOTS:
|
||||||
private:
|
private:
|
||||||
int databaseIndex(Database* db);
|
int databaseIndex(Database* db);
|
||||||
Database* indexDatabase(int index);
|
Database* indexDatabase(int index);
|
||||||
|
void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct);
|
||||||
|
|
||||||
QTabWidget* m_tabWidget;
|
QTabWidget* m_tabWidget;
|
||||||
QWidget* m_window;
|
QWidget* m_window;
|
||||||
|
|
|
@ -28,6 +28,19 @@ MainWindow::MainWindow()
|
||||||
|
|
||||||
m_dbManager = new DatabaseManager(tabWidget);
|
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()));
|
connect(actionQuit, SIGNAL(triggered()), SLOT(close()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::currentTabChanged(int index)
|
||||||
|
{
|
||||||
|
bool hasTab = (index != -1);
|
||||||
|
|
||||||
|
actionDatabaseSave->setEnabled(hasTab);
|
||||||
|
actionDatabaseClose->setEnabled(hasTab);
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,9 @@ class MainWindow : public QMainWindow, private Ui::MainWindow
|
||||||
public:
|
public:
|
||||||
MainWindow();
|
MainWindow();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void currentTabChanged(int index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DatabaseManager* m_dbManager;
|
DatabaseManager* m_dbManager;
|
||||||
};
|
};
|
||||||
|
|
|
@ -41,9 +41,12 @@
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>File</string>
|
<string>Database</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionOpenDatabase"/>
|
<addaction name="actionDatabaseNew"/>
|
||||||
|
<addaction name="actionDatabaseOpen"/>
|
||||||
|
<addaction name="actionDatabaseSave"/>
|
||||||
|
<addaction name="actionDatabaseClose"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionQuit"/>
|
<addaction name="actionQuit"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -67,11 +70,32 @@
|
||||||
<string>About</string>
|
<string>About</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionOpenDatabase">
|
<action name="actionDatabaseOpen">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Open database</string>
|
<string>Open database</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionDatabaseSave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save database</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionDatabaseClose">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Close database</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionDatabaseNew">
|
||||||
|
<property name="text">
|
||||||
|
<string>New database</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue