Chatterino
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SplitHeader.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "widgets/BaseWidget.hpp"
4 
5 #include <QElapsedTimer>
6 #include <QMenu>
7 #include <QPoint>
8 #include <boost/signals2.hpp>
9 #include <pajlada/settings/setting.hpp>
10 #include <pajlada/signals/connection.hpp>
11 #include <pajlada/signals/signalholder.hpp>
12 
13 #include <memory>
14 #include <vector>
15 
16 namespace chatterino {
17 
18 class Button;
19 class EffectLabel;
20 class Label;
21 class Split;
22 
23 class SplitHeader final : public BaseWidget
24 {
25  Q_OBJECT
26 
27 public:
28  explicit SplitHeader(Split *_chatWidget);
29 
30  void setAddButtonVisible(bool value);
31  void setViewersButtonVisible(bool value);
32 
33  void updateChannelText();
35  void updateRoomModes();
36 
37 protected:
38  virtual void scaleChangedEvent(float) override;
39  virtual void themeChangedEvent() override;
40 
41  virtual void paintEvent(QPaintEvent *) override;
42  virtual void mousePressEvent(QMouseEvent *event) override;
43  virtual void mouseReleaseEvent(QMouseEvent *event) override;
44  virtual void mouseMoveEvent(QMouseEvent *event) override;
45  virtual void enterEvent(QEvent *) override;
46  virtual void leaveEvent(QEvent *event) override;
47  virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
48 
49 private:
50  void initializeLayout();
51  void initializeModeSignals(EffectLabel &label);
52  std::unique_ptr<QMenu> createMainMenu();
53  std::unique_ptr<QMenu> createChatModeMenu();
54 
59  void resetThumbnail();
60 
61  void handleChannelChanged();
62 
63  Split *const split_{};
64  QString tooltipText_{};
65  bool isLive_{false};
66  QString thumbnail_;
67  QElapsedTimer lastThumbnail_;
68  std::chrono::steady_clock::time_point lastReloadedChannelEmotes_;
69  std::chrono::steady_clock::time_point lastReloadedSubEmotes_;
70 
71  // ui
72  Button *dropdownButton_{};
73  Label *titleLabel_{};
74  EffectLabel *modeButton_{};
75  Button *moderationButton_{};
76  Button *viewersButton_{};
77  Button *addButton_{};
78 
79  // states
80  QPoint dragStart_{};
81  bool dragging_{false};
82  bool doubleClicked_{false};
83  bool menuVisible_{false};
84 
85  // signals
86  pajlada::Signals::NoArgSignal modeUpdateRequested_;
87  pajlada::Signals::SignalHolder managedConnections_;
88  pajlada::Signals::SignalHolder channelConnections_;
89  std::vector<boost::signals2::scoped_connection> bSignals_;
90 
91 public slots:
92  void reloadChannelEmotes();
94  void reconnect();
95 };
96 
97 } // namespace chatterino
Definition: Label.hpp:10
virtual void enterEvent(QEvent *) override
Definition: SplitHeader.cpp:919
virtual void mousePressEvent(QMouseEvent *event) override
Definition: SplitHeader.cpp:860
virtual void mouseReleaseEvent(QMouseEvent *event) override
Definition: SplitHeader.cpp:893
void updateModerationModeIcon()
Definition: SplitHeader.cpp:818
Definition: EffectLabel.hpp:15
virtual void scaleChangedEvent(float) override
Definition: SplitHeader.cpp:721
void reloadChannelEmotes()
Definition: SplitHeader.cpp:985
Definition: SplitHeader.hpp:23
Definition: Application.cpp:48
void setViewersButtonVisible(bool value)
Definition: SplitHeader.cpp:737
void reloadSubscriberEmotes()
Definition: SplitHeader.cpp:1006
SplitHeader(Split *_chatWidget)
Definition: SplitHeader.cpp:190
Definition: Split.hpp:36
void setAddButtonVisible(bool value)
Definition: SplitHeader.cpp:732
virtual void leaveEvent(QEvent *event) override
Definition: SplitHeader.cpp:946
void updateChannelText()
Definition: SplitHeader.cpp:742
Definition: Button.hpp:16
virtual void mouseMoveEvent(QMouseEvent *event) override
Definition: SplitHeader.cpp:898
virtual void mouseDoubleClickEvent(QMouseEvent *event) override
Definition: SplitHeader.cpp:910
virtual void paintEvent(QPaintEvent *) override
Definition: SplitHeader.cpp:841
void updateRoomModes()
Definition: SplitHeader.cpp:669
Definition: BaseWidget.hpp:14
virtual void themeChangedEvent() override
Definition: SplitHeader.cpp:953
void reconnect()
Definition: SplitHeader.cpp:1021