Salome HOME
Fix for bug 10438: Crash during Explode on Blocks operation (Global selection on...
[modules/gui.git] / src / SUIT / SUIT_DataObject.cxx
index c4f31bb0e0cc4c64f4b47e1a9a1201eb4295ced0..7fdc046317f1d9960da3b4f8c1a4525dce3cdbd9 100755 (executable)
@@ -27,14 +27,6 @@ SUIT_DataObject::SUIT_DataObject( SUIT_DataObject* p )
 
 SUIT_DataObject::~SUIT_DataObject()
 {
-  if ( mySignal )
-  {
-    mySignal->emitSignal();
-    mySignal->setOwner( 0 );
-  }
-
-  delete mySignal;
-
   SUIT_DataObject* p = myParent;
 
   myParent = 0;
@@ -42,8 +34,16 @@ SUIT_DataObject::~SUIT_DataObject()
   if ( p )
     p->removeChild( this );
 
+  if ( mySignal )
+  {
+    mySignal->emitSignal();
+    mySignal->setOwner( 0 );
+  }
+
   for ( QPtrListIterator<SUIT_DataObject> it( myChildren ); it.current(); ++it )
     it.current()->myParent = 0;
+
+  delete mySignal;
 }
 
 /*!
@@ -123,6 +123,22 @@ SUIT_DataObject* SUIT_DataObject::childObject( const int idx ) const
   return child;
 }
 
+/*!
+    Returns the level of the object in the data tree.
+    0 means that object is top-level.
+*/
+
+int SUIT_DataObject::level() const
+{
+  int lev = 0;
+  SUIT_DataObject* p = parent();
+  while ( p ) {
+    p = p->parent();
+    lev++;
+  }
+  return lev;
+}
+
 /*!
     Returns the next data object in the child list of the parent.
 */
@@ -469,6 +485,9 @@ myOwner( o )
 {
 }
 
+/*!
+  Destructor.
+*/
 SUIT_DataObject::Signal::~Signal()
 {
   SUIT_DataObject* o = myOwner;
@@ -480,11 +499,17 @@ SUIT_DataObject::Signal::~Signal()
   }
 }
 
+/*!
+  Set owner \a o.
+*/
 void SUIT_DataObject::Signal::setOwner( SUIT_DataObject* o )
 {
   myOwner = o;
 }
 
+/*!
+  emit signal destroed owner.
+*/
 void SUIT_DataObject::Signal::emitSignal()
 {
   if ( myOwner )