Refactor Database and Database widgets (#2491)
The Database, DatabaseWidget, and DatabaseTabWidget classes share many responsibilities in inconsistent ways resulting in impenetrable and unmaintainable code and a diverse set of bugs and architecture restrictions. This patch reworks the architecture, responsibilities of, and dependencies between these classes. The core changes are: * Move loading and saving logic from widgets into the Database class * Get rid of the DatabaseManagerStruct and move all the information contained in it into the Database * Let database objects keep track of modifications and dirty/clean state instead of handing this to external widgets * Move GUI interactions for loading and saving from the DatabaseTabWidget into the DatabaseWidget (resolves #2494 as a side-effect) * Heavily clean up DatabaseTabWidget and degrade it to a slightly glorified QTabWidget * Use QSharedPointers for all Database objects * Remove the modifiedImmediate signal and replace it with a markAsModified() method * Implement proper tabName() method instead of reading back titles from GUI widgets (resolves #1389 and its duplicates #2146 #855) * Fix unwanted AES-KDF downgrade if database uses Argon2 and has CustomData * Improve code This patch is also the first major step towards solving issues #476 and #2322.
This commit is contained in:
@@ -30,7 +30,6 @@ EditGroupWidget::EditGroupWidget(QWidget* parent)
|
||||
, m_editGroupWidgetIcons(new EditWidgetIcons())
|
||||
, m_editWidgetProperties(new EditWidgetProperties())
|
||||
, m_group(nullptr)
|
||||
, m_database(nullptr)
|
||||
{
|
||||
m_mainUi->setupUi(m_editGroupWidgetMain);
|
||||
|
||||
@@ -58,10 +57,10 @@ EditGroupWidget::~EditGroupWidget()
|
||||
{
|
||||
}
|
||||
|
||||
void EditGroupWidget::loadGroup(Group* group, bool create, Database* database)
|
||||
void EditGroupWidget::loadGroup(Group* group, bool create, QSharedPointer<Database> database)
|
||||
{
|
||||
m_group = group;
|
||||
m_database = database;
|
||||
m_db = database;
|
||||
|
||||
if (create) {
|
||||
setHeadline(tr("Add group"));
|
||||
@@ -141,7 +140,7 @@ void EditGroupWidget::apply()
|
||||
|
||||
void EditGroupWidget::cancel()
|
||||
{
|
||||
if (!m_group->iconUuid().isNull() && !m_database->metadata()->containsCustomIcon(m_group->iconUuid())) {
|
||||
if (!m_group->iconUuid().isNull() && !m_db->metadata()->containsCustomIcon(m_group->iconUuid())) {
|
||||
m_group->setIcon(Entry::DefaultIconNumber);
|
||||
}
|
||||
|
||||
@@ -152,7 +151,7 @@ void EditGroupWidget::cancel()
|
||||
void EditGroupWidget::clear()
|
||||
{
|
||||
m_group = nullptr;
|
||||
m_database = nullptr;
|
||||
m_db.reset();
|
||||
m_editGroupWidgetIcons->reset();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user