X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_SketcherMgr.cpp;h=a6ae7a8a5bcb4f656210a239a4d08275dbb4878f;hb=0b503091623876eda1ae9214e32f8831ef03778b;hp=3b9e813c2ba6efa80b0280ed04dc5973c70c4943;hpb=fb1766a3fb7d2b3e6862e040d528d96a5732f200;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_SketcherMgr.cpp b/src/PartSet/PartSet_SketcherMgr.cpp index 3b9e813c2..a6ae7a8a5 100644 --- a/src/PartSet/PartSet_SketcherMgr.cpp +++ b/src/PartSet/PartSet_SketcherMgr.cpp @@ -48,6 +48,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -116,7 +120,8 @@ void fillFeature2Attribute(const QList& theList, PartSet_SketcherMgr::PartSet_SketcherMgr(PartSet_Module* theModule) : QObject(theModule), myModule(theModule), myIsDragging(false), myDragDone(false), myIsPropertyPanelValueChanged(false), myIsMouseOverWindow(false), - myIsMouseOverViewProcessed(true), myPreviousUpdateViewerEnabled(true) + myIsMouseOverViewProcessed(true), myPreviousUpdateViewerEnabled(true), + myIsPopupMenuActive(false) { ModuleBase_IWorkshop* anIWorkshop = myModule->workshop(); ModuleBase_IViewer* aViewer = anIWorkshop->viewer(); @@ -162,6 +167,10 @@ void PartSet_SketcherMgr::onLeaveViewPort() { if (!isNestedCreateOperation(getCurrentOperation())) return; + // the method should be performed if the popup menu is called, + // the reset of the current widget should not happen + if (myIsPopupMenuActive) + return; myIsMouseOverViewProcessed = false; myIsMouseOverWindow = false; @@ -488,6 +497,10 @@ void PartSet_SketcherMgr::onApplicationStarted() XGUI_ViewerProxy* aViewerProxy = aWorkshop->viewer(); connect(aViewerProxy, SIGNAL(enterViewPort()), this, SLOT(onEnterViewPort())); connect(aViewerProxy, SIGNAL(leaveViewPort()), this, SLOT(onLeaveViewPort())); + + XGUI_ContextMenuMgr* aContextMenuMgr = aWorkshop->contextMenuMgr(); + connect(aContextMenuMgr, SIGNAL(beforeContextMenu()), this, SLOT(onBeforeContextMenu())); + connect(aContextMenuMgr, SIGNAL(afterContextMenu()), this, SLOT(onAfterContextMenu())); } void PartSet_SketcherMgr::onBeforeWidgetActivated(ModuleBase_ModelWidget* theWidget) @@ -508,6 +521,16 @@ void PartSet_SketcherMgr::onBeforeWidgetActivated(ModuleBase_ModelWidget* theWid } } +void PartSet_SketcherMgr::onBeforeContextMenu() +{ + myIsPopupMenuActive = true; +} + +void PartSet_SketcherMgr::onAfterContextMenu() +{ + myIsPopupMenuActive = false; +} + void PartSet_SketcherMgr::get2dPoint(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent, Point& thePoint) { @@ -559,6 +582,10 @@ QStringList PartSet_SketcherMgr::sketchOperationIdList() aIds << SketchPlugin_ConstraintRadius::ID().c_str(); aIds << SketchPlugin_ConstraintPerpendicular::ID().c_str(); aIds << SketchPlugin_ConstraintParallel::ID().c_str(); + aIds << SketchPlugin_ConstraintHorizontal::ID().c_str(); + aIds << SketchPlugin_ConstraintVertical::ID().c_str(); + aIds << SketchPlugin_ConstraintEqual::ID().c_str(); + aIds << SketchPlugin_ConstraintTangent::ID().c_str(); } return aIds; } @@ -727,6 +754,8 @@ bool PartSet_SketcherMgr::canDisplayObject() const return aCanDisplay; } } + if (myIsPopupMenuActive) + return aCanDisplay; // during a nested create operation, the feature is redisplayed only if the mouse over view // of there was a value modified in the property panel after the mouse left the view @@ -734,7 +763,7 @@ bool PartSet_SketcherMgr::canDisplayObject() const return aCanDisplay; } -bool PartSet_SketcherMgr::canChangeConstruction(bool& isConstruction) const +bool PartSet_SketcherMgr::canSetAuxiliary(bool& theValue) const { bool anEnabled = false; ModuleBase_Operation* anOperation = getCurrentOperation(); @@ -745,43 +774,46 @@ bool PartSet_SketcherMgr::canChangeConstruction(bool& isConstruction) const return anEnabled; QObjectPtrList anObjects; - // 1. change construction type of a created feature + // 1. change auxiliary type of a created feature if (PartSet_SketcherMgr::isNestedCreateOperation(anOperation) && PartSet_SketcherMgr::isEntityOperation(anOperation) ) { anObjects.append(anOperation->feature()); } else { - if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) - anOperation->abort(); - // 2. change construction type of selected sketch entities + /// The operation should not be aborted here, because the method does not changed + /// the auxilliary state, but checks the possibility to perform this + ///if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) + /// anOperation->abort(); + // 2. change auxiliary type of selected sketch entities ModuleBase_ISelection* aSelection = myModule->workshop()->selection(); anObjects = aSelection->selectedPresentations(); } anEnabled = anObjects.size() > 0; - bool isNotConstructedFound = false; + bool isNotAuxiliaryFound = false; if (anObjects.size() > 0) { QObjectPtrList::const_iterator anIt = anObjects.begin(), aLast = anObjects.end(); - for (; anIt != aLast && !isNotConstructedFound; anIt++) { + for (; anIt != aLast && !isNotAuxiliaryFound; anIt++) { FeaturePtr aFeature = ModelAPI_Feature::feature(*anIt); if (aFeature.get() != NULL) { std::shared_ptr aSketchFeature = std::dynamic_pointer_cast(aFeature); if (aSketchFeature.get() != NULL) { - std::string anAttribute = SketchPlugin_Feature::CONSTRUCTION_ID(); + std::string anAttribute = SketchPlugin_SketchEntity::AUXILIARY_ID(); - std::shared_ptr aConstructionAttr = + std::shared_ptr anAuxiliaryAttr = std::dynamic_pointer_cast(aSketchFeature->data()->attribute(anAttribute)); - isNotConstructedFound = !aConstructionAttr->value(); + if (anAuxiliaryAttr) + isNotAuxiliaryFound = !anAuxiliaryAttr->value(); } } } } - isConstruction = anObjects.size() && !isNotConstructedFound; + theValue = anObjects.size() && !isNotAuxiliaryFound; return anEnabled; } -void PartSet_SketcherMgr::setConstruction(const bool isChecked) +void PartSet_SketcherMgr::setAuxiliary(const bool isChecked) { ModuleBase_Operation* anOperation = getCurrentOperation(); @@ -792,19 +824,19 @@ void PartSet_SketcherMgr::setConstruction(const bool isChecked) QObjectPtrList anObjects; bool isUseTransaction = false; - // 1. change construction type of a created feature + // 1. change auxiliary type of a created feature if (PartSet_SketcherMgr::isNestedCreateOperation(anOperation) && PartSet_SketcherMgr::isEntityOperation(anOperation) ) { anObjects.append(anOperation->feature()); } else { isUseTransaction = true; - // 2. change construction type of selected sketch entities + // 2. change auxiliary type of selected sketch entities ModuleBase_ISelection* aSelection = myModule->workshop()->selection(); anObjects = aSelection->selectedPresentations(); } - QAction* anAction = myModule->action("CONSTRUCTION_CMD"); + QAction* anAction = myModule->action("AUXILIARY_CMD"); SessionPtr aMgr = ModelAPI_Session::get(); if (isUseTransaction) { if (PartSet_SketcherMgr::isNestedSketchOperation(anOperation)) @@ -821,11 +853,12 @@ void PartSet_SketcherMgr::setConstruction(const bool isChecked) std::shared_ptr aSketchFeature = std::dynamic_pointer_cast(aFeature); if (aSketchFeature.get() != NULL) { - std::string anAttribute = SketchPlugin_Feature::CONSTRUCTION_ID(); + std::string anAttribute = SketchPlugin_SketchEntity::AUXILIARY_ID(); - std::shared_ptr aConstructionAttr = + std::shared_ptr anAuxiliaryAttr = std::dynamic_pointer_cast(aSketchFeature->data()->attribute(anAttribute)); - aConstructionAttr->setValue(isChecked); + if (anAuxiliaryAttr) + anAuxiliaryAttr->setValue(isChecked); } } }