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>
10 #include <Config_Keywords.h>
11 #include <Config_WidgetAPI.h>
13 #include <Events_Loop.h>
14 #include <ModelAPI_Events.h>
16 #include <ModelAPI_Feature.h>
17 #include <ModelAPI_Data.h>
18 #include <ModelAPI_Object.h>
19 #include <ModelAPI_AttributeRefAttr.h>
20 #include <ModelAPI_Validator.h>
22 #include <GeomAPI_Pnt2d.h>
24 #include <GeomDataAPI_Point2D.h>
26 #include <Precision.hxx>
30 #include <QHBoxLayout>
33 ModuleBase_WidgetFeatureOrAttribute::ModuleBase_WidgetFeatureOrAttribute(QWidget* theParent,
34 const Config_WidgetAPI* theData,
35 const std::string& theParentId)
36 : ModuleBase_WidgetFeature(theParent, theData, theParentId)
40 ModuleBase_WidgetFeatureOrAttribute::~ModuleBase_WidgetFeatureOrAttribute()
44 bool ModuleBase_WidgetFeatureOrAttribute::setValue(ModuleBase_WidgetValue* theValue)
49 ModuleBase_WidgetValueFeature* aFeatureValue =
50 dynamic_cast<ModuleBase_WidgetValueFeature*>(theValue);
52 boost::shared_ptr<GeomAPI_Pnt2d> aValuePoint = aFeatureValue->point();
53 ObjectPtr aObject = aFeatureValue->object();
55 isDone = setObject(aObject, false);
58 FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
60 // find the given point in the feature attributes
61 std::list<boost::shared_ptr<ModelAPI_Attribute> > anAttiributes = aFeature->data()
62 ->attributes(GeomDataAPI_Point2D::type());
63 std::list<boost::shared_ptr<ModelAPI_Attribute> >::const_iterator anIt = anAttiributes
64 .begin(), aLast = anAttiributes.end();
65 boost::shared_ptr<GeomDataAPI_Point2D> aFPoint;
66 for (; anIt != aLast && !aFPoint; anIt++) {
67 boost::shared_ptr<GeomDataAPI_Point2D> aCurPoint = boost::dynamic_pointer_cast<
68 GeomDataAPI_Point2D>(*anIt);
69 if (aCurPoint && aCurPoint->pnt()->distance(aValuePoint) < Precision::Confusion())
73 isDone = setAttribute(aFPoint, false);
83 bool ModuleBase_WidgetFeatureOrAttribute::storeValue() const
85 //FeaturePtr aFeature = boost::dynamic_pointer_cast<ModelAPI_Feature>(theFeature);
89 boost::shared_ptr<ModelAPI_Data> aData = myFeature->data();
90 boost::shared_ptr<ModelAPI_AttributeRefAttr> aRef = boost::dynamic_pointer_cast<
91 ModelAPI_AttributeRefAttr>(aData->attribute(attributeID()));
94 aRef->setObject(myObject);
96 aRef->setAttr(myAttribute);
99 updateObject(myFeature);
104 bool ModuleBase_WidgetFeatureOrAttribute::restoreValue()
106 boost::shared_ptr<ModelAPI_Data> aData = myFeature->data();
107 boost::shared_ptr<ModelAPI_AttributeRefAttr> aRef = boost::dynamic_pointer_cast<
108 ModelAPI_AttributeRefAttr>(aData->attribute(attributeID()));
110 ObjectPtr aObj = aRef->object();
111 FeaturePtr aFeature = ModelAPI_Feature::feature(aRef->object());
114 myAttribute = aRef->attr();
116 std::string aText = "";
118 aText = aFeature->data()->name().c_str();
120 aText = myAttribute->attributeType().c_str();
122 editor()->setText(aText.c_str());
128 bool ModuleBase_WidgetFeatureOrAttribute::setAttribute(
129 const boost::shared_ptr<ModelAPI_Attribute>& theAttribute, bool theSendEvent)
131 if (!theAttribute) // || !featureKinds().contains(theAttribute->attributeType().c_str()))
134 myAttribute = theAttribute;
135 editor()->setText(theAttribute ? theAttribute->attributeType().c_str() : "");
137 emit valuesChanged();