X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FPartSet%2FPartSet_Module.cpp;h=67f1bcf7a857a65ddb98e52e1014dca3bf21bc97;hb=f39b615e10f48ab13b8346c1e0b4c64500d44f51;hp=adb46118fc10a3c752e3479c85f321c1fa2ff22f;hpb=69079e03b83563af9e3842f7cc2f5b3d67c102b5;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_Module.cpp b/src/PartSet/PartSet_Module.cpp index adb46118f..67f1bcf7a 100755 --- a/src/PartSet/PartSet_Module.cpp +++ b/src/PartSet/PartSet_Module.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include @@ -51,6 +52,7 @@ #include #include #include +#include #include #include @@ -66,6 +68,7 @@ #include #include #include +#include #include #include @@ -120,7 +123,7 @@ extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop* PartSet_Module::PartSet_Module(ModuleBase_IWorkshop* theWshop) : ModuleBase_IModule(theWshop), - myRestartingMode(RM_None), myVisualLayerId(0) + myRestartingMode(RM_None), myVisualLayerId(0), myHasConstraintShown(true) { new PartSet_IconFactory(); @@ -224,6 +227,9 @@ void PartSet_Module::registerValidators() aFactory->registerValidator("GeomValidators_Different", new GeomValidators_Different); + + aFactory->registerValidator("GeomValidators_PartitionArguments", + new GeomValidators_PartitionArguments); } void PartSet_Module::registerFilters() @@ -322,6 +328,7 @@ void PartSet_Module::onOperationStopped(ModuleBase_Operation* theOperation) XGUI_Displayer* aDisplayer = aConnector->workshop()->displayer(); aDisplayer->updateViewer(); } + mySketchMgr->onShowConstraintsToggle(myHasConstraintShown); } ModuleBase_Operation* PartSet_Module::currentOperation() const @@ -412,6 +419,26 @@ void PartSet_Module::updateViewerMenu(const QMap& theStdActio myMenuMgr->updateViewerMenu(theStdActions); } +QString PartSet_Module::getFeatureError(const FeaturePtr& theFeature) +{ + QString anError = ModuleBase_IModule::getFeatureError(theFeature); + + if (anError.isEmpty()) + anError = sketchMgr()->getFeatureError(theFeature); + + if (anError.isEmpty()) { + XGUI_ModuleConnector* aConnector = dynamic_cast(workshop()); + XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr(); + + if (anOpMgr->isValidationLocked()) { + ModuleBase_OperationFeature* aFOperation = dynamic_cast + (anOpMgr->currentOperation()); + if (!aFOperation || theFeature == aFOperation->feature()) + anError = "Validation is locked by the current operation"; + } + } + return anError; +} void PartSet_Module::activeSelectionModes(QIntList& theModes) { @@ -433,6 +460,11 @@ void PartSet_Module::closeDocument() void PartSet_Module::clearViewer() { myCustomPrs->clearPrs(); + + XGUI_ModuleConnector* aConnector = dynamic_cast(myWorkshop); + XGUI_Workshop* aWorkshop = aConnector->workshop(); + XGUI_Displayer* aDisplayer = aWorkshop->displayer(); + aDisplayer->deactivateSelectionFilters(); } void PartSet_Module::propertyPanelDefined(ModuleBase_Operation* theOperation) @@ -740,6 +772,7 @@ void PartSet_Module::launchOperation(const QString& theCmdId) { if (PartSet_SketcherMgr::constraintsIdList().contains(theCmdId)) { // Show constraints if a constraint was anOperation + myHasConstraintShown = mySketchMgr->isConstraintsShown(); mySketchMgr->onShowConstraintsToggle(true); } ModuleBase_IModule::launchOperation(theCmdId); @@ -777,15 +810,16 @@ void PartSet_Module::onViewTransformed(int theTrsfType) // if the operation is panning or rotate or panglobal then do nothing if ((theTrsfType == 1) || (theTrsfType == 3) || (theTrsfType == 4)) return; - ModuleBase_IViewer* aViewer = myWorkshop->viewer(); + Handle(AIS_InteractiveContext) aContext = aViewer->AISContext(); + if (aContext.IsNull()) + return; + //Handle(V3d_View) aView = aViewer->activeView(); XGUI_ModuleConnector* aConnector = dynamic_cast(myWorkshop); XGUI_Workshop* aWorkshop = aConnector->workshop(); XGUI_Displayer* aDisplayer = aWorkshop->displayer(); - Handle(AIS_InteractiveContext) aContext = aViewer->AISContext(); - Handle(V3d_Viewer) aV3dViewer = aContext->CurrentViewer(); Handle(V3d_View) aView; double aScale = 0; @@ -880,6 +914,7 @@ void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const int aSelected = aObjects.size(); SessionPtr aMgr = ModelAPI_Session::get(); QAction* aActivatePartAction = myMenuMgr->action("ACTIVATE_PART_CMD"); + QAction* aActivatePartSetAction = myMenuMgr->action("ACTIVATE_PARTSET_CMD"); if (aSelected == 1) { bool hasResult = false; bool hasFeature = false; @@ -913,20 +948,21 @@ void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const if( aResult.get() ) theMenu->addAction(myMenuMgr->action("SELECT_PARENT_CMD")); } else { // If feature is 0 the it means that selected root object (document) - if (aMgr->activeDocument() != aMgr->moduleDocument()) - theMenu->addAction(myMenuMgr->action("ACTIVATE_PARTSET_CMD")); + theMenu->addAction(aActivatePartSetAction); + aActivatePartSetAction->setEnabled((aMgr->activeDocument() != aMgr->moduleDocument())); } } else if (aSelected == 0) { // if there is no selection then it means that upper label is selected QModelIndexList aIndexes = myWorkshop->selection()->selectedIndexes(); if (aIndexes.size() == 0) // it means that selection happens in top label outside of tree view - if (aMgr->activeDocument() != aMgr->moduleDocument()) - theMenu->addAction(myMenuMgr->action("ACTIVATE_PARTSET_CMD")); + theMenu->addAction(aActivatePartSetAction); + aActivatePartSetAction->setEnabled((aMgr->activeDocument() != aMgr->moduleDocument())); } bool aNotDeactivate = (myWorkshop->currentOperation() == 0); - myMenuMgr->action("ACTIVATE_PARTSET_CMD")->setEnabled(aNotDeactivate); - if (!aNotDeactivate) + if (!aNotDeactivate) { aActivatePartAction->setEnabled(false); + aActivatePartSetAction->setEnabled(false); + } } void PartSet_Module::processEvent(const std::shared_ptr& theMessage) @@ -975,8 +1011,6 @@ void PartSet_Module::processEvent(const std::shared_ptr& theMess } } #else - // Problem with MPV: At first time on creation it doesn't work because Part feature - // creation event will be sent after if (aActivePartIndex.isValid()) aTreeView->setExpanded(aActivePartIndex, false); XGUI_DataModel* aDataModel = aWorkshop->objectBrowser()->dataModel(); @@ -990,8 +1024,14 @@ void PartSet_Module::processEvent(const std::shared_ptr& theMess // Update displayed objects in order to update active color XGUI_Displayer* aDisplayer = aWorkshop->displayer(); QObjectPtrList aObjects = aDisplayer->displayedObjects(); - foreach(ObjectPtr aObj, aObjects) - aDisplayer->redisplay(aObj, false); + bool aHidden; + foreach(ObjectPtr aObj, aObjects) { + //TODO: replace by redisplay event. + aHidden = !aObj->data() || !aObj->data()->isValid() || + aObj->isDisabled() || (!aObj->isDisplayed()); + if (!aHidden) + aDisplayer->redisplay(aObj, false); + } aDisplayer->updateViewer(); } } @@ -1040,7 +1080,11 @@ void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*) { // z layer is created for all started operations in order to visualize operation AIS presentation // over the object - Handle(V3d_Viewer) aViewer = myWorkshop->viewer()->AISContext()->CurrentViewer(); + Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (aContext.IsNull()) + return; + + Handle(V3d_Viewer) aViewer = aContext->CurrentViewer(); if (myVisualLayerId == 0) { if (myVisualLayerId == 0) aViewer->AddZLayer(myVisualLayerId); @@ -1057,4 +1101,17 @@ void PartSet_Module::onViewCreated(ModuleBase_IViewWindow*) if (!aFound) aViewer->AddZLayer(myVisualLayerId); } + // if there is an active operation with validated widget, + // the filters of this widget should be activated in the created view + ModuleBase_Operation* aOperation = myWorkshop->currentOperation(); + if (aOperation) { + ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel(); + ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget(); + if (anActiveWidget) { + ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast + (anActiveWidget); + if (aWidgetValidated) + aWidgetValidated->activateFilters(true); + } + } }