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