From c6c884df70adce4dc527d27143463522f049efe2 Mon Sep 17 00:00:00 2001 From: Mm2PL Date: Sat, 27 May 2023 10:38:25 +0000 Subject: [PATCH] Add an indicator in the title bar if Streamer Mode is active (#4410) --- CHANGELOG.md | 1 + resources/buttons/streamerModeEnabledDark.png | Bin 0 -> 3574 bytes resources/buttons/streamerModeEnabledDark.svg | 13 +++++ .../buttons/streamerModeEnabledLight.png | Bin 0 -> 3528 bytes .../buttons/streamerModeEnabledLight.svg | 13 +++++ src/Application.hpp | 4 ++ src/singletons/Settings.cpp | 6 +++ src/util/StreamerMode.cpp | 4 ++ src/widgets/Notebook.cpp | 41 ++++++++++++++++ src/widgets/Notebook.hpp | 6 +++ src/widgets/Window.cpp | 46 ++++++++++++++++++ src/widgets/Window.hpp | 5 ++ src/widgets/dialogs/SettingsDialog.cpp | 17 ++++++- src/widgets/dialogs/SettingsDialog.hpp | 2 + src/widgets/helper/SettingsDialogTab.hpp | 1 + src/widgets/helper/TitlebarButton.hpp | 3 +- src/widgets/settingspages/AboutPage.cpp | 3 ++ 17 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 resources/buttons/streamerModeEnabledDark.png create mode 100644 resources/buttons/streamerModeEnabledDark.svg create mode 100644 resources/buttons/streamerModeEnabledLight.png create mode 100644 resources/buttons/streamerModeEnabledLight.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index be24b4f96..7085d62d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unversioned +- Minor: Add an icon showing when streamer mode is enabled (#4410) - Minor: Added `/shoutout ` commands to shoutout specified user. (#4638) - Dev: Added command to set Qt's logging filter/rules at runtime (`/c2-set-logging-rules`). (#4637) - Dev: Added the ability to see & load custom themes from the Themes directory. No stable promises are made of this feature, changes might be made that breaks custom themes without notice. (#4570) diff --git a/resources/buttons/streamerModeEnabledDark.png b/resources/buttons/streamerModeEnabledDark.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab2b1d8b3fcd6f5235a479b6c40e0a54fd7d7aa GIT binary patch literal 3574 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 + + + + + + diff --git a/resources/buttons/streamerModeEnabledLight.png b/resources/buttons/streamerModeEnabledLight.png new file mode 100644 index 0000000000000000000000000000000000000000..8da207f7959de50f077e683f11cf63f524028431 GIT binary patch literal 3528 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 cYBe + + + + + + diff --git a/src/Application.hpp b/src/Application.hpp index 27f1c2f60..6917190bd 100644 --- a/src/Application.hpp +++ b/src/Application.hpp @@ -3,6 +3,8 @@ #include "common/Singleton.hpp" #include "singletons/NativeMessaging.hpp" +#include +#include #include #include @@ -153,6 +155,8 @@ public: } IUserDataController *getUserData() override; + pajlada::Signals::NoArgSignal streamerModeChanged; + private: void addSingleton(Singleton *singleton); void initPubSub(); diff --git a/src/singletons/Settings.cpp b/src/singletons/Settings.cpp index b32623c42..07e10142c 100644 --- a/src/singletons/Settings.cpp +++ b/src/singletons/Settings.cpp @@ -1,5 +1,6 @@ #include "singletons/Settings.hpp" +#include "Application.hpp" #include "controllers/filters/FilterRecord.hpp" #include "controllers/highlights/HighlightBadge.hpp" #include "controllers/highlights/HighlightBlacklistUser.hpp" @@ -136,6 +137,11 @@ Settings::Settings(const QString &settingsDirectory) }, false); #endif + this->enableStreamerMode.connect( + []() { + getApp()->streamerModeChanged.invoke(); + }, + false); } Settings &Settings::instance() diff --git a/src/util/StreamerMode.cpp b/src/util/StreamerMode.cpp index 03f3f59aa..c905b88a0 100644 --- a/src/util/StreamerMode.cpp +++ b/src/util/StreamerMode.cpp @@ -71,6 +71,7 @@ bool isInStreamerMode() p.exitStatus() == QProcess::NormalExit) { cache = (p.exitCode() == 0); + getApp()->streamerModeChanged.invoke(); return (p.exitCode() == 0); } @@ -89,6 +90,7 @@ bool isInStreamerMode() qCWarning(chatterinoStreamerMode) << "pgrep execution timed out!"; cache = false; + getApp()->streamerModeChanged.invoke(); return false; #endif @@ -122,6 +124,7 @@ bool isInStreamerMode() if (broadcastingBinaries().contains(processName)) { cache = true; + getApp()->streamerModeChanged.invoke(); return true; } } @@ -133,6 +136,7 @@ bool isInStreamerMode() } cache = false; + getApp()->streamerModeChanged.invoke(); #endif return false; } diff --git a/src/widgets/Notebook.cpp b/src/widgets/Notebook.cpp index 3f9a9c67b..40a9237a2 100644 --- a/src/widgets/Notebook.cpp +++ b/src/widgets/Notebook.cpp @@ -4,10 +4,12 @@ #include "common/QLogging.hpp" #include "controllers/hotkeys/HotkeyCategory.hpp" #include "controllers/hotkeys/HotkeyController.hpp" +#include "singletons/Resources.hpp" #include "singletons/Settings.hpp" #include "singletons/Theme.hpp" #include "singletons/WindowManager.hpp" #include "util/InitUpdateButton.hpp" +#include "util/StreamerMode.hpp" #include "widgets/dialogs/SettingsDialog.hpp" #include "widgets/helper/ChannelView.hpp" #include "widgets/helper/NotebookButton.hpp" @@ -1155,6 +1157,45 @@ void SplitNotebook::addCustomButtons() auto updateBtn = this->addCustomButton(); initUpdateButton(*updateBtn, this->signalHolder_); + + // streamer mode + this->streamerModeIcon_ = this->addCustomButton(); + QObject::connect(this->streamerModeIcon_, &NotebookButton::leftClicked, + [this] { + getApp()->windows->showSettingsDialog( + this, SettingsDialogPreference::StreamerMode); + }); + this->signalHolder_.managedConnect(getApp()->streamerModeChanged, [this]() { + this->updateStreamerModeIcon(); + }); + this->updateStreamerModeIcon(); +} + +void SplitNotebook::updateStreamerModeIcon() +{ + if (this->streamerModeIcon_ == nullptr) + { + return; + } + // A duplicate of this code is in Window class + // That copy handles the TitleBar icon in Window (main window on Windows) + // This one is the one near splits (on linux and mac or non-main windows on Windows) + if (getTheme()->isLightTheme()) + { + this->streamerModeIcon_->setPixmap( + getResources().buttons.streamerModeEnabledLight); + } + else + { + this->streamerModeIcon_->setPixmap( + getResources().buttons.streamerModeEnabledDark); + } + this->streamerModeIcon_->setVisible(isInStreamerMode()); +} + +void SplitNotebook::themeChangedEvent() +{ + this->updateStreamerModeIcon(); } SplitContainer *SplitNotebook::addPage(bool select) diff --git a/src/widgets/Notebook.hpp b/src/widgets/Notebook.hpp index 7cc49cfa6..382b260ec 100644 --- a/src/widgets/Notebook.hpp +++ b/src/widgets/Notebook.hpp @@ -123,6 +123,7 @@ public: SplitContainer *addPage(bool select = false); SplitContainer *getOrAddSelectedPage(); void select(QWidget *page, bool focusPage = true) override; + void themeChangedEvent() override; protected: void showEvent(QShowEvent *event) override; @@ -131,6 +132,11 @@ private: void addCustomButtons(); pajlada::Signals::SignalHolder signalHolder_; + + // Main window on Windows has basically a duplicate of this in Window + NotebookButton *streamerModeIcon_{}; + + void updateStreamerModeIcon(); }; } // namespace chatterino diff --git a/src/widgets/Window.cpp b/src/widgets/Window.cpp index dfac8ba6e..12f605838 100644 --- a/src/widgets/Window.cpp +++ b/src/widgets/Window.cpp @@ -9,6 +9,7 @@ #include "controllers/hotkeys/HotkeyController.hpp" #include "providers/twitch/TwitchAccount.hpp" #include "providers/twitch/TwitchIrcServer.hpp" +#include "singletons/Resources.hpp" #include "singletons/Settings.hpp" #include "singletons/Theme.hpp" #include "singletons/Updates.hpp" @@ -186,6 +187,51 @@ void Window::addCustomTitlebarButtons() this->userLabel_->rect().bottomLeft())); }); this->userLabel_->setMinimumWidth(20 * scale()); + + // streamer mode + this->streamerModeTitlebarIcon_ = + this->addTitleBarButton(TitleBarButtonStyle::StreamerMode, [this] { + getApp()->windows->showSettingsDialog( + this, SettingsDialogPreference::StreamerMode); + }); + this->signalHolder_.managedConnect(getApp()->streamerModeChanged, [this]() { + this->updateStreamerModeIcon(); + }); +} + +void Window::updateStreamerModeIcon() +{ + // A duplicate of this code is in SplitNotebook class (in Notebook.{c,h}pp) + // That one is the one near splits (on linux and mac or non-main windows on Windows) + // This copy handles the TitleBar icon in Window (main window on Windows) + if (this->streamerModeTitlebarIcon_ == nullptr) + { + return; + } +#ifdef Q_OS_WIN + assert(this->getType() == WindowType::Main); + if (getTheme()->isLightTheme()) + { + this->streamerModeTitlebarIcon_->setPixmap( + getResources().buttons.streamerModeEnabledLight); + } + else + { + this->streamerModeTitlebarIcon_->setPixmap( + getResources().buttons.streamerModeEnabledDark); + } + this->streamerModeTitlebarIcon_->setVisible(isInStreamerMode()); +#else + // clang-format off + assert(false && "Streamer mode TitleBar icon should not exist on non-Windows OSes"); + // clang-format on +#endif +} + +void Window::themeChangedEvent() +{ + this->updateStreamerModeIcon(); + BaseWindow::themeChangedEvent(); } void Window::addDebugStuff(HotkeyController::HotkeyMap &actions) diff --git a/src/widgets/Window.hpp b/src/widgets/Window.hpp index d99747591..6d25d875c 100644 --- a/src/widgets/Window.hpp +++ b/src/widgets/Window.hpp @@ -31,6 +31,7 @@ public: protected: void closeEvent(QCloseEvent *event) override; bool event(QEvent *event) override; + void themeChangedEvent() override; private: void addCustomTitlebarButtons(); @@ -51,6 +52,10 @@ private: pajlada::Signals::SignalHolder signalHolder_; std::vector bSignals_; + // this is only used on Windows and only on the main window, for the one used otherwise, see SplitNotebook in Notebook.hpp + TitleBarButton *streamerModeTitlebarIcon_ = nullptr; + void updateStreamerModeIcon(); + friend class Notebook; }; diff --git a/src/widgets/dialogs/SettingsDialog.cpp b/src/widgets/dialogs/SettingsDialog.cpp index 5bd218860..1ee94b4cf 100644 --- a/src/widgets/dialogs/SettingsDialog.cpp +++ b/src/widgets/dialogs/SettingsDialog.cpp @@ -195,6 +195,11 @@ void SettingsDialog::filterElements(const QString &text) } } +void SettingsDialog::setElementFilter(const QString &query) +{ + this->ui_.search->setText(query); +} + void SettingsDialog::addTabs() { this->ui_.tabContainer->setSpacing(0); @@ -203,7 +208,7 @@ void SettingsDialog::addTabs() // Constructors are wrapped in std::function to remove some strain from first time loading. // clang-format off - this->addTab([]{return new GeneralPage;}, "General", ":/settings/about.svg"); + this->addTab([]{return new GeneralPage;}, "General", ":/settings/about.svg", SettingsTabId::General); this->ui_.tabContainer->addSpacing(16); this->addTab([]{return new AccountsPage;}, "Accounts", ":/settings/accounts.svg", SettingsTabId::Accounts); this->addTab([]{return new NicknamesPage;}, "Nicknames", ":/settings/accounts.svg"); @@ -316,10 +321,20 @@ void SettingsDialog::showDialog(QWidget *parent, } break; + case SettingsDialogPreference::StreamerMode: { + instance->selectTab(SettingsTabId::General); + } + break; + default:; } instance->show(); + if (preferredTab == SettingsDialogPreference::StreamerMode) + { + // this is needed because each time the settings are opened, the query is reset + instance->setElementFilter("Streamer Mode"); + } instance->activateWindow(); instance->raise(); instance->setFocus(); diff --git a/src/widgets/dialogs/SettingsDialog.hpp b/src/widgets/dialogs/SettingsDialog.hpp index ad8f873d3..303842af2 100644 --- a/src/widgets/dialogs/SettingsDialog.hpp +++ b/src/widgets/dialogs/SettingsDialog.hpp @@ -27,6 +27,7 @@ class PageHeader : public QFrame enum class SettingsDialogPreference { NoPreference, + StreamerMode, Accounts, ModerationActions, }; @@ -57,6 +58,7 @@ private: void selectTab(SettingsDialogTab *tab, const bool byUser = true); void selectTab(SettingsTabId id); void filterElements(const QString &query); + void setElementFilter(const QString &query); void onOkClicked(); void onCancelClicked(); diff --git a/src/widgets/helper/SettingsDialogTab.hpp b/src/widgets/helper/SettingsDialogTab.hpp index 1c907ad45..921d157f7 100644 --- a/src/widgets/helper/SettingsDialogTab.hpp +++ b/src/widgets/helper/SettingsDialogTab.hpp @@ -15,6 +15,7 @@ class SettingsDialog; enum class SettingsTabId { None, + General, Accounts, Moderation, }; diff --git a/src/widgets/helper/TitlebarButton.hpp b/src/widgets/helper/TitlebarButton.hpp index 85e435005..463582370 100644 --- a/src/widgets/helper/TitlebarButton.hpp +++ b/src/widgets/helper/TitlebarButton.hpp @@ -11,7 +11,8 @@ enum class TitleBarButtonStyle { Unmaximize = 4, Close = 8, User = 16, - Settings = 32 + Settings = 32, + StreamerMode = 64, }; class TitleBarButton : public Button diff --git a/src/widgets/settingspages/AboutPage.cpp b/src/widgets/settingspages/AboutPage.cpp index 05037621e..9ea3153b9 100644 --- a/src/widgets/settingspages/AboutPage.cpp +++ b/src/widgets/settingspages/AboutPage.cpp @@ -126,6 +126,9 @@ AboutPage::AboutPage() "https://github.com/getsentry/crashpad", ":/licenses/crashpad.txt"); #endif + addLicense(form.getElement(), "Fluent icons", + "https://github.com/microsoft/fluentui-system-icons", + ":/licenses/fluenticons.txt"); } // Attributions