2017-06-07 10:09:24 +02:00
|
|
|
#pragma once
|
2017-01-05 20:49:13 +01:00
|
|
|
|
2017-06-11 09:31:45 +02:00
|
|
|
#include "messages/word.hpp"
|
|
|
|
#include "setting.hpp"
|
2017-01-20 06:10:28 +01:00
|
|
|
|
|
|
|
#include <QSettings>
|
2017-06-11 20:53:43 +02:00
|
|
|
#include <pajlada/settings/setting.hpp>
|
2017-12-19 02:31:06 +01:00
|
|
|
#include <pajlada/settings/settinglistener.hpp>
|
2017-01-05 20:49:13 +01:00
|
|
|
|
2017-01-18 21:30:23 +01:00
|
|
|
namespace chatterino {
|
|
|
|
|
2017-12-28 19:03:52 +01:00
|
|
|
static void _registerSetting(std::weak_ptr<pajlada::Settings::ISettingData> setting);
|
|
|
|
|
|
|
|
template <typename Type>
|
|
|
|
class ChatterinoSetting : public pajlada::Settings::Setting<Type>
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ChatterinoSetting(const std::string &_path, const Type &_defaultValue)
|
|
|
|
: pajlada::Settings::Setting<Type>(_path, _defaultValue)
|
|
|
|
{
|
|
|
|
_registerSetting(this->data);
|
|
|
|
}
|
|
|
|
|
|
|
|
void saveRecall();
|
|
|
|
|
|
|
|
ChatterinoSetting &operator=(const Type &newValue)
|
|
|
|
{
|
|
|
|
assert(this->data != nullptr);
|
|
|
|
|
|
|
|
this->setValue(newValue);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T2>
|
|
|
|
ChatterinoSetting &operator=(const T2 &newValue)
|
|
|
|
{
|
|
|
|
assert(this->data != nullptr);
|
|
|
|
|
|
|
|
this->setValue(newValue);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
ChatterinoSetting &operator=(Type &&newValue) noexcept
|
|
|
|
{
|
|
|
|
assert(this->data != nullptr);
|
|
|
|
|
|
|
|
this->setValue(std::move(newValue));
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool operator==(const Type &rhs) const
|
|
|
|
{
|
|
|
|
assert(this->data != nullptr);
|
|
|
|
|
|
|
|
return this->getValue() == rhs;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool operator!=(const Type &rhs) const
|
|
|
|
{
|
|
|
|
assert(this->data != nullptr);
|
|
|
|
|
|
|
|
return this->getValue() != rhs;
|
|
|
|
}
|
|
|
|
|
|
|
|
operator const Type() const
|
|
|
|
{
|
|
|
|
assert(this->data != nullptr);
|
|
|
|
|
|
|
|
return this->getValue();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2017-04-12 17:46:44 +02:00
|
|
|
class SettingsManager : public QObject
|
2017-01-05 20:49:13 +01:00
|
|
|
{
|
2017-01-22 12:46:35 +01:00
|
|
|
Q_OBJECT
|
|
|
|
|
2017-12-28 19:03:52 +01:00
|
|
|
using BoolSetting = ChatterinoSetting<bool>;
|
|
|
|
using FloatSetting = ChatterinoSetting<float>;
|
2017-12-17 01:19:56 +01:00
|
|
|
|
2017-01-20 06:10:28 +01:00
|
|
|
public:
|
2017-05-27 16:16:39 +02:00
|
|
|
void load();
|
|
|
|
void save();
|
|
|
|
|
2017-12-23 21:18:13 +01:00
|
|
|
messages::Word::Flags getWordTypeMask();
|
2017-05-27 16:16:39 +02:00
|
|
|
bool isIgnoredEmote(const QString &emote);
|
|
|
|
QSettings &getQSettings();
|
|
|
|
|
2017-12-17 01:19:56 +01:00
|
|
|
/// Appearance
|
|
|
|
BoolSetting showTimestamps = {"/appearance/messages/showTimestamps", true};
|
|
|
|
BoolSetting showTimestampSeconds = {"/appearance/messages/showTimestampSeconds", true};
|
|
|
|
BoolSetting showBadges = {"/appearance/messages/showBadges", true};
|
|
|
|
BoolSetting showLastMessageIndicator = {"/appearance/messages/showLastMessageIndicator", false};
|
|
|
|
BoolSetting hideEmptyInput = {"/appearance/hideEmptyInputBox", false};
|
|
|
|
BoolSetting showMessageLength = {"/appearance/messages/showMessageLength", false};
|
|
|
|
BoolSetting seperateMessages = {"/appearance/messages/separateMessages", false};
|
|
|
|
BoolSetting windowTopMost = {"/appearance/windowAlwaysOnTop", false};
|
|
|
|
BoolSetting hideTabX = {"/appearance/hideTabX", false};
|
|
|
|
BoolSetting hidePreferencesButton = {"/appearance/hidePreferencesButton", false};
|
|
|
|
BoolSetting hideUserButton = {"/appearance/hideUserButton", false};
|
2017-12-18 18:55:09 +01:00
|
|
|
BoolSetting enableSmoothScrolling = {"/appearance/smoothScrolling", true};
|
2017-12-17 01:19:56 +01:00
|
|
|
// BoolSetting useCustomWindowFrame = {"/appearance/useCustomWindowFrame", false};
|
|
|
|
|
|
|
|
/// Behaviour
|
2017-12-17 13:48:02 +01:00
|
|
|
BoolSetting allowDuplicateMessages = {"/behaviour/allowDuplicateMessages", true};
|
2017-12-17 01:19:56 +01:00
|
|
|
BoolSetting mentionUsersWithAt = {"/behaviour/mentionUsersWithAt", false};
|
2017-12-19 02:47:55 +01:00
|
|
|
FloatSetting mouseScrollMultiplier = {"/behaviour/mouseScrollMultiplier", 1.0};
|
2017-12-17 01:19:56 +01:00
|
|
|
|
|
|
|
/// Commands
|
|
|
|
BoolSetting allowCommandsAtEnd = {"/commands/allowCommandsAtEnd", false};
|
|
|
|
|
|
|
|
/// Emotes
|
|
|
|
BoolSetting scaleEmotesByLineHeight = {"/emotes/scaleEmotesByLineHeight", false};
|
|
|
|
BoolSetting enableTwitchEmotes = {"/emotes/enableTwitchEmotes", true};
|
|
|
|
BoolSetting enableBttvEmotes = {"/emotes/enableBTTVEmotes", true};
|
|
|
|
BoolSetting enableFfzEmotes = {"/emotes/enableFFZEmotes", true};
|
|
|
|
BoolSetting enableEmojis = {"/emotes/enableEmojis", true};
|
|
|
|
BoolSetting enableGifAnimations = {"/emotes/enableGifAnimations", true};
|
|
|
|
|
|
|
|
/// Links
|
|
|
|
BoolSetting linksDoubleClickOnly = {"/links/doubleClickToOpen", false};
|
|
|
|
|
|
|
|
/// Highlighting
|
|
|
|
BoolSetting enableHighlights = {"/highlighting/enabled", true};
|
|
|
|
BoolSetting enableHighlightsSelf = {"/highlighting/nameIsHighlightKeyword", true};
|
|
|
|
BoolSetting enableHighlightSound = {"/highlighting/enableSound", true};
|
|
|
|
BoolSetting enableHighlightTaskbar = {"/highlighting/enableTaskbarFlashing", true};
|
|
|
|
BoolSetting customHighlightSound = {"/highlighting/useCustomSound", false};
|
2017-06-11 20:53:43 +02:00
|
|
|
|
2017-08-12 14:44:27 +02:00
|
|
|
pajlada::Settings::Setting<std::string> streamlinkPath;
|
2017-09-11 23:35:59 +02:00
|
|
|
pajlada::Settings::Setting<std::string> preferredQuality;
|
2017-08-12 14:44:27 +02:00
|
|
|
|
2017-01-22 23:00:35 +01:00
|
|
|
Setting<float> emoteScale;
|
2017-12-17 01:19:56 +01:00
|
|
|
|
2017-07-31 00:37:22 +02:00
|
|
|
Setting<QString> pathHighlightSound;
|
2017-07-31 00:57:42 +02:00
|
|
|
Setting<QMap<QString, QPair<bool, bool>>> highlightProperties;
|
2017-09-23 19:23:10 +02:00
|
|
|
Setting<QString> highlightUserBlacklist;
|
2017-12-17 01:19:56 +01:00
|
|
|
|
|
|
|
BoolSetting highlightAlwaysPlaySound = {"/highlighting/alwaysPlaySound", false};
|
|
|
|
|
|
|
|
BoolSetting inlineWhispers = {"/whispers/enableInlineWhispers", true};
|
2017-04-12 17:46:44 +02:00
|
|
|
|
|
|
|
static SettingsManager &getInstance()
|
|
|
|
{
|
2017-04-19 15:25:05 +02:00
|
|
|
static SettingsManager instance;
|
2017-04-12 17:46:44 +02:00
|
|
|
return instance;
|
|
|
|
}
|
2017-09-21 12:15:01 +02:00
|
|
|
void updateWordTypeMask();
|
|
|
|
|
2017-12-28 19:03:52 +01:00
|
|
|
void saveSnapshot();
|
|
|
|
void recallSnapshot();
|
|
|
|
|
2017-09-21 12:15:01 +02:00
|
|
|
signals:
|
|
|
|
void wordTypeMaskChanged();
|
|
|
|
|
|
|
|
private:
|
2017-12-28 19:03:52 +01:00
|
|
|
std::unique_ptr<rapidjson::Document> snapshot;
|
|
|
|
|
2017-09-21 12:15:01 +02:00
|
|
|
SettingsManager();
|
|
|
|
|
|
|
|
QSettings settings;
|
|
|
|
std::vector<std::reference_wrapper<BaseSetting>> settingsItems;
|
2017-12-23 21:18:13 +01:00
|
|
|
messages::Word::Flags wordTypeMask = messages::Word::Default;
|
2017-12-19 02:31:06 +01:00
|
|
|
|
|
|
|
pajlada::Settings::SettingListener wordMaskListener;
|
2017-01-05 20:49:13 +01:00
|
|
|
};
|
2017-01-22 23:00:35 +01:00
|
|
|
|
2017-04-14 17:52:22 +02:00
|
|
|
} // namespace chatterino
|