From 49c2c8f3330edccf54d1b5cc9958295288358c1c Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Mon, 11 Jan 2021 19:44:43 +0100 Subject: Add setting to enable/disable collapsible priority depending on the sort order. --- src/modlistview.cpp | 2 +- src/settings.cpp | 11 +++++--- src/settings.h | 4 +-- src/settingsdialog.ui | 53 ++++++++++++++++++++++++++++++++++++- src/settingsdialoguserinterface.cpp | 20 +++++++++----- src/settingsdialoguserinterface.h | 6 +++++ 6 files changed, 82 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/modlistview.cpp b/src/modlistview.cpp index 88c588f6..ae905a6e 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -687,7 +687,7 @@ void ModListView::updateGroupByProxy() else if (groupIndex == GroupBy::NEXUS_ID) { nextProxy = m_byNexusIdProxy; } - else if (m_core->settings().interface().collapsibleSeparators() + else if (m_core->settings().interface().collapsibleSeparators(m_sortProxy->sortOrder()) && m_sortProxy->sortColumn() == ModList::COL_PRIORITY) { m_byPriorityProxy->setSortOrder(m_sortProxy->sortOrder()); nextProxy = m_byPriorityProxy; diff --git a/src/settings.cpp b/src/settings.cpp index 488a9b01..d1f3ef4f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2175,14 +2175,17 @@ void InterfaceSettings::setStyleName(const QString& name) set(m_Settings, "Settings", "style", name); } -bool InterfaceSettings::collapsibleSeparators() const +bool InterfaceSettings::collapsibleSeparators(Qt::SortOrder order) const { - return get(m_Settings, "Settings", "collapsible_separators", true); + return get(m_Settings, "Settings", + order == Qt::AscendingOrder ? "collapsible_separators_asc" : "collapsible_separators_dsc", + order == Qt::AscendingOrder); } -void InterfaceSettings::setCollapsibleSeparators(bool b) +void InterfaceSettings::setCollapsibleSeparators(bool ascending, bool descending) { - set(m_Settings, "Settings", "collapsible_separators", b); + set(m_Settings, "Settings", "collapsible_separators_asc", ascending); + set(m_Settings, "Settings", "collapsible_separators_dsc", descending); } bool InterfaceSettings::collapsibleSeparatorsConflicts() const diff --git a/src/settings.h b/src/settings.h index efcfee57..484ce163 100644 --- a/src/settings.h +++ b/src/settings.h @@ -623,8 +623,8 @@ public: // whether to use collapsible separators when possible // - bool collapsibleSeparators() const; - void setCollapsibleSeparators(bool b); + bool collapsibleSeparators(Qt::SortOrder order) const; + void setCollapsibleSeparators(bool ascending, bool descending); // whether to display mod conflicts on separators when collapsed // diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui index d5c93c5c..b23e6d90 100644 --- a/src/settingsdialog.ui +++ b/src/settingsdialog.ui @@ -306,7 +306,10 @@ If you disable this feature, MO will only display official DLCs this way. Please false - true + false + + + false @@ -315,6 +318,54 @@ If you disable this feature, MO will only display official DLCs this way. Please 7 + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + When sorting by + + + + + + + ascending priority + + + true + + + + + + + descending priority + + + + + + diff --git a/src/settingsdialoguserinterface.cpp b/src/settingsdialoguserinterface.cpp index 5d856395..cdd30f2e 100644 --- a/src/settingsdialoguserinterface.cpp +++ b/src/settingsdialoguserinterface.cpp @@ -13,16 +13,15 @@ UserInterfaceSettingsTab::UserInterfaceSettingsTab(Settings& s, SettingsDialog& { // connect before setting to trigger - QObject::connect(ui->collapsibleSeparatorsBox, &QGroupBox::toggled, [=](auto&& on) { - ui->collapsibleSeparatorsConflictsBox->setEnabled(on); - ui->collapsibleSeparatorsPerProfileBox->setEnabled(on); - }); + QObject::connect(ui->collapsibleSeparatorsAscBox, &QCheckBox::toggled, [=] { updateCollapsibleSeparatorsGroup(); }); + QObject::connect(ui->collapsibleSeparatorsDscBox, &QCheckBox::toggled, [=] { updateCollapsibleSeparatorsGroup(); }); // mod list ui->displayForeignBox->setChecked(settings().interface().displayForeign()); ui->colorSeparatorsBox->setChecked(settings().colors().colorSeparatorScrollbar()); ui->collapsibleSeparatorsConflictsBox->setChecked(settings().interface().collapsibleSeparatorsConflicts()); - ui->collapsibleSeparatorsBox->setChecked(settings().interface().collapsibleSeparators()); + ui->collapsibleSeparatorsAscBox->setChecked(settings().interface().collapsibleSeparators(Qt::AscendingOrder)); + ui->collapsibleSeparatorsDscBox->setChecked(settings().interface().collapsibleSeparators(Qt::DescendingOrder)); ui->collapsibleSeparatorsPerProfileBox->setChecked(settings().interface().collapsibleSeparatorsPerProfile()); ui->saveFiltersBox->setChecked(settings().interface().saveFilters()); @@ -42,7 +41,8 @@ void UserInterfaceSettingsTab::update() // mod list settings().colors().setColorSeparatorScrollbar(ui->colorSeparatorsBox->isChecked()); settings().interface().setDisplayForeign(ui->displayForeignBox->isChecked()); - settings().interface().setCollapsibleSeparators(ui->collapsibleSeparatorsBox->isChecked()); + settings().interface().setCollapsibleSeparators( + ui->collapsibleSeparatorsAscBox->isChecked(), ui->collapsibleSeparatorsDscBox->isChecked()); settings().interface().setCollapsibleSeparatorsConflicts(ui->collapsibleSeparatorsConflictsBox->isChecked()); settings().interface().setCollapsibleSeparatorsPerProfile(ui->collapsibleSeparatorsPerProfileBox->isChecked()); settings().interface().setSaveFilters(ui->saveFiltersBox->isChecked()); @@ -54,3 +54,11 @@ void UserInterfaceSettingsTab::update() // colors ui->colorTable->commitColors(); } + +void UserInterfaceSettingsTab::updateCollapsibleSeparatorsGroup() +{ + const auto checked = ui->collapsibleSeparatorsAscBox->isChecked() || + ui->collapsibleSeparatorsDscBox->isChecked(); + ui->collapsibleSeparatorsConflictsBox->setEnabled(checked); + ui->collapsibleSeparatorsPerProfileBox->setEnabled(checked); +} diff --git a/src/settingsdialoguserinterface.h b/src/settingsdialoguserinterface.h index 8b4d48fa..4609ae54 100644 --- a/src/settingsdialoguserinterface.h +++ b/src/settingsdialoguserinterface.h @@ -10,6 +10,12 @@ public: UserInterfaceSettingsTab(Settings& settings, SettingsDialog& dialog); void update() override; + +protected slots: + + // enable/disable the collapsible separators group depending on + // the checkbox states + void updateCollapsibleSeparatorsGroup(); }; #endif // SETTINGSDIALOGGENERAL_H -- cgit v1.3.1