Move highlight phrases to new settings system
Add a setting serialize/deserializer for QString Add constructor to ChatterinoSetting that doesn't take a default value
This commit is contained in:
+3
-1
@@ -195,7 +195,9 @@ HEADERS += \
|
|||||||
src/singletons/helper/chatterinosetting.hpp \
|
src/singletons/helper/chatterinosetting.hpp \
|
||||||
src/singletons/resourcemanager.hpp \
|
src/singletons/resourcemanager.hpp \
|
||||||
src/util/emotemap.hpp \
|
src/util/emotemap.hpp \
|
||||||
src/singletons/helper/ircmessagehandler.hpp
|
src/singletons/helper/ircmessagehandler.hpp \
|
||||||
|
src/util/serialize-custom.hpp \
|
||||||
|
src/messages/highlightphrase.hpp
|
||||||
|
|
||||||
|
|
||||||
PRECOMPILED_HEADER =
|
PRECOMPILED_HEADER =
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ Application::Application()
|
|||||||
Application::~Application()
|
Application::~Application()
|
||||||
{
|
{
|
||||||
this->save();
|
this->save();
|
||||||
|
|
||||||
chatterino::singletons::SettingManager::getInstance().save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int Application::run(QApplication &qtApp)
|
int Application::run(QApplication &qtApp)
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "util/serialize-custom.hpp"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <pajlada/settings/serialize.hpp>
|
||||||
|
|
||||||
|
namespace chatterino {
|
||||||
|
namespace messages {
|
||||||
|
|
||||||
|
struct HighlightPhrase {
|
||||||
|
QString key;
|
||||||
|
bool sound;
|
||||||
|
bool alert;
|
||||||
|
|
||||||
|
bool operator==(const HighlightPhrase &rhs) const
|
||||||
|
{
|
||||||
|
return std::tie(this->key, this->sound, this->alert) ==
|
||||||
|
std::tie(rhs.key, rhs.sound, rhs.alert);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace messages
|
||||||
|
} // namespace chatterino
|
||||||
|
|
||||||
|
namespace pajlada {
|
||||||
|
namespace Settings {
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Serialize<chatterino::messages::HighlightPhrase> {
|
||||||
|
static rapidjson::Value get(const chatterino::messages::HighlightPhrase &value,
|
||||||
|
rapidjson::Document::AllocatorType &a)
|
||||||
|
{
|
||||||
|
rapidjson::Value ret(rapidjson::kObjectType);
|
||||||
|
|
||||||
|
AddMember(ret, "key", value.key, a);
|
||||||
|
AddMember(ret, "alert", value.alert, a);
|
||||||
|
AddMember(ret, "sound", value.sound, a);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Deserialize<chatterino::messages::HighlightPhrase> {
|
||||||
|
static chatterino::messages::HighlightPhrase get(const rapidjson::Value &value)
|
||||||
|
{
|
||||||
|
chatterino::messages::HighlightPhrase ret;
|
||||||
|
if (!value.IsObject()) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.HasMember("key")) {
|
||||||
|
const rapidjson::Value &key = value["key"];
|
||||||
|
if (key.IsString()) {
|
||||||
|
ret.key = key.GetString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.HasMember("alert")) {
|
||||||
|
const rapidjson::Value &alert = value["alert"];
|
||||||
|
if (alert.IsBool()) {
|
||||||
|
ret.alert = alert.GetBool();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value.HasMember("sound")) {
|
||||||
|
const rapidjson::Value &sound = value["sound"];
|
||||||
|
if (sound.IsBool()) {
|
||||||
|
ret.sound = sound.GetBool();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Settings
|
||||||
|
} // namespace pajlada
|
||||||
@@ -8,6 +8,12 @@ template <typename Type>
|
|||||||
class ChatterinoSetting : public pajlada::Settings::Setting<Type>
|
class ChatterinoSetting : public pajlada::Settings::Setting<Type>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
ChatterinoSetting(const std::string &_path)
|
||||||
|
: pajlada::Settings::Setting<Type>(_path)
|
||||||
|
{
|
||||||
|
_registerSetting(this->data);
|
||||||
|
}
|
||||||
|
|
||||||
ChatterinoSetting(const std::string &_path, const Type &_defaultValue)
|
ChatterinoSetting(const std::string &_path, const Type &_defaultValue)
|
||||||
: pajlada::Settings::Setting<Type>(_path, _defaultValue)
|
: pajlada::Settings::Setting<Type>(_path, _defaultValue)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ SettingManager::SettingManager()
|
|||||||
, preferredQuality("/behaviour/streamlink/quality", "Choose")
|
, preferredQuality("/behaviour/streamlink/quality", "Choose")
|
||||||
, emoteScale(this->settingsItems, "emoteScale", 1.0)
|
, emoteScale(this->settingsItems, "emoteScale", 1.0)
|
||||||
, pathHighlightSound(this->settingsItems, "pathHighlightSound", "qrc:/sounds/ping2.wav")
|
, pathHighlightSound(this->settingsItems, "pathHighlightSound", "qrc:/sounds/ping2.wav")
|
||||||
, highlightProperties(this->settingsItems, "highlightProperties",
|
|
||||||
QMap<QString, QPair<bool, bool>>())
|
|
||||||
, highlightUserBlacklist(this->settingsItems, "highlightUserBlacklist", "")
|
, highlightUserBlacklist(this->settingsItems, "highlightUserBlacklist", "")
|
||||||
, snapshot(nullptr)
|
, snapshot(nullptr)
|
||||||
, settings(Path::getAppdataPath() + "settings.ini", QSettings::IniFormat)
|
, settings(Path::getAppdataPath() + "settings.ini", QSettings::IniFormat)
|
||||||
@@ -40,49 +38,6 @@ SettingManager::SettingManager()
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingManager::save()
|
|
||||||
{
|
|
||||||
for (auto &item : this->settingsItems) {
|
|
||||||
if (item.get().getName() != "highlightProperties") {
|
|
||||||
this->settings.setValue(item.get().getName(), item.get().getVariant());
|
|
||||||
} else {
|
|
||||||
this->settings.beginGroup("Highlights");
|
|
||||||
QStringList list = highlightProperties.get().keys();
|
|
||||||
list.removeAll("");
|
|
||||||
this->settings.remove("");
|
|
||||||
for (auto string : list) {
|
|
||||||
this->settings.beginGroup(string);
|
|
||||||
this->settings.setValue("highlightSound",
|
|
||||||
highlightProperties.get().value(string).first);
|
|
||||||
this->settings.setValue("highlightTask",
|
|
||||||
highlightProperties.get().value(string).second);
|
|
||||||
this->settings.endGroup();
|
|
||||||
}
|
|
||||||
this->settings.endGroup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingManager::load()
|
|
||||||
{
|
|
||||||
for (auto &item : this->settingsItems) {
|
|
||||||
if (item.get().getName() != "highlightProperties") {
|
|
||||||
item.get().setVariant(this->settings.value(item.get().getName()));
|
|
||||||
} else {
|
|
||||||
this->settings.beginGroup("Highlights");
|
|
||||||
QStringList list = this->settings.childGroups();
|
|
||||||
for (auto string : list) {
|
|
||||||
this->settings.beginGroup(string);
|
|
||||||
highlightProperties.insertMap(string,
|
|
||||||
this->settings.value("highlightSound").toBool(),
|
|
||||||
this->settings.value("highlightTask").toBool());
|
|
||||||
this->settings.endGroup();
|
|
||||||
}
|
|
||||||
this->settings.endGroup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Word::Flags SettingManager::getWordTypeMask()
|
Word::Flags SettingManager::getWordTypeMask()
|
||||||
{
|
{
|
||||||
return this->wordTypeMask;
|
return this->wordTypeMask;
|
||||||
@@ -98,6 +53,12 @@ QSettings &SettingManager::getQSettings()
|
|||||||
return this->settings;
|
return this->settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingManager::load()
|
||||||
|
{
|
||||||
|
// Just to make sure the singleton is initialized
|
||||||
|
debug::Log(".");
|
||||||
|
}
|
||||||
|
|
||||||
void SettingManager::updateWordTypeMask()
|
void SettingManager::updateWordTypeMask()
|
||||||
{
|
{
|
||||||
uint32_t newMaskUint = Word::Text;
|
uint32_t newMaskUint = Word::Text;
|
||||||
@@ -184,5 +145,5 @@ void SettingManager::recallSnapshot()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace singletons
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "messages/highlightphrase.hpp"
|
||||||
#include "messages/word.hpp"
|
#include "messages/word.hpp"
|
||||||
#include "setting.hpp"
|
#include "setting.hpp"
|
||||||
#include "singletons/helper/chatterinosetting.hpp"
|
#include "singletons/helper/chatterinosetting.hpp"
|
||||||
@@ -21,13 +22,12 @@ class SettingManager : public QObject
|
|||||||
using FloatSetting = ChatterinoSetting<float>;
|
using FloatSetting = ChatterinoSetting<float>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void load();
|
|
||||||
void save();
|
|
||||||
|
|
||||||
messages::Word::Flags getWordTypeMask();
|
messages::Word::Flags getWordTypeMask();
|
||||||
bool isIgnoredEmote(const QString &emote);
|
bool isIgnoredEmote(const QString &emote);
|
||||||
QSettings &getQSettings();
|
QSettings &getQSettings();
|
||||||
|
|
||||||
|
void load();
|
||||||
|
|
||||||
/// Appearance
|
/// Appearance
|
||||||
BoolSetting showTimestamps = {"/appearance/messages/showTimestamps", true};
|
BoolSetting showTimestamps = {"/appearance/messages/showTimestamps", true};
|
||||||
BoolSetting showTimestampSeconds = {"/appearance/messages/showTimestampSeconds", true};
|
BoolSetting showTimestampSeconds = {"/appearance/messages/showTimestampSeconds", true};
|
||||||
@@ -73,9 +73,10 @@ public:
|
|||||||
pajlada::Settings::Setting<std::string> preferredQuality;
|
pajlada::Settings::Setting<std::string> preferredQuality;
|
||||||
|
|
||||||
Setting<float> emoteScale;
|
Setting<float> emoteScale;
|
||||||
|
ChatterinoSetting<std::vector<messages::HighlightPhrase>> highlightProperties = {
|
||||||
|
"/highlighting/highlights"};
|
||||||
|
|
||||||
Setting<QString> pathHighlightSound;
|
Setting<QString> pathHighlightSound;
|
||||||
Setting<QMap<QString, QPair<bool, bool>>> highlightProperties;
|
|
||||||
Setting<QString> highlightUserBlacklist;
|
Setting<QString> highlightUserBlacklist;
|
||||||
|
|
||||||
BoolSetting highlightAlwaysPlaySound = {"/highlighting/alwaysPlaySound", false};
|
BoolSetting highlightAlwaysPlaySound = {"/highlighting/alwaysPlaySound", false};
|
||||||
@@ -107,5 +108,5 @@ private:
|
|||||||
pajlada::Settings::SettingListener wordMaskListener;
|
pajlada::Settings::SettingListener wordMaskListener;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace singletons
|
||||||
} // namespace chatterino
|
} // namespace chatterino
|
||||||
}
|
|
||||||
|
|||||||
@@ -407,35 +407,18 @@ void TwitchMessageBuilder::parseHighlights()
|
|||||||
currentPlayerUrl = highlightSoundUrl;
|
currentPlayerUrl = highlightSoundUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Highlight {
|
|
||||||
Highlight(const QString &_target, bool _sound, bool _alert)
|
|
||||||
: target(_target)
|
|
||||||
, sound(_sound)
|
|
||||||
, alert(_alert)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QString target;
|
|
||||||
bool sound;
|
|
||||||
bool alert;
|
|
||||||
};
|
|
||||||
|
|
||||||
QStringList blackList =
|
QStringList blackList =
|
||||||
settings.highlightUserBlacklist.get().split("\n", QString::SkipEmptyParts);
|
settings.highlightUserBlacklist.get().split("\n", QString::SkipEmptyParts);
|
||||||
|
|
||||||
// TODO: This vector should only be rebuilt upon highlights being changed
|
// TODO: This vector should only be rebuilt upon highlights being changed
|
||||||
std::vector<Highlight> activeHighlights;
|
auto activeHighlights = settings.highlightProperties.getValue();
|
||||||
|
|
||||||
if (settings.enableHighlightsSelf && currentUsername.size() > 0) {
|
if (settings.enableHighlightsSelf && currentUsername.size() > 0) {
|
||||||
activeHighlights.emplace_back(currentUsername, settings.enableHighlightSound,
|
messages::HighlightPhrase selfHighlight;
|
||||||
settings.enableHighlightTaskbar);
|
selfHighlight.key = currentUsername;
|
||||||
}
|
selfHighlight.sound = settings.enableHighlightSound;
|
||||||
|
selfHighlight.alert = settings.enableHighlightTaskbar;
|
||||||
const auto &highlightProperties = settings.highlightProperties.get();
|
activeHighlights.emplace_back(std::move(selfHighlight));
|
||||||
|
|
||||||
for (auto it = highlightProperties.begin(); it != highlightProperties.end(); ++it) {
|
|
||||||
auto properties = it.value();
|
|
||||||
activeHighlights.emplace_back(it.key(), properties.first, properties.second);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool doHighlight = false;
|
bool doHighlight = false;
|
||||||
@@ -445,10 +428,10 @@ void TwitchMessageBuilder::parseHighlights()
|
|||||||
bool hasFocus = (QApplication::focusWidget() != nullptr);
|
bool hasFocus = (QApplication::focusWidget() != nullptr);
|
||||||
|
|
||||||
if (!blackList.contains(this->ircMessage->nick(), Qt::CaseInsensitive)) {
|
if (!blackList.contains(this->ircMessage->nick(), Qt::CaseInsensitive)) {
|
||||||
for (const Highlight &highlight : activeHighlights) {
|
for (const messages::HighlightPhrase &highlight : activeHighlights) {
|
||||||
if (this->originalMessage.contains(highlight.target, Qt::CaseInsensitive)) {
|
if (this->originalMessage.contains(highlight.key, Qt::CaseInsensitive)) {
|
||||||
debug::Log("Highlight because {} contains {}", this->originalMessage,
|
debug::Log("Highlight because {} contains {}", this->originalMessage,
|
||||||
highlight.target);
|
highlight.key);
|
||||||
doHighlight = true;
|
doHighlight = true;
|
||||||
|
|
||||||
if (highlight.sound) {
|
if (highlight.sound) {
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
#include <pajlada/settings/serialize.hpp>
|
||||||
|
|
||||||
|
namespace pajlada {
|
||||||
|
namespace Settings {
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Serialize<QString> {
|
||||||
|
static rapidjson::Value get(const QString &value, rapidjson::Document::AllocatorType &a)
|
||||||
|
{
|
||||||
|
rapidjson::Value ret(qPrintable(value), a);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Deserialize<QString> {
|
||||||
|
static QString get(const rapidjson::Value &value)
|
||||||
|
{
|
||||||
|
if (!value.IsString()) {
|
||||||
|
throw std::runtime_error("Deserialized rapidjson::Value is not a string");
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.GetString();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Settings
|
||||||
|
} // namespace pajlada
|
||||||
+111
-50
@@ -418,8 +418,10 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
|
|||||||
auto highlights = new QListWidget();
|
auto highlights = new QListWidget();
|
||||||
auto highlightUserBlacklist = new QTextEdit();
|
auto highlightUserBlacklist = new QTextEdit();
|
||||||
globalHighlights = highlights;
|
globalHighlights = highlights;
|
||||||
QStringList items = settings.highlightProperties.get().keys();
|
const auto highlightProperties = settings.highlightProperties.getValue();
|
||||||
highlights->addItems(items);
|
for (const auto &highlightProperty : highlightProperties) {
|
||||||
|
highlights->addItem(highlightProperty.key);
|
||||||
|
}
|
||||||
highlightUserBlacklist->setText(settings.highlightUserBlacklist.getnonConst());
|
highlightUserBlacklist->setText(settings.highlightUserBlacklist.getnonConst());
|
||||||
auto highlightTab = new QTabWidget();
|
auto highlightTab = new QTabWidget();
|
||||||
auto customSound = new QHBoxLayout();
|
auto customSound = new QHBoxLayout();
|
||||||
@@ -450,6 +452,7 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
|
|||||||
auto editBtn = new QPushButton("Edit");
|
auto editBtn = new QPushButton("Edit");
|
||||||
auto delBtn = new QPushButton("Remove");
|
auto delBtn = new QPushButton("Remove");
|
||||||
|
|
||||||
|
// Open "Add new highlight" dialog
|
||||||
QObject::connect(addBtn, &QPushButton::clicked, this, [highlights, this, &settings] {
|
QObject::connect(addBtn, &QPushButton::clicked, this, [highlights, this, &settings] {
|
||||||
auto show = new QWidget();
|
auto show = new QWidget();
|
||||||
auto box = new QBoxLayout(QBoxLayout::TopToBottom);
|
auto box = new QBoxLayout(QBoxLayout::TopToBottom);
|
||||||
@@ -460,11 +463,23 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
|
|||||||
auto sound = new QCheckBox("Play sound");
|
auto sound = new QCheckBox("Play sound");
|
||||||
auto task = new QCheckBox("Flash taskbar");
|
auto task = new QCheckBox("Flash taskbar");
|
||||||
|
|
||||||
|
// Save highlight
|
||||||
QObject::connect(add, &QPushButton::clicked, this, [=, &settings] {
|
QObject::connect(add, &QPushButton::clicked, this, [=, &settings] {
|
||||||
if (edit->text().length()) {
|
if (edit->text().length()) {
|
||||||
highlights->addItem(edit->text());
|
QString highlightKey = edit->text();
|
||||||
settings.highlightProperties.insertMap(edit->text(), sound->isChecked(),
|
highlights->addItem(highlightKey);
|
||||||
task->isChecked());
|
|
||||||
|
auto properties = settings.highlightProperties.getValue();
|
||||||
|
|
||||||
|
messages::HighlightPhrase newHighlightProperty;
|
||||||
|
newHighlightProperty.key = highlightKey;
|
||||||
|
newHighlightProperty.sound = sound->isChecked();
|
||||||
|
newHighlightProperty.alert = task->isChecked();
|
||||||
|
|
||||||
|
properties.push_back(newHighlightProperty);
|
||||||
|
|
||||||
|
settings.highlightProperties = properties;
|
||||||
|
|
||||||
show->close();
|
show->close();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -475,50 +490,103 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
|
|||||||
show->setLayout(box);
|
show->setLayout(box);
|
||||||
show->show();
|
show->show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Open "Edit selected highlight" dialog
|
||||||
QObject::connect(editBtn, &QPushButton::clicked, this, [highlights, this, &settings] {
|
QObject::connect(editBtn, &QPushButton::clicked, this, [highlights, this, &settings] {
|
||||||
if (!highlights->selectedItems().isEmpty()) {
|
if (highlights->selectedItems().isEmpty()) {
|
||||||
auto show = new QWidget();
|
// No item selected
|
||||||
auto box = new QBoxLayout(QBoxLayout::TopToBottom);
|
return;
|
||||||
|
|
||||||
auto edit = new QLineEdit();
|
|
||||||
edit->setText(highlights->selectedItems().first()->text());
|
|
||||||
auto add = new QPushButton("Apply");
|
|
||||||
|
|
||||||
auto sound = new QCheckBox("Play sound");
|
|
||||||
auto task = new QCheckBox("Flash taskbar");
|
|
||||||
|
|
||||||
QObject::connect(add, &QPushButton::clicked, this, [=, &settings] {
|
|
||||||
if (edit->text().length()) {
|
|
||||||
settings.highlightProperties.getnonConst().remove(
|
|
||||||
highlights->selectedItems().first()->text());
|
|
||||||
delete highlights->selectedItems().first();
|
|
||||||
highlights->addItem(edit->text());
|
|
||||||
settings.highlightProperties.insertMap(edit->text(), sound->isChecked(),
|
|
||||||
task->isChecked());
|
|
||||||
show->close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
box->addWidget(edit);
|
|
||||||
box->addWidget(add);
|
|
||||||
box->addWidget(sound);
|
|
||||||
sound->setChecked(settings.highlightProperties.get()
|
|
||||||
.value(highlights->selectedItems().first()->text())
|
|
||||||
.first);
|
|
||||||
box->addWidget(task);
|
|
||||||
task->setChecked(settings.highlightProperties.get()
|
|
||||||
.value(highlights->selectedItems().first()->text())
|
|
||||||
.second);
|
|
||||||
show->setLayout(box);
|
|
||||||
show->show();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QListWidgetItem *selectedHighlight = highlights->selectedItems().first();
|
||||||
|
QString highlightKey = selectedHighlight->text();
|
||||||
|
auto properties = settings.highlightProperties.getValue();
|
||||||
|
auto highlightIt = std::find_if(properties.begin(), properties.end(),
|
||||||
|
[highlightKey](const auto &highlight) {
|
||||||
|
return highlight.key == highlightKey; //
|
||||||
|
});
|
||||||
|
|
||||||
|
if (highlightIt == properties.end()) {
|
||||||
|
debug::Log("Unable to find highlight key {} in highlight properties. "
|
||||||
|
"This is weird",
|
||||||
|
highlightKey);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
messages::HighlightPhrase &selectedSetting = *highlightIt;
|
||||||
|
auto show = new QWidget();
|
||||||
|
auto box = new QBoxLayout(QBoxLayout::TopToBottom);
|
||||||
|
|
||||||
|
auto edit = new QLineEdit(highlightKey);
|
||||||
|
auto apply = new QPushButton("Apply");
|
||||||
|
|
||||||
|
auto sound = new QCheckBox("Play sound");
|
||||||
|
sound->setChecked(selectedSetting.sound);
|
||||||
|
auto task = new QCheckBox("Flash taskbar");
|
||||||
|
task->setChecked(selectedSetting.alert);
|
||||||
|
|
||||||
|
// Apply edited changes
|
||||||
|
QObject::connect(apply, &QPushButton::clicked, this, [=, &settings] {
|
||||||
|
QString newHighlightKey = edit->text();
|
||||||
|
|
||||||
|
if (newHighlightKey.length() == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto properties = settings.highlightProperties.getValue();
|
||||||
|
auto highlightIt =
|
||||||
|
std::find_if(properties.begin(), properties.end(), [=](const auto &highlight) {
|
||||||
|
return highlight.key == highlightKey; //
|
||||||
|
});
|
||||||
|
|
||||||
|
if (highlightIt == properties.end()) {
|
||||||
|
debug::Log("Unable to find highlight key {} in highlight properties. "
|
||||||
|
"This is weird",
|
||||||
|
highlightKey);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto &highlightProperty = *highlightIt;
|
||||||
|
highlightProperty.key = newHighlightKey;
|
||||||
|
highlightProperty.sound = sound->isCheckable();
|
||||||
|
highlightProperty.alert = task->isCheckable();
|
||||||
|
|
||||||
|
settings.highlightProperties = properties;
|
||||||
|
|
||||||
|
selectedHighlight->setText(newHighlightKey);
|
||||||
|
|
||||||
|
show->close();
|
||||||
|
});
|
||||||
|
|
||||||
|
box->addWidget(edit);
|
||||||
|
box->addWidget(apply);
|
||||||
|
box->addWidget(sound);
|
||||||
|
box->addWidget(task);
|
||||||
|
show->setLayout(box);
|
||||||
|
show->show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Delete selected highlight
|
||||||
QObject::connect(delBtn, &QPushButton::clicked, this, [highlights, &settings] {
|
QObject::connect(delBtn, &QPushButton::clicked, this, [highlights, &settings] {
|
||||||
if (!highlights->selectedItems().isEmpty()) {
|
if (highlights->selectedItems().isEmpty()) {
|
||||||
settings.highlightProperties.getnonConst().remove(
|
// No highlight selected
|
||||||
highlights->selectedItems().first()->text());
|
return;
|
||||||
delete highlights->selectedItems().first();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QListWidgetItem *selectedHighlight = highlights->selectedItems().first();
|
||||||
|
QString highlightKey = selectedHighlight->text();
|
||||||
|
|
||||||
|
auto properties = settings.highlightProperties.getValue();
|
||||||
|
properties.erase(std::remove_if(properties.begin(), properties.end(),
|
||||||
|
[highlightKey](const auto &highlight) {
|
||||||
|
return highlight.key == highlightKey; //
|
||||||
|
}),
|
||||||
|
properties.end());
|
||||||
|
|
||||||
|
settings.highlightProperties = properties;
|
||||||
|
|
||||||
|
delete selectedHighlight;
|
||||||
});
|
});
|
||||||
|
|
||||||
layout->addLayout(soundForm);
|
layout->addLayout(soundForm);
|
||||||
layout->addWidget(
|
layout->addWidget(
|
||||||
createCheckbox("Always play highlight sound (Even if Chatterino is focused)",
|
createCheckbox("Always play highlight sound (Even if Chatterino is focused)",
|
||||||
@@ -765,13 +833,6 @@ void SettingsDialog::cancelButtonClicked()
|
|||||||
|
|
||||||
settings.recallSnapshot();
|
settings.recallSnapshot();
|
||||||
|
|
||||||
QStringList list = settings.highlightProperties.get().keys();
|
|
||||||
list.removeDuplicates();
|
|
||||||
while (globalHighlights->count() > 0) {
|
|
||||||
delete globalHighlights->takeItem(0);
|
|
||||||
}
|
|
||||||
globalHighlights->addItems(list);
|
|
||||||
|
|
||||||
this->close();
|
this->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user