X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshDlg.cxx;h=bb0b265f78cfc8c30502de98e8bdb04716e4688f;hp=ad2adb52012d01396aaaaee9fdae95523baef115;hb=30628bd54b2932ebfaae2ae2c24af7f173c4970e;hpb=8408df59c58cdda76191f1edc7ee3811c9ab54c8 diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx index ad2adb520..bb0b265f7 100644 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx @@ -30,6 +30,8 @@ // SALOME GUI includes #include #include +#include +#include // Qt includes #include @@ -73,11 +75,11 @@ SMESHGUI_MeshTab::SMESHGUI_MeshTab( QWidget* theParent ) // Algorifm QLabel* anAlgoLbl = new QLabel( tr( "ALGORITHM" ), this ); - myHypCombo[ Algo ] = new QComboBox( this ); + myHypCombo[ Algo ] = new QtxToolButton( this ); // Hypothesis QLabel* aHypLbl = new QLabel( tr( "HYPOTHESIS" ), this ); - myHypCombo[ MainHyp ] = new QComboBox( this ); + myHypCombo[ MainHyp ] = new QtxToolButton( this ); myHypCombo[ MainHyp ]->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); myCreateHypBtn[ MainHyp ] = new QToolButton( this ); myCreateHypBtn[ MainHyp ]->setIcon( aCreateIcon ); @@ -90,7 +92,7 @@ SMESHGUI_MeshTab::SMESHGUI_MeshTab( QWidget* theParent ) // Add. hypothesis QLabel* anAddHypLbl = new QLabel( tr( "ADD_HYPOTHESIS" ), this ); - myHypCombo[ AddHyp ] = new QComboBox( this ); + myHypCombo[ AddHyp ] = new QtxToolButton( this ); myHypCombo[ AddHyp ]->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ); myCreateHypBtn[ AddHyp ] = new QToolButton( this ); myCreateHypBtn[ AddHyp ]->setIcon( aCreateIcon ); @@ -125,6 +127,7 @@ SMESHGUI_MeshTab::SMESHGUI_MeshTab( QWidget* theParent ) aLay->addWidget( myMoreAddHypBtn, 4, 2 ); aLay->addWidget( myEditHypBtn[ MoreAddHyp ], 4, 3 ); aLay->addWidget( myLessAddHypBtn, 5, 2 ); + aLay->addItem( new QSpacerItem( 0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding ), 6, 0 ); // Connect signals and slots @@ -163,15 +166,25 @@ SMESHGUI_MeshTab::~SMESHGUI_MeshTab() * \param [in] txt - item text * \param [in] type - HypType * \param [in] index - index of item in a list of items + * \param [in] isGroup - is the item a group title */ //================================================================================ - -void SMESHGUI_MeshTab::addItem( const QString& txt, const int type, const int index ) +void SMESHGUI_MeshTab::addItem( const QString& txt, + const int type, + const int index, + const bool isGroup ) { if ( type <= AddHyp ) { - myHypCombo[ type ]->addItem( txt, QVariant( index )); - myHypCombo[ type ]->setMaxVisibleItems( qMax( 10, myHypCombo[ type ]->count() ) ); + if ( isGroup ) + { + myHypCombo[ type ]->addSeparator( txt.mid( 6 ) ); + } + else + { + myHypCombo[ type ]->addItem( txt, QVariant( index )); + } + //myHypCombo[ type ]->setMaxVisibleItems( qMax( 10, myHypCombo[ type ]->count() ) ); } else { @@ -185,7 +198,6 @@ void SMESHGUI_MeshTab::addItem( const QString& txt, const int type, const int in * \brief Returns index of hyp of a given type */ //================================================================================ - int SMESHGUI_MeshTab::getCurrentIndex( const int type, const bool curByType ) const { if ( type <= AddHyp ) @@ -222,7 +234,7 @@ void SMESHGUI_MeshTab::setAvailableHyps( const int theId, const QStringList& the { addItem( tr( "NONE"), Algo, 0 ); for ( int i = 0, nbHyp = theHyps.count(); i < nbHyp; ++i ) - addItem( theHyps[i], Algo, i+1 ); + addItem( theHyps[i], Algo, i+1, theHyps[i].startsWith( "GROUP:" )); myHypCombo[ Algo ]->setCurrentIndex( 0 ); } } @@ -296,24 +308,6 @@ void SMESHGUI_MeshTab::addHyp( const int theId, const QString& theHyp ) myMoreAddHypBtn->setEnabled( true ); } -//================================================================================ -/*! - * \brief Renames hypothesis - * \param theId - identifier of hypothesis (main or additional, see HypType enumeration) - * \param theIndex - index of hypothesis to be renamed - * \param theNewName - new name of hypothesis to be renamed - * - * Renames hypothesis - */ -//================================================================================ -// void SMESHGUI_MeshTab::renameHyp( const int theId, -// const int theIndex, -// const QString& theNewName ) -// { -// if ( theIndex > 0 && theIndex < myHypCombo[ theId ]->count() ) -// myHypCombo[ theId ]->setItemText( theIndex, theNewName ); -// } - //================================================================================ /*! * \brief Sets current hypothesis @@ -382,7 +376,6 @@ int SMESHGUI_MeshTab::currentHyp( const int theId ) const * range 0 <= i < this->nbAddHypTypes() */ //================================================================================ - int SMESHGUI_MeshTab::nbAddHypTypes() const { return myAddHypList->count(); @@ -400,15 +393,25 @@ void SMESHGUI_MeshTab::onCreateHyp() { bool isMainHyp = ( sender() == myCreateHypBtn[ MainHyp ]); - QMenu aPopup( this ); + QtxMenu aPopup( this ); QStringList aHypNames = isMainHyp ? myAvailableHypTypes[ MainHyp ] : myAvailableHypTypes[ AddHyp ]; QList actions; for ( int i = 0, n = aHypNames.count(); i < n; i++ ) - actions.append( aPopup.addAction( aHypNames[ i ] ) ); - + { + QAction* a = 0; + if ( aHypNames[ i ].startsWith( "GROUP:" )) + { + aPopup.addGroup( aHypNames[ i ].mid( 6 )); + } + else + { + a = aPopup.addAction( aHypNames[ i ] ); + } + actions.append( a ); + } QAction* a = aPopup.exec( QCursor::pos() ); if ( a ) emit createHyp( isMainHyp ? MainHyp : AddHyp, actions.indexOf( a ) ); @@ -444,7 +447,18 @@ void SMESHGUI_MeshTab::onEditHyp() //================================================================================ void SMESHGUI_MeshTab::onHyp( int theIndex ) { - const QObject* aSender = sender(); + QObject* aSender = sender(); + + if ( QComboBox* cb = qobject_cast< QComboBox* >( aSender )) + { + // don't allow selecting a group title + if ( cb->itemData( theIndex, Qt::AccessibleDescriptionRole ) == "separator" ) + { + cb->setCurrentIndex( theIndex+1 ); + return; + } + } + if ( aSender == myHypCombo[ Algo ] ) { emit selectAlgo( theIndex - 1 ); // - 1 because there is NONE on the top @@ -471,7 +485,6 @@ void SMESHGUI_MeshTab::onHyp( int theIndex ) * SLOT called when myMoreAddHypBtn ("plus") clicked */ //================================================================================ - void SMESHGUI_MeshTab::onMoreAddHyp() { int hypIndex = currentHyp( AddHyp ); @@ -496,7 +509,6 @@ void SMESHGUI_MeshTab::onMoreAddHyp() * SLOT called when myLessAddHypBtn ("minus") clicked */ //================================================================================ - void SMESHGUI_MeshTab::onLessAddHyp() { if ( QListWidgetItem * item = myAddHypList->currentItem() ) @@ -636,7 +648,6 @@ SMESHGUI_MeshDlg::~SMESHGUI_MeshDlg() * \brief Set dialog title */ //================================================================================ - void SMESHGUI_MeshDlg::setTitile( const bool theToCreate, const bool theIsMesh ) { if ( theToCreate ) @@ -681,7 +692,7 @@ void SMESHGUI_MeshDlg::reset() //================================================================================ /*! - * \brief Sets curent tab + * \brief Sets current tab */ //================================================================================ void SMESHGUI_MeshDlg::setCurrentTab( const int theId ) @@ -692,10 +703,9 @@ void SMESHGUI_MeshDlg::setCurrentTab( const int theId ) //================================================================================ /*! * \brief Enable/disable tabs - * \param int - maximum possible dimention + * \param int - maximum possible dimension */ //================================================================================ - void SMESHGUI_MeshDlg::setMaxHypoDim( const int maxDim ) { const int DIM = maxDim; @@ -719,7 +729,6 @@ void SMESHGUI_MeshDlg::setMaxHypoDim( const int maxDim ) * \brief Sets list of available Sets of Hypotheses */ //================================================================================ - void SMESHGUI_MeshDlg::setHypoSets( const QStringList& theSets ) { QMenu* aHypoSetPopup = myHypoSetButton->menu(); @@ -744,7 +753,6 @@ void SMESHGUI_MeshDlg::setHypoSets( const QStringList& theSets ) * signal to notify operation about this event */ //================================================================================ - void SMESHGUI_MeshDlg::onHypoSetPopup( QAction* a ) { emit hypoSet( a->text() ); @@ -789,9 +797,9 @@ void SMESHGUI_MeshDlg::setGeomPopupEnabled( const bool enable ) * \param int - tab ID */ //================================================================================ -void SMESHGUI_MeshDlg::disableTab(const int theTabId) { +void SMESHGUI_MeshDlg::disableTab(const int theTabId) +{ myTabWg->setTabEnabled( myTabWg->indexOf( myTabs[ theTabId ] ), false ); - if ( theTabId == Dim3D ) myHypoSetButton->setEnabled( false ); } //================================================================================ @@ -800,7 +808,8 @@ void SMESHGUI_MeshDlg::disableTab(const int theTabId) { * \param int - tab ID */ //================================================================================ -void SMESHGUI_MeshDlg::enableTab(const int theTabId) { +void SMESHGUI_MeshDlg::enableTab(const int theTabId) +{ myTabWg->setTabEnabled( myTabWg->indexOf( myTabs[ theTabId ] ), true ); if ( theTabId == Dim3D ) { QMenu* aHypoSetPopup = myHypoSetButton->menu(); @@ -814,21 +823,37 @@ void SMESHGUI_MeshDlg::enableTab(const int theTabId) { * \param int - tab ID */ //================================================================================ -bool SMESHGUI_MeshDlg::isTabEnabled(const int theTabId) const { +bool SMESHGUI_MeshDlg::isTabEnabled(const int theTabId) const +{ return myTabWg->isTabEnabled( myTabWg->indexOf( myTabs[ theTabId ] ) ); } +//================================================================================ +/*! + * \brief SLOT called when a Geom selection button is clicked + */ +//================================================================================ void SMESHGUI_MeshDlg::onGeomSelectionButton(bool isBtnOn) { if ( myGeomPopup && isBtnOn ) myGeomPopup->exec( QCursor::pos() ); } +//================================================================================ +/*! + * \brief SLOT called when a item of Geom selection popup is chosen + */ +//================================================================================ void SMESHGUI_MeshDlg::onGeomPopup( QAction* a ) { emit geomSelectionByMesh( a->data().toInt() == GEOM_BY_MESH_INDEX ); } +//================================================================================ +/*! + * \brief Return ID of an active selection button + */ +//================================================================================ int SMESHGUI_MeshDlg::getActiveObject() { for (int i = 0; i < 3; ++i )