1 #pragma once
2 
3 #ifndef MENUBAR_H
4 #define MENUBAR_H
5 
6 #include <QTabBar>
7 #include <QToolBar>
8 #include <QMenuBar>
9 #include <QFrame>
10 #include <map>
11 
12 #include "toonzqt/lineedit.h"
13 
14 #include <QUrl>
15 #include <QStackedWidget>
16 #include <QContextMenuEvent>
17 
18 // forward declaration
19 class QMenuBar;
20 class QAction;
21 class QMenu;
22 class TFilePath;
23 class QPainterEvent;
24 class QHBoxLayout;
25 class SubXsheetRoomTabContainer;
26 class QCheckBox;
27 class QXmlStreamReader;
28 
29 //-----------------------------------------------------------------------------
30 
31 class RoomTabWidget final : public QTabBar {
32   Q_OBJECT
33 
34   int m_clickedTabIndex;
35   int m_tabToDeleteIndex;
36   int m_renameTabIndex;
37   DVGui::LineEdit *m_renameTextField;
38   bool m_isLocked;
39 
40 public:
41   RoomTabWidget(QWidget *parent);
42   ~RoomTabWidget();
43 
isLocked()44   bool isLocked() { return m_isLocked; }
45 
46 protected:
47   void swapIndex(int firstIndex, int secondIndex);
48 
49   void mousePressEvent(QMouseEvent *event) override;
50   void mouseMoveEvent(QMouseEvent *event) override;
51   void mouseReleaseEvent(QMouseEvent *event) override;
52   void mouseDoubleClickEvent(QMouseEvent *event) override;
53   void contextMenuEvent(QContextMenuEvent *event) override;
54 
55 protected slots:
56   void updateTabName();
57   void addNewTab();
58   void deleteTab();
59   void setIsLocked(bool lock);
60   void onCustomizeMenuBar();
61 
62 signals:
63   void indexSwapped(int firstIndex, int secondIndex);
64   void insertNewTabRoom();
65   void deleteTabRoom(int index);
66   void renameTabRoom(int index, const QString name);
67   void customizeMenuBar(int index);
68 };
69 
70 //-----------------------------------------------------------------------------
71 /*
72 class SubSheetBar final : public QFrame
73 {
74   Q_OBJECT
75 
76   QColor m_parentBgColor;
77 
78   Q_PROPERTY(QColor ParentBGColor READ getParentBGColor WRITE setParentBGColor)
79 
80   void setParentBGColor(const QColor& color) {m_parentBgColor = color;}
81   QColor getParentBGColor() const { return m_parentBgColor; }
82 
83   bool m_mouseOverArrow;
84   QPoint m_arrowPosition;
85   QSize m_arrowSize;
86 
87   // Offset used to draw the subsheet in the bottom of the widget
88   int m_pixmapYOffset;
89   int m_pixmapXOffset;
90 
91 public:
92   SubSheetBar(QWidget *parent);
93   ~SubSheetBar();
94 
95 protected:
96 
97   void paintArrow(QPainter &p, int sceneLevel);
98         int getDelta(const QPoint &pos);
99   void paintEvent(QPaintEvent *);
100   void mousePressEvent(QMouseEvent *event);
101   void mouseMoveEvent(QMouseEvent *event);
102 
103 };
104 
105 //-----------------------------------------------------------------------------
106 
107 #ifdef MACOSX
108 class MenuBarWhiteLine final : public QFrame
109 {
110   Q_OBJECT
111 public:
112   MenuBarWhiteLine(QWidget *parent = 0);
113 protected:
114   void paintEvent(QPaintEvent *event);
115 };
116 #else
117 class MenuBarWhiteLine final : public QMenuBar
118 {
119 public:
120   MenuBarWhiteLine(QWidget *parent = 0);
121 protected:
122   void paintEvent(QPaintEvent *event);
123 };
124 #endif
125 */
126 //-----------------------------------------------------------------------------
127 
128 class UrlOpener final : public QObject {
129   Q_OBJECT
130   QUrl m_url;
131 
132 public:
UrlOpener(const QUrl & url)133   UrlOpener(const QUrl &url) : m_url(url) {}
134 
135 public slots:
136   void open();
137 };
138 
139 //-----------------------------------------------------------------------------
140 /*-- モジュールごとにMenubarの内容を切り替える --*/
141 class StackedMenuBar final : public QStackedWidget {
142   Q_OBJECT
143 
144   QMenuBar *createCleanupMenuBar();
145   QMenuBar *createPltEditMenuBar();
146   QMenuBar *createInknPaintMenuBar();
147   QMenuBar *createXsheetMenuBar();
148   QMenuBar *createBatchesMenuBar();
149   QMenuBar *createBrowserMenuBar();
150   QMenuBar *createFullMenuBar();
151   QMenuBar *loadMenuBar(const TFilePath &fp);
152 
153 public:
154   StackedMenuBar(QWidget *parent);
~StackedMenuBar()155   ~StackedMenuBar(){};
156 
157   void createMenuBarByName(const QString &roomName);
158   void loadAndAddMenubar(const TFilePath &fp);
159   bool readMenuRecursive(QXmlStreamReader &, QMenu *);
160 
161   QMenu *addMenu(const QString &, QMenuBar *);
162   void addMenuItem(QMenu *, const char *);
163 
164 protected slots:
165   void onIndexSwapped(int firstIndex, int secondIndex);
166   void insertNewMenuBar();
167   void deleteMenuBar(int index);
168   void doCustomizeMenuBar(int index);
169 };
170 
171 //-----------------------------------------------------------------------------
172 
173 class TopBar final : public QToolBar {
174   Q_OBJECT
175 
176   QFrame *m_containerFrame;
177   RoomTabWidget *m_roomTabBar;
178   StackedMenuBar *m_stackedMenuBar;
179   QCheckBox *m_lockRoomCB;
180 
181 public:
182   TopBar(QWidget *parent);
~TopBar()183   ~TopBar(){};
184 
getRoomTabWidget()185   QTabBar *getRoomTabWidget() const { return m_roomTabBar; }
186 
getStackedMenuBar()187   StackedMenuBar *getStackedMenuBar() const { return m_stackedMenuBar; }
188 
189 protected:
190   /*--  右クリックで消えないようにする--*/
contextMenuEvent(QContextMenuEvent * event)191   void contextMenuEvent(QContextMenuEvent *event) override { event->accept(); }
192 };
193 
194 #endif  // MENUBAR_H
195