Utilize templates for Settings class
Use boost2::signals for the valueChanged signal (a LOT less messy to
deal with than qt signals)
Remove unused settings classes (BoolSetting, FloatSetting, IntSetting,
StringSetting)
What's left: Implement the remaining signals
This commit is contained in:
@@ -1,58 +0,0 @@
|
||||
#ifndef BOOLSETTING_H
|
||||
#define BOOLSETTING_H
|
||||
|
||||
#include "settings/setting.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace chatterino {
|
||||
namespace settings {
|
||||
class BoolSetting : public Setting
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
BoolSetting(const QString &name, bool defaultValue)
|
||||
: Setting(name)
|
||||
, value(defaultValue)
|
||||
, defaultValue(defaultValue)
|
||||
{
|
||||
}
|
||||
|
||||
bool
|
||||
get() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
|
||||
void
|
||||
set(bool value)
|
||||
{
|
||||
if (this->value != value) {
|
||||
this->value = value;
|
||||
|
||||
emit valueChanged(value);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
save(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
load(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
signals:
|
||||
void valueChanged(bool value);
|
||||
|
||||
private:
|
||||
bool value;
|
||||
bool defaultValue;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BOOLSETTING_H
|
||||
@@ -1,58 +0,0 @@
|
||||
#ifndef REALSETTING_H
|
||||
#define REALSETTING_H
|
||||
|
||||
#include "settings/setting.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace chatterino {
|
||||
namespace settings {
|
||||
|
||||
class FloatSetting : public Setting
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FloatSetting(const QString &name, qreal defaultValue,
|
||||
qreal minValue = std::numeric_limits<qreal>::min(),
|
||||
qreal maxValue = std::numeric_limits<qreal>::max())
|
||||
: Setting(name)
|
||||
, value(defaultValue)
|
||||
, defaultValue(defaultValue)
|
||||
, minValue(minValue)
|
||||
, maxValue(maxValue)
|
||||
{
|
||||
}
|
||||
|
||||
qreal
|
||||
get() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
|
||||
qreal
|
||||
set(qreal value)
|
||||
{
|
||||
return (this->value = std::max(std::min(value, maxValue), minValue));
|
||||
}
|
||||
|
||||
void
|
||||
save(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
load(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
qreal value;
|
||||
qreal defaultValue;
|
||||
qreal minValue;
|
||||
qreal maxValue;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif // REALSETTING_H
|
||||
@@ -1,51 +0,0 @@
|
||||
#ifndef INTSETTING_H
|
||||
#define INTSETTING_H
|
||||
|
||||
#include "settings/setting.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace chatterino {
|
||||
namespace settings {
|
||||
class IntSetting : public Setting
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
IntSetting(const QString &name, int defaultValue)
|
||||
: Setting(name)
|
||||
, value(defaultValue)
|
||||
, defaultValue(defaultValue)
|
||||
{
|
||||
}
|
||||
|
||||
int
|
||||
get() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
|
||||
int
|
||||
set(int value)
|
||||
{
|
||||
return (this->value = value);
|
||||
}
|
||||
|
||||
void
|
||||
save(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
load(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
int value;
|
||||
int defaultValue;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif // INTSETTING_H
|
||||
+50
-9
@@ -3,22 +3,61 @@
|
||||
|
||||
#include <QSettings>
|
||||
#include <QString>
|
||||
#include <boost/signals2.hpp>
|
||||
|
||||
namespace chatterino {
|
||||
namespace settings {
|
||||
|
||||
class Setting : public QObject
|
||||
class BaseSetting
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit Setting(const QString &name)
|
||||
: name(name)
|
||||
virtual void save(QSettings &settings) = 0;
|
||||
virtual void load(const QSettings &settings) = 0;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class Setting : public BaseSetting
|
||||
{
|
||||
public:
|
||||
Setting(const QString &_name, const T &defaultValue)
|
||||
: name(_name)
|
||||
, value(defaultValue)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void save(const QSettings &settings) = 0;
|
||||
virtual void load(const QSettings &settings) = 0;
|
||||
const T &
|
||||
get() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
|
||||
void
|
||||
set(const T &newValue)
|
||||
{
|
||||
if (this->value != newValue) {
|
||||
this->value = newValue;
|
||||
|
||||
this->valueChanged(newValue);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void
|
||||
save(QSettings &settings) final
|
||||
{
|
||||
settings.setValue(this->getName(), QVariant::fromValue(this->value));
|
||||
}
|
||||
|
||||
virtual void
|
||||
load(const QSettings &settings) final
|
||||
{
|
||||
QVariant newValue = settings.value(this->getName(), QVariant());
|
||||
if (newValue.isValid()) {
|
||||
assert(newValue.canConvert<T>());
|
||||
this->value = newValue.value<T>();
|
||||
}
|
||||
}
|
||||
|
||||
boost::signals2::signal<void(const T &newValue)> valueChanged;
|
||||
|
||||
protected:
|
||||
const QString &
|
||||
@@ -29,8 +68,10 @@ protected:
|
||||
|
||||
private:
|
||||
QString name;
|
||||
T value;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace settings
|
||||
} // namespace chatterino
|
||||
|
||||
#endif // SETTING_H
|
||||
|
||||
+48
-49
@@ -6,13 +6,12 @@
|
||||
namespace chatterino {
|
||||
namespace settings {
|
||||
|
||||
Settings Settings::_;
|
||||
Settings Settings::instance;
|
||||
|
||||
Settings::Settings()
|
||||
: settings(
|
||||
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation),
|
||||
QSettings::IniFormat)
|
||||
, settingsItems()
|
||||
, portable(false)
|
||||
, wordTypeMask(messages::Word::Default)
|
||||
, theme("", "dark")
|
||||
@@ -43,62 +42,61 @@ Settings::Settings()
|
||||
, windowTopMost("", true)
|
||||
, hideTabX("", false)
|
||||
{
|
||||
settingsItems.reserve(25);
|
||||
settingsItems.push_back(&theme);
|
||||
settingsItems.push_back(&user);
|
||||
settingsItems.push_back(&emoteScale);
|
||||
settingsItems.push_back(&scaleEmotesByLineHeight);
|
||||
settingsItems.push_back(&showTimestamps);
|
||||
settingsItems.push_back(&showTimestampSeconds);
|
||||
settingsItems.push_back(&showLastMessageIndicator);
|
||||
settingsItems.push_back(&allowDouplicateMessages);
|
||||
settingsItems.push_back(&linksDoubleClickOnly);
|
||||
settingsItems.push_back(&hideEmptyInput);
|
||||
settingsItems.push_back(&showMessageLength);
|
||||
settingsItems.push_back(&seperateMessages);
|
||||
settingsItems.push_back(&mentionUsersWithAt);
|
||||
settingsItems.push_back(&allowCommandsAtEnd);
|
||||
settingsItems.push_back(&enableHighlights);
|
||||
settingsItems.push_back(&enableHighlightSound);
|
||||
settingsItems.push_back(&enableHighlightTaskbar);
|
||||
settingsItems.push_back(&customHighlightSound);
|
||||
settingsItems.push_back(&enableTwitchEmotes);
|
||||
settingsItems.push_back(&enableBttvEmotes);
|
||||
settingsItems.push_back(&enableFfzEmotes);
|
||||
settingsItems.push_back(&enableEmojis);
|
||||
settingsItems.push_back(&enableGifAnimations);
|
||||
settingsItems.push_back(&enableGifs);
|
||||
settingsItems.push_back(&inlineWhispers);
|
||||
settingsItems.push_back(&windowTopMost);
|
||||
settingsItems.push_back(&hideTabX);
|
||||
settingsItems.push_back(theme);
|
||||
settingsItems.push_back(user);
|
||||
settingsItems.push_back(emoteScale);
|
||||
settingsItems.push_back(scaleEmotesByLineHeight);
|
||||
settingsItems.push_back(showTimestamps);
|
||||
settingsItems.push_back(showTimestampSeconds);
|
||||
settingsItems.push_back(showLastMessageIndicator);
|
||||
settingsItems.push_back(allowDouplicateMessages);
|
||||
settingsItems.push_back(linksDoubleClickOnly);
|
||||
settingsItems.push_back(hideEmptyInput);
|
||||
settingsItems.push_back(showMessageLength);
|
||||
settingsItems.push_back(seperateMessages);
|
||||
settingsItems.push_back(mentionUsersWithAt);
|
||||
settingsItems.push_back(allowCommandsAtEnd);
|
||||
settingsItems.push_back(enableHighlights);
|
||||
settingsItems.push_back(enableHighlightSound);
|
||||
settingsItems.push_back(enableHighlightTaskbar);
|
||||
settingsItems.push_back(customHighlightSound);
|
||||
settingsItems.push_back(enableTwitchEmotes);
|
||||
settingsItems.push_back(enableBttvEmotes);
|
||||
settingsItems.push_back(enableFfzEmotes);
|
||||
settingsItems.push_back(enableEmojis);
|
||||
settingsItems.push_back(enableGifAnimations);
|
||||
settingsItems.push_back(enableGifs);
|
||||
settingsItems.push_back(inlineWhispers);
|
||||
settingsItems.push_back(windowTopMost);
|
||||
settingsItems.push_back(hideTabX);
|
||||
|
||||
QObject::connect(&showTimestamps, &BoolSetting::valueChanged, this,
|
||||
&Settings::updateWordTypeMask);
|
||||
QObject::connect(&showTimestampSeconds, &BoolSetting::valueChanged, this,
|
||||
&Settings::updateWordTypeMask);
|
||||
QObject::connect(&enableBttvEmotes, &BoolSetting::valueChanged, this,
|
||||
&Settings::updateWordTypeMask);
|
||||
QObject::connect(&enableEmojis, &BoolSetting::valueChanged, this,
|
||||
&Settings::updateWordTypeMask);
|
||||
QObject::connect(&enableFfzEmotes, &BoolSetting::valueChanged, this,
|
||||
&Settings::updateWordTypeMask);
|
||||
QObject::connect(&enableTwitchEmotes, &BoolSetting::valueChanged, this,
|
||||
&Settings::updateWordTypeMask);
|
||||
this->showTimestamps.valueChanged.connect(
|
||||
[this](const auto &) { this->updateWordTypeMask(); });
|
||||
this->showTimestampSeconds.valueChanged.connect(
|
||||
[this](const auto &) { this->updateWordTypeMask(); });
|
||||
this->enableBttvEmotes.valueChanged.connect(
|
||||
[this](const auto &) { this->updateWordTypeMask(); });
|
||||
this->enableEmojis.valueChanged.connect(
|
||||
[this](const auto &) { this->updateWordTypeMask(); });
|
||||
this->enableFfzEmotes.valueChanged.connect(
|
||||
[this](const auto &) { this->updateWordTypeMask(); });
|
||||
this->enableTwitchEmotes.valueChanged.connect(
|
||||
[this](const auto &) { this->updateWordTypeMask(); });
|
||||
}
|
||||
|
||||
void
|
||||
Settings::save()
|
||||
{
|
||||
for (Setting *item : settingsItems) {
|
||||
item->save(settings);
|
||||
for (auto &item : settingsItems) {
|
||||
item.get().save(settings);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Settings::load()
|
||||
{
|
||||
for (Setting *item : settingsItems) {
|
||||
item->load(settings);
|
||||
for (auto &item : settingsItems) {
|
||||
item.get().load(settings);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,7 +107,7 @@ Settings::isIgnoredEmote(const QString &)
|
||||
}
|
||||
|
||||
void
|
||||
Settings::updateWordTypeMask(bool)
|
||||
Settings::updateWordTypeMask()
|
||||
|
||||
{
|
||||
using namespace messages;
|
||||
@@ -143,5 +141,6 @@ Settings::updateWordTypeMask(bool)
|
||||
emit wordTypeMaskChanged();
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace settings
|
||||
} // namespace chatterino
|
||||
|
||||
+34
-174
@@ -2,10 +2,7 @@
|
||||
#define APPSETTINGS_H
|
||||
|
||||
#include "messages/word.h"
|
||||
#include "settings/boolsetting.h"
|
||||
#include "settings/floatsetting.h"
|
||||
#include "settings/setting.h"
|
||||
#include "settings/stringsetting.h"
|
||||
|
||||
#include <QSettings>
|
||||
|
||||
@@ -20,7 +17,7 @@ public:
|
||||
static Settings &
|
||||
getInstance()
|
||||
{
|
||||
return _;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void load();
|
||||
@@ -52,12 +49,12 @@ signals:
|
||||
private:
|
||||
Settings();
|
||||
|
||||
static Settings _;
|
||||
static Settings instance;
|
||||
|
||||
void updateWordTypeMask(bool);
|
||||
void updateWordTypeMask();
|
||||
|
||||
QSettings settings;
|
||||
std::vector<Setting *> settingsItems;
|
||||
std::vector<std::reference_wrapper<BaseSetting>> settingsItems;
|
||||
|
||||
// template <class T>
|
||||
// T
|
||||
@@ -71,174 +68,37 @@ private:
|
||||
|
||||
messages::Word::Type wordTypeMask;
|
||||
|
||||
private:
|
||||
StringSetting theme;
|
||||
StringSetting user;
|
||||
FloatSetting emoteScale;
|
||||
BoolSetting scaleEmotesByLineHeight;
|
||||
BoolSetting showTimestamps;
|
||||
BoolSetting showTimestampSeconds;
|
||||
BoolSetting showLastMessageIndicator;
|
||||
BoolSetting allowDouplicateMessages;
|
||||
BoolSetting linksDoubleClickOnly;
|
||||
BoolSetting hideEmptyInput;
|
||||
BoolSetting showMessageLength;
|
||||
BoolSetting seperateMessages;
|
||||
BoolSetting mentionUsersWithAt;
|
||||
BoolSetting allowCommandsAtEnd;
|
||||
BoolSetting enableHighlights;
|
||||
BoolSetting enableHighlightSound;
|
||||
BoolSetting enableHighlightTaskbar;
|
||||
BoolSetting customHighlightSound;
|
||||
BoolSetting enableTwitchEmotes;
|
||||
BoolSetting enableBttvEmotes;
|
||||
BoolSetting enableFfzEmotes;
|
||||
BoolSetting enableEmojis;
|
||||
BoolSetting enableGifAnimations;
|
||||
BoolSetting enableGifs;
|
||||
BoolSetting inlineWhispers;
|
||||
BoolSetting windowTopMost;
|
||||
BoolSetting hideTabX;
|
||||
|
||||
// settings
|
||||
public:
|
||||
StringSetting &
|
||||
getTheme()
|
||||
{
|
||||
return this->theme;
|
||||
}
|
||||
StringSetting &
|
||||
getUser()
|
||||
{
|
||||
return this->user;
|
||||
}
|
||||
FloatSetting &
|
||||
getEmoteScale()
|
||||
{
|
||||
return this->emoteScale;
|
||||
}
|
||||
BoolSetting &
|
||||
getScaleEmotesByLineHeight()
|
||||
{
|
||||
return this->scaleEmotesByLineHeight;
|
||||
}
|
||||
BoolSetting &
|
||||
getShowTimestamps()
|
||||
{
|
||||
return this->showTimestamps;
|
||||
}
|
||||
BoolSetting &
|
||||
getShowTimestampSeconds()
|
||||
{
|
||||
return this->showTimestampSeconds;
|
||||
}
|
||||
BoolSetting &
|
||||
getShowLastMessageIndicator()
|
||||
{
|
||||
return this->showLastMessageIndicator;
|
||||
}
|
||||
BoolSetting &
|
||||
getAllowDouplicateMessages()
|
||||
{
|
||||
return this->allowDouplicateMessages;
|
||||
}
|
||||
BoolSetting &
|
||||
getLinksDoubleClickOnly()
|
||||
{
|
||||
return this->linksDoubleClickOnly;
|
||||
}
|
||||
BoolSetting &
|
||||
getHideEmptyInput()
|
||||
{
|
||||
return this->hideEmptyInput;
|
||||
}
|
||||
BoolSetting &
|
||||
getShowMessageLength()
|
||||
{
|
||||
return this->showMessageLength;
|
||||
}
|
||||
BoolSetting &
|
||||
getSeperateMessages()
|
||||
{
|
||||
return this->seperateMessages;
|
||||
}
|
||||
BoolSetting &
|
||||
getMentionUsersWithAt()
|
||||
{
|
||||
return this->mentionUsersWithAt;
|
||||
}
|
||||
BoolSetting &
|
||||
getAllowCommandsAtEnd()
|
||||
{
|
||||
return this->allowCommandsAtEnd;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableHighlights()
|
||||
{
|
||||
return this->enableHighlights;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableHighlightSound()
|
||||
{
|
||||
return this->enableHighlightSound;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableHighlightTaskbar()
|
||||
{
|
||||
return this->enableHighlightTaskbar;
|
||||
}
|
||||
BoolSetting &
|
||||
getCustomHighlightSound()
|
||||
{
|
||||
return this->customHighlightSound;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableTwitchEmotes()
|
||||
{
|
||||
return this->enableTwitchEmotes;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableBttvEmotes()
|
||||
{
|
||||
return this->enableBttvEmotes;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableFfzEmotes()
|
||||
{
|
||||
return this->enableFfzEmotes;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableEmojis()
|
||||
{
|
||||
return this->enableEmojis;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableGifAnimations()
|
||||
{
|
||||
return this->enableGifAnimations;
|
||||
}
|
||||
BoolSetting &
|
||||
getEnableGifs()
|
||||
{
|
||||
return this->enableGifs;
|
||||
}
|
||||
BoolSetting &
|
||||
getInlineWhispers()
|
||||
{
|
||||
return this->inlineWhispers;
|
||||
}
|
||||
BoolSetting &
|
||||
getWindowTopMost()
|
||||
{
|
||||
return this->windowTopMost;
|
||||
}
|
||||
BoolSetting &
|
||||
getHideTabX()
|
||||
{
|
||||
return this->hideTabX;
|
||||
}
|
||||
Setting<QString> theme;
|
||||
Setting<QString> user;
|
||||
Setting<float> emoteScale;
|
||||
Setting<bool> scaleEmotesByLineHeight;
|
||||
Setting<bool> showTimestamps;
|
||||
Setting<bool> showTimestampSeconds;
|
||||
Setting<bool> showLastMessageIndicator;
|
||||
Setting<bool> allowDouplicateMessages;
|
||||
Setting<bool> linksDoubleClickOnly;
|
||||
Setting<bool> hideEmptyInput;
|
||||
Setting<bool> showMessageLength;
|
||||
Setting<bool> seperateMessages;
|
||||
Setting<bool> mentionUsersWithAt;
|
||||
Setting<bool> allowCommandsAtEnd;
|
||||
Setting<bool> enableHighlights;
|
||||
Setting<bool> enableHighlightSound;
|
||||
Setting<bool> enableHighlightTaskbar;
|
||||
Setting<bool> customHighlightSound;
|
||||
Setting<bool> enableTwitchEmotes;
|
||||
Setting<bool> enableBttvEmotes;
|
||||
Setting<bool> enableFfzEmotes;
|
||||
Setting<bool> enableEmojis;
|
||||
Setting<bool> enableGifAnimations;
|
||||
Setting<bool> enableGifs;
|
||||
Setting<bool> inlineWhispers;
|
||||
Setting<bool> windowTopMost;
|
||||
Setting<bool> hideTabX;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace settings
|
||||
} // namespace chatterino
|
||||
|
||||
#endif // APPSETTINGS_H
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
#ifndef STRINGSETTING_H
|
||||
#define STRINGSETTING_H
|
||||
|
||||
#include "settings/setting.h"
|
||||
|
||||
#include <QString>
|
||||
|
||||
namespace chatterino {
|
||||
namespace settings {
|
||||
|
||||
class StringSetting : public Setting
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
StringSetting(const QString &name, const QString &defaultValue)
|
||||
: Setting(name)
|
||||
, value(defaultValue)
|
||||
, defaultValue(defaultValue)
|
||||
{
|
||||
}
|
||||
|
||||
const QString &
|
||||
get() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
|
||||
const QString &
|
||||
set(const QString &value)
|
||||
{
|
||||
this->value = value;
|
||||
|
||||
QString tmp = value;
|
||||
|
||||
emit valueChanged(tmp);
|
||||
|
||||
return this->value;
|
||||
}
|
||||
|
||||
void
|
||||
save(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
load(const QSettings &settings) override
|
||||
{
|
||||
}
|
||||
|
||||
signals:
|
||||
void valueChanged(const QString &value);
|
||||
|
||||
private:
|
||||
QString value;
|
||||
QString defaultValue;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif // STRINGSETTING_H
|
||||
Reference in New Issue
Block a user