From 94eadd436d7b9710f476b14d60bb8a9b1e2c532f Mon Sep 17 00:00:00 2001 From: Dave Corley Date: Fri, 22 Dec 2023 17:11:23 -0600 Subject: [PATCH] Feat(worldspacewidget.cpp): Implement shortcut for visibility switching & unhiding all instances --- apps/opencs/view/render/worldspacewidget.cpp | 24 ++++++++++++++++++++ apps/opencs/view/render/worldspacewidget.hpp | 2 -- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/apps/opencs/view/render/worldspacewidget.cpp b/apps/opencs/view/render/worldspacewidget.cpp index 6911f5f043..3c7dc34efb 100644 --- a/apps/opencs/view/render/worldspacewidget.cpp +++ b/apps/opencs/view/render/worldspacewidget.cpp @@ -50,6 +50,7 @@ #include "cameracontroller.hpp" #include "instancemode.hpp" +#include "mask.hpp" #include "object.hpp" #include "pathgridmode.hpp" @@ -135,6 +136,12 @@ CSVRender::WorldspaceWidget::WorldspaceWidget(CSMDoc::Document& document, QWidge CSMPrefs::Shortcut* abortShortcut = new CSMPrefs::Shortcut("scene-edit-abort", this); connect(abortShortcut, qOverload<>(&CSMPrefs::Shortcut::activated), this, &WorldspaceWidget::abortDrag); + connect(new CSMPrefs::Shortcut("scene-toggle-visibility", this), qOverload<>(&CSMPrefs::Shortcut::activated), this, + &WorldspaceWidget::toggleHiddenInstances); + + connect(new CSMPrefs::Shortcut("scene-unhide-all", this), qOverload<>(&CSMPrefs::Shortcut::activated), this, + &WorldspaceWidget::unhideAll); + mInConstructor = false; } @@ -740,6 +747,23 @@ void CSVRender::WorldspaceWidget::speedMode(bool activate) mSpeedMode = activate; } +void CSVRender::WorldspaceWidget::toggleHiddenInstances() +{ + const std::vector> selection = getSelection(Mask_Reference); + + if (selection.empty()) + return; + + const CSVRender::ObjectTag* firstSelection = dynamic_cast(selection.begin()->get()); + + const CSVRender::Mask firstMask + = firstSelection->mObject->getRootNode()->getNodeMask() == Mask_Hidden ? Mask_Reference : Mask_Hidden; + + for (const auto& object : selection) + if (const auto objectTag = dynamic_cast(object.get())) + objectTag->mObject->getRootNode()->setNodeMask(firstMask); +} + void CSVRender::WorldspaceWidget::handleInteraction(InteractionType type, bool activate) { if (activate) diff --git a/apps/opencs/view/render/worldspacewidget.hpp b/apps/opencs/view/render/worldspacewidget.hpp index b7391c1691..a6d87440f1 100644 --- a/apps/opencs/view/render/worldspacewidget.hpp +++ b/apps/opencs/view/render/worldspacewidget.hpp @@ -203,8 +203,6 @@ namespace CSVRender virtual void selectGroup(const std::vector) const = 0; - virtual void hideGroup(const std::vector) const = 0; - virtual void unhideAll() const = 0; virtual std::vector> getEdited(unsigned int elementMask) const = 0;