From 3857e5200a15e01a8a895fcb059a317cd13874e3 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 15 Apr 2017 23:58:23 +0200 Subject: [PATCH] implement Remove command in context menu --- src/Mod/Surface/Gui/SurfaceFilling.cpp | 34 ++++++++++++++++++++++++++ src/Mod/Surface/Gui/SurfaceFilling.h | 1 + 2 files changed, 35 insertions(+) diff --git a/src/Mod/Surface/Gui/SurfaceFilling.cpp b/src/Mod/Surface/Gui/SurfaceFilling.cpp index 1baf48ac04..235ad81203 100644 --- a/src/Mod/Surface/Gui/SurfaceFilling.cpp +++ b/src/Mod/Surface/Gui/SurfaceFilling.cpp @@ -134,6 +134,12 @@ SurfaceFilling::SurfaceFilling(ViewProviderSurfaceFeature* vp, Surface::SurfaceF selectionMode = None; this->vp = vp; setEditedObject(obj); + + // Create context menu + QAction* action = new QAction(tr("Remove"), this); + ui->listWidget->addAction(action); + connect(action, SIGNAL(triggered()), this, SLOT(onDeleteEdge())); + ui->listWidget->setContextMenuPolicy(Qt::ActionsContextMenu); } /* @@ -373,6 +379,34 @@ void SurfaceFilling::onSelectionChanged(const Gui::SelectionChanges& msg) } } +void SurfaceFilling::onDeleteEdge() +{ + int row = ui->listWidget->currentRow(); + QListWidgetItem* item = ui->listWidget->item(row); + if (item) { + QList data; + data = item->data(Qt::UserRole).toList(); + ui->listWidget->takeItem(row); + delete item; + + App::Document* doc = App::GetApplication().getDocument(data[0].toByteArray()); + App::DocumentObject* obj = doc ? doc->getObject(data[1].toByteArray()) : nullptr; + std::string sub = data[2].toByteArray().constData(); + auto objects = editedObject->BoundaryList.getValues(); + auto element = editedObject->BoundaryList.getSubValues(); + auto it = objects.begin(); + auto jt = element.begin(); + for (; it != objects.end() && jt != element.end(); ++it, ++jt) { + if (*it == obj && *jt == sub) { + objects.erase(it); + element.erase(jt); + editedObject->BoundaryList.setValues(objects, element); + break; + } + } + } +} + // ---------------------------------------------------------------------------- TaskSurfaceFilling::TaskSurfaceFilling(ViewProviderSurfaceFeature* vp, Surface::SurfaceFeature* obj) diff --git a/src/Mod/Surface/Gui/SurfaceFilling.h b/src/Mod/Surface/Gui/SurfaceFilling.h index 937e04b674..8cc399cf43 100644 --- a/src/Mod/Surface/Gui/SurfaceFilling.h +++ b/src/Mod/Surface/Gui/SurfaceFilling.h @@ -103,6 +103,7 @@ private Q_SLOTS: void on_fillType_curved_clicked(); void on_buttonEdgeAdd_clicked(); void on_buttonEdgeRemove_clicked(); + void onDeleteEdge(void); }; class TaskSurfaceFilling : public Gui::TaskView::TaskDialog