diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-14 20:11:02 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-14 20:11:02 +0100 |
| commit | 662a1eb3d7073166b1db3a05e34ecefd73046e3b (patch) | |
| tree | 5ec144b5959b5e9d88de24d966d2b7bbd46e9520 /src | |
| parent | 2c9a3c7de874a5edfdc6dacf2fd2fcd7f303152d (diff) | |
Contextual menu entry for enable/disable all visible.
Diffstat (limited to 'src')
| -rw-r--r-- | src/modlistcontextmenu.cpp | 30 | ||||
| -rw-r--r-- | src/modlistcontextmenu.h | 3 | ||||
| -rw-r--r-- | src/modlistview.cpp | 15 | ||||
| -rw-r--r-- | src/modlistview.h | 9 | ||||
| -rw-r--r-- | src/modlistviewactions.cpp | 12 | ||||
| -rw-r--r-- | src/modlistviewactions.h | 4 |
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; |
