From aae6d6a5aa8d6b101fcc38388222a8a6e7ee2ec6 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Fri, 19 Jul 2019 01:09:19 -0400
Subject: replaced qWarning()
---
src/icondelegate.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
(limited to 'src/icondelegate.cpp')
diff --git a/src/icondelegate.cpp b/src/icondelegate.cpp
index 249dae6f..39038f3c 100644
--- a/src/icondelegate.cpp
+++ b/src/icondelegate.cpp
@@ -18,12 +18,14 @@ along with Mod Organizer. If not, see .
*/
#include "icondelegate.h"
+#include
#include
#include
#include
#include
#include
+using namespace MOBase;
IconDelegate::IconDelegate(QObject *parent)
: QStyledItemDelegate(parent)
@@ -54,7 +56,7 @@ void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
if (!QPixmapCache::find(fullIconId, &icon)) {
icon = QIcon(iconId).pixmap(iconWidth, iconWidth);
if (icon.isNull()) {
- qWarning("failed to load icon %s", qUtf8Printable(iconId));
+ log::warn("failed to load icon {}", iconId);
}
QPixmapCache::insert(fullIconId, icon);
}
--
cgit v1.3.1
From 51d664d76ce6b611e7a7585b209bad9d68fe65d7 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Fri, 27 Sep 2019 15:20:02 -0400
Subject: moved color stuff to ColorTable, now shows sample text and icons
---
src/CMakeLists.txt | 3 +
src/colortable.cpp | 278 ++++++++++++++++++++++++++++++++++++++++++
src/colortable.h | 28 +++++
src/icondelegate.cpp | 15 ++-
src/icondelegate.h | 18 +--
src/modflagicondelegate.cpp | 114 +++++++++--------
src/modflagicondelegate.h | 11 +-
src/settingsdialog.ui | 9 +-
src/settingsdialoggeneral.cpp | 235 +++--------------------------------
src/settingsdialoggeneral.h | 9 --
10 files changed, 421 insertions(+), 299 deletions(-)
create mode 100644 src/colortable.cpp
create mode 100644 src/colortable.h
(limited to 'src/icondelegate.cpp')
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7c29ff48..b21d1a8b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -141,6 +141,7 @@ SET(organizer_SRCS
envsecurity.cpp
envshortcut.cpp
envwindows.cpp
+ colortable.cpp
shared/windows_error.cpp
shared/error_report.cpp
@@ -263,6 +264,7 @@ SET(organizer_HDRS
envsecurity.h
envshortcut.h
envwindows.h
+ colortable.h
shared/windows_error.h
shared/error_report.h
@@ -473,6 +475,7 @@ set(utilities
)
set(widgets
+ colortable
genericicondelegate
filerenamer
filterwidget
diff --git a/src/colortable.cpp b/src/colortable.cpp
new file mode 100644
index 00000000..7546abe5
--- /dev/null
+++ b/src/colortable.cpp
@@ -0,0 +1,278 @@
+#include "colortable.h"
+#include "modflagicondelegate.h"
+#include "settings.h"
+
+class ColorItem;
+ColorItem* colorItemForRow(QTableWidget* table, int row);
+
+void paintBackground(
+ QTableWidget* table, QPainter* p, const QStyleOptionViewItem& option,
+ const QModelIndex& index);
+
+
+class ColoredBackgroundDelegate : public QStyledItemDelegate
+{
+public:
+ ColoredBackgroundDelegate(QTableWidget* table)
+ : m_table(table)
+ {
+ }
+
+ void paint(
+ QPainter* p, const QStyleOptionViewItem& option,
+ const QModelIndex& index) const override
+ {
+ paintBackground(m_table, p, option, index);
+
+ QStyleOptionViewItem itemOption(option);
+ initStyleOption(&itemOption, index);
+ itemOption.state = QStyle::State_Enabled;
+
+ QStyledItemDelegate::paint(p, itemOption, index);
+ }
+
+private:
+ QTableWidget* m_table;
+};
+
+
+class FakeModFlagIconDelegate : public ModFlagIconDelegate
+{
+public:
+ explicit FakeModFlagIconDelegate(QTableWidget* table)
+ : m_table(table)
+ {
+ }
+
+ void paint(
+ QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override
+ {
+ paintBackground(m_table, painter, option, index);
+ ModFlagIconDelegate::paintIcons(painter, option, index, getIcons(index));
+ }
+
+protected:
+ QList getIcons(const QModelIndex &index) const override
+ {
+ const auto flags = {
+ ModInfo::FLAG_CONFLICT_MIXED,
+ ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE,
+ ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN,
+ ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED,
+ ModInfo::FLAG_BACKUP,
+ ModInfo::FLAG_NOTENDORSED,
+ ModInfo::FLAG_NOTES,
+ ModInfo::FLAG_ALTERNATE_GAME
+ };
+
+ return getIconsForFlags(flags, false);
+ }
+
+ size_t getNumIcons(const QModelIndex &index) const override
+ {
+ return getIcons(index).size();
+ }
+
+private:
+ QTableWidget* m_table;
+};
+
+
+class ColorItem : public QTableWidgetItem
+{
+public:
+ ColorItem(
+ QString caption, QColor defaultColor,
+ std::function get,
+ std::function commit) :
+ m_caption(std::move(caption)), m_default(defaultColor),
+ m_get(get), m_commit(commit)
+ {
+ setText(m_caption);
+ set(get());
+ }
+
+ const QString& caption() const
+ {
+ return m_caption;
+ }
+
+ QColor get() const
+ {
+ return m_temp;
+ }
+
+ bool set(const QColor& c)
+ {
+ if (m_temp != c) {
+ m_temp = c;
+ return true;
+ }
+
+ return false;
+ }
+
+ void commit()
+ {
+ m_commit(m_temp);
+ }
+
+ bool reset()
+ {
+ return set(m_default);
+ }
+
+private:
+ const QString m_caption;
+ const QColor m_default;
+ std::function m_get;
+ std::function m_commit;
+ QColor m_temp;
+};
+
+
+ColorItem* colorItemForRow(QTableWidget* table, int row)
+{
+ return dynamic_cast(table->item(row, 0));
+}
+
+template
+void forEachColorItem(QTableWidget* table, F&& f)
+{
+ const auto rowCount = table->rowCount();
+
+ for (int i=0; isave();
+ p->fillRect(option.rect, ci->get());
+ p->restore();
+ }
+}
+
+
+ColorTable::ColorTable(QWidget* parent)
+ : QTableWidget(parent), m_settings(nullptr)
+{
+ setColumnCount(3);
+ setHorizontalHeaderLabels({"", "", ""});
+
+ setItemDelegateForColumn(1, new ColoredBackgroundDelegate(this));
+ setItemDelegateForColumn(2, new FakeModFlagIconDelegate(this));
+
+ connect(
+ this, &QTableWidget::cellActivated,
+ [&]{ onColorActivated(); });
+}
+
+void ColorTable::load(Settings& s)
+{
+ m_settings = &s;
+
+ addColor(
+ QObject::tr("Is overwritten (loose files)"),
+ QColor(0, 255, 0, 64),
+ [this]{ return m_settings->colors().modlistOverwrittenLoose(); },
+ [this](auto&& v){ m_settings->colors().setModlistOverwrittenLoose(v); });
+
+ addColor(
+ QObject::tr("Is overwriting (loose files)"),
+ QColor(255, 0, 0, 64),
+ [this]{ return m_settings->colors().modlistOverwritingLoose(); },
+ [this](auto&& v){ m_settings->colors().setModlistOverwritingLoose(v); });
+
+ addColor(
+ QObject::tr("Is overwritten (archives)"),
+ QColor(0, 255, 255, 64),
+ [this]{ return m_settings->colors().modlistOverwrittenArchive(); },
+ [this](auto&& v){ m_settings->colors().setModlistOverwrittenArchive(v); });
+
+ addColor(
+ QObject::tr("Is overwriting (archives)"),
+ QColor(255, 0, 255, 64),
+ [this]{ return m_settings->colors().modlistOverwritingArchive(); },
+ [this](auto&& v){ m_settings->colors().setModlistOverwritingArchive(v); });
+
+ addColor(
+ QObject::tr("Mod contains selected plugin"),
+ QColor(0, 0, 255, 64),
+ [this]{ return m_settings->colors().modlistContainsPlugin(); },
+ [this](auto&& v){ m_settings->colors().setModlistContainsPlugin(v); });
+
+ addColor(
+ QObject::tr("Plugin is contained in selected mod"),
+ QColor(0, 0, 255, 64),
+ [this]{ return m_settings->colors().pluginListContained(); },
+ [this](auto&& v){ m_settings->colors().setPluginListContained(v); });
+}
+
+void ColorTable::resetColors()
+{
+ bool changed = false;
+
+ forEachColorItem(this, [&](auto* item) {
+ if (item->reset()) {
+ changed = true;
+ }
+ });
+
+ if (changed) {
+ update();
+ }
+}
+
+void ColorTable::commitColors()
+{
+ forEachColorItem(this, [](auto* item) {
+ item->commit();
+ });
+}
+
+void ColorTable::addColor(
+ const QString& text, const QColor& defaultColor,
+ std::function get,
+ std::function commit)
+{
+ const auto r = rowCount();
+ setRowCount(r + 1);
+
+ auto* item = new ColorItem(text, defaultColor, get, commit);
+
+ setItem(r, 0, item);
+ setItem(r, 1, new QTableWidgetItem("Text"));
+ setItem(r, 2, new QTableWidgetItem);
+
+ resizeColumnsToContents();
+}
+
+void ColorTable::onColorActivated()
+{
+ const auto rows = selectionModel()->selectedRows();
+ if (rows.isEmpty()) {
+ return;
+ }
+
+ const auto row = rows[0].row();
+ auto* ci = colorItemForRow(this, row);
+ if (!ci) {
+ return;
+ }
+
+ const QColor result = QColorDialog::getColor(
+ ci->get(), topLevelWidget(), ci->caption(), QColorDialog::ShowAlphaChannel);
+
+ if (result.isValid()) {
+ ci->set(result);
+ update(model()->index(row, 1));
+ }
+}
diff --git a/src/colortable.h b/src/colortable.h
new file mode 100644
index 00000000..c2b64a4d
--- /dev/null
+++ b/src/colortable.h
@@ -0,0 +1,28 @@
+#ifndef COLORTABLE_H
+#define COLORTABLE_H
+
+#include
+
+class Settings;
+
+class ColorTable : public QTableWidget
+{
+public:
+ ColorTable(QWidget* parent=nullptr);
+
+ void load(Settings& s);
+ void resetColors();
+ void commitColors();
+
+private:
+ Settings* m_settings;
+
+ void addColor(
+ const QString& text, const QColor& defaultColor,
+ std::function get,
+ std::function commit);
+
+ void onColorActivated();
+};
+
+#endif // COLORTABLE_H
diff --git a/src/icondelegate.cpp b/src/icondelegate.cpp
index 39038f3c..03964263 100644
--- a/src/icondelegate.cpp
+++ b/src/icondelegate.cpp
@@ -32,13 +32,10 @@ IconDelegate::IconDelegate(QObject *parent)
{
}
-
-void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+void IconDelegate::paintIcons(
+ QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index, const QList& icons)
{
- QStyledItemDelegate::paint(painter, option, index);
-
- QList icons = getIcons(index);
-
int x = 4;
painter->save();
@@ -67,3 +64,9 @@ void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
painter->restore();
}
+void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ QStyledItemDelegate::paint(painter, option, index);
+ paintIcons(painter, option, index, getIcons(index));
+}
+
diff --git a/src/icondelegate.h b/src/icondelegate.h
index 39694481..bac71a62 100644
--- a/src/icondelegate.h
+++ b/src/icondelegate.h
@@ -27,25 +27,19 @@ along with Mod Organizer. If not, see .
class IconDelegate : public QStyledItemDelegate
{
- Q_OBJECT
-public:
+ Q_OBJECT;
+public:
explicit IconDelegate(QObject *parent = 0);
-
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
-signals:
-
-public slots:
-
-private:
+ static void paintIcons(
+ QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index, const QList& icons);
+protected:
virtual QList getIcons(const QModelIndex &index) const = 0;
virtual size_t getNumIcons(const QModelIndex &index) const = 0;
-
-
-private:
-
};
#endif // ICONDELEGATE_H
diff --git a/src/modflagicondelegate.cpp b/src/modflagicondelegate.cpp
index 7110a590..a5e9aa22 100644
--- a/src/modflagicondelegate.cpp
+++ b/src/modflagicondelegate.cpp
@@ -31,72 +31,82 @@ void ModFlagIconDelegate::columnResized(int logicalIndex, int, int newSize)
}
}
-QList ModFlagIconDelegate::getIcons(const QModelIndex &index) const {
+QList ModFlagIconDelegate::getIconsForFlags(
+ std::vector flags, bool compact)
+{
QList result;
- QVariant modid = index.data(Qt::UserRole + 1);
- if (modid.isValid()) {
- ModInfo::Ptr info = ModInfo::getByIndex(modid.toInt());
- std::vector flags = info->getFlags();
- // Don't do flags for overwrite
- if (std::find(flags.begin(), flags.end(),ModInfo::FLAG_OVERWRITE) != flags.end())
- return result;
-
- // insert conflict icons to provide nicer alignment
- { // insert loose file conflicts first
- auto iter = std::find_first_of(flags.begin(), flags.end(),
- m_ConflictFlags, m_ConflictFlags + 4);
- if (iter != flags.end()) {
- result.append(getFlagIcon(*iter));
- flags.erase(iter);
- } else if (!m_Compact) {
- result.append(QString());
- }
+ // Don't do flags for overwrite
+ if (std::find(flags.begin(), flags.end(),ModInfo::FLAG_OVERWRITE) != flags.end())
+ return result;
+
+ // insert conflict icons to provide nicer alignment
+ { // insert loose file conflicts first
+ auto iter = std::find_first_of(flags.begin(), flags.end(),
+ m_ConflictFlags, m_ConflictFlags + 4);
+ if (iter != flags.end()) {
+ result.append(getFlagIcon(*iter));
+ flags.erase(iter);
+ } else if (!compact) {
+ result.append(QString());
}
+ }
- { // insert loose vs archive overwrite second
- auto iter = std::find(flags.begin(), flags.end(),
- ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE);
- if (iter != flags.end()) {
- result.append(getFlagIcon(*iter));
- flags.erase(iter);
- } else if (!m_Compact) {
- result.append(QString());
- }
+ { // insert loose vs archive overwrite second
+ auto iter = std::find(flags.begin(), flags.end(),
+ ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE);
+ if (iter != flags.end()) {
+ result.append(getFlagIcon(*iter));
+ flags.erase(iter);
+ } else if (!compact) {
+ result.append(QString());
}
+ }
- { // insert loose vs archive overwritten third
- auto iter = std::find_first_of(flags.begin(), flags.end(),
- m_ArchiveLooseConflictFlags + 1, m_ArchiveLooseConflictFlags + 2);
- if (iter != flags.end()) {
- result.append(getFlagIcon(*iter));
- flags.erase(iter);
- } else if (!m_Compact) {
- result.append(QString());
- }
+ { // insert loose vs archive overwritten third
+ auto iter = std::find_first_of(flags.begin(), flags.end(),
+ m_ArchiveLooseConflictFlags + 1, m_ArchiveLooseConflictFlags + 2);
+ if (iter != flags.end()) {
+ result.append(getFlagIcon(*iter));
+ flags.erase(iter);
+ } else if (!compact) {
+ result.append(QString());
}
+ }
- { // insert archive conflicts last
- auto iter = std::find_first_of(flags.begin(), flags.end(),
- m_ArchiveConflictFlags, m_ArchiveConflictFlags + 3);
- if (iter != flags.end()) {
- result.append(getFlagIcon(*iter));
- flags.erase(iter);
- } else if (!m_Compact) {
- result.append(QString());
- }
+ { // insert archive conflicts last
+ auto iter = std::find_first_of(flags.begin(), flags.end(),
+ m_ArchiveConflictFlags, m_ArchiveConflictFlags + 3);
+ if (iter != flags.end()) {
+ result.append(getFlagIcon(*iter));
+ flags.erase(iter);
+ } else if (!compact) {
+ result.append(QString());
}
+ }
- for (auto iter = flags.begin(); iter != flags.end(); ++iter) {
- auto iconPath = getFlagIcon(*iter);
- if (!iconPath.isEmpty())
- result.append(iconPath);
- }
+ for (auto iter = flags.begin(); iter != flags.end(); ++iter) {
+ auto iconPath = getFlagIcon(*iter);
+ if (!iconPath.isEmpty())
+ result.append(iconPath);
}
+
return result;
}
-QString ModFlagIconDelegate::getFlagIcon(ModInfo::EFlag flag) const
+QList ModFlagIconDelegate::getIcons(const QModelIndex &index) const
+{
+ QVariant modid = index.data(Qt::UserRole + 1);
+
+ if (modid.isValid()) {
+ ModInfo::Ptr info = ModInfo::getByIndex(modid.toInt());
+ return getIconsForFlags(info->getFlags(), m_Compact);
+ }
+
+ return {};
+}
+
+QString ModFlagIconDelegate::getFlagIcon(ModInfo::EFlag flag)
{
switch (flag) {
case ModInfo::FLAG_BACKUP: return QStringLiteral(":/MO/gui/emblem_backup");
diff --git a/src/modflagicondelegate.h b/src/modflagicondelegate.h
index eb6a76ab..4f22dd90 100644
--- a/src/modflagicondelegate.h
+++ b/src/modflagicondelegate.h
@@ -5,21 +5,24 @@
class ModFlagIconDelegate : public IconDelegate
{
-Q_OBJECT
+ Q_OBJECT;
public:
explicit ModFlagIconDelegate(QObject *parent = 0, int logicalIndex = -1, int compactSize = 120);
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ static QList getIconsForFlags(
+ std::vector flags, bool compact);
+
+ static QString getFlagIcon(ModInfo::EFlag flag);
+
public slots:
void columnResized(int logicalIndex, int oldSize, int newSize);
-private:
+protected:
virtual QList getIcons(const QModelIndex &index) const;
virtual size_t getNumIcons(const QModelIndex &index) const;
- QString getFlagIcon(ModInfo::EFlag flag) const;
-
private:
static ModInfo::EFlag m_ConflictFlags[4];
static ModInfo::EFlag m_ArchiveLooseConflictFlags[2];
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index 704e4134..fba65545 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -211,7 +211,7 @@
-
-
+
QAbstractItemView::NoEditTriggers
@@ -1527,6 +1527,13 @@ programs you are intentionally running.
+
+
+ ColorTable
+ QTableWidget
+
+
+
logLevelBox
baseDirEdit
diff --git a/src/settingsdialoggeneral.cpp b/src/settingsdialoggeneral.cpp
index 0dfd3a08..a9ec5cae 100644
--- a/src/settingsdialoggeneral.cpp
+++ b/src/settingsdialoggeneral.cpp
@@ -2,114 +2,9 @@
#include "ui_settingsdialog.h"
#include "appconfig.h"
#include "categoriesdialog.h"
+#include "colortable.h"
#include
-using MOBase::QuestionBoxMemory;
-
-
-class ColorItem : public QTableWidgetItem
-{
-public:
- ColorItem(
- const QColor& defaultColor,
- std::function get,
- std::function commit)
- : m_default(defaultColor), m_get(get), m_commit(commit)
- {
- set(get());
- }
-
- QColor get() const
- {
- return m_temp;
- }
-
- bool set(const QColor& c)
- {
- if (m_temp != c) {
- m_temp = c;
- return true;
- }
-
- return false;
- }
-
- void commit()
- {
- m_commit(m_temp);
- }
-
- bool reset()
- {
- return set(m_default);
- }
-
-private:
- const QColor m_default;
- std::function m_get;
- std::function m_commit;
- QColor m_temp;
-};
-
-
-class ColorDelegate : public QStyledItemDelegate
-{
-public:
- ColorDelegate(QTableWidget* table)
- : m_table(table)
- {
- }
-
-protected:
- void paint(
- QPainter* p, const QStyleOptionViewItem& option,
- const QModelIndex& index) const override
- {
- if (!paintColor(p, option, index)) {
- QStyledItemDelegate::paint(p, option, index);
- }
- }
-
-private:
- QTableWidget* m_table;
-
- bool paintColor(
- QPainter* p, const QStyleOptionViewItem& option,
- const QModelIndex& index) const
- {
- if (index.column() != 1) {
- return false;
- }
-
- const auto* item = dynamic_cast(
- m_table->item(index.row(), index.column()));
-
- if (!item) {
- return false;
- }
-
- p->save();
- p->fillRect(option.rect, item->get());
- p->restore();
-
- return true;
- }
-};
-
-
-template
-void forEachColorItem(QTableWidget* table, F&& f)
-{
- const auto rowCount = table->rowCount();
-
- for (int i=0; i(table->item(i, 1))) {
- f(item);
- }
- }
-}
-
-
GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
: SettingsTab(s, d)
{
@@ -119,17 +14,26 @@ GeneralSettingsTab::GeneralSettingsTab(Settings& s, SettingsDialog& d)
addStyles();
selectStyle();
- setColorTable();
+ ui->colorTable->load(s);
- QObject::connect(ui->categoriesBtn, &QPushButton::clicked, [&]{ on_categoriesBtn_clicked(); });
- QObject::connect(ui->resetColorsBtn, &QPushButton::clicked, [&]{ on_resetColorsBtn_clicked(); });
- QObject::connect(ui->resetDialogsButton, &QPushButton::clicked, [&]{ on_resetDialogsButton_clicked(); });
+ QObject::connect(
+ ui->categoriesBtn, &QPushButton::clicked,
+ [&]{ on_categoriesBtn_clicked(); });
+
+ QObject::connect(
+ ui->resetColorsBtn, &QPushButton::clicked,
+ [&]{ on_resetColorsBtn_clicked(); });
+
+ QObject::connect(
+ ui->resetDialogsButton, &QPushButton::clicked,
+ [&]{ on_resetDialogsButton_clicked(); });
}
void GeneralSettingsTab::update()
{
const QString oldLanguage = settings().interface().language();
- const QString newLanguage = ui->languageBox->itemData(ui->languageBox->currentIndex()).toString();
+ const QString newLanguage = ui->languageBox->itemData(
+ ui->languageBox->currentIndex()).toString();
if (newLanguage != oldLanguage) {
settings().interface().setLanguage(newLanguage);
@@ -137,7 +41,9 @@ void GeneralSettingsTab::update()
}
const QString oldStyle = settings().interface().styleName().value_or("");
- const QString newStyle = ui->styleBox->itemData(ui->styleBox->currentIndex()).toString();
+ const QString newStyle = ui->styleBox->itemData(
+ ui->styleBox->currentIndex()).toString();
+
if (oldStyle != newStyle) {
settings().interface().setStyleName(newStyle);
emit settings().styleChanged(newStyle);
@@ -149,9 +55,7 @@ void GeneralSettingsTab::update()
settings().setCheckForUpdates(ui->checkForUpdates->isChecked());
settings().setUsePrereleases(ui->usePrereleaseBox->isChecked());
- forEachColorItem(ui->colorTable, [](auto* item) {
- item->commit();
- });
+ ui->colorTable->commitColors();
settings().colors().setColorSeparatorScrollbar(ui->colorSeparatorsBox->isChecked());
}
@@ -258,113 +162,14 @@ void GeneralSettingsTab::selectStyle()
}
}
-void GeneralSettingsTab::setColorTable()
-{
- ui->colorTable->setColumnCount(2);
- ui->colorTable->setHorizontalHeaderLabels({
- QObject::tr("Item"), QObject::tr("Color")
- });
-
- ui->colorTable->setItemDelegate(new ColorDelegate(ui->colorTable));
-
- addColor(
- QObject::tr("Is overwritten (loose files)"),
- QColor(0, 255, 0, 64),
- [this]{ return settings().colors().modlistOverwrittenLoose(); },
- [this](auto&& v){ settings().colors().setModlistOverwrittenLoose(v); });
-
- addColor(
- QObject::tr("Is overwriting (loose files)"),
- QColor(255, 0, 0, 64),
- [this]{ return settings().colors().modlistOverwritingLoose(); },
- [this](auto&& v){ settings().colors().setModlistOverwritingLoose(v); });
-
- addColor(
- QObject::tr("Is overwritten (archives)"),
- QColor(0, 255, 255, 64),
- [this]{ return settings().colors().modlistOverwrittenArchive(); },
- [this](auto&& v){ settings().colors().setModlistOverwrittenArchive(v); });
-
- addColor(
- QObject::tr("Is overwriting (archives)"),
- QColor(255, 0, 255, 64),
- [this]{ return settings().colors().modlistOverwritingArchive(); },
- [this](auto&& v){ settings().colors().setModlistOverwritingArchive(v); });
-
- addColor(
- QObject::tr("Mod contains selected plugin"),
- QColor(0, 0, 255, 64),
- [this]{ return settings().colors().modlistContainsPlugin(); },
- [this](auto&& v){ settings().colors().setModlistContainsPlugin(v); });
-
- addColor(
- QObject::tr("Plugin is contained in selected mod"),
- QColor(0, 0, 255, 64),
- [this]{ return settings().colors().pluginListContained(); },
- [this](auto&& v){ settings().colors().setPluginListContained(v); });
-
- QObject::connect(
- ui->colorTable, &QTableWidget::cellActivated,
- [&]{ onColorActivated(); });
-}
-
-void GeneralSettingsTab::addColor(
- const QString& text, const QColor& defaultColor,
- std::function get,
- std::function commit)
-{
- const auto r = ui->colorTable->rowCount();
- ui->colorTable->setRowCount(r + 1);
-
- ui->colorTable->setItem(r, 0, new QTableWidgetItem(text));
- ui->colorTable->setItem(r, 1, new ColorItem(defaultColor, get, commit));
-
- ui->colorTable->resizeColumnsToContents();
-}
-
void GeneralSettingsTab::resetDialogs()
{
settings().widgets().resetQuestionButtons();
}
-void GeneralSettingsTab::onColorActivated()
-{
- const auto rows = ui->colorTable->selectionModel()->selectedRows();
- if (rows.isEmpty()) {
- return;
- }
-
- const auto row = rows[0].row();
-
- const auto text = ui->colorTable->item(row, 0)->text();
- auto* item = dynamic_cast(ui->colorTable->item(row, 1));
-
- if (!item) {
- return;
- }
-
- const QColor result = QColorDialog::getColor(
- item->get(), &dialog(), text, QColorDialog::ShowAlphaChannel);
-
- if (result.isValid()) {
- item->set(result);
- ui->colorTable->update(ui->colorTable->model()->index(row, 1));
- }
-}
-
void GeneralSettingsTab::on_resetColorsBtn_clicked()
{
- bool changed = false;
-
- forEachColorItem(ui->colorTable, [&](auto* item) {
- if (item->reset()) {
- changed = true;
- }
- });
-
- if (changed) {
- ui->colorTable->update();
- }
+ ui->colorTable->resetColors();
}
void GeneralSettingsTab::on_resetDialogsButton_clicked()
diff --git a/src/settingsdialoggeneral.h b/src/settingsdialoggeneral.h
index 1f7fafff..706ba9ef 100644
--- a/src/settingsdialoggeneral.h
+++ b/src/settingsdialoggeneral.h
@@ -18,17 +18,8 @@ private:
void addStyles();
void selectStyle();
- void setColorTable();
-
void resetDialogs();
- void addColor(
- const QString& text, const QColor& defaultColor,
- std::function get,
- std::function commit);
-
- void onColorActivated();
-
void on_categoriesBtn_clicked();
void on_resetColorsBtn_clicked();
void on_resetDialogsButton_clicked();
--
cgit v1.3.1