Files
chatterino2/settings/settings.cpp
Rasmus Karlsson 5429e62e73 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
2017-01-22 23:02:48 +01:00

147 lines
4.5 KiB
C++

#include "settings/settings.h"
#include <QDir>
#include <QStandardPaths>
namespace chatterino {
namespace settings {
Settings Settings::instance;
Settings::Settings()
: settings(
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation),
QSettings::IniFormat)
, portable(false)
, wordTypeMask(messages::Word::Default)
, theme("", "dark")
, user("", "")
, emoteScale("", 1.0)
, scaleEmotesByLineHeight("", false)
, showTimestamps("", true)
, showTimestampSeconds("", false)
, showLastMessageIndicator("", false)
, allowDouplicateMessages("", true)
, linksDoubleClickOnly("", false)
, hideEmptyInput("", false)
, showMessageLength("", false)
, seperateMessages("", false)
, mentionUsersWithAt("", false)
, allowCommandsAtEnd("", false)
, enableHighlights("", true)
, enableHighlightSound("", true)
, enableHighlightTaskbar("", true)
, customHighlightSound("", false)
, enableTwitchEmotes("", true)
, enableBttvEmotes("", true)
, enableFfzEmotes("", true)
, enableEmojis("", true)
, enableGifAnimations("", true)
, enableGifs("", true)
, inlineWhispers("", true)
, windowTopMost("", true)
, hideTabX("", false)
{
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);
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 (auto &item : settingsItems) {
item.get().save(settings);
}
}
void
Settings::load()
{
for (auto &item : settingsItems) {
item.get().load(settings);
}
}
bool
Settings::isIgnoredEmote(const QString &)
{
return false;
}
void
Settings::updateWordTypeMask()
{
using namespace messages;
uint32_t mask = Word::Text;
if (showTimestamps.get()) {
mask |= showTimestampSeconds.get() ? Word::TimestampWithSeconds
: Word::TimestampNoSeconds;
}
mask |= enableTwitchEmotes.get() ? Word::TwitchEmoteImage
: Word::TwitchEmoteText;
mask |= enableFfzEmotes.get() ? Word::FfzEmoteImage : Word::FfzEmoteText;
mask |= enableBttvEmotes.get() ? Word::BttvEmoteImage : Word::BttvEmoteText;
mask |= (enableBttvEmotes.get() && enableGifs.get()) ? Word::BttvEmoteImage
: Word::BttvEmoteText;
mask |= enableEmojis.get() ? Word::EmojiImage : Word::EmojiText;
mask |= Word::BitsAmount;
mask |= enableGifs.get() ? Word::BitsAnimated : Word::BitsStatic;
mask |= Word::Badges;
mask |= Word::Username;
Word::Type _mask = (Word::Type)mask;
// if (mask != _mask) {
wordTypeMask = _mask;
emit wordTypeMaskChanged();
// }
}
} // namespace settings
} // namespace chatterino