From 98f70f4aafe6dbd84d6b604c03ed7e674ad6e939 Mon Sep 17 00:00:00 2001 From: Agoston Szepessy Date: Mon, 29 Dec 2025 20:29:56 -0800 Subject: [PATCH] Refactor passkey report widget --- src/gui/reports/ReportsWidgetPasskeys.cpp | 78 ++++------------------- src/gui/reports/ReportsWidgetPasskeys.h | 20 ++---- 2 files changed, 18 insertions(+), 80 deletions(-) diff --git a/src/gui/reports/ReportsWidgetPasskeys.cpp b/src/gui/reports/ReportsWidgetPasskeys.cpp index 831f4c721..e76f509f7 100644 --- a/src/gui/reports/ReportsWidgetPasskeys.cpp +++ b/src/gui/reports/ReportsWidgetPasskeys.cpp @@ -30,6 +30,7 @@ #include "gui/passkeys/PasskeyExporter.h" #include "gui/passkeys/PasskeyImporter.h" #include "gui/styles/StateColorPalette.h" +#include "gui/reports/ProxyModels.h" #include #include @@ -87,10 +88,8 @@ PasskeyList::PasskeyList(const QSharedPointer& db) } ReportsWidgetPasskeys::ReportsWidgetPasskeys(QWidget* parent) - : QWidget(parent) + : ReportsWidgetBase(parent, SortProxyModelKind::Default) , m_ui(new Ui::ReportsWidgetPasskeys()) - , m_referencesModel(new QStandardItemModel(this)) - , m_modelProxy(new QSortFilterProxyModel(this)) { m_ui->setupUi(this); @@ -146,25 +145,13 @@ void ReportsWidgetPasskeys::addPasskeyRow(Group* group, Entry* entry) m_rowToEntry.append({group, entry}); } -void ReportsWidgetPasskeys::loadSettings(QSharedPointer db) -{ - m_db = std::move(db); - m_entriesUpdated = false; - m_referencesModel->clear(); - m_rowToEntry.clear(); - - auto row = QList(); - row << new QStandardItem(tr("Please wait, list of entries with passkeys is being updated…")); - m_referencesModel->appendRow(row); -} - void ReportsWidgetPasskeys::showEvent(QShowEvent* event) { QWidget::showEvent(event); - if (!m_entriesUpdated) { + if (!m_widgetDataCalculated) { // Perform stats calculation on next event loop to allow widget to appear - m_entriesUpdated = true; + m_widgetDataCalculated = true; QTimer::singleShot(0, this, SLOT(updateEntries())); } } @@ -200,22 +187,6 @@ void ReportsWidgetPasskeys::updateEntries() m_ui->passkeysTableView->resizeColumnsToContents(); } -void ReportsWidgetPasskeys::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(entry); - } -} - void ReportsWidgetPasskeys::customMenuRequested(QPoint pos) { auto selected = m_ui->passkeysTableView->selectionModel()->selectedRows(); @@ -246,37 +217,6 @@ void ReportsWidgetPasskeys::customMenuRequested(QPoint pos) menu->popup(m_ui->passkeysTableView->viewport()->mapToGlobal(pos)); } -void ReportsWidgetPasskeys::saveSettings() -{ - // Nothing to do - the tab is passive -} - -void ReportsWidgetPasskeys::deleteSelectedEntries() -{ - auto selectedEntries = getSelectedEntries(); - bool permanent = !m_db->metadata()->recycleBinEnabled(); - - if (GuiTools::confirmDeleteEntries(this, selectedEntries, permanent)) { - GuiTools::deleteEntriesResolveReferences(this, selectedEntries, permanent); - } - - updateEntries(); -} - -QList ReportsWidgetPasskeys::getSelectedEntries() -{ - QList selectedEntries; - for (auto index : m_ui->passkeysTableView->selectionModel()->selectedRows()) { - auto row = m_modelProxy->mapToSource(index).row(); - auto entry = m_rowToEntry[row].second; - if (entry) { - selectedEntries << entry; - } - } - - return selectedEntries; -} - void ReportsWidgetPasskeys::selectionChanged() { m_ui->exportButton->setEnabled(!m_ui->passkeysTableView->selectionModel()->selectedIndexes().isEmpty()); @@ -305,3 +245,13 @@ void ReportsWidgetPasskeys::exportPasskey() PasskeyExporter passkeyExporter(this); passkeyExporter.showExportDialog(getSelectedEntries()); } + +QTableView *ReportsWidgetPasskeys::getTableView() const +{ + return m_ui->passkeysTableView; +} + +void ReportsWidgetPasskeys::updateWidget() +{ + updateEntries(); +} diff --git a/src/gui/reports/ReportsWidgetPasskeys.h b/src/gui/reports/ReportsWidgetPasskeys.h index 3d0593350..3e6115013 100644 --- a/src/gui/reports/ReportsWidgetPasskeys.h +++ b/src/gui/reports/ReportsWidgetPasskeys.h @@ -19,6 +19,7 @@ #define KEEPASSXC_REPORTSWIDGETPASSKEYS_H #include "gui/entry/EntryModel.h" +#include "gui/reports/ReportsWidgetBase.h" #include class Database; @@ -33,27 +34,21 @@ namespace Ui class ReportsWidgetPasskeys; } -class ReportsWidgetPasskeys : public QWidget +class ReportsWidgetPasskeys : public ReportsWidgetBase { Q_OBJECT public: explicit ReportsWidgetPasskeys(QWidget* parent = nullptr); ~ReportsWidgetPasskeys() override; - void loadSettings(QSharedPointer db); - void saveSettings(); - protected: void showEvent(QShowEvent* event) override; - -signals: - void entryActivated(Entry*); + void updateWidget() override; + QTableView *getTableView() const override; public slots: void updateEntries(); - void emitEntryActivated(const QModelIndex& index); void customMenuRequested(QPoint); - void deleteSelectedEntries(); private slots: void selectionChanged(); @@ -62,15 +57,8 @@ private slots: private: void addPasskeyRow(Group*, Entry*); - QList getSelectedEntries(); QScopedPointer m_ui; - - bool m_entriesUpdated = false; - QScopedPointer m_referencesModel; - QScopedPointer m_modelProxy; - QSharedPointer m_db; - QList> m_rowToEntry; }; #endif // KEEPASSXC_REPORTSWIDGETPASSKEYS_H