1 // File: ModuleBase_WidgetFeatureOrAttribute.cpp
2 // Created: 25 Apr 2014
3 // Author: Natalia ERMOLAEVA
5 #include <ModuleBase_WidgetFeatureOrAttribute.h>
7 #include <ModuleBase_WidgetValueFeature.h>
8 #include <ModuleBase_WidgetValue.h>
9 #include <ModuleBase_Tools.h>
11 #include <Config_Keywords.h>
12 #include <Config_WidgetAPI.h>
14 #include <Events_Loop.h>
15 #include <ModelAPI_Events.h>
17 #include <ModelAPI_Feature.h>
18 #include <ModelAPI_Data.h>
19 #include <ModelAPI_Object.h>
20 #include <ModelAPI_AttributeRefAttr.h>
21 #include <GeomAPI_Pnt2d.h>
23 #include <GeomDataAPI_Point2D.h>
25 #include <Precision.hxx>
29 #include <QHBoxLayout>
32 ModuleBase_WidgetFeatureOrAttribute::ModuleBase_WidgetFeatureOrAttribute(QWidget* theParent,
33 const Config_WidgetAPI* theData,
34 const std::string& theParentId)
35 : ModuleBase_WidgetFeature(theParent, theData, theParentId)
39 ModuleBase_WidgetFeatureOrAttribute::~ModuleBase_WidgetFeatureOrAttribute()
43 bool ModuleBase_WidgetFeatureOrAttribute::setValue(ModuleBase_WidgetValue* theValue)
48 ModuleBase_WidgetValueFeature* aFeatureValue =
49 dynamic_cast<ModuleBase_WidgetValueFeature*>(theValue);
51 boost::shared_ptr<GeomAPI_Pnt2d> aValuePoint = aFeatureValue->point();
52 ObjectPtr aObject = aFeatureValue->object();
54 isDone = setObject(aObject);
56 if (!isDone && aValuePoint) {
57 FeaturePtr aFeature = ModuleBase_Tools::feature(aObject);
59 // find the given point in the feature attributes
60 std::list<boost::shared_ptr<ModelAPI_Attribute> > anAttiributes =
61 aFeature->data()->attributes(GeomDataAPI_Point2D::type());
62 std::list<boost::shared_ptr<ModelAPI_Attribute> >::const_iterator anIt = anAttiributes.begin(),
63 aLast = anAttiributes.end();
64 boost::shared_ptr<GeomDataAPI_Point2D> aFPoint;
65 for (;anIt!=aLast && !aFPoint; anIt++) {
66 boost::shared_ptr<GeomDataAPI_Point2D> aCurPoint =
67 boost::dynamic_pointer_cast<GeomDataAPI_Point2D>(*anIt);
68 if (aCurPoint && aCurPoint->pnt()->distance(aValuePoint) < Precision::Confusion())
72 isDone = setAttribute(aFPoint);
80 bool ModuleBase_WidgetFeatureOrAttribute::storeValue(ObjectPtr theFeature) const
82 FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(theFeature);
85 boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
86 boost::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
87 boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aData->attribute(attributeID()));
89 ModuleBase_WidgetFeatureOrAttribute* that = (ModuleBase_WidgetFeatureOrAttribute*) this;
91 aRef->setObject(object());
93 aRef->setAttr(myAttribute);
96 updateObject(theFeature);
101 bool ModuleBase_WidgetFeatureOrAttribute::restoreValue(ObjectPtr theFeature)
103 boost::shared_ptr<ModelAPI_Data> aData = theFeature->data();
104 boost::shared_ptr<ModelAPI_AttributeRefAttr> aRef =
105 boost::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aData->attribute(attributeID()));
107 FeaturePtr aFeature = ModuleBase_Tools::feature(aRef->object());
110 myAttribute = aRef->attr();
112 std::string aText = "";
114 aText = aFeature->data()->name().c_str();
115 else if (myAttribute)
116 aText = myAttribute->attributeType().c_str();
118 editor()->setText(aText.c_str());
124 bool ModuleBase_WidgetFeatureOrAttribute::setAttribute(const boost::shared_ptr<ModelAPI_Attribute>& theAttribute)
126 if (!theAttribute)// || !featureKinds().contains(theAttribute->attributeType().c_str()))
129 myAttribute = theAttribute;
130 editor()->setText(theAttribute ? theAttribute->attributeType().c_str() : "");
131 emit valuesChanged();