From c8a4cf20ada02b6a8f0e73aebf964cc20baf5980 Mon Sep 17 00:00:00 2001 From: WandererFan Date: Wed, 20 Jul 2016 12:41:20 -0400 Subject: [PATCH] Simplify ClipMinus selection logic --- src/Mod/TechDraw/Gui/Command.cpp | 43 ++++++++++++++------------------ 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/src/Mod/TechDraw/Gui/Command.cpp b/src/Mod/TechDraw/Gui/Command.cpp index 46ceb89dbe..868a930d7a 100644 --- a/src/Mod/TechDraw/Gui/Command.cpp +++ b/src/Mod/TechDraw/Gui/Command.cpp @@ -642,37 +642,32 @@ CmdTechDrawClipMinus::CmdTechDrawClipMinus() void CmdTechDrawClipMinus::activated(int iMsg) { - std::vector selection = getSelection().getSelectionEx(); - if (selection.size() != 2) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select 1 DrawViewClip and 1 DrawView.")); - return; - } - - TechDraw::DrawViewClip* clip = 0; - TechDraw::DrawView* view = 0; - std::vector::iterator itSel = selection.begin(); - for (; itSel != selection.end(); itSel++) { - if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { - clip = dynamic_cast((*itSel).getObject()); - } else if ((*itSel).getObject()->isDerivedFrom(TechDraw::DrawView::getClassTypeId())) { - view = dynamic_cast((*itSel).getObject()); - } - } - if (!view) { + std::vector dObj = getSelection().getObjectsOfType(TechDraw::DrawView::getClassTypeId()); + if (dObj.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), QObject::tr("Select exactly one Drawing View object.")); return; } - if (!clip) { - QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Select exactly one Clip object.")); - return; + TechDraw::DrawView* view = dynamic_cast(dObj.front()); + + bool clipFound = false; + TechDraw::DrawPage* page = view->findParentPage(); + const std::vector pViews = page->Views.getValues(); + TechDraw::DrawViewClip* clip = 0; + for (auto& v:pViews) { + clip = nullptr; + if (v->isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { + clip = dynamic_cast(v); + if (clip->isViewInClip(view)) { + clipFound = true; + break; + } + } } - if (!clip->isViewInClip(view)) { + if (!clipFound) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), - QObject::tr("Selected View is not in Clip.")); + QObject::tr("View does not belong to a Clip")); return; }