X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSUIT%2FSUIT_Selector.cxx;h=8292c50de78f483be6013e3187c207a639c00b9f;hb=efe3cdefadc31ad9cdaa9fd7fc368e2931cebdf1;hp=cbef90b02c7a5de6956d5471b6736e0b6fee1df3;hpb=80440382aee9df5cdaa4cf16a9cd229ff8e3ad27;p=modules%2Fgui.git diff --git a/src/SUIT/SUIT_Selector.cxx b/src/SUIT/SUIT_Selector.cxx index cbef90b02..8292c50de 100755 --- a/src/SUIT/SUIT_Selector.cxx +++ b/src/SUIT/SUIT_Selector.cxx @@ -1,7 +1,72 @@ +// Copyright (C) 2007-2016 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 +// +// 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 +// + #include "SUIT_Selector.h" #include "SUIT_SelectionMgr.h" +#include + +/*!\class SUIT_Selector::Destroyer + Class provide the watching for qobject parent class of the selector. +*/ + +class SUIT_Selector::Destroyer : public QObject +{ +public: + Destroyer( SUIT_Selector*, QObject* = 0 ); + virtual ~Destroyer(); + + SUIT_Selector* selector() const; + void setSelector( SUIT_Selector* ); + +private: + SUIT_Selector* mySelector; +}; + +SUIT_Selector::Destroyer::Destroyer( SUIT_Selector* s, QObject* p ) +: QObject( p ), + mySelector( s ) +{ +} + +SUIT_Selector::Destroyer::~Destroyer() +{ + SUIT_Selector* s = mySelector; + mySelector = 0; + if ( s ) + delete s; +} + +SUIT_Selector* SUIT_Selector::Destroyer::selector() const +{ + return mySelector; +} + +void SUIT_Selector::Destroyer::setSelector( SUIT_Selector* s ) +{ + mySelector = s; +} + /*!\class SUIT_Selector * Class provide selector for data owners. */ @@ -9,15 +74,18 @@ /*! Constructor. */ -SUIT_Selector::SUIT_Selector( SUIT_SelectionMgr* selMgr, QObject* parent ) : -QObject( parent ), -mySelMgr( selMgr ), -myBlock( false ), -myEnabled( true ), -myAutoBlock( true ) +SUIT_Selector::SUIT_Selector( SUIT_SelectionMgr* selMgr, QObject* parent ) +: mySelMgr( selMgr ), + myBlock( false ), + myEnabled( true ), + myAutoBlock( true ), + myDestroyer( 0 ) { if ( selMgr ) selMgr->installSelector( this ); + + if ( parent ) + myDestroyer = new Destroyer( this, parent ); } /*! @@ -27,6 +95,13 @@ SUIT_Selector::~SUIT_Selector() { if ( selectionMgr() ) selectionMgr()->removeSelector( this ); + + if ( myDestroyer && myDestroyer->selector() == this ) + { + myDestroyer->setSelector( 0 ); + delete myDestroyer; + myDestroyer = 0; + } } /*! @@ -117,8 +192,16 @@ bool SUIT_Selector::hasSelectionMode( const int mode ) const /*! Puts to list \a lst selection modes from selection manager. */ -void SUIT_Selector::selectionModes( QValueList& lst ) const +void SUIT_Selector::selectionModes( QList& lst ) const { if ( selectionMgr() ) selectionMgr()->selectionModes( lst ); } + +/*! + Get owner of this selector. + */ +QObject* SUIT_Selector::owner() const +{ + return myDestroyer ? myDestroyer->parent() : 0; +}