Convert remaining settings to the new settings system

This commit is contained in:
Rasmus Karlsson 2018-01-04 02:19:35 +01:00
parent df733282be
commit 9044700ec6
12 changed files with 27 additions and 181 deletions

View file

@ -126,7 +126,6 @@ HEADERS += \
src/messages/message.hpp \
src/messages/word.hpp \
src/messages/wordpart.hpp \
src/setting.hpp \
src/twitch/emotevalue.hpp \
src/widgets/notebook.hpp \
src/widgets/helper/notebookbutton.hpp \
@ -138,7 +137,6 @@ HEADERS += \
src/widgets/helper/signallabel.hpp \
src/widgets/textinputdialog.hpp \
src/widgets/helper/resizingtextedit.hpp \
src/settingssnapshot.hpp \
src/messages/limitedqueue.hpp \
src/messages/limitedqueuesnapshot.hpp \
src/messages/messageref.hpp \

View file

@ -67,7 +67,7 @@ QSize Word::getSize(float scale) const
const int mediumTextLineHeight =
singletons::FontManager::getInstance().getFontMetrics(this->font, scale).height();
const qreal emoteScale =
singletons::SettingManager::getInstance().emoteScale.get() * scale;
singletons::SettingManager::getInstance().emoteScale.getValue() * scale;
const bool scaleEmotesByLineHeight =
singletons::SettingManager::getInstance().scaleEmotesByLineHeight;

View file

@ -1,9 +1,9 @@
#pragma once
#include "singletons/fontmanager.hpp"
#include "messages/lazyloadedimage.hpp"
#include "messages/link.hpp"
#include "messages/messagecolor.hpp"
#include "singletons/fontmanager.hpp"
//#include "wordflags.hpp"
#include <stdint.h>
@ -96,8 +96,8 @@ public:
explicit Word(LazyLoadedImage *_image, Flags getFlags, const QString &copytext,
const QString &tooltip, const Link &getLink = Link());
explicit Word(const QString &_text, Flags getFlags, const MessageColor &textColor,
singletons::FontManager::Type font, const QString &copytext, const QString &tooltip,
const Link &getLink = Link());
singletons::FontManager::Type font, const QString &copytext,
const QString &tooltip, const Link &getLink = Link());
bool isImage() const;
bool isText() const;

View file

@ -1,85 +0,0 @@
#pragma once
#include <QSettings>
#include <QString>
#include <boost/signals2.hpp>
namespace chatterino {
class BaseSetting
{
public:
BaseSetting(const QString &_name)
: name(_name)
{
}
virtual QVariant getVariant() = 0;
virtual void setVariant(QVariant value) = 0;
const QString &getName() const
{
return this->name;
}
private:
QString name;
};
template <typename T>
class Setting : public BaseSetting
{
public:
Setting(std::vector<std::reference_wrapper<BaseSetting>> &settingItems, const QString &_name,
const T &defaultValue)
: BaseSetting(_name)
, value(defaultValue)
{
settingItems.push_back(*this);
}
const T &get() const
{
return this->value;
}
T &getnonConst()
{
return this->value;
}
void set(const T &newValue)
{
if (this->value != newValue) {
this->value = newValue;
valueChanged(newValue);
}
}
virtual QVariant getVariant() final
{
return QVariant::fromValue(this->value);
}
virtual void setVariant(QVariant newValue) final
{
if (newValue.isValid()) {
assert(newValue.canConvert<T>());
set(newValue.value<T>());
}
}
void insertMap(QString id, bool sound, bool task)
{
QPair<bool, bool> pair(sound, task);
this->value.insert(id, pair);
}
boost::signals2::signal<void(const T &newValue)> valueChanged;
private:
T value;
};
} // namespace chatterino

View file

@ -1,38 +0,0 @@
#pragma once
#include "setting.hpp"
namespace chatterino {
struct SettingsSnapshot {
public:
SettingsSnapshot()
{
}
void addItem(std::reference_wrapper<BaseSetting> setting, const QVariant &value)
{
this->items.push_back(
std::pair<std::reference_wrapper<BaseSetting>, QVariant>(setting.get(), value));
}
void addMapItem(QString string, QPair<bool, bool> pair)
{
QMap<QString, QPair<bool, bool>> map;
this->mapItems.insert(string, pair);
}
void apply()
{
for (auto &item : this->items) {
item.first.get().setVariant(item.second);
}
}
QMap<QString, QPair<bool, bool>> mapItems;
private:
std::vector<std::pair<std::reference_wrapper<BaseSetting>, QVariant>> items;
};
} // namespace chatterino

View file

@ -18,13 +18,7 @@ void _registerSetting(std::weak_ptr<pajlada::Settings::ISettingData> setting)
}
SettingManager::SettingManager()
: streamlinkPath("/behaviour/streamlink/path", "")
, preferredQuality("/behaviour/streamlink/quality", "Choose")
, emoteScale(this->settingsItems, "emoteScale", 1.0)
, pathHighlightSound(this->settingsItems, "pathHighlightSound", "qrc:/sounds/ping2.wav")
, highlightUserBlacklist(this->settingsItems, "highlightUserBlacklist", "")
, snapshot(nullptr)
, settings(Path::getAppdataPath() + "settings.ini", QSettings::IniFormat)
: snapshot(nullptr)
{
this->wordMaskListener.addSetting(this->showTimestamps);
this->wordMaskListener.addSetting(this->showTimestampSeconds);
@ -48,11 +42,6 @@ bool SettingManager::isIgnoredEmote(const QString &)
return false;
}
QSettings &SettingManager::getQSettings()
{
return this->settings;
}
void SettingManager::load()
{
// Just to make sure the singleton is initialized

View file

@ -2,10 +2,8 @@
#include "messages/highlightphrase.hpp"
#include "messages/word.hpp"
#include "setting.hpp"
#include "singletons/helper/chatterinosetting.hpp"
#include <QSettings>
#include <pajlada/settings/setting.hpp>
#include <pajlada/settings/settinglistener.hpp>
@ -20,11 +18,12 @@ class SettingManager : public QObject
using BoolSetting = ChatterinoSetting<bool>;
using FloatSetting = ChatterinoSetting<float>;
using StringSetting = ChatterinoSetting<std::string>;
using QStringSetting = ChatterinoSetting<QString>;
public:
messages::Word::Flags getWordTypeMask();
bool isIgnoredEmote(const QString &emote);
QSettings &getQSettings();
void load();
@ -47,6 +46,8 @@ public:
BoolSetting allowDuplicateMessages = {"/behaviour/allowDuplicateMessages", true};
BoolSetting mentionUsersWithAt = {"/behaviour/mentionUsersWithAt", false};
FloatSetting mouseScrollMultiplier = {"/behaviour/mouseScrollMultiplier", 1.0};
StringSetting streamlinkPath = {"/behaviour/streamlink/path", ""};
StringSetting preferredQuality = {"/behaviour/streamlink/quality", "Choose"};
/// Commands
BoolSetting allowCommandsAtEnd = {"/commands/allowCommandsAtEnd", false};
@ -58,6 +59,7 @@ public:
BoolSetting enableFfzEmotes = {"/emotes/enableFFZEmotes", true};
BoolSetting enableEmojis = {"/emotes/enableEmojis", true};
BoolSetting enableGifAnimations = {"/emotes/enableGifAnimations", true};
FloatSetting emoteScale = {"/emotes/scale", 1.f};
/// Links
BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false};
@ -69,15 +71,12 @@ public:
BoolSetting enableHighlightTaskbar = {"/highlighting/enableTaskbarFlashing", true};
BoolSetting customHighlightSound = {"/highlighting/useCustomSound", false};
pajlada::Settings::Setting<std::string> streamlinkPath;
pajlada::Settings::Setting<std::string> preferredQuality;
Setting<float> emoteScale;
ChatterinoSetting<std::vector<messages::HighlightPhrase>> highlightProperties = {
"/highlighting/highlights"};
Setting<QString> pathHighlightSound;
Setting<QString> highlightUserBlacklist;
QStringSetting pathHighlightSound = {"/highlighting/highlightSoundPath",
"qrc:/sounds/ping2.wav"};
QStringSetting highlightUserBlacklist = {"/highlighting/blacklistedUsers", ""};
BoolSetting highlightAlwaysPlaySound = {"/highlighting/alwaysPlaySound", false};
@ -101,8 +100,6 @@ private:
SettingManager();
QSettings settings;
std::vector<std::reference_wrapper<BaseSetting>> settingsItems;
messages::Word::Flags wordTypeMask = messages::Word::Default;
pajlada::Settings::SettingListener wordMaskListener;

View file

@ -396,7 +396,7 @@ void TwitchMessageBuilder::parseHighlights()
// update the media player url if necessary
QUrl highlightSoundUrl;
if (settings.customHighlightSound) {
highlightSoundUrl = QUrl(settings.pathHighlightSound.get());
highlightSoundUrl = QUrl(settings.pathHighlightSound.getValue());
} else {
highlightSoundUrl = QUrl("qrc:/sounds/ping2.wav");
}
@ -408,7 +408,7 @@ void TwitchMessageBuilder::parseHighlights()
}
QStringList blackList =
settings.highlightUserBlacklist.get().split("\n", QString::SkipEmptyParts);
settings.highlightUserBlacklist.getValue().split("\n", QString::SkipEmptyParts);
// TODO: This vector should only be rebuilt upon highlights being changed
auto activeHighlights = settings.highlightProperties.getValue();

View file

@ -95,18 +95,18 @@ AccountPopupWidget::AccountPopupWidget(std::shared_ptr<Channel> _channel)
});
QObject::connect(this->ui->disableHighlights, &QPushButton::clicked, this, [=, &settings]() {
QString str = settings.highlightUserBlacklist.getnonConst();
QString str = settings.highlightUserBlacklist;
str.append(this->ui->lblUsername->text() + "\n");
settings.highlightUserBlacklist.set(str);
settings.highlightUserBlacklist = str;
this->ui->disableHighlights->hide();
this->ui->enableHighlights->show();
});
QObject::connect(this->ui->enableHighlights, &QPushButton::clicked, this, [=, &settings]() {
QString str = settings.highlightUserBlacklist.getnonConst();
QString str = settings.highlightUserBlacklist;
QStringList list = str.split("\n");
list.removeAll(this->ui->lblUsername->text());
settings.highlightUserBlacklist.set(list.join("\n"));
settings.highlightUserBlacklist = list.join("\n");
this->ui->enableHighlights->hide();
this->ui->disableHighlights->show();
});
@ -267,8 +267,7 @@ void AccountPopupWidget::showEvent(QShowEvent *)
this->updateButtons(this->ui->ownerLayout, false);
}
QString blacklisted =
singletons::SettingManager::getInstance().highlightUserBlacklist.getnonConst();
QString blacklisted = singletons::SettingManager::getInstance().highlightUserBlacklist;
QStringList list = blacklisted.split("\n", QString::SkipEmptyParts);
if (list.contains(this->ui->lblUsername->text(), Qt::CaseInsensitive)) {
this->ui->disableHighlights->hide();

View file

@ -1,8 +1,8 @@
#pragma once
#include "basewidget.hpp"
#include "util/concurrentmap.hpp"
#include "twitch/twitchchannel.hpp"
#include "util/concurrentmap.hpp"
#include <QPushButton>
#include <QWidget>

View file

@ -422,7 +422,7 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
for (const auto &highlightProperty : highlightProperties) {
highlights->addItem(highlightProperty.key);
}
highlightUserBlacklist->setText(settings.highlightUserBlacklist.getnonConst());
highlightUserBlacklist->setText(settings.highlightUserBlacklist);
auto highlightTab = new QTabWidget();
auto customSound = new QHBoxLayout();
auto soundForm = new QFormLayout();
@ -439,7 +439,7 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
QObject::connect(selectBtn, &QPushButton::clicked, this, [&settings, this] {
auto fileName = QFileDialog::getOpenFileName(this, tr("Open Sound"), "",
tr("Audio Files (*.mp3 *.wav)"));
settings.pathHighlightSound.set(fileName);
settings.pathHighlightSound = fileName;
});
customSound->addWidget(selectBtn);
}
@ -617,11 +617,12 @@ QVBoxLayout *SettingsDialog::createHighlightingTab()
QStringList list =
highlightUserBlacklist->toPlainText().split("\n", QString::SkipEmptyParts);
list.removeDuplicates();
settings.highlightUserBlacklist.set(list.join("\n") + "\n");
settings.highlightUserBlacklist = list.join("\n") + "\n";
});
settings.highlightUserBlacklist.valueChanged.connect(
[=](const QString &str) { highlightUserBlacklist->setPlainText(str); });
settings.highlightUserBlacklist.connect([=](const QString &str, auto) {
highlightUserBlacklist->setPlainText(str); //
});
return layout;
}
@ -739,20 +740,6 @@ QVBoxLayout *SettingsDialog::createTabLayout()
return layout;
}
QCheckBox *SettingsDialog::createCheckbox(const QString &title, Setting<bool> &setting)
{
auto checkbox = new QCheckBox(title);
// Set checkbox initial state
checkbox->setChecked(setting.get());
QObject::connect(checkbox, &QCheckBox::toggled, this, [&setting](bool state) {
setting.set(state); //
});
return checkbox;
}
QCheckBox *SettingsDialog::createCheckbox(const QString &title,
pajlada::Settings::Setting<bool> &setting)
{

View file

@ -88,7 +88,6 @@ private:
/// Widget creation helpers
QVBoxLayout *createTabLayout();
QCheckBox *createCheckbox(const QString &title, Setting<bool> &setting);
QCheckBox *createCheckbox(const QString &title, pajlada::Settings::Setting<bool> &setting);
QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting<int> &setting,
QStringList items,