#pragma once #include #include #include #include "projectcontainer.h" class QMdiSubWindow; class QActionGroup; namespace Ui { class MainWindow; } class ProjectTreeModel; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(const QString &filePath, QWidget *parent = nullptr); ~MainWindow(); protected: void closeEvent(QCloseEvent *event) override; private slots: void contextMenuRequested(const QPoint &pos); void doubleClicked(const QModelIndex &index); void selectionChanged(const QModelIndex &index); void modelErrorOccured(const QString &message); void changed(); void newFile(); void openFile(); void saveFile(); void saveFileAs(); void createExecutable(); void publishGame(); void importResources(); void exportResources(); void preferences(); void create(); void duplicate(); void createGroup(); void sortByName(); void delete_(); void rename(); void showProperties(); void findResource(); void showObjectInformation(); private: template void createFor(); private slots: void showGameInformation(); void showGlobalGameSettings(); void showExtensionPackages(); void showDefineConstants(); void showDefineTriggers(); void showIncludedFiles(); void runGame(); void debugGame(); void about(); void rowsInserted(const QModelIndex &parent, int first, int last); void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); void modelAboutToBeReset(); private: void setupStylesMenu(); void loadFile(const QString &path); void updateTitle(); template void openOrActivateWindow(QMdiSubWindow * &ptr, Targs &&...args); template std::map &propertyWindowsFor(); template bool doubleClickedFor(const QModelIndex &index); template bool rowsAboutToBeRemovedFor(const QModelIndex &parent, int first, int last); template void modelAboutToBeResetFor(); const std::unique_ptr m_ui; ProjectContainer m_project; QString m_filePath; bool m_unsavedChanges{}; const std::unique_ptr m_projectTreeModel; std::map m_spritePropertiesWindows; std::map m_soundPropertiesWindows; std::map m_backgroundPropertiesWindows; std::map m_pathPropertiesWindows; std::map m_scriptPropertiesWindows; std::map m_fontPropertiesWindows; std::map m_timeLinePropertiesWindows; std::map m_objectPropertiesWindows; std::map m_roomPropertiesWindows; QMdiSubWindow *m_objectInformationWindow{}; QMdiSubWindow *m_userDefinedConstantsWindow{}; QMdiSubWindow *m_triggersWindow{}; QMdiSubWindow *m_includedFilesWindow{}; QActionGroup *m_actionGroupViewMode{}; QActionGroup *m_actionGroupStyles{}; QActionGroup *m_actionGroupWindows{}; };