X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetValidated.cpp;h=7e85bce2e5fcdb2eb7e80761627ee2b89510ce6e;hb=397bec888031ab3d5d0578d3094e01f9a052222f;hp=eedfb2b799a22b3bebab7afc3a45e0cc97671684;hpb=7d764bc51fb4ba0527f224e6ea6fb4898da82502;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetValidated.cpp b/src/ModuleBase/ModuleBase_WidgetValidated.cpp index eedfb2b79..7e85bce2e 100644 --- a/src/ModuleBase/ModuleBase_WidgetValidated.cpp +++ b/src/ModuleBase/ModuleBase_WidgetValidated.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include @@ -24,39 +26,16 @@ ModuleBase_WidgetValidated::ModuleBase_WidgetValidated(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop, - const Config_WidgetAPI* theData, - const std::string& theParentId) -: ModuleBase_ModelWidget(theParent, theData, theParentId), + const Config_WidgetAPI* theData) +: ModuleBase_ModelWidget(theParent, theData), myWorkshop(theWorkshop), myIsInValidate(false) { + myAttributeStore = new ModuleBase_WidgetSelectorStore(); } ModuleBase_WidgetValidated::~ModuleBase_WidgetValidated() { -} - -//******************************************************************** -bool ModuleBase_WidgetValidated::setSelection(QList& theValues, - const bool theToValidate) -{ - if (theValues.empty()) { - // In order to make reselection possible, set empty object and shape should be done - setSelectionCustom(ModuleBase_ViewerPrs()); - return false; - } - // it removes the processed value from the parameters list - ModuleBase_ViewerPrs aValue = theValues.takeFirst(); - bool isDone = false; - - if (!theToValidate || isValidInFilters(aValue)) { - isDone = setSelectionCustom(aValue); - // updateObject - to update/redisplay feature - // it is commented in order to perfom it outside the method - //updateObject(myFeature); - // to storeValue() - //emit valuesChanged(); - } - return isDone; + delete myAttributeStore; } //******************************************************************** @@ -68,31 +47,37 @@ ObjectPtr ModuleBase_WidgetValidated::findPresentedObject(const AISObjectPtr& th //******************************************************************** void ModuleBase_WidgetValidated::clearValidatedCash() { +#ifdef DEBUG_VALID_STATE + qDebug("clearValidatedCash"); +#endif myValidPrs.clear(); myInvalidPrs.clear(); } //******************************************************************** -void ModuleBase_WidgetValidated::storeAttributeValue() +void ModuleBase_WidgetValidated::storeAttributeValue(const AttributePtr& theAttribute) { myIsInValidate = true; + myAttributeStore->storeAttributeValue(theAttribute, myWorkshop); } //******************************************************************** -void ModuleBase_WidgetValidated::restoreAttributeValue(const bool theValid) +void ModuleBase_WidgetValidated::restoreAttributeValue(const AttributePtr& theAttribute, + const bool theValid) { myIsInValidate = false; + myAttributeStore->restoreAttributeValue(theAttribute, myWorkshop); } //******************************************************************** -bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrs& thePrs) +bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrsPtr& thePrs) { bool aValid = true; - Handle(SelectMgr_EntityOwner) anOwner = thePrs.owner(); + Handle(SelectMgr_EntityOwner) anOwner = thePrs->owner(); // if an owner is null, the selection happens in the Object browser. // creates a selection owner on the base of object shape and the object AIS object - if (anOwner.IsNull() && thePrs.owner().IsNull() && thePrs.object().get()) { + if (anOwner.IsNull() && thePrs->owner().IsNull() && thePrs->object().get()) { ResultPtr aResult = myWorkshop->selection()->getResult(thePrs); if (aResult.get() && aResult->shape().get()) { // some results have no shape, e.g. the parameter one. So, they should not be validated @@ -127,7 +112,7 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrs& th } // removes created owner - if (!anOwner.IsNull() && anOwner != thePrs.owner()) { + if (!anOwner.IsNull() && anOwner != thePrs->owner()) { anOwner.Nullify(); myPresentedObject = ObjectPtr(); } @@ -135,35 +120,49 @@ bool ModuleBase_WidgetValidated::isValidInFilters(const ModuleBase_ViewerPrs& th } //******************************************************************** -bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& theValue) +AttributePtr ModuleBase_WidgetValidated::attribute() const +{ + return myFeature->attribute(attributeID()); +} + +//******************************************************************** +bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrsPtr& theValue) { bool aValid = false; if (getValidState(theValue, aValid)) { return aValid; } - aValid = isValidSelectionCustom(theValue); - if (!aValid) { - storeValidState(theValue, aValid); - return aValid; - } + if (aValid) + aValid = isValidSelectionForAttribute(theValue, attribute()); + + storeValidState(theValue, aValid); + return aValid; +} + +//******************************************************************** +bool ModuleBase_WidgetValidated::isValidSelectionForAttribute(const ModuleBase_ViewerPrsPtr& theValue, + const AttributePtr& theAttribute) +{ + bool aValid = false; // stores the current values of the widget attribute bool isFlushesActived, isAttributeSetInitializedBlocked; - blockAttribute(true, isFlushesActived, isAttributeSetInitializedBlocked); - storeAttributeValue(); + blockAttribute(theAttribute, true, isFlushesActived, isAttributeSetInitializedBlocked); + + storeAttributeValue(theAttribute); // saves the owner value to the widget attribute aValid = setSelectionCustom(theValue); if (aValid) // checks the attribute validity - aValid = isValidAttribute(); + aValid = isValidAttribute(theAttribute); // restores the current values of the widget attribute - restoreAttributeValue(aValid); + restoreAttributeValue(theAttribute, aValid); - blockAttribute(false, isFlushesActived, isAttributeSetInitializedBlocked); + blockAttribute(theAttribute, false, isFlushesActived, isAttributeSetInitializedBlocked); // In particular case the results are deleted and called as redisplayed inside of this // highlight-selection, to they must be flushed as soon as possible. // Example: selection of group-vertices subshapes with shift pressend on body. Without @@ -174,24 +173,22 @@ bool ModuleBase_WidgetValidated::isValidSelection(const ModuleBase_ViewerPrs& th Events_Loop::loop()->flush(aDeletedEvent); Events_Loop::loop()->flush(aRedispEvent); - storeValidState(theValue, aValid); return aValid; } //******************************************************************** -bool ModuleBase_WidgetValidated::isValidSelectionCustom(const ModuleBase_ViewerPrs& thePrs) +bool ModuleBase_WidgetValidated::isValidSelectionCustom(const ModuleBase_ViewerPrsPtr& thePrs) { return true; } //******************************************************************** -bool ModuleBase_WidgetValidated::isValidAttribute() const +bool ModuleBase_WidgetValidated::isValidAttribute(const AttributePtr& theAttribute) const { SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - AttributePtr anAttribute = myFeature->attribute(attributeID()); std::string aValidatorID, anError; - return aFactory->validate(anAttribute, aValidatorID, anError); + return aFactory->validate(theAttribute, aValidatorID, anError); } bool ModuleBase_WidgetValidated::isFilterActivated() const @@ -215,36 +212,37 @@ bool ModuleBase_WidgetValidated::activateFilters(const bool toActivate) aViewer->addSelectionFilter(aSelFilter); else { aViewer->removeSelectionFilter(aSelFilter); - clearValidState(); + clearValidatedCash(); } return aHasSelectionFilter; } //******************************************************************** -void ModuleBase_WidgetValidated::blockAttribute(const bool& theToBlock, bool& isFlushesActived, +void ModuleBase_WidgetValidated::blockAttribute(const AttributePtr& theAttribute, + const bool& theToBlock, + bool& isFlushesActived, bool& isAttributeSetInitializedBlocked) { Events_Loop* aLoop = Events_Loop::loop(); DataPtr aData = myFeature->data(); - AttributePtr anAttribute = myFeature->attribute(attributeID()); if (theToBlock) { // blocks the flush signals to avoid the temporary objects visualization in the viewer // they should not be shown in order to do not lose highlight by erasing them isFlushesActived = aLoop->activateFlushes(false); aData->blockSendAttributeUpdated(true); - isAttributeSetInitializedBlocked = anAttribute->blockSetInitialized(true); + isAttributeSetInitializedBlocked = theAttribute->blockSetInitialized(true); } else { aData->blockSendAttributeUpdated(false); - anAttribute->blockSetInitialized(isAttributeSetInitializedBlocked); + theAttribute->blockSetInitialized(isAttributeSetInitializedBlocked); aLoop->activateFlushes(isFlushesActived); } } //******************************************************************** -void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrs& theValue, const bool theValid) +void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrsPtr& theValue, const bool theValid) { bool aValidPrs = myInvalidPrs.contains(theValue); bool anInvalidPrs = myInvalidPrs.contains(theValue); @@ -270,7 +268,7 @@ void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrs& the } //******************************************************************** -bool ModuleBase_WidgetValidated::getValidState(const ModuleBase_ViewerPrs& theValue, bool& theValid) +bool ModuleBase_WidgetValidated::getValidState(const ModuleBase_ViewerPrsPtr& theValue, bool& theValid) { bool aValidPrs = myValidPrs.contains(theValue); bool anInvalidPrs = myInvalidPrs.contains(theValue); @@ -284,22 +282,12 @@ bool ModuleBase_WidgetValidated::getValidState(const ModuleBase_ViewerPrs& theVa } //******************************************************************** -void ModuleBase_WidgetValidated::clearValidState() -{ -#ifdef DEBUG_VALID_STATE - qDebug("clearValidState"); -#endif - myValidPrs.clear(); - myInvalidPrs.clear(); -} - -//******************************************************************** -QList ModuleBase_WidgetValidated::getFilteredSelected() +QList ModuleBase_WidgetValidated::getFilteredSelected() { - QList aSelected = myWorkshop->selection()->getSelected( + QList aSelected = myWorkshop->selection()->getSelected( ModuleBase_ISelection::Viewer); - QList anOBSelected = myWorkshop->selection()->getSelected( + QList anOBSelected = myWorkshop->selection()->getSelected( ModuleBase_ISelection::Browser); // filter the OB presentations filterPresentations(anOBSelected); @@ -312,11 +300,11 @@ QList ModuleBase_WidgetValidated::getFilteredSelected() } //******************************************************************** -void ModuleBase_WidgetValidated::filterPresentations(QList& theValues) +void ModuleBase_WidgetValidated::filterPresentations(QList& theValues) { - QList aValidatedValues; + QList aValidatedValues; - QList::const_iterator anIt = theValues.begin(), aLast = theValues.end(); + QList::const_iterator anIt = theValues.begin(), aLast = theValues.end(); bool isDone = false; for (; anIt != aLast; anIt++) { if (isValidInFilters(*anIt)) @@ -329,16 +317,16 @@ void ModuleBase_WidgetValidated::filterPresentations(QList } //******************************************************************** -void ModuleBase_WidgetValidated::filterCompSolids(QList& theValues) +void ModuleBase_WidgetValidated::filterCompSolids(QList& theValues) { std::set aCompSolids; - QList aValidatedValues; + QList aValidatedValues; // Collect compsolids. - QList::const_iterator anIt = theValues.begin(), aLast = theValues.end(); + QList::const_iterator anIt = theValues.begin(), aLast = theValues.end(); for (; anIt != aLast; anIt++) { - const ModuleBase_ViewerPrs& aViewerPrs = *anIt; - ObjectPtr anObject = aViewerPrs.object(); + const ModuleBase_ViewerPrsPtr& aViewerPrs = *anIt; + ObjectPtr anObject = aViewerPrs->object(); ResultCompSolidPtr aResultCompSolid = std::dynamic_pointer_cast(anObject); if(aResultCompSolid.get()) { aCompSolids.insert(aResultCompSolid); @@ -348,8 +336,8 @@ void ModuleBase_WidgetValidated::filterCompSolids(QList& t // Filter sub-solids of compsolids. anIt = theValues.begin(); for (; anIt != aLast; anIt++) { - const ModuleBase_ViewerPrs& aViewerPrs = *anIt; - ObjectPtr anObject = aViewerPrs.object(); + const ModuleBase_ViewerPrsPtr& aViewerPrs = *anIt; + ObjectPtr anObject = aViewerPrs->object(); ResultPtr aResult = std::dynamic_pointer_cast(anObject); ResultCompSolidPtr aResCompSolidPtr = ModelAPI_Tools::compSolidOwner(aResult); if(aResCompSolidPtr.get() && (aCompSolids.find(aResCompSolidPtr) != aCompSolids.end())) {