diff --git a/src/Gui/TaskMeasure.cpp b/src/Gui/TaskMeasure.cpp index 15fd7740d23a..f0a6f9120021 100644 --- a/src/Gui/TaskMeasure.cpp +++ b/src/Gui/TaskMeasure.cpp @@ -73,6 +73,7 @@ TaskMeasure::TaskMeasure(){ Content.push_back(taskbox); + gatherSelection(); attachSelection(); } @@ -215,6 +216,31 @@ void TaskMeasure::addElement(const char* mod, const char* obName, const char* su update(); } +void TaskMeasure::gatherSelection() { + // Fills the selection stack from the global selection and triggers an update + + if (!Gui::Selection().hasSelection()) { + return; + } + + App::Document* doc = App::GetApplication().getActiveDocument(); + + for (auto sel : Gui::Selection().getSelection()) { + const char* obName = sel.pObject->getNameInDocument(); + App::DocumentObject* ob = doc->getObject(obName); + auto sub = ob->getSubObject(sel.SubName); + std::string mod = sub->getClassTypeId().getModuleName(sub->getTypeId().getName()); + + if (mod != measureModule){ + clearSelection(); + } + measureModule = mod; + selection.push_back(std::tuple(obName, sel.SubName)); + } + + update(); +} + void TaskMeasure::removeObject() { if (_mMeasureObject == nullptr) { return; diff --git a/src/Gui/TaskMeasure.h b/src/Gui/TaskMeasure.h index d64e87dad768..d414a021ba22 100644 --- a/src/Gui/TaskMeasure.h +++ b/src/Gui/TaskMeasure.h @@ -43,7 +43,7 @@ class TaskMeasure : public TaskView::TaskDialog, public Gui::SelectionObserver { QColumnView* dialog; void(*eventCallback)(void*, SoEventCallback*); - App::MeasureElementInfo *elementInfo; + App::MeasureElementInfo *elementInfo = nullptr; TaskMeasure(); ~TaskMeasure(); @@ -55,7 +55,8 @@ class TaskMeasure : public TaskView::TaskDialog, public Gui::SelectionObserver { void addElement(const char* mod, const char* obName, const char* subName); bool hasSelection(); - void clearSelection(); + void clearSelection(); + void gatherSelection(); protected: App::MeasurementBase *_mMeasureObject = nullptr;