summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2021-01-11 19:44:43 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-11 19:44:43 +0100
commit49c2c8f3330edccf54d1b5cc9958295288358c1c (patch)
tree78104ec4a01853e6a3b16b15030c4d8b3a0eb0a1
parent08520822eb91c065a0893da0e2e9d11574450208 (diff)
Add setting to enable/disable collapsible priority depending on the sort order.
-rw-r--r--src/modlistview.cpp2
-rw-r--r--src/settings.cpp11
-rw-r--r--src/settings.h4
-rw-r--r--src/settingsdialog.ui53
-rw-r--r--src/settingsdialoguserinterface.cpp20
-rw-r--r--src/settingsdialoguserinterface.h6
6 files changed, 82 insertions, 14 deletions
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<bool>(m_Settings, "Settings", "collapsible_separators", true);
+ return get<bool>(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
<bool>false</bool>
</property>
<property name="checkable">
- <bool>true</bool>
+ <bool>false</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_20">
<property name="leftMargin">
@@ -316,6 +319,54 @@ If you disable this feature, MO will only display official DLCs this way. Please
<number>7</number>
</property>
<item>
+ <widget class="QWidget" name="widget_8" native="true">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_13">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_18">
+ <property name="text">
+ <string>When sorting by</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="collapsibleSeparatorsAscBox">
+ <property name="text">
+ <string>ascending priority</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="collapsibleSeparatorsDscBox">
+ <property name="text">
+ <string>descending priority</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QCheckBox" name="collapsibleSeparatorsConflictsBox">
<property name="toolTip">
<string>Display mod conflicts on and from separator when collapsed, and show plugins from collapsed separators.</string>
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