summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2021-01-14 20:11:02 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-14 20:11:02 +0100
commit662a1eb3d7073166b1db3a05e34ecefd73046e3b (patch)
tree5ec144b5959b5e9d88de24d966d2b7bbd46e9520
parent2c9a3c7de874a5edfdc6dacf2fd2fcd7f303152d (diff)
Contextual menu entry for enable/disable all visible.
-rw-r--r--src/modlistcontextmenu.cpp30
-rw-r--r--src/modlistcontextmenu.h3
-rw-r--r--src/modlistview.cpp15
-rw-r--r--src/modlistview.h9
-rw-r--r--src/modlistviewactions.cpp12
-rw-r--r--src/modlistviewactions.h4
6 files changed, 46 insertions, 27 deletions
diff --git a/src/modlistcontextmenu.cpp b/src/modlistcontextmenu.cpp
index ac5494da..4a3278eb 100644
--- a/src/modlistcontextmenu.cpp
+++ b/src/modlistcontextmenu.cpp
@@ -17,6 +17,13 @@ ModListGlobalContextMenu::ModListGlobalContextMenu(OrganizerCore& core, ModListV
ModListGlobalContextMenu::ModListGlobalContextMenu(OrganizerCore& core, ModListView* view, const QModelIndex& index, QWidget* parent)
: QMenu(parent)
{
+ connect(this, &QMenu::aboutToShow, [=, &core] { populate(core, view, index); });
+}
+
+void ModListGlobalContextMenu::populate(OrganizerCore& core, ModListView* view, const QModelIndex& index)
+{
+ clear();
+
addAction(tr("Install Mod..."), [=]() { view->actions().installMod(); });
auto modIndex = index.data(ModList::IndexRole);
@@ -47,18 +54,17 @@ ModListGlobalContextMenu::ModListGlobalContextMenu(OrganizerCore& core, ModListV
addSeparator();
- addAction(tr("Enable all visible"), [=]() {
- if (QMessageBox::question(view, tr("Confirm"), tr("Really enable all visible mods?"),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
- view->enableAllVisible();
- }
- });
- addAction(tr("Disable all visible"), [=]() {
- if (QMessageBox::question(parent, tr("Confirm"), tr("Really disable all visible mods?"),
- QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
- view->disableAllVisible();
- }
- });
+ QString enableTxt = tr("Enable all"),
+ disableTxt = tr("Disable all");
+
+ if (view->isFilterActive()) {
+ enableTxt = tr("Enable all matching mods");
+ disableTxt = tr("Disable all matching mods");
+ }
+
+ addAction(enableTxt, [=] { view->actions().setAllMatchingModsEnabled(true); });
+ addAction(disableTxt, [=] { view->actions().setAllMatchingModsEnabled(false); });
+
addAction(tr("Check for updates"), [=]() { view->actions().checkModsForUpdates(); });
addAction(tr("Refresh"), &core, &OrganizerCore::profileRefresh);
addAction(tr("Export to csv..."), [=]() { view->actions().exportModListCSV(); });
diff --git a/src/modlistcontextmenu.h b/src/modlistcontextmenu.h
index 2b3f9dcd..8a6ce3df 100644
--- a/src/modlistcontextmenu.h
+++ b/src/modlistcontextmenu.h
@@ -25,6 +25,9 @@ protected:
friend class ModListContextMenu;
+ // populate the menu
+ void populate(OrganizerCore& core, ModListView* view, const QModelIndex& index);
+
// creates a "All mods" context menu for the given index (can be invalid).
ModListGlobalContextMenu(OrganizerCore& core, ModListView* view, const QModelIndex& index, QWidget* parent = nullptr);
diff --git a/src/modlistview.cpp b/src/modlistview.cpp
index ae905a6e..63f38c46 100644
--- a/src/modlistview.cpp
+++ b/src/modlistview.cpp
@@ -214,6 +214,11 @@ Qt::SortOrder ModListView::sortOrder() const
return m_sortProxy ? m_sortProxy->sortOrder() : Qt::AscendingOrder;
}
+bool ModListView::isFilterActive() const
+{
+ return m_sortProxy && m_sortProxy->isFilterActive();
+}
+
ModListView::GroupByMode ModListView::groupByMode() const
{
if (m_sortProxy == nullptr) {
@@ -295,16 +300,6 @@ std::optional<unsigned int> ModListView::prevMod(unsigned int modIndex) const
return {};
}
-void ModListView::enableAllVisible()
-{
- m_core->modList()->setActive(indexViewToModel(flatIndex(model())), true);
-}
-
-void ModListView::disableAllVisible()
-{
- m_core->modList()->setActive(indexViewToModel(flatIndex(model())), false);
-}
-
void ModListView::setFilterCriteria(const std::vector<ModListSortProxy::Criteria>& criteria)
{
m_sortProxy->setCriteria(criteria);
diff --git a/src/modlistview.h b/src/modlistview.h
index 13f868c6..0ae4dd76 100644
--- a/src/modlistview.h
+++ b/src/modlistview.h
@@ -66,6 +66,10 @@ public:
int sortColumn() const;
Qt::SortOrder sortOrder() const;
+ // check if a filter is currently active
+ //
+ bool isFilterActive() const;
+
// the current group mode
//
GroupByMode groupByMode() const;
@@ -107,11 +111,6 @@ signals:
public slots:
- // enable/disable all visible mods
- //
- void enableAllVisible();
- void disableAllVisible();
-
// set the filter criteria/options for mods
//
void setFilterCriteria(const std::vector<ModListSortProxy::Criteria>& criteria);
diff --git a/src/modlistviewactions.cpp b/src/modlistviewactions.cpp
index c83f2f64..857afbdc 100644
--- a/src/modlistviewactions.cpp
+++ b/src/modlistviewactions.cpp
@@ -17,6 +17,7 @@
#include "modinfodialog.h"
#include "modlist.h"
#include "modlistview.h"
+#include "modelutils.h"
#include "messagedialog.h"
#include "nexusinterface.h"
#include "nxmaccessmanager.h"
@@ -197,6 +198,17 @@ void ModListViewActions::createSeparator(const QModelIndex& index) const
m_view->scrollToAndSelect(m_view->indexModelToView(m_core.modList()->index(mIndex, 0)));
}
+void ModListViewActions::setAllMatchingModsEnabled(bool enabled) const
+{
+ const auto allIndex = m_view->indexViewToModel(flatIndex(m_view->model()));
+ const QString message = enabled ?
+ tr("Really enable %1 mod(s)?") : tr("Really disable %1 mod(s)?");
+ if (QMessageBox::question(m_parent, tr("Confirm"), message.arg(allIndex.size()),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ m_core.modList()->setActive(allIndex, enabled);
+ }
+}
+
void ModListViewActions::checkModsForUpdates() const
{
bool checkingModsForUpdate = false;
diff --git a/src/modlistviewactions.h b/src/modlistviewactions.h
index f1215cec..c3f06a48 100644
--- a/src/modlistviewactions.h
+++ b/src/modlistviewactions.h
@@ -41,6 +41,10 @@ public:
void createEmptyMod(const QModelIndex& index = QModelIndex()) const;
void createSeparator(const QModelIndex& index = QModelIndex()) const;
+ // enable/disable all non-filtered mods
+ //
+ void setAllMatchingModsEnabled(bool enabled) const;
+
// check all mods for update
//
void checkModsForUpdates() const;