summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Qt3DStudio/Application/StudioApp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Authoring/Qt3DStudio/Application/StudioApp.h')
-rw-r--r--src/Authoring/Qt3DStudio/Application/StudioApp.h300
1 files changed, 300 insertions, 0 deletions
diff --git a/src/Authoring/Qt3DStudio/Application/StudioApp.h b/src/Authoring/Qt3DStudio/Application/StudioApp.h
new file mode 100644
index 00000000..11e50138
--- /dev/null
+++ b/src/Authoring/Qt3DStudio/Application/StudioApp.h
@@ -0,0 +1,300 @@
+/****************************************************************************
+**
+** Copyright (C) 1999-2002 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef INCLUDED_STUDIO_APP_H
+#define INCLUDED_STUDIO_APP_H
+
+#include "StudioObjectTypes.h"
+#include "Qt3DSImportComposerTypes.h"
+#include "Qt3DSDMComposerTypeDefinitions.h"
+#include "DispatchListeners.h"
+#include "Qt3DSDMHandles.h"
+#include <QtWidgets/qapplication.h>
+
+namespace Q3DStudio {
+class IInternalDirectoryWatchingSystem;
+class IDirectoryWatchingSystem;
+class ITickTock;
+class IStudioRenderer;
+struct SSelectedValue;
+}
+
+namespace qt3dsdm {
+class ISignalConnection;
+}
+
+struct StudioManipulationModes
+{
+ enum Enum {
+ Local,
+ Global,
+ };
+};
+
+class CCore;
+class CDialogs;
+class CInspectableBase;
+class CDirectoryWatchingSystemWrapper;
+class CHotKeys;
+class CViews;
+class CMainFrame;
+enum EStudioObjectType;
+struct SubPresentationRecord;
+class CDataInputDialogItem;
+
+QT_FORWARD_DECLARE_CLASS(QCommandLineParser)
+
+class CStudioApp : public QObject,
+ public CCoreAsynchronousEventListener,
+ public CAppStatusListener,
+ public CFailListener,
+ public CPresentationChangeListener // to setup auto set keyframes
+{
+ Q_OBJECT
+public:
+ CStudioApp();
+ virtual ~CStudioApp();
+
+ virtual bool initInstance(const QCommandLineParser &parser, bool isOpenGLES = false);
+ virtual bool run(const QCommandLineParser &parser);
+
+ void onAppAbout();
+
+ Q3DStudio::IDirectoryWatchingSystem &getDirectoryWatchingSystem();
+ void setupTimer(long inMessageId, QWidget *inWnd);
+ Q3DStudio::ITickTock &getTickTock();
+ Q3DStudio::IStudioRenderer &getRenderer();
+ void clearGuides();
+#if (defined Q_OS_MACOS)
+ void openApplication(const QString &inFilename);
+#endif
+ bool handleWelcomeRes(int res, bool recursive);
+
+public Q_SLOTS:
+ void handleMessageReceived(const QString &message, QObject *socket);
+ void performShutdown();
+
+protected:
+ bool runApplication();
+ bool blankRunApplication();
+ bool openAndRunApplication(const QString &inFilename);
+ bool createAndRunApplication(const QString &filename, const QString &folder = QString(),
+ bool isNewProject = true);
+ void initCore();
+ bool showStartupDialog();
+ QString resolvePresentationFile(const QString &inFile);
+
+ CCore *m_core;
+ bool m_isSilent; // true indicates Studio running in silent mode (no GUI)
+ CViews *m_views;
+ long m_toolMode;
+ StudioManipulationModes::Enum m_manipulationMode; // Controls what space the tras, rot, and
+ // scale manipulations work in.
+ long m_selectMode;
+ CDialogs *m_dialogs;
+ long m_playbackTime; // Stores the playhead's starting position so that it can be restored
+ //after playing the presentation for a little while
+ qt3dsdm::Qt3DSDMSlideHandle m_playbackOriginalSlide; // Stores the current slide handle
+ // before playback started.
+
+ std::shared_ptr<Q3DStudio::ITickTock> m_tickTock;
+ std::shared_ptr<Q3DStudio::IDirectoryWatchingSystem> m_directoryWatchingSystem;
+ std::shared_ptr<Q3DStudio::IStudioRenderer> m_renderer;
+ bool m_authorZoom;
+
+private:
+ void playbackPreviewStart();
+ void playbackPreviewEnd();
+ QString getRenderablePath(const QString &filePath) const;
+
+ bool m_welcomeShownThisSession;
+ // are we are launching welcome screen again due to user canceling file dialog?
+ bool m_goStraightToWelcomeFileDialog;
+ bool m_playbackPreviewOn = false;
+ bool m_isOnProgress = false;
+ int m_tutorialPage;
+ QTimer *m_autosaveTimer;
+#if (defined Q_OS_MACOS)
+ bool m_fileOpenEvent = false;
+#endif
+
+public:
+ CMainFrame* m_pMainWnd;
+ QWidget *m_lastActiveView = nullptr;
+ QHash<QString, bool> m_qmlStreamMap;
+
+ CCore *GetCore();
+ CViews *GetViews();
+ CDialogs *GetDialogs();
+ long GetToolMode();
+ void SetToolMode(long inToolMode);
+ long GetSelectMode();
+ void SetSelectMode(long inSelectMode);
+
+ StudioManipulationModes::Enum GetManipulationMode() const;
+ void SetManipulationMode(StudioManipulationModes::Enum inManipulationMode);
+
+ bool CanUndo();
+ bool CanRedo();
+ void OnCopy();
+ bool CanCopy();
+ QString GetCopyType();
+ QString getDuplicateType() const;
+ QString getDeleteType() const;
+ bool canGroupSelectedObjects() const;
+ bool canUngroupSelectedObjects() const;
+ bool groupSelectedObjects() const;
+ bool ungroupSelectedObjects() const;
+ void OnCut();
+ bool CanCut();
+ void OnPaste();
+ bool CanPaste();
+ QString GetPasteType();
+ void SetSelectedObjectTimebarColor();
+ bool CanChangeTimebarColor();
+ void HandleSetChangedKeys();
+ void DeleteSelectedKeys();
+ void DeleteSelectedObject();
+ void HandleDuplicateCommand();
+ void OnToggleAutosetKeyframes();
+ void SetAutosetKeyframes(bool inFlag);
+ void PlaybackPlay();
+ void PlaybackStopNoRestore();
+ void PlaybackRewind();
+ bool IsPlaying();
+ void OnRevert();
+ bool CanRevert() const;
+ void OnFileOpenRecent(const QString &inDocument);
+ bool PerformSavePrompt();
+ void PlaybackStop();
+ bool isPlaybackPreviewOn() const;
+ void advanceTime();
+ void reduceTime();
+ void advanceTimeBig();
+ void reduceTimeBig();
+ void PlaybackToggle();
+ void RegisterGlobalKeyboardShortcuts(CHotKeys *inShortcutHandler, QWidget *actionParent);
+ bool OnSave(bool autosave = false);
+ void onProjectSaveAs();
+ bool OnLoadDocument(const QString &inDocument, bool inShowStartupDialogOnError = true);
+ void OnLoadDocumentCatcher(const QString &inLocation);
+ void OnFileOpen();
+ QString OnProjectNew();
+ void OnProjectClose();
+ void OnFileNew();
+ bool IsAuthorZoom() const;
+ bool isOnProgress() const;
+ void SetAuthorZoom(bool inZoom);
+ void SetAutosaveEnabled(bool enabled);
+ void SetAutosaveInterval(int interval);
+ void toggleEyeball();
+ void toggleShy();
+ void toggleLocked();
+ void showPresentationIdUniqueWarning();
+ void showPresentationIdEmptyWarning();
+ void showInvalidFilenameWarning();
+ void showShaderCompileError(const QString &error);
+ void checkDeletedDatainputs(bool askFromUser);
+ void saveDataInputsToProjectFile();
+ void verifyDatainputBindings();
+ void duplicatePresentation(const QString &presFile = {});
+
+ // CCoreAsynchronousEventListener
+ void OnAsynchronousCommand(CCmd *inCmd) override;
+
+ // CAppStatusListener
+ void OnDisplayAppStatus(const QString &inStatusMsg) override;
+ void OnProgressBegin(const QString &inActionText,
+ const QString &inAdditionalText) override;
+ void OnProgressEnd() override;
+
+ // CFailListener
+ void OnAssetDeleteFail() override;
+ void OnPasteFail() override;
+ void OnBuildconfigurationFileParseFail(const QString &inMessage) override;
+ void OnSaveFail(bool inKnownError) override;
+ void OnErrorFail(const QString &inText) override;
+ void OnRefreshResourceFail(const QString &inResourceName,
+ const QString &inDescription) override;
+ void OnUndefinedDatainputsFail(const QMultiMap<QString,
+ QPair<qt3dsdm::Qt3DSDMInstanceHandle,
+ qt3dsdm::Qt3DSDMPropertyHandle>> *map,
+ bool askFromUser) override;
+
+ // CPresentationChangeListener
+ void OnNewPresentation() override;
+ void OnPresentationModifiedExternally() override;
+
+ void SetConvertingPresentationOn()
+ {
+ m_convertPresentation = true;
+ }
+ void SetConvertingPresentationOff()
+ {
+ m_convertPresentation = false;
+ }
+ bool IsConvertingPresentationOn()
+ {
+ return m_convertPresentation;
+ }
+ int getDocumentVersion() const
+ {
+ return m_docVersion;
+ }
+ void setDocumentVersion(int version)
+ {
+ m_docVersion = version;
+ }
+
+ QString m_helpFilePath;
+ QString m_gettingStartedFilePath;
+ bool m_convertPresentation = false;
+ int m_docVersion = 0;
+
+ QVector<SubPresentationRecord> m_subpresentations;
+ QMap<QString, CDataInputDialogItem *> m_dataInputDialogItems;
+
+ QString getPresentationId(const QString &filePath) const;
+ QString getQmlId(const QString &filePath) const;
+ QString getRenderableId(const QString &filePath) const;
+ QString getRenderableAbsolutePath(const QString &renderableId) const;
+ QSize getRenderableSize(const QString &renderableId);
+
+ QString getMostRecentDirectory() const;
+ QString getMostRecentProjectParentDir() const;
+
+ void setLastActiveView(QWidget *widget) { m_lastActiveView = widget; }
+ QWidget *lastActiveView() const { return m_lastActiveView; }
+
+ bool isQmlStream(const QString &fileName);
+};
+
+extern CStudioApp g_StudioApp;
+
+#endif // INCLUDED_STUDIO_APP_H