// Created: 17 Mar 2015
// Author: Natalia ERMOLAEVA
-
#include "ModuleBase_FilterValidated.h"
#include "ModuleBase_IWorkshop.h"
-#include <ModelAPI_Session.h>
-#include <ModelAPI_Document.h>
-#include <ModelAPI_ResultConstruction.h>
-
-#include <AIS_InteractiveObject.hxx>
-#include <AIS_Shape.hxx>
-
-#include <StdSelect_BRepOwner.hxx>
-
-#include <BRep_Tool.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <Geom_Curve.hxx>
-
-#include <ModelAPI_CompositeFeature.h>
-#include <GeomAPI_ICustomPrs.h>
-
+#include <ModuleBase_IModule.h>
+#include <ModuleBase_IPropertyPanel.h>
+#include <ModuleBase_Operation.h>
+#include <ModuleBase_WidgetValidated.h>
IMPLEMENT_STANDARD_HANDLE(ModuleBase_FilterValidated, SelectMgr_Filter);
IMPLEMENT_STANDARD_RTTIEXT(ModuleBase_FilterValidated, SelectMgr_Filter);
Standard_Boolean ModuleBase_FilterValidated::IsOk(const Handle(SelectMgr_EntityOwner)& theOwner) const
{
-/* // global selection should be ignored, the filter processes only selected sub-shapes
- Handle(StdSelect_BRepOwner) aShapeOwner = Handle(StdSelect_BRepOwner)::DownCast(theOwner);
- if (!aShapeOwner.IsNull()) {
- if (!aShapeOwner->ComesFromDecomposition())
- return Standard_True;
- }
-
- if (theOwner->HasSelectable()) {
- Handle(AIS_InteractiveObject) aAisObj =
- Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable());
- if (!aAisObj.IsNull()) {
- std::shared_ptr<GeomAPI_AISObject> aAISObj = AISObjectPtr(new GeomAPI_AISObject());
- aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aAisObj));
- ObjectPtr aObj = myWorkshop->findPresentedObject(aAISObj);
+ ModuleBase_Operation* anOperation = myWorkshop->module()->currentOperation();
+ ModuleBase_IPropertyPanel* aPanel = anOperation->propertyPanel();
- ResultConstructionPtr aConstr =
- std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aObj);
- if (aConstr != NULL) {
- // it provides selection only on compositie features, construction without composite
- // feature is not selectable
- FeaturePtr aFeature = ModelAPI_Feature::feature(aConstr);
- CompositeFeaturePtr aComposite =
- std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(aFeature);
- return aComposite && aComposite->numberOfSubs() > 0;
- }
- }
- }
- */
- return Standard_False;
+ ModuleBase_ModelWidget* anActiveWidget = aPanel->activeWidget();
+ ModuleBase_WidgetValidated* aWidgetValidated = dynamic_cast<ModuleBase_WidgetValidated*>
+ (anActiveWidget);
+ return !aWidgetValidated || aWidgetValidated->isValid(theOwner);
}
/// Realizes some functionality by an operation abort\r
virtual void operationAborted(ModuleBase_Operation* theOperation) {}\r
\r
+ /// Realizes some functionality by an operation start\r
+ /// \param theOperation a started operation\r
+ virtual ModuleBase_Operation* currentOperation() const = 0;\r
+\r
/// Add menu atems for viewer into the given menu\r
/// \param theMenu a popup menu to be shown in the viewer\r
virtual void addViewerItems(QMenu* theMenu) const {}\r
#include "ModuleBase_IWorkshop.h"
#include "ModuleBase_FilterFactory.h"
+ModuleBase_IWorkshop::ModuleBase_IWorkshop(QObject* theParent)
+: QObject(theParent)
+{
+ myValidatorFilter = new ModuleBase_FilterValidated(this);
+}
+
+Handle(ModuleBase_FilterValidated) ModuleBase_IWorkshop::validatorFilter()
+{
+ return myValidatorFilter;
+}
+
ModuleBase_FilterFactory* ModuleBase_IWorkshop::selectionFilters() const
{
static ModuleBase_FilterFactory* aFactory = new ModuleBase_FilterFactory;
#include "ModuleBase.h"
#include "ModuleBase_Definitions.h"
+#include <ModuleBase_FilterValidated.h>
#include <ModelAPI_Object.h>
#include <GeomAPI_AISObject.h>
public:
/// Constructor
/// \param theParent parent object
- ModuleBase_IWorkshop(QObject* theParent)
- : QObject(theParent)
- {}
+ ModuleBase_IWorkshop(QObject* theParent);
virtual ~ModuleBase_IWorkshop()
{}
//! Returns current viewer
virtual ModuleBase_IViewer* viewer() const = 0;
+ /// A filter to process an attribute validators
+ /// \return a filter
+ Handle(ModuleBase_FilterValidated) validatorFilter();
+
//! Returns the factory of selection filters : the only one instance per application
ModuleBase_FilterFactory* selectionFilters() const;
/// Signal which is emited after activation of property panel
void propertyPanelActivated();
+protected:
+ /// A filter to process an attribute validators
+ Handle(ModuleBase_FilterValidated) myValidatorFilter;
};
#endif
#include <ModuleBase_WidgetValidated.h>
#include <ModuleBase_FilterFactory.h>
#include <ModuleBase_IViewer.h>
-#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
#include <ModelAPI_Session.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_ResultValidator.h>
+#include <ModelAPI_AttributeValidator.h>
+
+#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
+#include <SelectMgr_EntityOwner.hxx>
#include <QWidget>
ModuleBase_WidgetValidated::ModuleBase_WidgetValidated(QWidget* theParent,
const Config_WidgetAPI* theData,
const std::string& theParentId)
- : ModuleBase_ModelWidget(theParent, theData, theParentId)
+ : ModuleBase_ModelWidget(theParent, theData, theParentId)
{
}
{
}
+bool ModuleBase_WidgetValidated::isValid(const Handle_SelectMgr_EntityOwner& theOwner)
+{
+ backupAttributeValue(true);
+
+ setValue(theOwner);
+ bool aValid = isValidAttribute();
+ backupAttributeValue(false);
+
+ return aValid;
+}
+
+//********************************************************************
+bool ModuleBase_WidgetValidated::isValidAttribute() const
+{
+ SessionPtr aMgr = ModelAPI_Session::get();
+ ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
+ std::list<ModelAPI_Validator*> aValidators;
+ std::list<std::list<std::string> > anArguments;
+ aFactory->validators(parentID(), attributeID(), aValidators, anArguments);
+
+ DataPtr aData = myFeature->data();
+ AttributePtr anAttribute = myFeature->attribute(attributeID());
+
+ aData->blockSendAttributeUpdated(true);
+
+ // 3. check the acceptability of the current values
+ std::list<ModelAPI_Validator*>::iterator aValidator = aValidators.begin();
+ std::list<std::list<std::string> >::iterator aArgs = anArguments.begin();
+ bool aValid = true;
+ for (; aValidator != aValidators.end() && aValid; aValidator++, aArgs++) {
+ const ModelAPI_AttributeValidator* aAttrValidator =
+ dynamic_cast<const ModelAPI_AttributeValidator*>(*aValidator);
+ if (aAttrValidator) {
+ aValid = aAttrValidator->isValid(anAttribute, *aArgs);
+ }
+ }
+ aData->blockSendAttributeUpdated(false);
+
+ return aValid;
+}
+
//********************************************************************
bool ModuleBase_WidgetValidated::isValid(ObjectPtr theObj, GeomShapePtr theShape) const
{
const bool toActivate) const
{
ModuleBase_IViewer* aViewer = theWorkshop->viewer();
-
+ /*
+ Handle(SelectMgr_Filter) aSelFilter = theWorkshop->validatorFilter();
+ if (toActivate)
+ aViewer->addSelectionFilter(aSelFilter);
+ else
+ aViewer->removeSelectionFilter(aSelFilter);*/
+
// apply filters loaded from the XML definition of the widget
ModuleBase_FilterFactory* aFactory = theWorkshop->selectionFilters();
SelectMgr_ListOfFilter aFactoryFilters;
class QWidget;
class ModuleBase_IWorkshop;
class Config_WidgetAPI;
+class Handle_SelectMgr_EntityOwner;
/**
* \ingroup GUI
const std::string& theParentId);
virtual ~ModuleBase_WidgetValidated();
+ /// Checks all widget validator if the owner is valid
+ /// \param theOwner a selected owner in the view
+ /// \return a boolean value
+ bool isValid(const Handle_SelectMgr_EntityOwner& theOwner);
+
protected:
+ /// Creates a backup of the current values of the attribute
+ /// It should be realized in the specific widget because of different
+ /// parameters of the current attribute
+ /// \param isBackup a boolean flag, if true, store values from the attribute
+ /// to backup, otherwise set the backed up values to the attribute
+ virtual void backupAttributeValue(const bool isBackup) {}//= 0;
+
+ /// Fills the attribute with the value of the selected owner
+ /// \param theOwner a selected owner
+ virtual void setValue(const Handle_SelectMgr_EntityOwner& theOwner) {}//= 0;
+
+ /// Checks the current attibute in all attribute validators
+ // \return true if all validators return that the attribute is valid
+ bool isValidAttribute() const;
+
/// Check the selected with validators if installed
/// \param theObj the object for checking
/// \param theShape the shape for checking
myWorkshop->viewer()->removeSelectionFilter(myDocumentShapeFilter);
}
+ModuleBase_Operation* PartSet_Module::currentOperation() const
+{
+ XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
+ XGUI_OperationMgr* anOpMgr = aConnector->workshop()->operationMgr();
+ return anOpMgr->currentOperation();
+}
+
bool PartSet_Module::canUndo() const
{
bool aCanUndo = false;
/// \param theOperation a stopped operation
virtual void operationStopped(ModuleBase_Operation* theOperation);
+ /// Realizes some functionality by an operation start
+ /// \param theOperation a started operation
+ virtual ModuleBase_Operation* currentOperation() const;
+
/// Returns action according to the given ID
/// \param theId an action identifier, it should be uniqued in the bounds of the module
QAction* action(const QString& theId) const;
#include <ModuleBase_Definitions.h>
#include <ModuleBase_ViewerPrs.h>
-#include <ModuleBase_FilterValidated.h>
#include <GeomAPI_ICustomPrs.h>
/// A container for selection filters
Handle(SelectMgr_AndFilter) myAndFilter;
- Handle(ModuleBase_FilterValidated) myFilterValidated;
-
/// A default custom presentation, which is used if the displayed feature is not a custom presentation
GeomCustomPrsPtr myCustomPrs;