From bf542266c4bd706e8269e3712cba94ed3cd4dcc7 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 7 Apr 2017 13:07:52 +0200 Subject: [PATCH] close sketch selection task panel on undo --- src/Mod/PartDesign/Gui/TaskFeaturePick.cpp | 24 ++++++++++++++++++++++ src/Mod/PartDesign/Gui/TaskFeaturePick.h | 11 +++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp b/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp index f941f93df6..c2bddba260 100644 --- a/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp +++ b/src/Mod/PartDesign/Gui/TaskFeaturePick.cpp @@ -24,12 +24,14 @@ #ifndef _PreComp_ # include +# include #endif #include #include #include #include +#include #include #include #include @@ -101,6 +103,8 @@ TaskFeaturePick::TaskFeaturePick(std::vector& objects, auto statusIt = status.cbegin(); auto objIt = objects.begin(); assert(status.size() == objects.size()); + + bool attached = false; for (; statusIt != status.end(); ++statusIt, ++objIt) { QListWidgetItem* item = new QListWidgetItem( QString::fromLatin1("%1 (%2)") @@ -113,6 +117,10 @@ TaskFeaturePick::TaskFeaturePick(std::vector& objects, App::Document* pDoc = (*objIt)->getDocument(); documentName = pDoc->getName(); + if (!attached) { + attached = true; + attachDocument(Gui::Application::Instance->getDocument(pDoc)); + } //check if we need to set any origin in temporary visibility mode if (*statusIt != invalidShape && (*objIt)->isDerivedFrom ( App::OriginFeature::getClassTypeId () )) { @@ -425,6 +433,22 @@ void TaskFeaturePick::onItemSelectionChanged() doSelection = false; } +void TaskFeaturePick::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) +{ + std::vector::iterator it; + it = std::find(origins.begin(), origins.end(), &Obj); + if (it != origins.end()) { + origins.erase(it); + } +} + +void TaskFeaturePick::slotUndoDocument(const Gui::Document&) +{ + if (origins.empty()) { + QTimer::singleShot(100, &Gui::Control(), SLOT(closeDialog())); + } +} + void TaskFeaturePick::showExternal(bool val) { ui->checkOtherBody->setChecked(val); diff --git a/src/Mod/PartDesign/Gui/TaskFeaturePick.h b/src/Mod/PartDesign/Gui/TaskFeaturePick.h index 83f55ba3fa..c1d981cedf 100644 --- a/src/Mod/PartDesign/Gui/TaskFeaturePick.h +++ b/src/Mod/PartDesign/Gui/TaskFeaturePick.h @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -35,7 +36,9 @@ namespace PartDesignGui { class SoSwitch; class Ui_TaskFeaturePick; -class TaskFeaturePick : public Gui::TaskView::TaskBox, public Gui::SelectionObserver +class TaskFeaturePick : public Gui::TaskView::TaskBox + , public Gui::SelectionObserver + , public Gui::DocumentObserver { Q_OBJECT @@ -69,6 +72,12 @@ protected Q_SLOTS: void onSelectionChanged(const Gui::SelectionChanges& msg); void onItemSelectionChanged(); +protected: + /** Notifies when the object is about to be removed. */ + virtual void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj); + /** Notifies on undo */ + virtual void slotUndoDocument(const Gui::Document& Doc); + private: Ui_TaskFeaturePick* ui; QWidget* proxy;