From 20e978ad85354931128cd64fa06c315afb8aeafe Mon Sep 17 00:00:00 2001 From: fourtf Date: Mon, 26 Aug 2019 13:18:23 +0200 Subject: [PATCH] changed up settings --- lib/appbase/widgets/BaseWindow.cpp | 7 +- lib/appbase/widgets/BaseWindow.hpp | 2 + src/widgets/settingspages/GeneralPage.cpp | 160 ++++++++++++---------- src/widgets/settingspages/GeneralPage.hpp | 4 +- 4 files changed, 95 insertions(+), 78 deletions(-) diff --git a/lib/appbase/widgets/BaseWindow.cpp b/lib/appbase/widgets/BaseWindow.cpp index 607637fd..51d5d918 100644 --- a/lib/appbase/widgets/BaseWindow.cpp +++ b/lib/appbase/widgets/BaseWindow.cpp @@ -232,11 +232,16 @@ QWidget *BaseWindow::getLayoutContainer() } bool BaseWindow::hasCustomWindowFrame() +{ + return BaseWindow::supportsCustomWindowFrame() && this->enableCustomFrame_; +} + +bool BaseWindow::supportsCustomWindowFrame() { #ifdef USEWINSDK static bool isWin8 = IsWindows8OrGreater(); - return isWin8 && this->enableCustomFrame_; + return isWin8; #else return false; #endif diff --git a/lib/appbase/widgets/BaseWindow.hpp b/lib/appbase/widgets/BaseWindow.hpp index be08d4ed..577e722c 100644 --- a/lib/appbase/widgets/BaseWindow.hpp +++ b/lib/appbase/widgets/BaseWindow.hpp @@ -55,6 +55,8 @@ public: pajlada::Signals::NoArgSignal closing; + static bool supportsCustomWindowFrame(); + protected: virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result) override; diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp index e45d8188..f694bce4 100644 --- a/src/widgets/settingspages/GeneralPage.cpp +++ b/src/widgets/settingspages/GeneralPage.cpp @@ -11,6 +11,7 @@ #include "singletons/WindowManager.hpp" #include "util/FuzzyConvert.hpp" #include "util/Helpers.hpp" +#include "widgets/BaseWindow.hpp" #include "widgets/helper/Line.hpp" #define CHROME_EXTENSION_LINK \ @@ -20,6 +21,16 @@ "https://addons.mozilla.org/en-US/firefox/addon/chatterino-native-host/" namespace chatterino { +namespace { + QPushButton *makeOpenSettingDirButton() + { + auto button = new QPushButton("Open settings directory"); + QObject::connect(button, &QPushButton::clicked, [] { + QDesktopServices::openUrl(getPaths()->rootAppDataDirectory); + }); + return button; + } +} // namespace TitleLabel *SettingsLayout::addTitle(const QString &title) { @@ -43,18 +54,21 @@ TitleLabel2 *SettingsLayout::addTitle2(const QString &title) } QCheckBox *SettingsLayout::addCheckbox(const QString &text, - BoolSetting &setting) + BoolSetting &setting, bool inverse) { auto check = new QCheckBox(text); // update when setting changes setting.connect( - [check](const bool &value, auto) { check->setChecked(value); }, + [inverse, check](const bool &value, auto) { + check->setChecked(inverse ^ value); + }, this->managedConnections_); // update setting on toggle - QObject::connect(check, &QCheckBox::toggled, this, - [&setting](bool state) { setting = state; }); + QObject::connect( + check, &QCheckBox::toggled, this, + [&setting, inverse](bool state) { setting = inverse ^ state; }); this->addWidget(check); return check; @@ -145,7 +159,7 @@ void GeneralPage::initLayout(SettingsLayout &layout) { auto &s = *getSettings(); - layout.addTitle("Appearance"); + layout.addTitle("Interface"); layout.addDropdown("Theme", {"White", "Light", "Dark", "Black"}, getApp()->themes->themeName); layout.addDropdown( @@ -169,12 +183,14 @@ void GeneralPage::initLayout(SettingsLayout &layout) return QString::number(val) + "x"; }, [](auto args) { return fuzzyToFloat(args.value, 1.f); }); + layout.addCheckbox("Show tab close button", s.showTabCloseButton); layout.addCheckbox("Always on top", s.windowTopMost); #ifdef USEWINSDK layout.addCheckbox("Start with Windows", s.autorun); #endif - layout.addTitle("Interface"); + layout.addTitle("Chat"); + layout.addDropdown( "Mouse scroll speed", {"0.5x", "0.75x", "Default", "1.5x", "2x"}, s.mouseScrollMultiplier, @@ -186,21 +202,42 @@ void GeneralPage::initLayout(SettingsLayout &layout) }, [](auto args) { return fuzzyToFloat(args.value, 1.f); }); layout.addCheckbox("Smooth scrolling", s.enableSmoothScrolling); - layout.addCheckbox("Smooth scrolling on new messages.", + layout.addCheckbox("Smooth scrolling on new messages", s.enableSmoothScrollingNewMessages); - layout.addCheckbox("Pause chat while hovering", s.pauseChatOnHover); - layout.addCheckbox("Show tab close button", s.showTabCloseButton); - layout.addCheckbox("Show input when empty", s.showEmptyInput); - layout.addCheckbox("Show input message length", s.showMessageLength); - layout.addCheckbox("Hide preferences button (ctrl+p to show)", - s.hidePreferencesButton); - layout.addCheckbox("Hide user button", s.hideUserButton); + layout.addCheckbox("Pause on hover", s.pauseChatOnHover); + layout.addCheckbox("Show input when it's empty", s.showEmptyInput); + layout.addCheckbox("Show message length while typing", s.showMessageLength); + if (!BaseWindow::supportsCustomWindowFrame()) + { + layout.addCheckbox("Show preferences button (ctrl+p to show)", + s.hidePreferencesButton, true); + layout.addCheckbox("Show user button", s.hideUserButton, true); + } layout.addTitle("Messages"); - layout.addCheckbox("Timestamps", s.showTimestamps); - layout.addDropdown("Timestamp format", - {"h:mm", "hh:mm", "h:mm a", "hh:mm a"}, - s.timestampFormat, true); + layout.addCheckbox("Seperate with lines", s.separateMessages); + layout.addCheckbox("Alternate background color", s.alternateMessages); + // layout.addCheckbox("Mark last message you read"); + // layout.addDropdown("Last read message style", {"Default"}); + layout.addCheckbox("Show deleted messages", s.hideModerated, true); + layout.addCheckbox("Show moderation messages", s.hideModerationActions, + true); + layout.addCheckbox("Random username color for users who never set a color.", + s.colorizeNicknames); + layout.addDropdown( + "Timestamps", {"Disable", "h:mm", "hh:mm", "h:mm a", "hh:mm a"}, + s.timestampFormat, + [](auto val) { + return getSettings()->showTimestamps.getValue() + ? val + : QString("Disable"); + }, + [](auto args) { + getSettings()->showTimestamps.setValue(args.index != 0); + + return args.index == 0 ? getSettings()->timestampFormat.getValue() + : args.value; + }); layout.addDropdown( "Collapse messages", {"Never", "After 2 lines", "After 3 lines", "After 4 lines", @@ -211,22 +248,18 @@ void GeneralPage::initLayout(SettingsLayout &layout) : QString("Never"); }, [](auto args) { return fuzzyToInt(args.value, 0); }); - layout.addCheckbox("Seperate with lines", s.separateMessages); - layout.addCheckbox("Alternate background color", s.alternateMessages); - // layout.addCheckbox("Mark last message you read"); - // layout.addDropdown("Last read message style", {"Default"}); - layout.addCheckbox("Hide moderated messages", s.hideModerated); - layout.addCheckbox("Hide moderation messages", s.hideModerationActions); - layout.addCheckbox("Colorize gray nicknames", s.colorizeNicknames); - layout.addDropdown("Timeout stacking style", - {"Stack", "Stack unless timed out", "Don't stack"}, - s.timeoutStackStyle, - [](int index) { return index; }, - [](auto args) { return args.index; }, false); + layout.addDropdown( + "Stack timeouts", {"Stack", "Stack unless timed out", "Don't stack"}, + s.timeoutStackStyle, [](int index) { return index; }, + [](auto args) { return args.index; }, false); layout.addTitle("Emotes"); + layout.addCheckbox("Enable", s.enableEmoteImages); + layout.addCheckbox("Animate", s.animateEmotes); + layout.addCheckbox("Animate only when Chatterino is focused", + s.animationsWhenFocused); layout.addDropdown( - "Emote size", {"0.5x", "0.75x", "Default", "1.25x", "1.5x", "2x"}, + "Size", {"0.5x", "0.75x", "Default", "1.25x", "1.5x", "2x"}, s.emoteScale, [](auto val) { if (val == 1) @@ -235,38 +268,37 @@ void GeneralPage::initLayout(SettingsLayout &layout) return QString::number(val) + "x"; }, [](auto args) { return fuzzyToFloat(args.value, 1.f); }); - layout.addCheckbox("Gif animations", s.animateEmotes); - layout.addCheckbox("Animate only when focused", s.animationsWhenFocused); - layout.addCheckbox("Emote images", s.enableEmoteImages); layout.addDropdown("Emoji set", {"EmojiOne 2", "EmojiOne 3", "Twitter", "Facebook", "Apple", "Google", "Messenger"}, s.emojiSet); - layout.addTitle("Badges"); - layout.addCheckbox("Show authority badges (staff, admin)", + layout.addTitle("Visible badges:"); + layout.addCheckbox("Authority (staff, admin)", getSettings()->showBadgesGlobalAuthority); - layout.addCheckbox("Show channel badges (broadcaster, moderator)", + layout.addCheckbox("Channel (broadcaster, moderator)", getSettings()->showBadgesChannelAuthority); - layout.addCheckbox("Show subscriber badges ", - getSettings()->showBadgesSubscription); - layout.addCheckbox("Show vanity badges (prime, bits, subgifter)", + layout.addCheckbox("Subscriber ", getSettings()->showBadgesSubscription); + layout.addCheckbox("Vanity (prime, bits, subgifter)", getSettings()->showBadgesVanity); - layout.addCheckbox("Show chatterino badges", - getSettings()->showBadgesChatterino); + layout.addCheckbox("Chatterino", getSettings()->showBadgesChatterino); - layout.addTitle("Header"); - layout.addCheckbox("Show stream uptime", s.headerUptime); - layout.addCheckbox("Show stream viewer count", s.headerViewerCount); - layout.addCheckbox("Show stream category", s.headerGame); - layout.addCheckbox("Show stream title", s.headerStreamTitle); + layout.addTitle("Chat title:"); + layout.addWidget(new QLabel("In live channels show:")); + layout.addCheckbox("Uptime", s.headerUptime); + layout.addCheckbox("Viewer count", s.headerViewerCount); + layout.addCheckbox("Category", s.headerGame); + layout.addCheckbox("Title", s.headerStreamTitle); - layout.addTitle("Miscellaneous"); + layout.addTitle("Miscellaneous:"); + + //layout.addWidget(makeOpenSettingDirButton()); layout.addCheckbox("Mention users with a comma (User,)", s.mentionUsersWithComma); layout.addCheckbox("Show joined users (< 1000 chatters)", s.showJoins); layout.addCheckbox("Show parted users (< 1000 chatters)", s.showParts); - layout.addCheckbox("Lowercase domains", s.lowercaseDomains); + layout.addCheckbox("Lowercase domains (anti-phisching)", + s.lowercaseDomains); layout.addCheckbox("Bold @usernames", s.boldUsernames); layout.addDropdown( "Username font weight", {"50", "Default", "75", "100"}, s.boldScale, @@ -293,24 +325,15 @@ void GeneralPage::initLayout(SettingsLayout &layout) s.prefixOnlyEmoteCompletion); layout.addSpacing(16); - layout.addSeperator(); - layout.addTitle2("Miscellaneous (Twitch)"); layout.addCheckbox("Show twitch whispers inline", s.inlineWhispers); layout.addCheckbox("Highlight received inline whispers", s.highlightInlineWhispers); layout.addCheckbox("Load message history on connect", s.loadTwitchMessageHistoryOnConnect); - /* - layout.addTitle2("Cache"); - layout.addDescription("Chatterino saves files on disk to speed up loading " - "times and reduce network usage."); - this->cachePath = layout.addDescription("%cachePath%"); - layout.addDropdown("Cache directory", {"Automatic"}); - */ - - layout.addTitle2("Browser Integration"); +#ifdef Q_OS_WIN + layout.addTitle("Browser Integration"); layout.addDescription("The browser extension replaces the default " "Twitch.tv chat with chatterino."); @@ -318,22 +341,7 @@ void GeneralPage::initLayout(SettingsLayout &layout) createNamedLink(CHROME_EXTENSION_LINK, "Download for Google Chrome")); layout.addDescription( createNamedLink(FIREFOX_EXTENSION_LINK, "Download for Firefox")); - - /* - layout.addTitle2("Streamlink"); - layout.addDescription("Streamlinks allows you to watch streams with " - "desktop media players like VLC."); - layout.addDescription( - createNamedLink("https://streamlink.github.io/", "Website") + " " + - createNamedLink("https://github.com/streamlink/streamlink/" - "releases/latest", - "Download")); - - layout.addDropdown("Executable path", {"Automatic"}); - layout.addDropdown("Preferred quality", {"Choose", "Source", "High", - "Medium", "Low", "Audio only"}); - layout.addDropdown("Command line arguments", {"..."}); - */ +#endif } // namespace chatterino void GeneralPage::initExtra() diff --git a/src/widgets/settingspages/GeneralPage.hpp b/src/widgets/settingspages/GeneralPage.hpp index 51db64e4..b57d8db1 100644 --- a/src/widgets/settingspages/GeneralPage.hpp +++ b/src/widgets/settingspages/GeneralPage.hpp @@ -72,7 +72,9 @@ class SettingsLayout : public QVBoxLayout public: TitleLabel *addTitle(const QString &text); TitleLabel2 *addTitle2(const QString &text); - QCheckBox *addCheckbox(const QString &text, BoolSetting &setting); + /// @param inverse Inverses true to false and vice versa + QCheckBox *addCheckbox(const QString &text, BoolSetting &setting, + bool inverse = false); ComboBox *addDropdown(const QString &text, const QStringList &items); ComboBox *addDropdown(const QString &text, const QStringList &items, pajlada::Settings::Setting &setting,