1 #pragma once
2 
3 #ifndef TESTCUSTOMTAB_H
4 #define TESTCUSTOMTAB_H
5 
6 #include "tfilepath.h"
7 #include "toonzqt/menubarcommand.h"
8 
9 #if QT_VERSION >= 0x050000
10 #include <QtWidgets/QMainWindow>
11 #else
12 #include <QtGui/QMainWindow>
13 #endif
14 #include <map>
15 #include <QAction>
16 #include <QString>
17 
18 #include "../toonzqt/tdockwindows.h"
19 
20 class QStackedWidget;
21 class TPanel;
22 class UpdateChecker;
23 class ComboViewerPanel;
24 class TopBar;
25 //-----------------------------------------------------------------------------
26 
27 class Room final : public TMainWindow {
28   Q_OBJECT
29 
30   TFilePath m_path;
31   QString m_name;
32 
33 public:
34 #if QT_VERSION >= 0x050500
35   Room(QWidget *parent = 0, Qt::WindowFlags flags = 0)
36 #else
37   Room(QWidget *parent = 0, Qt::WFlags flags = 0)
38 #endif
TMainWindow(parent,flags)39       : TMainWindow(parent, flags) {
40   }
41 
~Room()42   ~Room() {}
43 
getPath()44   TFilePath getPath() const { return m_path; }
setPath(TFilePath path)45   void setPath(TFilePath path) { m_path = path; }
46 
getName()47   QString getName() const { return m_name; }
setName(QString name)48   void setName(QString name) { m_name = name; }
49 
50   void save();
51   void load(const TFilePath &fp);
52 };
53 
54 //-----------------------------------------------------------------------------
55 
56 class MainWindow final : public QMainWindow {
57   Q_OBJECT
58 
59   bool m_saveSettingsOnQuit;
60   bool m_startupPopupShown = false;
61   int m_oldRoomIndex;
62   QString m_currentRoomsChoice;
63   UpdateChecker *m_updateChecker;
64 
65   TopBar *m_topBar;
66 
67   QActionGroup *m_toolsActionGroup;
68 
69   QStackedWidget *m_stackedWidget;
70 
71   /*-- show layout name in the title bar --*/
72   QString m_layoutName;
73 
74 public:
75 #if QT_VERSION >= 0x050500
76   MainWindow(const QString &argumentLayoutFileName, QWidget *parent = 0,
77              Qt::WindowFlags flags = 0);
78 #else
79   MainWindow(const QString &argumentLayoutFileName, QWidget *parent = 0,
80              Qt::WFlags flags = 0);
81 #endif
82   ~MainWindow();
83 
84   void startupFloatingPanels();
85 
86   void onQuit();
87   void onUndo();
88   void onRedo();
89   void onNewScene();
90   void onLoadScene();
91   void onLoadSubScene();
92   void resetRoomsLayout();
93   void maximizePanel();
94   void fullScreenWindow();
95   void autofillToggle();
96   void onUpgradeTabPro();
97   void onAbout();
98   void onOpenOnlineManual();
99   void onOpenWhatsNew();
100   void onOpenCommunityForum();
101   void onOpenReportABug();
102   void checkForUpdates();
103   int getRoomCount() const;
104   Room *getRoom(int index) const;
105   Room *getRoomByName(QString &roomName);
106 
107   Room *getCurrentRoom() const;
108   void refreshWriteSettings();
109 
110   /*-- Animate tool + mode switching shortcuts --*/
111   void toggleEditNextMode();
112   void toggleEditPosition();
113   void toggleEditRotation();
114   void toggleEditNextScale();
115   void toggleEditNextShear();
116   void toggleEditNextCenter();
117   void toggleEditNextAll();
118 
119   /*-- Selection tool + mode switching shortcuts --*/
120   void toggleSelectionNextType();
121   void toggleSelectionRectangular();
122   void toggleSelectionFreehand();
123   void toggleSelectionPolyline();
124 
125   /*-- Geometric tool + shape switching shortcuts --*/
126   void toggleGeometricNextShape();
127   void toggleGeometricRectangle();
128   void toggleGeometricCircle();
129   void toggleGeometricEllipse();
130   void toggleGeometricLine();
131   void toggleGeometricPolyline();
132   void toggleGeometricArc();
133   void toggleGeometricMultiArc();
134   void toggleGeometricPolygon();
135 
136   /*-- Type tool + style switching shortcuts --*/
137   void toggleTypeNextStyle();
138   void toggleTypeOblique();
139   void toggleTypeRegular();
140   void toggleTypeBoldOblique();
141   void toggleTypeBold();
142 
143   /*-- Fill tool + mode switching shortcuts --*/
144   void toggleFillNextType();
145   void toggleFillNormal();
146   void toggleFillRectangular();
147   void toggleFillFreehand();
148   void toggleFillPolyline();
149   void toggleFillNextMode();
150   void toggleFillAreas();
151   void toggleFillLines();
152   void toggleFillLinesAndAreas();
153 
154   /*-- Eraser tool + type switching shortcuts --*/
155   void toggleEraserNextType();
156   void toggleEraserNormal();
157   void toggleEraserRectangular();
158   void toggleEraserFreehand();
159   void toggleEraserPolyline();
160   void toggleEraserSegment();
161 
162   /*-- Tape tool + type/mode switching shortcuts --*/
163   void toggleTapeNextType();
164   void toggleTapeNormal();
165   void toggleTapeRectangular();
166   void toggleTapeNextMode();
167   void toggleTapeEndpointToEndpoint();
168   void toggleTapeEndpointToLine();
169   void toggleTapeLineToLine();
170 
171   /*-- Style Picker tool + mode switching shortcuts --*/
172   void togglePickStyleNextMode();
173   void togglePickStyleAreas();
174   void togglePickStyleLines();
175   void togglePickStyleLinesAndAreas();
176 
177   /*-- RGB Picker tool + type switching shortcuts --*/
178   void toggleRGBPickerNextType();
179   void toggleRGBPickerNormal();
180   void toggleRGBPickerRectangular();
181   void toggleRGBPickerFreehand();
182   void toggleRGBPickerPolyline();
183 
184   /*-- Skeleton tool + mode switching shortcuts --*/
185   void ToggleSkeletonNextMode();
186   void ToggleSkeletonBuildSkeleton();
187   void ToggleSkeletonAnimate();
188   void ToggleSkeletonInverseKinematics();
189 
190   /*-- Plastic tool + mode switching shortcuts --*/
191   void TogglePlasticNextMode();
192   void TogglePlasticEditMesh();
193   void TogglePlasticPaintRigid();
194   void TogglePlasticBuildSkeleton();
195   void TogglePlasticAnimate();
196 
197   void onNewVectorLevelButtonPressed();
198   void onNewToonzRasterLevelButtonPressed();
199   void onNewRasterLevelButtonPressed();
200   void clearCacheFolder();
201 
getLayoutName()202   QString getLayoutName() { return m_layoutName; }
203 
204 protected:
205   void showEvent(QShowEvent *) override;
206   void closeEvent(QCloseEvent *) override;
207   void readSettings(const QString &layoutFileName);
208   void writeSettings();
209 
210 private:
211   /*!Must be call before readSettings().*/
212   void defineActions();
213   /*
214   Room *createPaintRoom();
215   Room *createAnimationRoom();
216   Room *createBrowserRoom();
217   Room *createPltEditRoom();
218   Room *createFarmRoom();
219   */
220   Room *createCleanupRoom();
221   Room *createPltEditRoom();
222   Room *createInknPaintRoom();
223   Room *createXsheetRoom();
224   Room *createBatchesRoom();
225   Room *createBrowserRoom();
226 
227   QAction *createAction(const char *id, const char *name,
228                         const QString &defaultShortcut,
229                         CommandType type        = MenuFileCommandType,
230                         const char *iconSVGName = "");
231   QAction *createRightClickMenuAction(const char *id, const char *name,
232                                       const QString &defaultShortcut,
233                                       const char *iconSVGName = "");
234   QAction *createMenuFileAction(const char *id, const char *name,
235                                 const QString &defaultShortcut,
236                                 const char *iconSVGName = "");
237   QAction *createMenuEditAction(const char *id, const char *name,
238                                 const QString &defaultShortcut,
239                                 const char *iconSVGName = "");
240   QAction *createMenuScanCleanupAction(const char *id, const char *name,
241                                        const QString &defaultShortcut,
242                                        const char *iconSVGName = "");
243   QAction *createMenuLevelAction(const char *id, const char *name,
244                                  const QString &defaultShortcut,
245                                  const char *iconSVGName = "");
246   QAction *createMenuXsheetAction(const char *id, const char *name,
247                                   const QString &defaultShortcut,
248                                   const char *iconSVGName = "");
249   QAction *createMenuCellsAction(const char *id, const char *name,
250                                  const QString &defaultShortcut,
251                                  const char *iconSVGName = "");
252   QAction *createMenuViewAction(const char *id, const char *name,
253                                 const QString &defaultShortcut,
254                                 const char *iconSVGName = "");
255   QAction *createMenuWindowsAction(const char *id, const char *name,
256                                    const QString &defaultShortcut,
257                                    const char *iconSVGName = "");
258 
259   QAction *createMenuPlayAction(const char *id, const char *name,
260                                 const QString &defaultShortcut,
261                                 const char *iconSVGName = "");
262   QAction *createMenuRenderAction(const char *id, const char *name,
263                                   const QString &defaultShortcut,
264                                   const char *iconSVGName = "");
265   QAction *createMenuHelpAction(const char *id, const char *name,
266                                 const QString &defaultShortcut,
267                                 const char *iconSVGName = "");
268   QAction *createRGBAAction(const char *id, const char *name,
269                             const QString &defaultShortcut,
270                             const char *iconSVGName = "");
271   QAction *createFillAction(const char *id, const char *name,
272                             const QString &defaultShortcut,
273                             const char *iconSVGName = "");
274   QAction *createMenuAction(const char *id, const char *name,
275                             QList<QString> list);
276   QAction *createToggle(const char *id, const char *name,
277                         const QString &defaultShortcut, bool startStatus,
278                         CommandType type, const char *iconSVGName = "");
279   QAction *createToolAction(const char *id, const char *iconName,
280                             const char *name, const QString &defaultShortcut);
281   QAction *createViewerAction(const char *id, const char *name,
282                               const QString &defaultShortcut,
283                               const char *iconSVGName = "");
284   // For command bar, no shortcut keys
285   QAction *createVisualizationButtonAction(const char *id, const char *name,
286                                            const char *iconSVGName = "");
287 
288   QAction *createMiscAction(const char *id, const char *name,
289                             const char *defaultShortcut);
290   QAction *createToolOptionsAction(const char *id, const char *name,
291                                    const QString &defaultShortcut);
292   QAction *createStopMotionAction(const char *id, const char *name,
293                                   const QString &defaultShortcut,
294                                   const char *iconSVGName = "");
295 
296 protected slots:
297   void onCurrentRoomChanged(int newRoomIndex);
298   void onIndexSwapped(int firstIndex, int secondIndex);
299   void insertNewRoom();
300   void deleteRoom(int index);
301   void renameRoom(int index, const QString name);
302   void onMenuCheckboxChanged();
303 
304   // make InkCheck and Ink#1Check exclusive.
305   void onInkCheckTriggered(bool on);
306   void onInk1CheckTriggered(bool on);
307 
308   void onUpdateCheckerDone(bool);
309 
310 public slots:
311   /*--- タイトルにシーン名を入れる ---*/
312   void changeWindowTitle();
313   /*--- FlipモジュールでタイトルバーにロードしたLevel名を表示 ---*/
314   /*--- Cleanupモジュールでタイトルバーに進捗を表示 ---*/
315   void changeWindowTitle(QString &);
316 
317 signals:
318   void exit(bool &);
319 };
320 
321 class RecentFiles {
322   friend class StartupPopup;
323   QList<QString> m_recentScenes;
324   QList<QString> m_recentSceneProjects;
325   QList<QString> m_recentLevels;
326   QList<QString> m_recentFlipbookImages;
327 
328   RecentFiles();
329 
330 public:
331   enum FileType { Scene, Level, Flip, None };
332 
333   static RecentFiles *instance();
334   ~RecentFiles();
335 
336   void addFilePath(QString path, FileType fileType, QString projectName = 0);
337   void moveFilePath(int fromIndex, int toIndex, FileType fileType);
338   void removeFilePath(int fromIndex, FileType fileType);
339   QString getFilePath(int index, FileType fileType) const;
340   QString getFileProject(QString fileName) const;
341   QString getFileProject(int index) const;
342   void clearRecentFilesList(FileType fileType);
343   void loadRecentFiles();
344   void saveRecentFiles();
345 
346 protected:
347   void refreshRecentFilesMenu(FileType fileType);
348   QList<QString> getFilesNameList(FileType fileType);
349 };
350 
351 #endif  // TESTCUSTOMTAB_H
352