X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSUIT%2FSUIT_DataObject.cxx;h=c4f31bb0e0cc4c64f4b47e1a9a1201eb4295ced0;hb=82c798c0db395e1f2aa725d1c74bc24f014751cc;hp=952c2d399bd7021a2fdb0db1ff12255da1610ac5;hpb=2e750f9ded92337bc3c44e9d7388180974cc4a43;p=modules%2Fgui.git diff --git a/src/SUIT/SUIT_DataObject.cxx b/src/SUIT/SUIT_DataObject.cxx index 952c2d399..c4f31bb0e 100755 --- a/src/SUIT/SUIT_DataObject.cxx +++ b/src/SUIT/SUIT_DataObject.cxx @@ -13,6 +13,7 @@ SUIT_DataObject::SUIT_DataObject( SUIT_DataObject* p ) : myParent( 0 ), mySignal( 0 ), + myOpen( false ), myCheck( false ) { myChildren.setAutoDelete( true ); @@ -26,6 +27,14 @@ 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; @@ -35,8 +44,6 @@ SUIT_DataObject::~SUIT_DataObject() for ( QPtrListIterator it( myChildren ); it.current(); ++it ) it.current()->myParent = 0; - - delete mySignal; } /*! @@ -242,11 +249,23 @@ bool SUIT_DataObject::replaceChild( SUIT_DataObject* src, SUIT_DataObject* trg, removeChild( src ); if ( del ) - delete src; + src->deleteLater(); return true; } +/*! + Transfer the all children from specified object 'obj' to self. +*/ + +void SUIT_DataObject::reparentChildren( const SUIT_DataObject* obj ) +{ + DataObjectList lst; + obj->children( lst ); + for ( DataObjectListIterator it( lst ); it.current(); ++it ) + it.current()->setParent( this ); +} + /*! Set the parent object. Remove itself from current parent children and append itself to the new parent children list. @@ -311,6 +330,19 @@ bool SUIT_DataObject::disconnect( QObject* reciever, const char* slot ) Returns object name */ +void SUIT_DataObject::deleteLater() +{ + if ( !mySignal ) + mySignal = new Signal( this ); + + mySignal->emitSignal(); + mySignal->deleteLater(); +} + +/*! + Returns object name +*/ + QString SUIT_DataObject::name() const { return QString::null; @@ -397,6 +429,16 @@ void SUIT_DataObject::setOn( const bool on ) myCheck = on; } +bool SUIT_DataObject::isOpen() const +{ + return myOpen; +} + +void SUIT_DataObject::setOpen( const bool on ) +{ + myOpen = on; +} + /*! Returns object personal indentification key. */ @@ -416,3 +458,35 @@ void SUIT_DataObject::dump( const int indent ) const for ( DataObjectListIterator it( myChildren ); it.current(); ++it ) // iterate all children it.current()->dump( indent + 2 ); // dump every child with indent + 2 spaces } + +/*! + Class: SUIT_DataObject::Signal [Internal] +*/ + +SUIT_DataObject::Signal::Signal( SUIT_DataObject* o ) +: QObject(), +myOwner( o ) +{ +} + +SUIT_DataObject::Signal::~Signal() +{ + SUIT_DataObject* o = myOwner; + myOwner = 0; + if ( o ) + { + o->mySignal = 0; + delete o; + } +} + +void SUIT_DataObject::Signal::setOwner( SUIT_DataObject* o ) +{ + myOwner = o; +} + +void SUIT_DataObject::Signal::emitSignal() +{ + if ( myOwner ) + emit destroyed( myOwner ); +}