Salome HOME
Renaming feature() of ModelAPI_Attribute to owner()
[modules/shaper.git] / src / Model / Model_AttributeReference.cpp
1 // File:        ModelAPI_AttributeReference.cxx
2 // Created:     2 Apr 2014
3 // Author:      Mikhail PONIKAROV
4
5 #include "Model_AttributeReference.h"
6 #include "Model_Application.h"
7 #include "Model_Events.h"
8 #include "Model_Data.h"
9 #include <ModelAPI_Feature.h>
10 #include <Events_Loop.h>
11
12 using namespace std;
13
14 void Model_AttributeReference::setValue(boost::shared_ptr<ModelAPI_Feature> theFeature)
15 {
16   if (value() != theFeature) {
17     boost::shared_ptr<Model_Data> aData = 
18       boost::dynamic_pointer_cast<Model_Data>(theFeature->data());
19     if (myRef.IsNull()) {
20       boost::shared_ptr<Model_Data> aMyData = 
21         boost::dynamic_pointer_cast<Model_Data>(owner()->data());
22       TDF_Reference::Set(aMyData->label(), aData->label());
23     } else {
24       myRef->Set(aData->label());
25     }
26
27     static Events_ID anEvent = Events_Loop::eventByName(EVENT_FEATURE_UPDATED);
28     Model_FeatureUpdatedMessage aMsg(owner(), anEvent);
29     Events_Loop::loop()->send(aMsg);
30   }
31 }
32
33 boost::shared_ptr<ModelAPI_Feature> Model_AttributeReference::value()
34 {
35   if (!myRef.IsNull()) {
36     boost::shared_ptr<Model_Document> aDoc = 
37       boost::dynamic_pointer_cast<Model_Document>(owner()->document());
38     if (aDoc) {
39       TDF_Label aRefLab = myRef->Get();
40       return aDoc->feature(aRefLab);
41     }
42   }
43   // not initialized
44   return boost::shared_ptr<ModelAPI_Feature>();
45 }
46
47 Model_AttributeReference::Model_AttributeReference(TDF_Label& theLabel)
48 {
49   // check the attribute could be already presented in this doc (after load document)
50   if (!theLabel.FindAttribute(TDF_Reference::GetID(), myRef)) {
51     // create attribute: not initialized by value yet: attribute is not set to the label!
52   }
53 }