|
1 | 1 | /*
|
2 |
| - * Copyright (C) 2021 KeePassXC Team <[email protected]> |
| 2 | + * Copyright (C) 2024 KeePassXC Team <[email protected]> |
3 | 3 | *
|
4 | 4 | * This program is free software: you can redistribute it and/or modify
|
5 | 5 | * it under the terms of the GNU General Public License as published by
|
|
27 | 27 | #include "gui/styles/StateColorPalette.h"
|
28 | 28 |
|
29 | 29 | #include <QJsonDocument>
|
30 |
| -#include <QJsonObject> |
31 | 30 | #include <QMenu>
|
32 | 31 | #include <QShortcut>
|
33 | 32 | #include <QSortFilterProxyModel>
|
@@ -277,9 +276,19 @@ void ReportsWidgetBrowserStatistics::customMenuRequested(QPoint pos)
|
277 | 276 | }
|
278 | 277 |
|
279 | 278 | // Create the "delete entry" menu item
|
280 |
| - const auto delEntry = new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); |
281 |
| - menu->addAction(delEntry); |
282 |
| - connect(delEntry, &QAction::triggered, this, &ReportsWidgetBrowserStatistics::deleteSelectedEntries); |
| 279 | + const auto deleteEntry = |
| 280 | + new QAction(icons()->icon("entry-delete"), tr("Delete Entry(s)…", "", selected.size()), this); |
| 281 | + menu->addAction(deleteEntry); |
| 282 | + connect(deleteEntry, &QAction::triggered, this, &ReportsWidgetBrowserStatistics::deleteSelectedEntries); |
| 283 | + |
| 284 | + // Create the "delete plugin data" menu item |
| 285 | + const auto deletePluginData = |
| 286 | + new QAction(icons()->icon("entry-delete"), tr("Delete plugin data from Entry(s)…", "", selected.size()), this); |
| 287 | + menu->addAction(deletePluginData); |
| 288 | + connect(deletePluginData, |
| 289 | + &QAction::triggered, |
| 290 | + this, |
| 291 | + &ReportsWidgetBrowserStatistics::deletePluginDataFromSelectedEntries); |
283 | 292 |
|
284 | 293 | // Create the "exclude from reports" menu item
|
285 | 294 | const auto exclude = new QAction(icons()->icon("reports-exclude"), tr("Exclude from reports"), this);
|
@@ -320,23 +329,28 @@ void ReportsWidgetBrowserStatistics::saveSettings()
|
320 | 329 |
|
321 | 330 | void ReportsWidgetBrowserStatistics::deleteSelectedEntries()
|
322 | 331 | {
|
323 |
| - QList<Entry*> selectedEntries; |
324 |
| - for (auto index : m_ui->browserStatisticsTableView->selectionModel()->selectedRows()) { |
325 |
| - auto row = m_modelProxy->mapToSource(index).row(); |
326 |
| - auto entry = m_rowToEntry[row].second; |
327 |
| - if (entry) { |
328 |
| - selectedEntries << entry; |
329 |
| - } |
330 |
| - } |
331 |
| - |
| 332 | + const auto& selectedEntries = getSelectedEntries(); |
332 | 333 | bool permanent = !m_db->metadata()->recycleBinEnabled();
|
| 334 | + |
333 | 335 | if (GuiTools::confirmDeleteEntries(this, selectedEntries, permanent)) {
|
334 | 336 | GuiTools::deleteEntriesResolveReferences(this, selectedEntries, permanent);
|
335 | 337 | }
|
336 | 338 |
|
337 | 339 | calculateBrowserStatistics();
|
338 | 340 | }
|
339 | 341 |
|
| 342 | +void ReportsWidgetBrowserStatistics::deletePluginDataFromSelectedEntries() |
| 343 | +{ |
| 344 | + const auto& selectedEntries = getSelectedEntries(); |
| 345 | + if (GuiTools::confirmDeletePluginData(this, selectedEntries)) { |
| 346 | + for (auto& entry : selectedEntries) { |
| 347 | + browserService()->removePluginData(entry); |
| 348 | + } |
| 349 | + } |
| 350 | + |
| 351 | + calculateBrowserStatistics(); |
| 352 | +} |
| 353 | + |
340 | 354 | QMap<QString, QStringList> ReportsWidgetBrowserStatistics::getBrowserConfigFromEntry(Entry* entry) const
|
341 | 355 | {
|
342 | 356 | QMap<QString, QStringList> configList;
|
@@ -372,3 +386,17 @@ QMap<QString, QStringList> ReportsWidgetBrowserStatistics::getBrowserConfigFromE
|
372 | 386 |
|
373 | 387 | return configList;
|
374 | 388 | }
|
| 389 | + |
| 390 | +QList<Entry*> ReportsWidgetBrowserStatistics::getSelectedEntries() const |
| 391 | +{ |
| 392 | + QList<Entry*> selectedEntries; |
| 393 | + for (auto index : m_ui->browserStatisticsTableView->selectionModel()->selectedRows()) { |
| 394 | + auto row = m_modelProxy->mapToSource(index).row(); |
| 395 | + auto entry = m_rowToEntry[row].second; |
| 396 | + if (entry) { |
| 397 | + selectedEntries << entry; |
| 398 | + } |
| 399 | + } |
| 400 | + |
| 401 | + return selectedEntries; |
| 402 | +} |
0 commit comments