X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetFeature.cpp;h=faf664fe53e9d48180ac7323988e5be4e256808f;hb=94ba553e7b92f11a936e027b49bbd1d501eeee44;hp=47e9960be06285ea6e882961c283926b1011b5d8;hpb=e4e9446cd26b23a5b5d58a1a6de2f7bd4fa0c865;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetFeature.cpp b/src/ModuleBase/ModuleBase_WidgetFeature.cpp index 47e9960be..faf664fe5 100644 --- a/src/ModuleBase/ModuleBase_WidgetFeature.cpp +++ b/src/ModuleBase/ModuleBase_WidgetFeature.cpp @@ -6,20 +6,22 @@ #include #include -#include #include #include #include #include -#include +#include #include #include #include #include #include +#include +#include +#include #include #include @@ -27,17 +29,13 @@ #include ModuleBase_WidgetFeature::ModuleBase_WidgetFeature(QWidget* theParent, - const Config_WidgetAPI* theData, + const Config_WidgetAPI* theData, const std::string& theParentId) -: ModuleBase_ModelWidget(theParent, theData, theParentId) + : ModuleBase_ModelWidget(theParent, theData, theParentId) { - //QString aKinds = QString::fromStdString(theData->getProperty(FEATURE_KEYSEQUENCE)); - //myObjectKinds = aKinds.split(" "); - //theData-> - myContainer = new QWidget(theParent); QHBoxLayout* aControlLay = new QHBoxLayout(myContainer); - aControlLay->setContentsMargins(0, 0, 0, 0); + ModuleBase_Tools::adjustMargins(aControlLay); QString aLabelText = QString::fromStdString(theData->widgetLabel()); myLabel = new QLabel(aLabelText, myContainer); @@ -51,7 +49,6 @@ ModuleBase_WidgetFeature::ModuleBase_WidgetFeature(QWidget* theParent, QString aTTip = QString::fromStdString(theData->widgetTooltip()); myEditor->setToolTip(aTTip); - aControlLay->addWidget(myEditor); aControlLay->setStretch(1, 1); } @@ -65,8 +62,8 @@ bool ModuleBase_WidgetFeature::setValue(ModuleBase_WidgetValue* theValue) bool isDone = false; if (theValue) { - ModuleBase_WidgetValueFeature* aFeatureValue = - dynamic_cast(theValue); + ModuleBase_WidgetValueFeature* aFeatureValue = + dynamic_cast(theValue); if (aFeatureValue) isDone = setObject(aFeatureValue->object()); } @@ -75,16 +72,18 @@ bool ModuleBase_WidgetFeature::setValue(ModuleBase_WidgetValue* theValue) bool ModuleBase_WidgetFeature::setObject(const ObjectPtr& theObject, bool theSendEvent) { - PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); + SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); std::list aValidators; std::list > anArguments; aFactory->validators(parentID(), attributeID(), aValidators, anArguments); + + // Check the type of selected object std::list::iterator aValidator = aValidators.begin(); bool isValid = true; - for(; aValidator != aValidators.end(); aValidator++) { - const ModuleBase_ResultValidator* aResValidator = - dynamic_cast(*aValidator); + for (; aValidator != aValidators.end(); aValidator++) { + const ModelAPI_ResultValidator* aResValidator = + dynamic_cast(*aValidator); if (aResValidator) { isValid = false; if (aResValidator->isValid(theObject)) { @@ -96,38 +95,52 @@ bool ModuleBase_WidgetFeature::setObject(const ObjectPtr& theObject, bool theSen if (!isValid) return false; - myObject = ModuleBase_Tools::feature(theObject); + // Check the acceptability of the object as attribute + aValidator = aValidators.begin(); + std::list >::iterator aArgs = anArguments.begin(); + for (; aValidator != aValidators.end(); aValidator++, aArgs++) { + const ModelAPI_RefAttrValidator* aAttrValidator = + dynamic_cast(*aValidator); + if (aAttrValidator) { + if (!aAttrValidator->isValid(myFeature, *aArgs, theObject)) { + return false; + } + } + } + + myObject = theObject; myEditor->setText(theObject ? theObject->data()->name().c_str() : ""); if (theSendEvent) emit valuesChanged(); return true; } -bool ModuleBase_WidgetFeature::storeValue(ObjectPtr theObject) const +bool ModuleBase_WidgetFeature::storeValue() const { - FeaturePtr aFeature = boost::dynamic_pointer_cast(theObject); - if (!aFeature) + //FeaturePtr aFeature = boost::dynamic_pointer_cast(theObject); + if (!myObject) return false; - boost::shared_ptr aData = aFeature->data(); - boost::shared_ptr aRef = - boost::dynamic_pointer_cast(aData->attribute(attributeID())); + + boost::shared_ptr aData = myFeature->data(); + boost::shared_ptr aRef = boost::dynamic_pointer_cast< + ModelAPI_AttributeRefAttr>(aData->attribute(attributeID())); ModuleBase_WidgetFeature* that = (ModuleBase_WidgetFeature*) this; aRef->setObject(myObject); - aFeature->execute(); - updateObject(theObject); + myFeature->execute(); + updateObject(myFeature); return true; } -bool ModuleBase_WidgetFeature::restoreValue(ObjectPtr theObject) +bool ModuleBase_WidgetFeature::restoreValue() { - boost::shared_ptr aData = theObject->data(); - boost::shared_ptr aRef = - boost::dynamic_pointer_cast(aData->attribute(attributeID())); + boost::shared_ptr aData = myFeature->data(); + boost::shared_ptr aRef = boost::dynamic_pointer_cast< + ModelAPI_AttributeRefAttr>(aData->attribute(attributeID())); - FeaturePtr aFeature = boost::dynamic_pointer_cast(aRef->object()); - if (aFeature) { - myObject = aFeature; + ObjectPtr anObjPtr = aRef->object(); + if (anObjPtr) { + myObject = anObjPtr; myEditor->setText(myObject ? myObject->data()->name().c_str() : ""); return true; }