+ clearValidatedCash();
+ }
+
+ return aHasSelectionFilter;
+}
+
+//********************************************************************
+void ModuleBase_WidgetValidated::blockAttribute(const AttributePtr& theAttribute,
+ const bool& theToBlock,
+ bool& isFlushesActived,
+ bool& isAttributeSetInitializedBlocked)
+{
+ Events_Loop* aLoop = Events_Loop::loop();
+ DataPtr aData = myFeature->data();
+ 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 = theAttribute->blockSetInitialized(true);
+ }
+ else {
+ aData->blockSendAttributeUpdated(false);
+ theAttribute->blockSetInitialized(isAttributeSetInitializedBlocked);
+ aLoop->activateFlushes(isFlushesActived);
+ }
+}
+
+//********************************************************************
+void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrsPtr& theValue, const bool theValid)
+{
+ GeomShapePtr aShape = theValue.get() ? theValue->shape() : GeomShapePtr();
+ if (aShape.get()) {
+ if (theValid) {
+ const TopoDS_Shape& aTDShape = aShape->impl<TopoDS_Shape>();
+ bool aValidPrsContains = myValidPrs.IsBound(aTDShape) &&
+ theValue.get()->isEqual(myValidPrs.Find(aTDShape).get());
+ if (!aValidPrsContains) {
+ #ifdef LIST_OF_VALID_PRS
+ myValidPrs.append(theValue);
+ #else
+ myValidPrs.Bind(aTDShape, theValue);
+ #endif
+ // the commented code will be useful when the valid state of the presentation
+ // will be changable between activate/deactivate. Currently it does not happen.
+ //if (anInvalidPrs)
+ // myInvalidPrs.removeOne(theValue);
+ }
+ }
+ else { // !theValid
+ if (aShape.get()) {
+ const TopoDS_Shape& aTDShape = aShape->impl<TopoDS_Shape>();
+ bool anIValidPrsContains = myInvalidPrs.IsBound(aTDShape) &&
+ theValue.get()->isEqual(myInvalidPrs.Find(aTDShape).get());
+ if (!anIValidPrsContains) {
+ #ifdef LIST_OF_VALID_PRS
+ myInvalidPrs.append(theValue);
+ #else
+ myInvalidPrs.Bind(aTDShape, theValue);
+ #endif
+ //if (!aValidPrs)
+ // myValidPrs.removeOne(theValue);
+ }
+ }
+ }
+ }
+ #ifdef DEBUG_VALID_STATE
+ qDebug(QString("storeValidState: myValidPrs.size() = %1, myInvalidPrs.size() = %2").arg(myValidPrs.count())
+ .arg(myInvalidPrs.count()).toStdString().c_str());
+ #endif
+}
+
+//********************************************************************
+bool ModuleBase_WidgetValidated::getValidState(const ModuleBase_ViewerPrsPtr& theValue, bool& theValid)
+{
+ if (!theValue.get())
+ return false;
+
+#ifdef LIST_OF_VALID_PRS
+ bool aValidPrsContains = myValidPrs.contains(theValue);
+ bool anInvalidPrsContains = myInvalidPrs.contains(theValue);
+#else
+ GeomShapePtr aShape = theValue.get() ? theValue->shape() : GeomShapePtr();
+ if (!aShape.get())
+ return false;
+
+ const TopoDS_Shape& aTDShape = aShape->impl<TopoDS_Shape>();
+ bool aValidPrsContains = myValidPrs.IsBound(aTDShape) &&
+ theValue.get()->isEqual(myValidPrs.Find(aTDShape).get());
+
+ bool anInvalidPrsContains = myInvalidPrs.IsBound(aTDShape) &&
+ theValue.get()->isEqual(myInvalidPrs.Find(aTDShape).get());
+ /*
+ bool aValidPrsContains = false, anInvalidPrsContains = false;
+ GeomShapePtr aShape = theValue.get() ? theValue->shape() : GeomShapePtr();
+ if (aShape.get()) {
+ aValidPrsContains = myValidPrs.contains(aShape);
+ anInvalidPrsContains = myInvalidPrs.contains(aShape);
+
+ if (aValidPrsContains)
+ aValidPrsContains = theValue == myValidPrs[aShape];