Salome HOME
INT PAL 0052660: Plot2D Viewer: Plot2d_Curve can't be selected
[modules/gui.git] / src / SUIT / SUIT_DataObject.cxx
index a169442011610280f8963965834ca147c1a4befc..af2cef66a012deede35dd452b603fdd727ded8f8 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@
 // 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.
+// 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
@@ -138,6 +138,25 @@ int SUIT_DataObject::childPos( const SUIT_DataObject* obj ) const
   return myChildren.indexOf( (SUIT_DataObject*)obj );
 }
 
+/*!
+  \brief Moves the child position from current to new one.
+  \param theObj child object
+  \param theNewPos child objectnew position in the children list
+
+*/
+void SUIT_DataObject::moveChildPos( SUIT_DataObject* theObj, int theNewPos)
+{
+  if (myChildren.size() <= 1)  return;
+
+  int aNewPos = theNewPos;
+  if (aNewPos < 0) aNewPos = 0;
+  if (aNewPos > (myChildren.size() - 1)) aNewPos = myChildren.size() - 1;
+
+  if (myChildren.removeOne(theObj))
+    myChildren.insert(aNewPos, theObj);
+}
+
+
 /*!
   \brief Get child object by the specified index.
   \param idx child object index
@@ -180,6 +199,16 @@ int SUIT_DataObject::position() const
   return myParent ? myParent->childPos( this ) : 0;
 }
 
+/*!
+  \brief Sets new position of the object in parent's list
+*/
+void SUIT_DataObject::setPosition(int theNewPos)
+{
+  if (theNewPos == position())  return;
+  if (!myParent)  return;
+  myParent->moveChildPos(this, theNewPos);
+}
+
 /*!
   \brief Get the next sibling data object in the children list.
   \return child object or 0 if there is no next sibling
@@ -399,6 +428,24 @@ void SUIT_DataObject::assignParent( SUIT_DataObject* p )
   myParent = p;
 }
 
+/*!
+  \brief Sets modification state of the object.
+
+  When the object has been modified (modified is set to true)
+  a signal is emitted to notify the tree model and eventually redraw the data object.
+
+  \param modified modified state 
+*/
+void SUIT_DataObject::setModified(bool modified)
+{
+  if ( _modified == modified )
+    return;
+
+  _modified = modified;
+  if ( _modified )
+    signal()->emitModified( this );
+}
+
 /*!
   \brief Get data object name.
 
@@ -928,6 +975,15 @@ void SUIT_DataObject::Signal::emitRemoved( SUIT_DataObject* object, SUIT_DataObj
   emit( removed( object, parent ) );
 }
 
+/*!
+  \brief Emit a signal to notify that the data object has been modified.
+  \param object data object that has been modified
+*/
+void SUIT_DataObject::Signal::emitModified( SUIT_DataObject* object )
+{
+  emit( modified( object ) );
+}
+
 /*!
   \brief Schedule data object for the late deleting.
   \param object data object to be deleted later