From fe103a482f3e9dfbe89e9b040b711d4e978e780d Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 15 Feb 2020 15:55:11 +0100 Subject: [PATCH] PartDesign: add/remove features to list view in linear pattern panel --- .../Gui/TaskLinearPatternParameters.cpp | 22 +++++++++++++++++-- .../Gui/TaskLinearPatternParameters.h | 2 ++ .../Gui/TaskTransformedParameters.cpp | 22 +++++++++++++++---- .../Gui/TaskTransformedParameters.h | 2 ++ 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp index 8674a6c427..2ac64e9a78 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.cpp @@ -231,12 +231,30 @@ void TaskLinearPatternParameters::kickUpdateViewTimer() const updateViewTimer->start(); } +void TaskLinearPatternParameters::addObject(App::DocumentObject* obj) +{ + QString label = QString::fromUtf8(obj->Label.getValue()); + QString objectName = QString::fromLatin1(obj->getNameInDocument()); + + QListWidgetItem* item = new QListWidgetItem(); + item->setText(label); + item->setData(Qt::UserRole, objectName); + ui->listWidgetFeatures->addItem(item); +} + +void TaskLinearPatternParameters::removeObject(App::DocumentObject* obj) +{ + QString label = QString::fromUtf8(obj->Label.getValue()); + removeItemFromListWidget(ui->listWidgetFeatures, label); +} + void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { - if (selectionMode!=none && msg.Type == Gui::SelectionChanges::AddSelection) { + if (selectionMode != none && msg.Type == Gui::SelectionChanges::AddSelection) { if (originalSelected(msg)) { exitSelectionMode(); - } else { + } + else if (selectionMode == reference) { // TODO check if this works correctly (2015-09-01, Fat-Zer) exitSelectionMode(); std::vector directions; diff --git a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h index b717a79736..b492c965cd 100644 --- a/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h +++ b/src/Mod/PartDesign/Gui/TaskLinearPatternParameters.h @@ -69,6 +69,8 @@ private Q_SLOTS: virtual void onFeatureDeleted(void); protected: + virtual void addObject(App::DocumentObject*); + virtual void removeObject(App::DocumentObject*); virtual void changeEvent(QEvent *e); virtual void onSelectionChanged(const Gui::SelectionChanges& msg); virtual void clearButtons(); diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp index 3ab316d349..a5e413ae51 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.cpp @@ -116,6 +116,14 @@ int TaskTransformedParameters::getUpdateViewTimeout() const return 500; } +void TaskTransformedParameters::addObject(App::DocumentObject*) +{ +} + +void TaskTransformedParameters::removeObject(App::DocumentObject*) +{ +} + bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& msg) { if (msg.Type == Gui::SelectionChanges::AddSelection && ( @@ -132,15 +140,21 @@ bool TaskTransformedParameters::originalSelected(const Gui::SelectionChanges& ms std::vector originals = pcTransformed->Originals.getValues(); std::vector::iterator o = std::find(originals.begin(), originals.end(), selectedObject); if (selectionMode == addFeature) { - if (o == originals.end()) + if (o == originals.end()) { originals.push_back(selectedObject); - else + addObject(selectedObject); + } + else { return false; // duplicate selection + } } else { - if (o != originals.end()) + if (o != originals.end()) { originals.erase(o); - else + removeObject(selectedObject); + } + else { return false; + } } setupTransaction(); pcTransformed->Originals.setValues(originals); diff --git a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h index 9d9b35eb83..c93fa05034 100644 --- a/src/Mod/PartDesign/Gui/TaskTransformedParameters.h +++ b/src/Mod/PartDesign/Gui/TaskTransformedParameters.h @@ -190,6 +190,8 @@ protected: void checkVisibility(); protected: + virtual void addObject(App::DocumentObject*); + virtual void removeObject(App::DocumentObject*); /** Notifies when the object is about to be removed. */ virtual void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj); virtual void changeEvent(QEvent *e) = 0;