Salome HOME
projects
/
modules
/
shaper.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make edition transaction where actually nothing was changed as empty one and do not...
[modules/shaper.git]
/
src
/
Model
/
Model_Data.cpp
diff --git
a/src/Model/Model_Data.cpp
b/src/Model/Model_Data.cpp
index 8d21b7a7834e5a8ed8d12fcf21fa41fb80dc7af1..75b38aeb01e0f85057c88e9bc7dfeef34acb9202 100644
(file)
--- a/
src/Model/Model_Data.cpp
+++ b/
src/Model/Model_Data.cpp
@@
-368,13
+368,20
@@
void Model_Data::eraseBackReferences()
void Model_Data::removeBackReference(FeaturePtr theFeature, std::string theAttrID)
{
AttributePtr anAttribute = theFeature->data()->attribute(theAttrID);
void Model_Data::removeBackReference(FeaturePtr theFeature, std::string theAttrID)
{
AttributePtr anAttribute = theFeature->data()->attribute(theAttrID);
- if (myRefsToMe.find(anAttribute) == myRefsToMe.end())
+ removeBackReference(anAttribute);
+}
+
+void Model_Data::removeBackReference(AttributePtr theAttr)
+{
+ if (myRefsToMe.find(theAttr) == myRefsToMe.end())
return;
return;
- myRefsToMe.erase(
anAttribute
);
+ myRefsToMe.erase(
theAttr
);
// remove concealment immideately: on deselection it must be posible to reselect in GUI the same
// remove concealment immideately: on deselection it must be posible to reselect in GUI the same
- if (ModelAPI_Session::get()->validators()->isConcealed(theFeature->getKind(), theAttrID)) {
+ FeaturePtr aFeatureOwner = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttr->owner());
+ if (aFeatureOwner.get() &&
+ ModelAPI_Session::get()->validators()->isConcealed(aFeatureOwner->getKind(), theAttr->id())) {
updateConcealmentFlag();
}
}
updateConcealmentFlag();
}
}
@@
-382,13
+389,12
@@
void Model_Data::removeBackReference(FeaturePtr theFeature, std::string theAttrI
void Model_Data::addBackReference(FeaturePtr theFeature, std::string theAttrID,
const bool theApplyConcealment)
{
void Model_Data::addBackReference(FeaturePtr theFeature, std::string theAttrID,
const bool theApplyConcealment)
{
- //
do not add the same attribute twice
+ //
it is possible to add the same attribute twice: may be last time the owner was not Stable...
AttributePtr anAttribute = theFeature->data()->attribute(theAttrID);
AttributePtr anAttribute = theFeature->data()->attribute(theAttrID);
- if (myRefsToMe.find(anAttribute)
!
= myRefsToMe.end())
-
return
;
+ if (myRefsToMe.find(anAttribute)
=
= myRefsToMe.end())
+
myRefsToMe.insert(theFeature->data()->attribute(theAttrID))
;
- myRefsToMe.insert(theFeature->data()->attribute(theAttrID));
- if (theApplyConcealment &&
+ if (theApplyConcealment && theFeature->isStable() &&
ModelAPI_Session::get()->validators()->isConcealed(theFeature->getKind(), theAttrID)) {
std::shared_ptr<ModelAPI_Result> aRes =
std::dynamic_pointer_cast<ModelAPI_Result>(myObject);
ModelAPI_Session::get()->validators()->isConcealed(theFeature->getKind(), theAttrID)) {
std::shared_ptr<ModelAPI_Result> aRes =
std::dynamic_pointer_cast<ModelAPI_Result>(myObject);
@@
-407,10
+413,15
@@
void Model_Data::updateConcealmentFlag()
for(; aRefsIter != myRefsToMe.end(); aRefsIter++) {
if (aRefsIter->get()) {
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>((*aRefsIter)->owner());
for(; aRefsIter != myRefsToMe.end(); aRefsIter++) {
if (aRefsIter->get()) {
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>((*aRefsIter)->owner());
- if (aFeature.get() && !aFeature->isDisabled()) {
+ if (aFeature.get() && !aFeature->isDisabled()
&& aFeature->isStable()
) {
if (ModelAPI_Session::get()->validators()->isConcealed(
aFeature->getKind(), (*aRefsIter)->id())) {
if (ModelAPI_Session::get()->validators()->isConcealed(
aFeature->getKind(), (*aRefsIter)->id())) {
- return; // it is still concealed, nothing to do
+ std::shared_ptr<ModelAPI_Result> aRes =
+ std::dynamic_pointer_cast<ModelAPI_Result>(myObject);
+ if (aRes.get()) {
+ aRes->setIsConcealed(true); // set concealed
+ }
+ return;
}
}
}
}
}
}
@@
-418,11
+429,8
@@
void Model_Data::updateConcealmentFlag()
// thus, no concealment references anymore => make not-concealed
std::shared_ptr<ModelAPI_Result> aRes =
std::dynamic_pointer_cast<ModelAPI_Result>(myObject);
// thus, no concealment references anymore => make not-concealed
std::shared_ptr<ModelAPI_Result> aRes =
std::dynamic_pointer_cast<ModelAPI_Result>(myObject);
- if (aRes.get()
&& aRes->isConcealed()
) {
+ if (aRes.get()) {
aRes->setIsConcealed(false);
aRes->setIsConcealed(false);
- static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_CREATED);
- ModelAPI_EventCreator::get()->sendUpdated(aRes, anEvent);
- Events_Loop::loop()->flush(anEvent);
}
}
}
}