From f6c3b516fd4b60dc8de18d18ae6592193bf2dbc9 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 15 May 2016 15:09:14 +0200 Subject: changes to primary category are now saved immediately instead of after the menu is closed --- src/mainwindow.cpp | 40 ++++++++++------------------------------ src/mainwindow.h | 1 - 2 files changed, 10 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c27ca50a..dcff139a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2676,31 +2676,6 @@ void MainWindow::replaceCategories_MenuHandler() { refreshFilters(); } -void MainWindow::savePrimaryCategory() -{ - QMenu *menu = qobject_cast(sender()); - if (menu == nullptr) { - qCritical("not a menu?"); - return; - } - - for (QAction* action : menu->actions()) { - QWidgetAction *widgetAction = qobject_cast(action); - if (widgetAction != nullptr) { - QRadioButton *btn = qobject_cast(widgetAction->defaultWidget()); - if (btn->isChecked()) { - QModelIndexList selected = ui->modList->selectionModel()->selectedRows(); - for (int i = 0; i < selected.size(); ++i) { - ModInfo::Ptr modInfo = ModInfo::getByIndex(m_ModListSortProxy->mapToSource(selected.at(i)).row()); - modInfo->setPrimaryCategory(widgetAction->data().toInt()); - } - break; - } - } - } -} - - void MainWindow::checkModsForUpdates() { statusBar()->show(); @@ -2760,15 +2735,21 @@ void MainWindow::unignoreUpdate() info->ignoreUpdate(false); } -void MainWindow::addPrimaryCategoryCandidates(QMenu *primaryCategoryMenu, ModInfo::Ptr info) -{ +void MainWindow::addPrimaryCategoryCandidates(QMenu *primaryCategoryMenu, + ModInfo::Ptr info) { const std::set &categories = info->getCategories(); for (int categoryID : categories) { int catIdx = m_CategoryFactory.getCategoryIndex(categoryID); QWidgetAction *action = new QWidgetAction(primaryCategoryMenu); try { - QRadioButton *categoryBox = new QRadioButton(m_CategoryFactory.getCategoryName(catIdx).replace('&', "&&"), - primaryCategoryMenu); + QRadioButton *categoryBox = new QRadioButton( + m_CategoryFactory.getCategoryName(catIdx).replace('&', "&&"), + primaryCategoryMenu); + connect(categoryBox, &QRadioButton::toggled, [info, categoryID](bool enable) { + if (enable) { + info->setPrimaryCategory(categoryID); + } + }); categoryBox->setChecked(categoryID == info->getPrimaryCategory()); action->setDefaultWidget(categoryBox); } catch (const std::exception &e) { @@ -2932,7 +2913,6 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos) QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category")); connect(primaryCategoryMenu, SIGNAL(aboutToShow()), this, SLOT(addPrimaryCategoryCandidates())); - connect(primaryCategoryMenu, SIGNAL(aboutToHide()), this, SLOT(savePrimaryCategory())); addMenuAsPushButton(menu, primaryCategoryMenu); menu->addSeparator(); diff --git a/src/mainwindow.h b/src/mainwindow.h index 866f1ad6..43b2bede 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -430,7 +430,6 @@ private slots: void addRemoveCategories_MenuHandler(); void replaceCategories_MenuHandler(); - void savePrimaryCategory(); void addPrimaryCategoryCandidates(); void modDetailsUpdated(bool success); -- cgit v1.3.1