From b9db90ea20682cecb3d8b5003723df55b14b4b92 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Thu, 9 May 2024 23:18:53 +0200 Subject: [PATCH] Gui: offer possibility to editing view provider to handle "Select All" command --- src/Gui/View3DInventorViewer.cpp | 13 ++++++++++++- src/Gui/View3DInventorViewer.h | 2 ++ src/Gui/ViewProvider.h | 3 +++ src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 6 ++++++ src/Mod/Sketcher/Gui/ViewProviderSketch.h | 3 +++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index c792191e0c..debf170a5e 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -227,7 +227,12 @@ public: else if (event->type() == QEvent::KeyPress) { auto ke = static_cast(event); // NOLINT if (ke->matches(QKeySequence::SelectAll)) { - static_cast(obj)->selectAll(); + auto* viewer3d = static_cast(obj); + auto* editingVP = viewer3d->getEditingViewProvider(); + if(!editingVP || !editingVP->selectAll()) + { + viewer3d->selectAll(); + } return true; } } @@ -1088,6 +1093,12 @@ bool View3DInventorViewer::isEditingViewProvider() const return this->editViewProvider != nullptr; } +/// return currently editing view provider +ViewProvider* View3DInventorViewer::getEditingViewProvider() const +{ + return this->editViewProvider; +} + /// display override mode void View3DInventorViewer::setOverrideMode(const std::string& mode) { diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index cdcdc5c853..d212525b96 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -220,6 +220,8 @@ public: void setEditingViewProvider(Gui::ViewProvider* vp, int ModNum); /// return whether a view provider is edited bool isEditingViewProvider() const; + /// return currently editing view provider + ViewProvider* getEditingViewProvider() const; /// reset from edit mode void resetEditingViewProvider(); void setupEditingRoot(SoNode *node=nullptr, const Base::Matrix4D *mat=nullptr); diff --git a/src/Gui/ViewProvider.h b/src/Gui/ViewProvider.h index fce09375d2..a209ec7551 100644 --- a/src/Gui/ViewProvider.h +++ b/src/Gui/ViewProvider.h @@ -462,6 +462,9 @@ public: virtual void getTaskViewContent(std::vector&) const {} //@} + /// is called when the provider is in edit and a "Select All" command was issued + /// Provider shall return 'false' is it ignores the command, 'true' otherwise + virtual bool selectAll() { return false; } /// is called when the provider is in edit and a key event occurs. Only ESC ends edit. virtual bool keyPressed(bool pressed, int key); /// Is called by the tree if the user double clicks on the object. It returns the string diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 1b7d7932b3..40d31aeb88 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -2588,6 +2588,12 @@ void ViewProviderSketch::updateColor() editCoinManager->updateColor(); } +bool ViewProviderSketch::selectAll() +{ + // TODO: eventually implement "select all" logic + return true; +} + bool ViewProviderSketch::doubleClicked() { Gui::Application::Instance->activeDocument()->setEdit(this); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index dfaee9ee8e..89a9e83cd9 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -656,6 +656,9 @@ public: { return nullptr; } + /// is called when the provider is in edit and a "Select All" command was issued + /// Provider shall return 'false' is it ignores the command, 'true' otherwise + bool selectAll() override; /// is called by the tree if the user double clicks on the object bool doubleClicked() override; /// is called when the Provider is in edit and the mouse is moved