summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2021-01-03 16:30:35 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-03 16:30:35 +0100
commitfbd7e777d76c2032d8c4df418e5550b14b9c2943 (patch)
treefb066683c4641c7e80579a37416c93f4fcf01a49
parentf7647b985b791959ecdfc9896a77fa51ac784f85 (diff)
Add option to enable/disable displaying conflicts on collapsed separators.
-rw-r--r--src/modconflicticondelegate.cpp25
-rw-r--r--src/modlistview.cpp35
-rw-r--r--src/modlistview.h6
-rw-r--r--src/settings.cpp10
-rw-r--r--src/settings.h5
-rw-r--r--src/settingsdialog.ui19
-rw-r--r--src/settingsdialoggeneral.cpp7
7 files changed, 84 insertions, 23 deletions
diff --git a/src/modconflicticondelegate.cpp b/src/modconflicticondelegate.cpp
index cbc32037..73c47a03 100644
--- a/src/modconflicticondelegate.cpp
+++ b/src/modconflicticondelegate.cpp
@@ -93,28 +93,9 @@ QList<QString> ModConflictIconDelegate::getIcons(const QModelIndex &index) const
return {};
}
- ModInfo::Ptr info = ModInfo::getByIndex(modIndex.toInt());
-
- auto flags = info->getConflictFlags();
- bool compact = m_Compact;
- if (info->isSeparator()
- && m_View->hasCollapsibleSeparators()
- && !m_View->isExpanded(index.sibling(index.row(), 0))) {
-
- // combine the child conflicts
- std::set<ModInfo::EConflictFlag> eFlags(flags.begin(), flags.end());
- for (int i = 0; i < m_View->model()->rowCount(index); ++i) {
- auto cIndex = m_View->model()->index(i, index.column(), index).data(ModList::IndexRole).toInt();
- auto cFlags = ModInfo::getByIndex(cIndex)->getConflictFlags();
- eFlags.insert(cFlags.begin(), cFlags.end());
- }
- flags = { eFlags.begin(), eFlags.end() };
-
- // force compact because there can be a lots of flags here
- compact = true;
- }
-
- return getIconsForFlags(flags, compact);
+ bool compact;
+ auto flags = m_View->conflictFlags(index, &compact);
+ return getIconsForFlags(flags, compact || m_Compact);
}
QString ModConflictIconDelegate::getFlagIcon(ModInfo::EConflictFlag flag)
diff --git a/src/modlistview.cpp b/src/modlistview.cpp
index e6d78bab..531a8d43 100644
--- a/src/modlistview.cpp
+++ b/src/modlistview.cpp
@@ -1045,7 +1045,9 @@ QColor ModListView::markerColor(const QModelIndex& index) const
// collapsed separator
auto rowIndex = index.sibling(index.row(), 0);
- if (hasCollapsibleSeparators() && model()->hasChildren(rowIndex) && !isExpanded(rowIndex)) {
+ if (hasCollapsibleSeparators()
+ && m_core->settings().interface().collapsibleSeparatorsConflicts()
+ && model()->hasChildren(rowIndex) && !isExpanded(rowIndex)) {
std::vector<QColor> colors;
for (int i = 0; i < model()->rowCount(rowIndex); ++i) {
@@ -1073,6 +1075,37 @@ QColor ModListView::markerColor(const QModelIndex& index) const
return QColor();
}
+std::vector<ModInfo::EConflictFlag> ModListView::conflictFlags(const QModelIndex& index, bool* forceCompact) const
+{
+ ModInfo::Ptr info = ModInfo::getByIndex(index.data(ModList::IndexRole).toInt());
+
+ auto flags = info->getConflictFlags();
+ bool compact = false;
+ if (info->isSeparator()
+ && hasCollapsibleSeparators()
+ && m_core->settings().interface().collapsibleSeparatorsConflicts()
+ && !isExpanded(index.sibling(index.row(), 0))) {
+
+ // combine the child conflicts
+ std::set<ModInfo::EConflictFlag> eFlags(flags.begin(), flags.end());
+ for (int i = 0; i < model()->rowCount(index); ++i) {
+ auto cIndex = model()->index(i, index.column(), index).data(ModList::IndexRole).toInt();
+ auto cFlags = ModInfo::getByIndex(cIndex)->getConflictFlags();
+ eFlags.insert(cFlags.begin(), cFlags.end());
+ }
+ flags = { eFlags.begin(), eFlags.end() };
+
+ // force compact because there can be a lots of flags here
+ compact = true;
+ }
+
+ if (forceCompact) {
+ *forceCompact = true;
+ }
+
+ return flags;
+}
+
void ModListView::onSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
{
if (hasCollapsibleSeparators()) {
diff --git a/src/modlistview.h b/src/modlistview.h
index 9712deab..faa33b6a 100644
--- a/src/modlistview.h
+++ b/src/modlistview.h
@@ -170,6 +170,7 @@ protected slots:
private:
+ friend class ModConflictIconDelegate;
friend class ModListStyledItemDelegated;
friend class ModListViewMarkingScrollBar;
@@ -191,6 +192,11 @@ private:
//
QColor markerColor(const QModelIndex& index) const;
+ // retrieve the conflicts flags for the given index
+ //
+ std::vector<ModInfo::EConflictFlag> conflictFlags(
+ const QModelIndex& index, bool* forceCompact = nullptr) const;
+
// get/set the selected items on the view, this method return/take indices
// from the mod list model, not the view, so it's safe to restore
//
diff --git a/src/settings.cpp b/src/settings.cpp
index 3cc026cf..e04cd0c1 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -2185,6 +2185,16 @@ void InterfaceSettings::setCollapsibleSeparators(bool b)
set(m_Settings, "Settings", "collapsible_separators", b);
}
+bool InterfaceSettings::collapsibleSeparatorsConflicts() const
+{
+ return get<bool>(m_Settings, "Settings", "collapsible_separators_conflicts", true);
+}
+
+void InterfaceSettings::setCollapsibleSeparatorsConflicts(bool b)
+{
+ set(m_Settings, "Settings", "collapsible_separators_conflicts", b);
+}
+
bool InterfaceSettings::compactDownloads() const
{
return get<bool>(m_Settings, "Settings", "compact_downloads", false);
diff --git a/src/settings.h b/src/settings.h
index 9c3765c2..043b22a4 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -626,6 +626,11 @@ public:
bool collapsibleSeparators() const;
void setCollapsibleSeparators(bool b);
+ // whether to display mod conflicts on separators when collapsed
+ //
+ bool collapsibleSeparatorsConflicts() const;
+ void setCollapsibleSeparatorsConflicts(bool b);
+
// whether to show compact downloads
//
bool compactDownloads() const;
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index 6655ca97..ae4f4f34 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -403,6 +403,9 @@
<layout class="QVBoxLayout" name="verticalLayout_17">
<item>
<widget class="QCheckBox" name="collapsibleSeparatorsBox">
+ <property name="toolTip">
+ <string>Allow collapsing separators when sorting by ascending priority.</string>
+ </property>
<property name="text">
<string>Use collapsible separators</string>
</property>
@@ -415,6 +418,22 @@
</widget>
</item>
<item>
+ <widget class="QCheckBox" name="collapsibleSeparatorsConflictsBox">
+ <property name="toolTip">
+ <string>Display mod conflicts on separator when collapsed.</string>
+ </property>
+ <property name="whatsThis">
+ <string>Display mod conflicts on separator when collapsed.</string>
+ </property>
+ <property name="text">
+ <string>Show conflicts on separators</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
<spacer name="verticalSpacer_12">
<property name="orientation">
<enum>Qt::Vertical</enum>
diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp
index 47388c96..7b854260 100644
--- a/src/settingsdialoggeneral.cpp
+++ b/src/settingsdialoggeneral.cpp
@@ -19,6 +19,11 @@ GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
ui->colorTable->load(s);
+ // connect before setting to trigger
+ QObject::connect(ui->collapsibleSeparatorsBox, &QCheckBox::stateChanged, [=](auto&& state) {
+ ui->collapsibleSeparatorsConflictsBox->setEnabled(state == Qt::Checked);
+ });
+
ui->centerDialogs->setChecked(settings().geometry().centerDialogs());
ui->changeGameConfirmation->setChecked(settings().interface().showChangeGameConfirmation());
ui->doubleClickPreviews->setChecked(settings().interface().doubleClicksOpenPreviews());
@@ -27,6 +32,7 @@ GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
ui->checkForUpdates->setChecked(settings().checkForUpdates());
ui->usePrereleaseBox->setChecked(settings().usePrereleases());
ui->colorSeparatorsBox->setChecked(settings().colors().colorSeparatorScrollbar());
+ ui->collapsibleSeparatorsConflictsBox->setChecked(settings().interface().collapsibleSeparatorsConflicts());
ui->collapsibleSeparatorsBox->setChecked(settings().interface().collapsibleSeparators());
QObject::connect(ui->exploreStyles, &QPushButton::clicked, [&]{ onExploreStyles(); });
@@ -72,6 +78,7 @@ void GeneralSettingsTab::update()
settings().setUsePrereleases(ui->usePrereleaseBox->isChecked());
settings().colors().setColorSeparatorScrollbar(ui->colorSeparatorsBox->isChecked());
settings().interface().setCollapsibleSeparators(ui->collapsibleSeparatorsBox->isChecked());
+ settings().interface().setCollapsibleSeparatorsConflicts(ui->collapsibleSeparatorsConflictsBox->isChecked());
}
void GeneralSettingsTab::addLanguages()