#pragma once #include "widgets/BaseWidget.hpp" #include #include #include #include #include #include #include namespace chatterino { class Button; class EffectLabel; class Label; class Split; class SplitHeader final : public BaseWidget, pajlada::Signals::SignalHolder { Q_OBJECT public: explicit SplitHeader(Split *_chatWidget); void setAddButtonVisible(bool value); void updateChannelText(); void updateModerationModeIcon(); void updateRoomModes(); protected: virtual void scaleChangedEvent(float) override; virtual void themeChangedEvent() override; virtual void paintEvent(QPaintEvent *) override; virtual void mousePressEvent(QMouseEvent *event) override; virtual void mouseReleaseEvent(QMouseEvent *event) override; virtual void mouseMoveEvent(QMouseEvent *event) override; virtual void enterEvent(QEvent *) override; virtual void leaveEvent(QEvent *event) override; virtual void mouseDoubleClickEvent(QMouseEvent *event) override; private: void initializeLayout(); void initializeModeSignals(EffectLabel &label); std::unique_ptr createMainMenu(); std::unique_ptr createChatModeMenu(); void handleChannelChanged(); Split *const split_{}; QString tooltipText_{}; bool isLive_{false}; // ui Button *dropdownButton_{}; QMenu *mainMenu_{}; Label *titleLabel_{}; EffectLabel *modeButton_{}; Button *moderationButton_{}; Button *addButton_{}; // states QPoint dragStart_{}; bool dragging_{false}; bool doubleClicked_{false}; bool showingHelpTooltip_{false}; bool menuVisible_{false}; // signals pajlada::Signals::NoArgSignal modeUpdateRequested_; std::vector managedConnections_; std::vector channelConnections_; public slots: void moveSplit(); void reloadChannelEmotes(); void reloadSubscriberEmotes(); void reconnect(); }; } // namespace chatterino