From b4c0721d7233c3d00f09a4d2635e68582c245589 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 12 May 2025 12:52:18 +0300 Subject: [PATCH] QmlDesigner: Fix 3D split preset display issues Checkmark will now show correct split mode when switching between two different 3D scenes if they have different split modes. Also, clicking already checked mode will not uncheck it. Fixes: QDS-15334 Change-Id: I6ec9b24e95ce5f118cb8497958b4270f30b9bfd2 Reviewed-by: Mahmoud Badri --- .../qmldesigner/components/edit3d/edit3dview.cpp | 16 ++++++++++++++++ .../qmldesigner/components/edit3d/edit3dview.h | 1 + 2 files changed, 17 insertions(+) diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp index 5f6605db319..5023fb0f013 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.cpp @@ -275,6 +275,11 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState) else m_syncEnvBackgroundAction->action()->setChecked(false); + if (sceneState.contains(activePresetKey)) + syncActivePresetCheckedState(sceneState[activePresetKey].toString()); + else + syncActivePresetCheckedState("Single"); + // Selection context change updates visible and enabled states SelectionContext selectionContext(this); selectionContext.setUpdateMode(SelectionContext::UpdateMode::Fast); @@ -731,6 +736,8 @@ void Edit3DView::createViewportPresetActions() for (Edit3DAction *action : std::as_const(m_viewportPresetActions)) { if (action->menuId() != targetAction->menuId()) action->action()->setChecked(false); + else + action->action()->setChecked(true); } emitView3DAction(View3DActionType::ViewportPreset, label); }; @@ -912,6 +919,15 @@ void Edit3DView::syncCameraSpeedToNewView() setCameraSpeedAuxData(speed, multiplier); } +void Edit3DView::syncActivePresetCheckedState(const QString &preset) +{ + m_viewportPresetSingleAction->action()->setChecked(preset == "Single"); + m_viewportPresetQuadAction->action()->setChecked(preset == "Quad"); + m_viewportPreset3Left1RightAction->action()->setChecked(preset == "3Left1Right"); + m_viewportPreset2HorizontalAction->action()->setChecked(preset == "2Horizontal"); + m_viewportPreset2VerticalAction->action()->setChecked(preset == "2Vertical"); +} + QmlObjectNode Edit3DView::currentSceneEnv() { PropertyName envProp{"environment"}; diff --git a/src/plugins/qmldesigner/components/edit3d/edit3dview.h b/src/plugins/qmldesigner/components/edit3d/edit3dview.h index dc0aad559b5..fa1da27db36 100644 --- a/src/plugins/qmldesigner/components/edit3d/edit3dview.h +++ b/src/plugins/qmldesigner/components/edit3d/edit3dview.h @@ -151,6 +151,7 @@ private: void createViewportPresetActions(); void createSeekerSliderAction(); void syncCameraSpeedToNewView(); + void syncActivePresetCheckedState(const QString &preset); QmlObjectNode currentSceneEnv(); void storeCurrentSceneEnvironment();