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:
@@ -116,6 +116,7 @@ public:
|
||||
Group* findChildByName(const QString& name);
|
||||
Entry* findEntryByUuid(const QUuid& uuid) const;
|
||||
Entry* findEntryByPath(const QString& entryPath);
|
||||
Entry* findEntryBySearchTerm(const QString& term, EntryReferenceType referenceType);
|
||||
Group* findGroupByUuid(const QUuid& uuid);
|
||||
Group* findGroupByPath(const QString& groupPath);
|
||||
QStringList locate(const QString& locateTerm, const QString& currentPath = {"/"}) const;
|
||||
@@ -149,6 +150,7 @@ public:
|
||||
const QList<Group*>& children() const;
|
||||
QList<Entry*> entries();
|
||||
const QList<Entry*>& entries() const;
|
||||
Entry* findEntryRecursive(const QString& text, EntryReferenceType referenceType, Group* group = nullptr);
|
||||
QList<Entry*> entriesRecursive(bool includeHistoryItems = false) const;
|
||||
QList<const Group*> groupsRecursive(bool includeSelf) const;
|
||||
QList<Group*> groupsRecursive(bool includeSelf);
|
||||
@@ -164,14 +166,14 @@ public:
|
||||
void removeEntry(Entry* entry);
|
||||
|
||||
signals:
|
||||
void dataChanged(Group* group);
|
||||
void aboutToAdd(Group* group, int index);
|
||||
void added();
|
||||
void aboutToRemove(Group* group);
|
||||
void removed();
|
||||
void groupDataChanged(Group* group);
|
||||
void groupAboutToAdd(Group* group, int index);
|
||||
void groupAdded();
|
||||
void groupAboutToRemove(Group* group);
|
||||
void groupRemoved();
|
||||
void aboutToMove(Group* group, Group* toGroup, int index);
|
||||
void moved();
|
||||
void modified();
|
||||
void groupMoved();
|
||||
void groupModified();
|
||||
void entryAboutToAdd(Entry* entry);
|
||||
void entryAdded(Entry* entry);
|
||||
void entryAboutToRemove(Entry* entry);
|
||||
@@ -186,7 +188,7 @@ private:
|
||||
|
||||
void setParent(Database* db);
|
||||
|
||||
void recSetDatabase(Database* db);
|
||||
void connectDatabaseSignalsRecursive(Database* db);
|
||||
void cleanupParent();
|
||||
void recCreateDelObjects();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user