From: asl Date: Mon, 11 Jul 2005 03:47:58 +0000 (+0000) Subject: 1) new method deactivateAll X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e62eb12fac0d27b84ab9e91759ad2de63d2c542b;p=modules%2Fgui.git 1) new method deactivateAll 2) some comments were added 3) object selection buttons stored as QButton*, but really it is QToolButton --- diff --git a/src/SalomeApp/SalomeApp_Dialog.cxx b/src/SalomeApp/SalomeApp_Dialog.cxx index ee24de462..8fb0786b2 100644 --- a/src/SalomeApp/SalomeApp_Dialog.cxx +++ b/src/SalomeApp/SalomeApp_Dialog.cxx @@ -4,10 +4,19 @@ #include #include -#include +#include #include #include +/* + Class : SalomeApp_Dialog + Description : Base class for all SALOME dialogs +*/ + +//======================================================================= +// name : SalomeApp_Dialog +// Purpose : Constructor +//======================================================================= SalomeApp_Dialog::SalomeApp_Dialog( QWidget* parent, const char* name, bool modal, bool allowResize, const int f, WFlags wf ) : QtxDialog( parent, name, modal, allowResize, f, wf ), @@ -16,20 +25,36 @@ SalomeApp_Dialog::SalomeApp_Dialog( QWidget* parent, const char* name, bool moda setObjectPixmap( "SalomeApp", tr( "ICON_SELECT" ) ); } +//======================================================================= +// name : ~SalomeApp_Dialog +// Purpose : Destructor +//======================================================================= SalomeApp_Dialog::~SalomeApp_Dialog() { } +//======================================================================= +// name : show +// Purpose : +//======================================================================= void SalomeApp_Dialog::show() { QtxDialog::show(); } +//======================================================================= +// name : isExclusive +// Purpose : +//======================================================================= bool SalomeApp_Dialog::isExclusive() const { return myIsExclusive; } +//======================================================================= +// name : updateButtons +// Purpose : +//======================================================================= void SalomeApp_Dialog::updateButtons( const int _id ) { if( !myIsExclusive ) @@ -41,7 +66,7 @@ void SalomeApp_Dialog::updateButtons( const int _id ) aLast = myObjects.end(); for( ; anIt!=aLast; anIt++ ) { - QPushButton* but = anIt.data().myBtn; + QToolButton* but = (QToolButton*)anIt.data().myBtn; if( but && but->isOn() ) { if( id==-1 ) @@ -53,22 +78,38 @@ void SalomeApp_Dialog::updateButtons( const int _id ) } } +//======================================================================= +// name : setExclusive +// Purpose : +//======================================================================= void SalomeApp_Dialog::setExclusive( const bool ex ) { myIsExclusive = ex; updateButtons(); } +//======================================================================= +// name : showObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::showObject( const int id ) { setObjectShown( id, true ); } +//======================================================================= +// name : hideObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::hideObject( const int id ) { setObjectShown( id, false ); } +//======================================================================= +// name : setObjectShown +// Purpose : +//======================================================================= void SalomeApp_Dialog::setObjectShown( const int id, const bool shown ) { if( myObjects.contains( id ) && isObjectShown( id )!=shown ) @@ -78,15 +119,23 @@ void SalomeApp_Dialog::setObjectShown( const int id, const bool shown ) obj.myBtn->setShown( shown ); obj.myLabel->setShown( shown ); if( !shown ) - obj.myBtn->setOn( false ); + ( ( QToolButton* )obj.myBtn )->setOn( false ); } } +//======================================================================= +// name : isObjectShown +// Purpose : +//======================================================================= bool SalomeApp_Dialog::isObjectShown( const int id ) const { return myObjects.contains( id ) && myObjects[ id ].myEdit->isShown(); } +//======================================================================= +// name : selectObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::selectObject( const QString& name, const int type, const QString& id ) { QStringList names; names.append( name ); @@ -95,6 +144,10 @@ void SalomeApp_Dialog::selectObject( const QString& name, const int type, const selectObject( names, types, ids ); } +//======================================================================= +// name : selectObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::selectObject( const QStringList& _names, const TypesList& _types, const QStringList& _ids ) @@ -118,11 +171,19 @@ void SalomeApp_Dialog::selectObject( const QStringList& _names, } } +//======================================================================= +// name : hasSelection +// Purpose : +//======================================================================= bool SalomeApp_Dialog::hasSelection( const int id ) const { return myObjects.contains( id ) && !myObjects[ id ].myIds.isEmpty(); } +//======================================================================= +// name : clearSelection +// Purpose : +//======================================================================= void SalomeApp_Dialog::clearSelection( const int id ) { if( id==-1 ) @@ -144,6 +205,10 @@ void SalomeApp_Dialog::clearSelection( const int id ) } } +//======================================================================= +// name : selectedObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::selectedObject( const int id, QStringList& list ) const { if( myObjects.contains( id ) ) @@ -152,6 +217,10 @@ void SalomeApp_Dialog::selectedObject( const int id, QStringList& list ) const // list.clear(); } +//======================================================================= +// name : objectSelection +// Purpose : +//======================================================================= void SalomeApp_Dialog::objectSelection( SelectedObjects& objs ) const { //objs.clear(); @@ -166,24 +235,32 @@ void SalomeApp_Dialog::objectSelection( SelectedObjects& objs ) const } } +//======================================================================= +// name : createObject +// Purpose : +//======================================================================= int SalomeApp_Dialog::createObject( const QString& label, QWidget* parent, const int id ) -{ - static int _id = -1; - - int nid = id>=0 ? id : --_id; +{ + int nid = id; + if( nid<0 ) + for( nid=0; myObjects.contains( nid ); nid++ ); + if( !myObjects.contains( nid ) ) { QLabel* lab = new QLabel( label, parent ); myObjects[ nid ].myLabel = lab; - QPushButton* but = new QPushButton( parent ); + QToolButton* but = new QToolButton( parent ); but->setIconSet( QIconSet( myPixmap ) ); but->setToggleButton( true ); + but->setMaximumWidth( but->height() ); + but->setMinimumWidth( but->height() ); connect( but, SIGNAL( toggled( bool ) ), this, SLOT( onToggled( bool ) ) ); myObjects[ nid ].myBtn = but; QLineEdit* ne = new QLineEdit( parent ); ne->setReadOnly( true ); + ne->setMinimumWidth( 150 ); myObjects[ nid ].myEdit = ne; myObjects[ nid ].myNI = OneNameOrCount; @@ -191,12 +268,20 @@ int SalomeApp_Dialog::createObject( const QString& label, QWidget* parent, const return nid; } +//======================================================================= +// name : renameObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::renameObject( const int id, const QString& label ) { if( myObjects.contains( id ) ) myObjects[ id ].myLabel->setText( label ); } +//======================================================================= +// name : setObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::setObjectType( const int id, const int type1, ... ) { TypesList types; @@ -211,6 +296,10 @@ void SalomeApp_Dialog::setObjectType( const int id, const int type1, ... ) setObjectType( id, types ); } +//======================================================================= +// name : setObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::setObjectType( const int id, const TypesList& list ) { if( !myObjects.contains( id ) ) @@ -234,6 +323,10 @@ void SalomeApp_Dialog::setObjectType( const int id, const TypesList& list ) updateObject( id ); } +//======================================================================= +// name : addObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::addObjectType( const int id, const int type1, const int, ... ) { TypesList types; objectTypes( id, types ); @@ -248,12 +341,20 @@ void SalomeApp_Dialog::addObjectType( const int id, const int type1, const int, setObjectType( id, types ); } +//======================================================================= +// name : addObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::addObjectType( const int id, const TypesList& list ) { TypesList types = list; objectTypes( id, types ); setObjectType( id, types ); } +//======================================================================= +// name : addObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::addObjectType( const int id, const int type ) { TypesList types; objectTypes( id, types ); @@ -261,12 +362,20 @@ void SalomeApp_Dialog::addObjectType( const int id, const int type ) setObjectType( id, types ); } +//======================================================================= +// name : removeObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::removeObjectType( const int id ) { TypesList types; setObjectType( id, types ); } +//======================================================================= +// name : removeObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::removeObjectType( const int id, const TypesList& list ) { if( !myObjects.contains( id ) ) @@ -293,12 +402,20 @@ void SalomeApp_Dialog::removeObjectType( const int id, const TypesList& list ) updateObject( id ); } +//======================================================================= +// name : removeObjectType +// Purpose : +//======================================================================= void SalomeApp_Dialog::removeObjectType( const int id, const int type ) { TypesList list; list.append( type ); removeObjectType( id, list ); } +//======================================================================= +// name : hasObjectType +// Purpose : +//======================================================================= bool SalomeApp_Dialog::hasObjectType( const int id, const int type ) const { if( myObjects.contains( id ) ) @@ -307,6 +424,10 @@ bool SalomeApp_Dialog::hasObjectType( const int id, const int type ) const return false; } +//======================================================================= +// name : objectTypes +// Purpose : +//======================================================================= void SalomeApp_Dialog::objectTypes( const int id, TypesList& list ) const { if( myObjects.contains( id ) ) @@ -318,9 +439,13 @@ void SalomeApp_Dialog::objectTypes( const int id, TypesList& list ) const } } +//======================================================================= +// name : onToggled +// Purpose : +//======================================================================= void SalomeApp_Dialog::onToggled( bool on ) { - QPushButton* but = ( QPushButton* )sender(); + QButton* but = ( QButton* )sender(); int id = -1; if( !but ) @@ -342,6 +467,10 @@ void SalomeApp_Dialog::onToggled( bool on ) emit objectDeactivated( id ); } +//======================================================================= +// name : updateObject +// Purpose : +//======================================================================= void SalomeApp_Dialog::updateObject( const int id, bool emit_signal ) { if( hasSelection( id ) ) @@ -354,6 +483,10 @@ void SalomeApp_Dialog::updateObject( const int id, bool emit_signal ) } } +//======================================================================= +// name : filterTypes +// Purpose : +//======================================================================= void SalomeApp_Dialog::filterTypes( const int id, QStringList& names, TypesList& types, QStringList& ids ) const { if( !myObjects.contains( id ) ) @@ -385,20 +518,32 @@ void SalomeApp_Dialog::filterTypes( const int id, QStringList& names, TypesList& ids = new_ids; } +//======================================================================= +// name : resMgr +// Purpose : +//======================================================================= SUIT_ResourceMgr* SalomeApp_Dialog::resMgr() const { return SUIT_Session::session()->resourceMgr(); } +//======================================================================= +// name : setObjectPixmap +// Purpose : +//======================================================================= void SalomeApp_Dialog::setObjectPixmap( const QPixmap& p ) { myPixmap = p; ObjectMap::const_iterator anIt = myObjects.begin(), aLast = myObjects.end(); for( ; anIt!=aLast; anIt++ ) - anIt.data().myBtn->setIconSet( p ); + ( ( QToolButton* )anIt.data().myBtn )->setIconSet( p ); } +//======================================================================= +// name : setObjectPixmap +// Purpose : +//======================================================================= void SalomeApp_Dialog::setObjectPixmap( const QString& section, const QString& file ) { SUIT_ResourceMgr* mgr = resMgr(); @@ -406,11 +551,19 @@ void SalomeApp_Dialog::setObjectPixmap( const QString& section, const QString& f setObjectPixmap( mgr->loadPixmap( section, file ) ); } +//======================================================================= +// name : multipleSelection +// Purpose : +//======================================================================= bool SalomeApp_Dialog::multipleSelection( const int id ) const { return nameIndication( id )!=OneName; } +//======================================================================= +// name : nameIndication +// Purpose : +//======================================================================= SalomeApp_Dialog::NameIndication SalomeApp_Dialog::nameIndication( const int id ) const { if( myObjects.contains( id ) ) @@ -419,6 +572,10 @@ SalomeApp_Dialog::NameIndication SalomeApp_Dialog::nameIndication( const int id return OneNameOrCount; } +//======================================================================= +// name : setNameIndication +// Purpose : +//======================================================================= void SalomeApp_Dialog::setNameIndication( const int id, const NameIndication ni ) { if( id==-1 ) @@ -440,10 +597,14 @@ void SalomeApp_Dialog::setNameIndication( const int id, const NameIndication ni } } +//======================================================================= +// name : selectionDescription +// Purpose : +//======================================================================= QString SalomeApp_Dialog::selectionDescription( const QStringList& names, const TypesList& types, const NameIndication ni ) const { if( names.count()!=types.count() ) - return "SalomeApp_Dialog::selectionDescription: Error!!!"; + return "SalomeApp_Dialog::selectionDescription(): Error!!!"; switch( ni ) { @@ -469,6 +630,10 @@ QString SalomeApp_Dialog::selectionDescription( const QStringList& names, const return QString::null; } +//======================================================================= +// name : countOfTypes +// Purpose : +//======================================================================= QString SalomeApp_Dialog::countOfTypes( const TypesList& types ) const { QMap typesCount; @@ -490,12 +655,35 @@ QString SalomeApp_Dialog::countOfTypes( const TypesList& types ) const return typeCount.join( ", " ); } +//======================================================================= +// name : typeName +// Purpose : +//======================================================================= QString& SalomeApp_Dialog::typeName( const int type ) { return myTypeNames[ type ]; } +//======================================================================= +// name : typeName +// Purpose : +//======================================================================= const QString& SalomeApp_Dialog::typeName( const int type ) const { return myTypeNames[ type ]; } + +//======================================================================= +// name : deactivateAll +// Purpose : +//======================================================================= +void SalomeApp_Dialog::deactivateAll() +{ + ObjectMap::iterator anIt = myObjects.begin(), + aLast = myObjects.end(); + for( ; anIt!=aLast; anIt++ ) + { + QToolButton* btn = ( QToolButton* )anIt.data().myBtn; + btn->setOn( false ); + } +} diff --git a/src/SalomeApp/SalomeApp_Dialog.h b/src/SalomeApp/SalomeApp_Dialog.h index 9ea446862..c52c9966b 100644 --- a/src/SalomeApp/SalomeApp_Dialog.h +++ b/src/SalomeApp/SalomeApp_Dialog.h @@ -10,13 +10,16 @@ #include #include - class QLineEdit; -class QPushButton; +class QButton; class QLabel; -class SUIT_ResourceMgr; +class SUIT_ResourceMgr; +/* + Class : SalomeApp_Dialog + Description : Base class for all SALOME dialogs +*/ class SalomeApp_Dialog : public QtxDialog { Q_OBJECT @@ -32,6 +35,8 @@ public: Count //! In every case " " is shown } NameIndication; + //! The enumeration describing how names of selected objects will be shown in line edit + //! For more details see above public: SalomeApp_Dialog( QWidget* = 0, const char* = 0, bool = false, @@ -62,23 +67,26 @@ public: void selectObject( const QString&, const int, const QString& ); /*! - Pass to all active widgets list of names, types and ids of selected object + Pass to all active widgets list of names, types and ids of selected objects Every active widget filters list and accept only objects with possible types */ void selectObject( const QStringList&, const TypesList&, const QStringList& ); - //! Check if widgets has selection + //! Check if certain widget has selection bool hasSelection( const int ) const; - //! Clear selection in widgets + //! Clear selection in widgets. If parameter is -1, then selection in all widgets will be cleared void clearSelection( const int = -1 ); - //! Get ids list of object selected in widgets + //! Get ids list of object selected in certain widget void selectedObject( const int, QStringList& ) const; //! Get map "widget id -> ids list" void objectSelection( SelectedObjects& ) const; + //! Set all object selection buttons to inactive state + void deactivateAll(); + signals: //! selection in certain widget is changed void selectionChanged ( int ); @@ -90,9 +98,13 @@ signals: void objectDeactivated( int ); protected: + //! Finds and returns resource manager SUIT_ResourceMgr* resMgr() const; - //! Create label, button and line edit for object selection + /*! Create label, button and line edit for object selection + * If passed id is negative, then id will be calculated automatically (first free id) + * Returns the same id (if id>=0) or calculated + */ int createObject ( const QString&, QWidget*, const int = -1 ); //! Set pixmap as icon for all selection buttons @@ -144,10 +156,10 @@ protected: //! Create string contains selection list by list of names, list of types and current name indication state virtual QString selectionDescription( const QStringList&, const TypesList&, const NameIndication ) const; - //! Create string with pattern " " for current list of types + //! Create string by pattern " " for current list of types virtual QString countOfTypes( const TypesList& ) const; - //! Get and set name indication + //! Get and set name indication for certain widget NameIndication nameIndication( const int ) const; void setNameIndication( const int, const NameIndication ); @@ -178,7 +190,7 @@ private: typedef struct { QLineEdit* myEdit; - QPushButton* myBtn; + QButton* myBtn; QLabel* myLabel; QStringList myNames, myIds; TypesList myTypes, myPossibleTypes;