From c9aff28f7ee7c933f0171603af6769ea0a8f3d3a Mon Sep 17 00:00:00 2001 From: Agoston Szepessy Date: Mon, 29 Dec 2025 18:43:56 -0800 Subject: [PATCH] Move more methods into base class --- src/gui/reports/ReportsWidgetBase.cpp | 34 +++++++++++ src/gui/reports/ReportsWidgetBase.h | 6 +- .../ReportsWidgetBrowserStatistics.cpp | 38 +------------ .../reports/ReportsWidgetBrowserStatistics.h | 6 -- src/gui/reports/ReportsWidgetHealthcheck.cpp | 57 +------------------ src/gui/reports/ReportsWidgetHealthcheck.h | 7 +-- src/gui/reports/ReportsWidgetHibp.cpp | 18 ++---- src/gui/reports/ReportsWidgetHibp.h | 6 +- 8 files changed, 50 insertions(+), 122 deletions(-) diff --git a/src/gui/reports/ReportsWidgetBase.cpp b/src/gui/reports/ReportsWidgetBase.cpp index ac28af320..cc2b3dc8c 100644 --- a/src/gui/reports/ReportsWidgetBase.cpp +++ b/src/gui/reports/ReportsWidgetBase.cpp @@ -53,6 +53,24 @@ ReportsWidgetBase::ReportsWidgetBase(QWidget* parent, SortProxyModelKind proxyMo ReportsWidgetBase::~ReportsWidgetBase() {} +void ReportsWidgetBase::loadSettings(QSharedPointer db) +{ + m_db = std::move(db); + m_widgetDataCalculated = false; + m_referencesModel->clear(); + m_rowToEntry.clear(); + + auto row = QList(); + row << new QStandardItem(tr("Please wait, report is being calculated…")); + m_referencesModel->appendRow(row); +} + +void ReportsWidgetBase::saveSettings() +{ + // Most report tabs are passive, so override them in derived classes if they need to + // save settings +} + QMenu *ReportsWidgetBase::customMenuRequestedBase() { auto selected = getTableView()->selectionModel()->selectedRows(); @@ -230,3 +248,19 @@ void ReportsWidgetBase::deleteSelectedEntries() updateWidget(); } + +void ReportsWidgetBase::emitEntryActivated(const QModelIndex& index) +{ + if (!index.isValid()) { + return; + } + + auto mappedIndex = m_modelProxy->mapToSource(index); + const auto row = m_rowToEntry[mappedIndex.row()]; + const auto group = row.first; + const auto entry = row.second; + + if (group && entry) { + emit entryActivated(const_cast(entry)); + } +} diff --git a/src/gui/reports/ReportsWidgetBase.h b/src/gui/reports/ReportsWidgetBase.h index 0fac24d34..89124fd2d 100644 --- a/src/gui/reports/ReportsWidgetBase.h +++ b/src/gui/reports/ReportsWidgetBase.h @@ -43,6 +43,9 @@ public: explicit ReportsWidgetBase(QWidget* parent, SortProxyModelKind); virtual ~ReportsWidgetBase(); + virtual void loadSettings(QSharedPointer db); + virtual void saveSettings(); + protected: virtual QTableView *getTableView() const = 0; virtual void updateWidget() = 0; @@ -54,12 +57,13 @@ public slots: QList getSelectedEntries(); void expireSelectedEntries(); void deleteSelectedEntries(); + void emitEntryActivated(const QModelIndex& index); signals: void entryActivated(Entry*); protected: - bool m_calculated = false; + bool m_widgetDataCalculated = false; QScopedPointer m_referencesModel; QScopedPointer m_modelProxy; QSharedPointer m_db; diff --git a/src/gui/reports/ReportsWidgetBrowserStatistics.cpp b/src/gui/reports/ReportsWidgetBrowserStatistics.cpp index dfd56e9fc..a1eabed13 100644 --- a/src/gui/reports/ReportsWidgetBrowserStatistics.cpp +++ b/src/gui/reports/ReportsWidgetBrowserStatistics.cpp @@ -24,7 +24,6 @@ #include "core/Metadata.h" #include "gui/GuiTools.h" #include "gui/Icons.h" -#include "gui/MessageBox.h" #include "gui/styles/StateColorPalette.h" #include @@ -174,25 +173,13 @@ void ReportsWidgetBrowserStatistics::addStatisticsRow(bool hasUrls, m_rowToEntry.append({group, entry}); } -void ReportsWidgetBrowserStatistics::loadSettings(QSharedPointer db) -{ - m_db = std::move(db); - m_statisticsCalculated = false; - m_referencesModel->clear(); - m_rowToEntry.clear(); - - auto row = QList(); - row << new QStandardItem(tr("Please wait, browser statistics is being calculated…")); - m_referencesModel->appendRow(row); -} - void ReportsWidgetBrowserStatistics::showEvent(QShowEvent* event) { QWidget::showEvent(event); - if (!m_statisticsCalculated) { + if (!m_widgetDataCalculated) { // Perform stats calculation on next event loop to allow widget to appear - m_statisticsCalculated = true; + m_widgetDataCalculated = true; QTimer::singleShot(0, this, SLOT(calculateBrowserStatistics())); } } @@ -245,22 +232,6 @@ void ReportsWidgetBrowserStatistics::calculateBrowserStatistics() m_ui->browserStatisticsTableView->resizeColumnsToContents(); } -void ReportsWidgetBrowserStatistics::emitEntryActivated(const QModelIndex& index) -{ - if (!index.isValid()) { - return; - } - - auto mappedIndex = m_modelProxy->mapToSource(index); - const auto row = m_rowToEntry[mappedIndex.row()]; - const auto group = row.first; - const auto entry = row.second; - - if (group && entry) { - emit entryActivated(const_cast(entry)); - } -} - void ReportsWidgetBrowserStatistics::customMenuRequested(QPoint pos) { auto menu = customMenuRequestedBase(); @@ -284,11 +255,6 @@ void ReportsWidgetBrowserStatistics::customMenuRequested(QPoint pos) menu->popup(m_ui->browserStatisticsTableView->viewport()->mapToGlobal(pos)); } -void ReportsWidgetBrowserStatistics::saveSettings() -{ - // Nothing to do - the tab is passive -} - void ReportsWidgetBrowserStatistics::deletePluginDataFromSelectedEntries() { const auto& selectedEntries = getSelectedEntries(); diff --git a/src/gui/reports/ReportsWidgetBrowserStatistics.h b/src/gui/reports/ReportsWidgetBrowserStatistics.h index 845aaa83a..9b17d221f 100644 --- a/src/gui/reports/ReportsWidgetBrowserStatistics.h +++ b/src/gui/reports/ReportsWidgetBrowserStatistics.h @@ -41,9 +41,6 @@ public: explicit ReportsWidgetBrowserStatistics(QWidget* parent = nullptr); ~ReportsWidgetBrowserStatistics() override; - void loadSettings(QSharedPointer db); - void saveSettings(); - protected: void showEvent(QShowEvent* event) override; void updateWidget() override; @@ -54,7 +51,6 @@ signals: public slots: void calculateBrowserStatistics(); - void emitEntryActivated(const QModelIndex& index); void customMenuRequested(QPoint); void deletePluginDataFromSelectedEntries(); @@ -63,8 +59,6 @@ private: QMap getBrowserConfigFromEntry(Entry* entry) const; QScopedPointer m_ui; - - bool m_statisticsCalculated = false; }; #endif // KEEPASSXC_REPORTSWIDGETBROWSERSTATISTICS_H diff --git a/src/gui/reports/ReportsWidgetHealthcheck.cpp b/src/gui/reports/ReportsWidgetHealthcheck.cpp index a4debf7c7..7d4a14089 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.cpp +++ b/src/gui/reports/ReportsWidgetHealthcheck.cpp @@ -24,13 +24,11 @@ #include "core/PasswordHealth.h" #include "gui/GuiTools.h" #include "gui/Icons.h" -#include "gui/MessageBox.h" #include "gui/styles/StateColorPalette.h" #include "gui/reports/ProxyModels.h" #include #include -#include #include namespace @@ -77,27 +75,6 @@ namespace QList> m_items; bool m_anyExcludedEntries = false; }; - - class ReportSortProxyModel : public QSortFilterProxyModel - { - public: - ReportSortProxyModel(QObject* parent) - : QSortFilterProxyModel(parent){}; - ~ReportSortProxyModel() override = default; - - protected: - bool lessThan(const QModelIndex& left, const QModelIndex& right) const override - { - // Check if the display data is a number, convert and compare if so - bool ok = false; - int leftInt = sourceModel()->data(left).toString().toInt(&ok); - if (ok) { - return leftInt < sourceModel()->data(right).toString().toInt(); - } - // Otherwise use default sorting - return QSortFilterProxyModel::lessThan(left, right); - } - }; } // namespace Health::Health(QSharedPointer db) @@ -238,15 +215,7 @@ void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer healt void ReportsWidgetHealthcheck::loadSettings(QSharedPointer db) { - m_db = std::move(db); - m_healthCalculated = false; - m_referencesModel->clear(); - m_rowToEntry.clear(); - - auto row = QList(); - row << new QStandardItem(tr("Please wait, health data is being calculated…")); - m_referencesModel->appendRow(row); - // Default sort by first column (health score) + ReportsWidgetBase::loadSettings(db); m_ui->healthcheckTableView->sortByColumn(0, Qt::AscendingOrder); } @@ -254,9 +223,9 @@ void ReportsWidgetHealthcheck::showEvent(QShowEvent* event) { QWidget::showEvent(event); - if (!m_healthCalculated) { + if (!m_widgetDataCalculated) { // Perform stats calculation on next event loop to allow widget to appear - m_healthCalculated = true; + m_widgetDataCalculated = true; QTimer::singleShot(0, this, SLOT(calculateHealth())); } } @@ -306,21 +275,6 @@ void ReportsWidgetHealthcheck::calculateHealth() emit tablePopulated(); } -void ReportsWidgetHealthcheck::emitEntryActivated(const QModelIndex& index) -{ - if (!index.isValid()) { - return; - } - - auto mappedIndex = m_modelProxy->mapToSource(index); - const auto row = m_rowToEntry[mappedIndex.row()]; - const auto group = row.first; - const auto entry = row.second; - if (group && entry) { - emit entryActivated(const_cast(entry)); - } -} - void ReportsWidgetHealthcheck::customMenuRequested(QPoint pos) { auto menu = customMenuRequestedBase(); @@ -333,11 +287,6 @@ void ReportsWidgetHealthcheck::customMenuRequested(QPoint pos) menu->popup(m_ui->healthcheckTableView->viewport()->mapToGlobal(pos)); } -void ReportsWidgetHealthcheck::saveSettings() -{ - // nothing to do - the tab is passive -} - void ReportsWidgetHealthcheck::updateWidget() { calculateHealth(); diff --git a/src/gui/reports/ReportsWidgetHealthcheck.h b/src/gui/reports/ReportsWidgetHealthcheck.h index fd0c53c24..1dec5d8a7 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.h +++ b/src/gui/reports/ReportsWidgetHealthcheck.h @@ -42,8 +42,7 @@ public: explicit ReportsWidgetHealthcheck(QWidget* parent = nullptr); ~ReportsWidgetHealthcheck() override; - void loadSettings(QSharedPointer db); - void saveSettings(); + void loadSettings(QSharedPointer db) override; protected: void showEvent(QShowEvent* event) override; @@ -51,20 +50,16 @@ protected: QTableView *getTableView() const override; signals: - void entryActivated(Entry*); void tablePopulated(); public slots: void calculateHealth(); - void emitEntryActivated(const QModelIndex& index); void customMenuRequested(QPoint); private: void addHealthRow(QSharedPointer, Group*, Entry*, bool excluded); QScopedPointer m_ui; - - bool m_healthCalculated = false; }; #endif // KEEPASSXC_REPORTSWIDGETHEALTHCHECK_H diff --git a/src/gui/reports/ReportsWidgetHibp.cpp b/src/gui/reports/ReportsWidgetHibp.cpp index 7568eb903..44a2d2131 100644 --- a/src/gui/reports/ReportsWidgetHibp.cpp +++ b/src/gui/reports/ReportsWidgetHibp.cpp @@ -23,7 +23,6 @@ #include "core/Metadata.h" #include "gui/GuiTools.h" #include "gui/Icons.h" -#include "gui/MessageBox.h" #include "gui/reports/ProxyModels.h" #include @@ -61,21 +60,17 @@ ReportsWidgetHibp::~ReportsWidgetHibp() = default; void ReportsWidgetHibp::loadSettings(QSharedPointer db) { - // Re-initialize - m_db = std::move(db); - m_referencesModel->clear(); - m_pwndPasswords.clear(); - m_error.clear(); - m_rowToEntry.clear(); - m_editedEntry = nullptr; #ifdef WITH_XC_NETWORKING m_ui->stackedWidget->setCurrentIndex(0); m_ui->validationButton->setEnabled(true); m_ui->progressBar->hide(); #else - // Compiled without networking, can't do anything + // Compiled without networking, can't do anything m_ui->stackedWidget->setCurrentIndex(2); #endif + + ReportsWidgetBase::loadSettings(db); + m_referencesModel->clear(); } /* @@ -348,11 +343,6 @@ void ReportsWidgetHibp::customMenuRequested(QPoint pos) menu->popup(m_ui->hibpTableView->viewport()->mapToGlobal(pos)); } -void ReportsWidgetHibp::saveSettings() -{ - // nothing to do - the tab is passive -} - void ReportsWidgetHibp::updateWidget() { makeHibpTable(); diff --git a/src/gui/reports/ReportsWidgetHibp.h b/src/gui/reports/ReportsWidgetHibp.h index 5d6ec7e1f..8148ea24b 100644 --- a/src/gui/reports/ReportsWidgetHibp.h +++ b/src/gui/reports/ReportsWidgetHibp.h @@ -47,17 +47,13 @@ public: explicit ReportsWidgetHibp(QWidget* parent = nullptr); ~ReportsWidgetHibp() override; - void loadSettings(QSharedPointer db); - void saveSettings(); + void loadSettings(QSharedPointer db) override; void refreshAfterEdit(); protected: void updateWidget() override; QTableView *getTableView() const override; -signals: - void entryActivated(Entry*); - public slots: void emitEntryActivated(const QModelIndex&); void addHibpResult(const QString&, int);