-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
#include <ModuleBase_WidgetValidated.h>
-#include <ModuleBase_FilterFactory.h>
#include <ModuleBase_IViewer.h>
+#include <ModuleBase_IWorkshop.h>
#include <ModuleBase_ISelection.h>
+#include <ModuleBase_ISelectionActivate.h>
#include <ModuleBase_WidgetSelectorStore.h>
#include <ModuleBase_ViewerPrs.h>
return myPresentedObject;
}
+//********************************************************************
+void ModuleBase_WidgetValidated::deactivate()
+{
+ clearValidatedCash();
+}
+
//********************************************************************
void ModuleBase_WidgetValidated::clearValidatedCash()
{
// the widget validator filter should be active, but during check by preselection
// it is not yet activated, so we need to activate/deactivate it manually
bool isActivated = isFilterActivated();
- if (!isActivated)
- activateFilters(true);
+ if (!isActivated) {
+ SelectMgr_ListOfFilter aSelectionFilters;
+ selectionFilters(aSelectionFilters);
+ /// after validation, the selection filters should be restored
+ myWorkshop->selectionActivate()->activateSelectionFilters(aSelectionFilters);
+ }
Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext();
if (!aContext.IsNull()) {
}
}
if (!isActivated)
- activateFilters(false);
+ {
+ myWorkshop->selectionActivate()->updateSelectionFilters();
+ clearValidatedCash();
+ }
}
// removes created owner
}
//********************************************************************
-bool ModuleBase_WidgetValidated::isValidSelectionForAttribute(const ModuleBase_ViewerPrsPtr& theValue,
- const AttributePtr& theAttribute)
+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;
+ bool isFlushesActived, isAttributeSetInitializedBlocked, isAttributeSendUpdatedBlocked;
- blockAttribute(theAttribute, true, isFlushesActived, isAttributeSetInitializedBlocked);
+ blockAttribute(theAttribute, true, isFlushesActived, isAttributeSetInitializedBlocked,
+ isAttributeSendUpdatedBlocked);
storeAttributeValue(theAttribute);
// restores the current values of the widget attribute
restoreAttributeValue(theAttribute, aValid);
- blockAttribute(theAttribute, false, isFlushesActived, isAttributeSetInitializedBlocked);
+ blockAttribute(theAttribute, false, isFlushesActived, isAttributeSetInitializedBlocked,
+ isAttributeSendUpdatedBlocked);
/// NDS: The following rows are commented for issue #1452 (to be removed after debug)
/// This is not correct to perform it here because it might cause update selection and
/// the selection mechanizm will be circled: use the scenario of the bug with preselected point.
}
//********************************************************************
-bool ModuleBase_WidgetValidated::isValidAttribute(const AttributePtr& theAttribute) const
+bool ModuleBase_WidgetValidated::isValidAttribute(const AttributePtr& theAttribute)
{
SessionPtr aMgr = ModelAPI_Session::get();
ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
return aFactory->validate(theAttribute, aValidatorID, anError);
}
+//********************************************************************
bool ModuleBase_WidgetValidated::isFilterActivated() const
{
bool isActivated = false;
return aViewer->hasSelectionFilter(aSelFilter);
}
-bool ModuleBase_WidgetValidated::activateFilters(const bool toActivate)
+//********************************************************************
+void ModuleBase_WidgetValidated::selectionFilters(SelectMgr_ListOfFilter& theSelectionFilters)
{
- ModuleBase_IViewer* aViewer = myWorkshop->viewer();
-
- Handle(SelectMgr_Filter) aSelFilter = myWorkshop->validatorFilter();
- bool aHasSelectionFilter = aViewer->hasSelectionFilter(aSelFilter);
-
- if (toActivate)
- aViewer->addSelectionFilter(aSelFilter);
- else {
- aViewer->removeSelectionFilter(aSelFilter);
- clearValidatedCash();
- }
-
- return aHasSelectionFilter;
+ theSelectionFilters.Append(myWorkshop->validatorFilter());
}
//********************************************************************
void ModuleBase_WidgetValidated::blockAttribute(const AttributePtr& theAttribute,
const bool& theToBlock,
bool& isFlushesActived,
- bool& isAttributeSetInitializedBlocked)
+ bool& isAttributeSetInitializedBlocked,
+ bool& isAttributeSendUpdatedBlocked)
+{
+ blockFeatureAttribute(theAttribute, myFeature, theToBlock, isFlushesActived,
+ isAttributeSetInitializedBlocked, isAttributeSendUpdatedBlocked);
+}
+
+//********************************************************************
+void ModuleBase_WidgetValidated::blockFeatureAttribute(const AttributePtr& theAttribute,
+ const FeaturePtr& theFeature,
+ const bool& theToBlock,
+ bool& isFlushesActived,
+ bool& isAttributeSetInitializedBlocked,
+ bool& isAttributeSendUpdatedBlocked)
{
Events_Loop* aLoop = Events_Loop::loop();
- DataPtr aData = myFeature->data();
+ DataPtr aData = theFeature->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);
+ isAttributeSendUpdatedBlocked = aData->blockSendAttributeUpdated(true);
isAttributeSetInitializedBlocked = theAttribute->blockSetInitialized(true);
}
else {
- aData->blockSendAttributeUpdated(false, false);
+ aData->blockSendAttributeUpdated(isAttributeSendUpdatedBlocked, false);
theAttribute->blockSetInitialized(isAttributeSetInitializedBlocked);
aLoop->activateFlushes(isFlushesActived);
}
}
//********************************************************************
-void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrsPtr& theValue, const bool theValid)
+void ModuleBase_WidgetValidated::storeValidState(const ModuleBase_ViewerPrsPtr& theValue,
+ const bool theValid)
{
GeomShapePtr aShape = theValue.get() ? theValue->shape() : GeomShapePtr();
if (aShape.get()) {
}
}
#ifdef DEBUG_VALID_STATE
- qDebug(QString("storeValidState: myValidPrs.size() = %1, myInvalidPrs.size() = %2").arg(myValidPrs.count())
+ 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)
+bool ModuleBase_WidgetValidated::getValidState(const ModuleBase_ViewerPrsPtr& theValue,
+ bool& theValid)
{
if (!theValue.get())
return false;
for (; anIt != aLast; anIt++) {
const ModuleBase_ViewerPrsPtr& aViewerPrs = *anIt;
ObjectPtr anObject = aViewerPrs->object();
- ResultCompSolidPtr aResultCompSolid = std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(anObject);
+ ResultCompSolidPtr aResultCompSolid =
+ std::dynamic_pointer_cast<ModelAPI_ResultCompSolid>(anObject);
if(aResultCompSolid.get()) {
aCompSolids.insert(aResultCompSolid);
}