diff --git a/src/libs/qmlpuppetcommunication/interfaces/nodeinstanceglobal.h b/src/libs/qmlpuppetcommunication/interfaces/nodeinstanceglobal.h index 58166516c80..791b285e66f 100644 --- a/src/libs/qmlpuppetcommunication/interfaces/nodeinstanceglobal.h +++ b/src/libs/qmlpuppetcommunication/interfaces/nodeinstanceglobal.h @@ -46,7 +46,8 @@ enum class View3DActionType { ParticlesSeek, SyncEnvBackground, GetNodeAtPos, - SetBakeLightsView3D + SetBakeLightsView3D, + SplitViewToggle }; constexpr bool isNanotraceEnabled() diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp index e8ebf740397..79765aa25f8 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp @@ -121,6 +121,7 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState) const QString particleEmitterKey = QStringLiteral("showParticleEmitter"); const QString particlesPlayKey = QStringLiteral("particlePlay"); const QString syncEnvBgKey = QStringLiteral("syncEnvBackground"); + const QString splitViewKey = QStringLiteral("splitView"); if (sceneState.contains(sceneKey)) { qint32 newActiveScene = sceneState[sceneKey].value(); @@ -191,6 +192,11 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState) else m_particlesPlayAction->action()->setChecked(true); + if (sceneState.contains(splitViewKey)) + m_splitViewAction->action()->setChecked(sceneState[splitViewKey].toBool()); + else + m_splitViewAction->action()->setChecked(false); + // Syncing background color only makes sense for children of View3D instances bool syncValue = false; bool syncEnabled = false; @@ -1015,6 +1021,17 @@ void Edit3DView::createEdit3DActions() this, snapConfigTrigger); + m_splitViewAction = std::make_unique( + QmlDesigner::Constants::EDIT3D_SPLIT_VIEW, + View3DActionType::SplitViewToggle, + QCoreApplication::translate("SplitViewToggleAction", + "Toggle Split View On/Off"), + QKeySequence(Qt::Key_4), + true, + false, + toolbarIcon(DesignerIcons::ScaleToolIcon), // TODO Placeholder, needs proper icon + this); + m_leftActions << m_selectionModeAction.get(); m_leftActions << nullptr; // Null indicates separator m_leftActions << nullptr; // Second null after separator indicates an exclusive group @@ -1036,6 +1053,7 @@ void Edit3DView::createEdit3DActions() m_leftActions << nullptr; m_leftActions << m_visibilityTogglesAction.get(); m_leftActions << m_backgroundColorMenuAction.get(); + m_leftActions << m_splitViewAction.get(); m_rightActions << m_particleViewModeAction.get(); m_rightActions << m_particlesPlayAction.get(); diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.h b/src/plugins/qmldesigner/components/edit3d/edit3dview.h index c9d93381e05..84742943a22 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.h +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.h @@ -139,6 +139,7 @@ private: std::unique_ptr m_selectBackgroundColorAction; std::unique_ptr m_selectGridColorAction; std::unique_ptr m_resetColorAction; + std::unique_ptr m_splitViewAction; // View3DActionType::Empty actions std::unique_ptr m_resetAction; diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h index 4ca8b1ea923..56a4ebca95f 100644 --- a/src/plugins/qmldesigner/qmldesignerconstants.h +++ b/src/plugins/qmldesigner/qmldesignerconstants.h @@ -62,6 +62,7 @@ const char EDIT3D_PARTICLE_MODE[] = "QmlDesigner.Editor3D.ParticleViewModeTo const char EDIT3D_PARTICLES_PLAY[] = "QmlDesigner.Editor3D.ParticlesPlay"; const char EDIT3D_PARTICLES_SEEKER[] = "QmlDesigner.Editor3D.ParticlesSeeker"; const char EDIT3D_PARTICLES_RESTART[] = "QmlDesigner.Editor3D.ParticlesRestart"; +const char EDIT3D_SPLIT_VIEW[] = "QmlDesigner.Editor3D.SplitViewToggle"; const char EDIT3D_VISIBILITY_TOGGLES[] = "QmlDesigner.Editor3D.VisibilityToggles"; const char EDIT3D_BACKGROUND_COLOR_ACTIONS[] = "QmlDesigner.Editor3D.BackgroundColorActions"; const char EDIT3D_BAKE_LIGHTS[] = "QmlDesigner.Editor3D.BakeLights"; diff --git a/src/tools/qml2puppet/mockfiles/qt6/EditView3D.qml b/src/tools/qml2puppet/mockfiles/qt6/EditView3D.qml index 4e2f4ea91d7..fd80b26584f 100644 --- a/src/tools/qml2puppet/mockfiles/qt6/EditView3D.qml +++ b/src/tools/qml2puppet/mockfiles/qt6/EditView3D.qml @@ -28,6 +28,7 @@ Item { property color backgroundGradientColorEnd: "#999999" property color gridColor: "#cccccc" property bool syncEnvBackground: false + property bool splitView: false enum SelectionMode { Item, Group } enum TransformMode { Move, Rotate, Scale } @@ -65,6 +66,7 @@ Item { onShowParticleEmitterChanged: _generalHelper.storeToolState(sceneId, "showParticleEmitter", showParticleEmitter); onSelectionModeChanged: _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode); onTransformModeChanged: _generalHelper.storeToolState(sceneId, "transformMode", transformMode); + onSplitViewChanged: _generalHelper.storeToolState(sceneId, "splitView", splitView) onActiveSceneChanged: updateActiveScene() @@ -294,6 +296,11 @@ Item { cameraControl.restoreCameraState(toolStates.editCamState); else if (resetToDefault) cameraControl.restoreDefaultState(); + + if ("splitView" in toolStates) + splitView = toolStates.splitView; + else if (resetToDefault) + splitView = false; } function storeCurrentToolStates() @@ -309,6 +316,7 @@ Item { _generalHelper.storeToolState(sceneId, "globalOrientation", globalOrientation) _generalHelper.storeToolState(sceneId, "selectionMode", selectionMode); _generalHelper.storeToolState(sceneId, "transformMode", transformMode); + _generalHelper.storeToolState(sceneId, "splitView", splitView) cameraControl.storeCameraState(0); } diff --git a/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 7647fd8ddbd..f39263f65fe 100644 --- a/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/src/tools/qml2puppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -2497,6 +2497,9 @@ void Qt5InformationNodeInstanceServer::view3DAction(const View3DActionCommand &c return; } #endif + case View3DActionType::SplitViewToggle: + updatedToolState.insert("splitView", command.isEnabled()); + break; default: break;