Salome HOME
Fix for the problem of update of the selection attribute value after it becomes inval...
[modules/shaper.git] / src / Model / Model_AttributeRefList.cpp
index 36d11541c50724c82befa3355af40875bee1e31a..4d77a91f7f2e68663c1be1a7d18c866ab7d1a0a7 100644 (file)
@@ -1,8 +1,22 @@
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-
-// File:        ModelAPI_AttributeRefList.cxx
-// Created:     8 May 2014
-// Author:      Mikhail PONIKAROV
+// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or
+// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+//
 
 #include "Model_AttributeRefList.h"
 #include "Model_Application.h"
@@ -13,8 +27,6 @@
 #include <TDF_Tool.hxx>
 #include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
 
-using namespace std;
-
 void Model_AttributeRefList::append(ObjectPtr theObject)
 {
   if (owner()->document() == theObject->document()) {
@@ -129,14 +141,15 @@ int Model_AttributeRefList::size(const bool theWithEmpty) const
 
 bool Model_AttributeRefList::isInitialized()
 {
-  if (size(false) == 0) { // empty list is not initialized list: sketch will be not valid after add/undo
+  if (size(false) == 0) {
+    // empty list is not initialized list: sketch will be not valid after add/undo
     return false;
   }
   return ModelAPI_AttributeRefList::isInitialized();
 }
 
 ObjectPtr Model_AttributeRefList::iteratedObject(TDF_ListIteratorOfLabelList& theLIter,
-    TDataStd_ListIteratorOfListOfExtendedString& theExtIter, 
+    TDataStd_ListIteratorOfListOfExtendedString& theExtIter,
     std::shared_ptr<Model_Document> theDoc) const
 {
   ObjectPtr anObj;
@@ -162,7 +175,7 @@ ObjectPtr Model_AttributeRefList::iteratedObject(TDF_ListIteratorOfLabelList& th
   return anObj;
 }
 
-list<ObjectPtr> Model_AttributeRefList::list()
+std::list<ObjectPtr> Model_AttributeRefList::list()
 {
   std::list<ObjectPtr> aResult;
   std::shared_ptr<Model_Document> aDoc = std::dynamic_pointer_cast<Model_Document>(
@@ -223,7 +236,7 @@ bool Model_AttributeRefList::isInList(const ObjectPtr& theObj)
 
 ObjectPtr Model_AttributeRefList::object(const int theIndex, const bool theWithEmpty) const
 {
-  std::shared_ptr<Model_Document> aDoc = 
+  std::shared_ptr<Model_Document> aDoc =
     std::dynamic_pointer_cast<Model_Document>(owner()->document());
   if (aDoc) {
     int anIndex = -1;
@@ -253,7 +266,7 @@ void Model_AttributeRefList::substitute(const ObjectPtr& theCurrent, const Objec
       TDF_Label aCurrentLab = aData->label().Father();
       TDF_Label aNewLab;
       if (theNew.get() && theNew->data()->isValid()) { // the new may be null
-        std::shared_ptr<Model_Data> aNewData = 
+        std::shared_ptr<Model_Data> aNewData =
           std::dynamic_pointer_cast<Model_Data>(theNew->data());
         aNewLab = aNewData->label().Father();
       } else {
@@ -279,7 +292,7 @@ void Model_AttributeRefList::exchange(const ObjectPtr& theObject1, const ObjectP
     if (aData1.get() && aData1->isValid()) {
       TDF_Label aLab1 = aData1->label().Father();
       if (theObject2.get() && theObject2->data()->isValid()) { // the new may be null
-        std::shared_ptr<Model_Data> aData2 = 
+        std::shared_ptr<Model_Data> aData2 =
           std::dynamic_pointer_cast<Model_Data>(theObject2->data());
         if (aData2.get() && aData2->isValid()) {
           TDF_Label aLab2 = aData2->label().Father();
@@ -343,11 +356,17 @@ void Model_AttributeRefList::remove(const std::set<int>& theIndices)
 
 Model_AttributeRefList::Model_AttributeRefList(TDF_Label& theLabel)
 {
-  myIsInitialized = theLabel.FindAttribute(TDataStd_ReferenceList::GetID(), myRef) == Standard_True;
+  myLab = theLabel;
+  reinit();
+}
+
+void Model_AttributeRefList::reinit()
+{
+  myIsInitialized = myLab.FindAttribute(TDataStd_ReferenceList::GetID(), myRef) == Standard_True;
   if (!myIsInitialized) {
-    myRef = TDataStd_ReferenceList::Set(theLabel);
+    myRef = TDataStd_ReferenceList::Set(myLab);
   }
-  if (!theLabel.FindAttribute(TDataStd_ExtStringList::GetID(), myExtDocRef)) {
-    myExtDocRef = TDataStd_ExtStringList::Set(theLabel);
+  if (!myLab.FindAttribute(TDataStd_ExtStringList::GetID(), myExtDocRef)) {
+    myExtDocRef = TDataStd_ExtStringList::Set(myLab);
   }
 }