// Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "itemlibraryinfo.h" #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QAction; class QInputEvent; QT_END_NAMESPACE namespace QmlDesigner { class Edit3DWidget; class Edit3DAction; class Edit3DCameraAction; class QMLDESIGNERCOMPONENTS_EXPORT Edit3DView : public AbstractView { Q_OBJECT public: Edit3DView(ExternalDependenciesInterface &externalDependencies); WidgetInfo widgetInfo() override; Edit3DWidget *edit3DWidget() const; void selectedNodesChanged(const QList &selectedNodeList, const QList &lastSelectedNodeList) override; void renderImage3DChanged(const QImage &img) override; void updateActiveScene3D(const QVariantMap &sceneState) override; void modelAttached(Model *model) override; void modelAboutToBeDetached(Model *model) override; void importsChanged(const QList &addedImports, const QList &removedImports) override; void customNotification(const AbstractView *view, const QString &identifier, const QList &nodeList, const QList &data) override; void nodeAtPosReady(const ModelNode &modelNode, const QVector3D &pos3d) override; void sendInputEvent(QInputEvent *e) const; void edit3DViewResized(const QSize &size) const; QSize canvasSize() const; void createEdit3DActions(); QVector leftActions() const; QVector rightActions() const; QVector visibilityToggleActions() const; QVector backgroundColorActions() const; Edit3DAction *edit3DAction(View3DActionType type) const; void addQuick3DImport(); void startContextMenu(const QPoint &pos); void dropMaterial(const ModelNode &matNode, const QPointF &pos); void dropBundleMaterial(const QPointF &pos); void dropTexture(const ModelNode &textureNode, const QPointF &pos); void dropComponent(const ItemLibraryEntry &entry, const QPointF &pos); void dropAsset(const QString &file, const QPointF &pos); private slots: void onEntriesChanged(); private: enum class NodeAtPosReqType { BundleMaterialDrop, ComponentDrop, MaterialDrop, TextureDrop, ContextMenu, AssetDrop, None }; void registerEdit3DAction(Edit3DAction *action); void createEdit3DWidget(); void checkImports(); void handleEntriesChanged(); void showMaterialPropertiesView(); Edit3DAction *createSelectBackgroundColorAction(QAction *syncBackgroundColorAction); Edit3DAction *createGridColorSelectionAction(); Edit3DAction *createResetColorAction(QAction *syncBackgroundColorAction); Edit3DAction *createSyncBackgroundColorAction(); Edit3DAction *createSeekerSliderAction(); QPointer m_edit3DWidget; QVector m_leftActions; QVector m_rightActions; QVector m_visibilityToggleActions; QVector m_backgroundColorActions; QMap> m_edit3DActions; Edit3DAction *m_selectionModeAction = nullptr; Edit3DAction *m_moveToolAction = nullptr; Edit3DAction *m_rotateToolAction = nullptr; Edit3DAction *m_scaleToolAction = nullptr; Edit3DAction *m_fitAction = nullptr; Edit3DCameraAction *m_alignCamerasAction = nullptr; Edit3DCameraAction *m_alignViewAction = nullptr; Edit3DAction *m_cameraModeAction = nullptr; Edit3DAction *m_orientationModeAction = nullptr; Edit3DAction *m_editLightAction = nullptr; Edit3DAction *m_showGridAction = nullptr; Edit3DAction *m_showSelectionBoxAction = nullptr; Edit3DAction *m_showIconGizmoAction = nullptr; Edit3DAction *m_showCameraFrustumAction = nullptr; Edit3DAction *m_showParticleEmitterAction = nullptr; Edit3DAction *m_resetAction = nullptr; Edit3DAction *m_particleViewModeAction = nullptr; Edit3DAction *m_particlesPlayAction = nullptr; Edit3DAction *m_particlesRestartAction = nullptr; Edit3DAction *m_visibilityTogglesAction = nullptr; Edit3DAction *m_backgrondColorMenuAction = nullptr; Edit3DAction *m_seekerAction = nullptr; int particlemode; ModelCache m_canvasCache; ModelNode m_droppedModelNode; ItemLibraryEntry m_droppedEntry; QString m_droppedFile; NodeAtPosReqType m_nodeAtPosReqType; QPoint m_contextMenuPos; QTimer m_compressionTimer; friend class Edit3DAction; }; } // namespace QmlDesigner