summaryrefslogtreecommitdiff
path: root/src/modlistcontextmenu.cpp
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2021-01-01 17:17:56 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-02 15:38:19 +0100
commit011e4d522ed7b0df52cdeb014608e9881f8bc76b (patch)
tree3b4a960c72b484e48a2d030576d08c3697c44173 /src/modlistcontextmenu.cpp
parent21ab4ad78b2b7007dc06ed432d707fc6edf98d6e (diff)
Fix setting the primary category of multiple mods at once.
Diffstat (limited to 'src/modlistcontextmenu.cpp')
-rw-r--r--src/modlistcontextmenu.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/modlistcontextmenu.cpp b/src/modlistcontextmenu.cpp
index 01c4b471..19b5fba4 100644
--- a/src/modlistcontextmenu.cpp
+++ b/src/modlistcontextmenu.cpp
@@ -126,13 +126,9 @@ void ModListPrimaryCategoryMenu::populate(const CategoryFactory& factory, ModInf
QRadioButton* categoryBox = new QRadioButton(
factory.getCategoryName(catIdx).replace('&', "&&"),
this);
- connect(categoryBox, &QRadioButton::toggled, [mod, categoryID](bool enable) {
- if (enable) {
- mod->setPrimaryCategory(categoryID);
- }
- });
categoryBox->setChecked(categoryID == mod->primaryCategory());
action->setDefaultWidget(categoryBox);
+ action->setData(categoryID);
}
catch (const std::exception& e) {
log::error("failed to create category checkbox: {}", e.what());
@@ -143,6 +139,20 @@ void ModListPrimaryCategoryMenu::populate(const CategoryFactory& factory, ModInf
}
}
+int ModListPrimaryCategoryMenu::primaryCategory() const
+{
+ for (QAction* action : actions()) {
+ QWidgetAction* widgetAction = qobject_cast<QWidgetAction*>(action);
+ if (widgetAction) {
+ QRadioButton* button = qobject_cast<QRadioButton*>(widgetAction->defaultWidget());
+ if (button && button->isChecked()) {
+ return widgetAction->data().toInt();
+ }
+ }
+ }
+ return -1;
+}
+
ModListContextMenu::ModListContextMenu(
const QModelIndex& index, OrganizerCore& core, CategoryFactory& categories, ModListView* view) :
QMenu(view)
@@ -245,6 +255,12 @@ void ModListContextMenu::addSeparatorActions(ModInfo::Ptr mod)
addMenuAsPushButton(categoriesMenu);
ModListPrimaryCategoryMenu* primaryCategoryMenu = new ModListPrimaryCategoryMenu(m_categories, mod, this);
+ connect(primaryCategoryMenu, &QMenu::aboutToHide, [=]() {
+ int category = primaryCategoryMenu->primaryCategory();
+ if (category != -1) {
+ m_actions.setPrimaryCategory(m_selected, category);
+ }
+ });
addMenuAsPushButton(primaryCategoryMenu);
addSeparator();
@@ -310,6 +326,12 @@ void ModListContextMenu::addRegularActions(ModInfo::Ptr mod)
addMenuAsPushButton(categoriesMenu);
ModListPrimaryCategoryMenu* primaryCategoryMenu = new ModListPrimaryCategoryMenu(m_categories, mod, this);
+ connect(primaryCategoryMenu, &QMenu::aboutToHide, [=]() {
+ int category = primaryCategoryMenu->primaryCategory();
+ if (category != -1) {
+ m_actions.setPrimaryCategory(m_selected, category);
+ }
+ });
addMenuAsPushButton(primaryCategoryMenu);
addSeparator();