Chatterino
Notebook.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "pajlada/signals/signal.hpp"
4 #include "widgets/BaseWidget.hpp"
5 
6 #include <QList>
7 #include <QMenu>
8 #include <QMessageBox>
9 #include <QWidget>
10 #include <pajlada/signals/signalholder.hpp>
11 
12 namespace chatterino {
13 
14 class Window;
15 class UpdateDialog;
16 class NotebookButton;
17 class NotebookTab;
18 class SplitContainer;
19 
20 enum NotebookTabLocation { Top = 0, Left = 1, Right = 2, Bottom = 3 };
21 
22 class Notebook : public BaseWidget
23 {
24  Q_OBJECT
25 
26 public:
27  explicit Notebook(QWidget *parent);
28  ~Notebook() override = default;
29 
30  NotebookTab *addPage(QWidget *page, QString title = QString(),
31  bool select = false);
32  void removePage(QWidget *page);
33  void removeCurrentPage();
34 
35  int indexOf(QWidget *page) const;
36  virtual void select(QWidget *page, bool focusPage = true);
37  void selectIndex(int index, bool focusPage = true);
38  void selectNextTab(bool focusPage = true);
39  void selectPreviousTab(bool focusPage = true);
40  void selectLastTab(bool focusPage = true);
41 
42  int getPageCount() const;
43  QWidget *getPageAt(int index) const;
44  int getSelectedIndex() const;
45  QWidget *getSelectedPage() const;
46 
47  QWidget *tabAt(QPoint point, int &index, int maxWidth = 2000000000);
48  void rearrangePage(QWidget *page, int index);
49 
50  bool getAllowUserTabManagement() const;
51  void setAllowUserTabManagement(bool value);
52 
53  bool getShowTabs() const;
54  void setShowTabs(bool value);
55 
56  bool getShowAddButton() const;
57  void setShowAddButton(bool value);
58 
59  void performLayout(bool animate = false);
60 
61  void setTabLocation(NotebookTabLocation location);
62 
63  bool isNotebookLayoutLocked() const;
64  void setLockNotebookLayout(bool value);
65 
66  void addNotebookActionsToMenu(QMenu *menu);
67 
68 protected:
69  virtual void scaleChangedEvent(float scale_) override;
70  virtual void resizeEvent(QResizeEvent *) override;
71  virtual void mousePressEvent(QMouseEvent *event) override;
72  virtual void paintEvent(QPaintEvent *) override;
73 
76 
77  struct Item {
79  QWidget *page{};
80  QWidget *selectedWidget{};
81  };
82 
83  const QList<Item> items()
84  {
85  return items_;
86  }
87 
88 private:
89  void updateTabVisibilityMenuAction();
90  void resizeAddButton();
91 
92  bool containsPage(QWidget *page);
93  Item &findItem(QWidget *page);
94 
95  static bool containsChild(const QObject *obj, const QObject *child);
96  NotebookTab *getTabFromPage(QWidget *page);
97 
98  // Returns the number of buttons in `customButtons_` that are visible
99  size_t visibleButtonCount() const;
100 
101  QList<Item> items_;
102  QMenu menu_;
103  QWidget *selectedPage_ = nullptr;
104 
105  NotebookButton *addButton_;
106  std::vector<NotebookButton *> customButtons_;
107 
108  bool allowUserTabManagement_ = false;
109  bool showTabs_ = true;
110  bool showAddButton_ = false;
111  int lineOffset_ = 20;
112  bool lockNotebookLayout_ = false;
114  QAction *lockNotebookLayoutAction_;
115  QAction *showTabsAction_;
116 };
117 
118 class SplitNotebook : public Notebook
119 {
120 public:
121  SplitNotebook(Window *parent);
122 
123  SplitContainer *addPage(bool select = false);
124  SplitContainer *getOrAddSelectedPage();
125  void select(QWidget *page, bool focusPage = true) override;
126 
127 protected:
128  void showEvent(QShowEvent *event) override;
129 
130 private:
131  void addCustomButtons();
132 
133  pajlada::Signals::SignalHolder signalHolder_;
134 };
135 
136 } // namespace chatterino
void removeCurrentPage()
Definition: Notebook.cpp:136
void rearrangePage(QWidget *page, int index)
Definition: Notebook.cpp:340
Definition: Notebook.hpp:20
virtual void mousePressEvent(QMouseEvent *event) override
Definition: Notebook.cpp:909
const QList< Item > items()
Definition: Notebook.hpp:83
Notebook(QWidget *parent)
Definition: Notebook.cpp:31
void addNotebookActionsToMenu(QMenu *menu)
Definition: Notebook.cpp:990
void setAllowUserTabManagement(bool value)
Definition: Notebook.cpp:360
void selectLastTab(bool focusPage=true)
Definition: Notebook.cpp:285
virtual void paintEvent(QPaintEvent *) override
Definition: Notebook.cpp:939
Definition: SplitContainer.hpp:33
bool getShowAddButton() const
Definition: Notebook.cpp:455
void removePage(QWidget *page)
Definition: Notebook.cpp:99
NotebookButton * addCustomButton()
Definition: Notebook.cpp:1002
void setLockNotebookLayout(bool value)
Definition: Notebook.cpp:983
Definition: Application.cpp:48
bool isNotebookLayoutLocked() const
Definition: Notebook.cpp:978
Definition: Notebook.hpp:77
virtual void showEvent(QShowEvent *) override
Definition: BaseWidget.cpp:164
void setShowTabs(bool value)
Definition: Notebook.cpp:370
pajlada::Signals::SignalHolder signalHolder_
Definition: BaseWidget.hpp:55
void setTabLocation(NotebookTabLocation location)
Definition: Notebook.cpp:923
~Notebook() override=default
QWidget * page
Definition: Notebook.hpp:79
virtual void resizeEvent(QResizeEvent *) override
Definition: Notebook.cpp:482
Definition: Notebook.hpp:20
bool getAllowUserTabManagement() const
Definition: Notebook.cpp:355
Definition: Notebook.hpp:20
void selectPreviousTab(bool focusPage=true)
Definition: Notebook.cpp:268
bool getShowTabs() const
Definition: Notebook.cpp:365
Definition: NotebookTab.hpp:21
Definition: Window.hpp:19
int indexOf(QWidget *page) const
Definition: Notebook.cpp:144
QWidget * tabAt(QPoint point, int &index, int maxWidth=2000000000)
Definition: Notebook.cpp:316
NotebookTabLocation
Definition: Notebook.hpp:20
NotebookButton * getAddButton()
Definition: Notebook.cpp:997
Definition: Notebook.hpp:22
void selectIndex(int index, bool focusPage=true)
Definition: Notebook.cpp:245
int getPageCount() const
Definition: Notebook.cpp:296
QWidget * getPageAt(int index) const
Definition: Notebook.cpp:301
virtual void scaleChangedEvent(float scale_) override
Definition: Notebook.cpp:473
Definition: Notebook.hpp:118
QWidget * selectedWidget
Definition: Notebook.hpp:80
void performLayout(bool animate=false)
Definition: Notebook.cpp:487
Definition: BaseWidget.hpp:14
int getSelectedIndex() const
Definition: Notebook.cpp:306
Definition: Notebook.hpp:20
QWidget * getSelectedPage() const
Definition: Notebook.cpp:311
NotebookTab * addPage(QWidget *page, QString title=QString(), bool select=false)
Definition: Notebook.cpp:67
void setShowAddButton(bool value)
Definition: Notebook.cpp:460
Definition: NotebookButton.hpp:11
virtual void select(QWidget *page, bool focusPage=true)
Definition: Notebook.cpp:157
NotebookTab * tab
Definition: Notebook.hpp:78
void selectNextTab(bool focusPage=true)
Definition: Notebook.cpp:255