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