X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshDlg.cxx;h=b99c8a4f6a59a4931f56fb51f5ae63a5c8513650;hb=04f997252152407f9180e03f0af428ab2ca6f4be;hp=4973a5d1ebe264ae5894f53b262e7bed94c6ee21;hpb=6bac08c1a81f34d3f21c550bd92f83654b2546a5;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx index 4973a5d1e..b99c8a4f6 100644 --- a/src/SMESHGUI/SMESHGUI_MeshDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// 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 @@ -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 @@ -338,17 +332,24 @@ void SMESHGUI_MeshTab::setCurrentHyp( const int theId, const int theIndex ) } else // more than one additional hyp assigned { - // move a hyp from myHypCombo[ AddHyp ] to myAddHypList - for ( int i = 1, nb = myHypCombo[ AddHyp ]->count(); i < nb; ++i ) + if ( theIndex > 0 ) { - int curIndex = myHypCombo[ AddHyp ]->itemData( i ).toInt(); - if ( theIndex == curIndex ) + // move a hyp from myHypCombo[ AddHyp ] to myAddHypList + for ( int i = 1, nb = myHypCombo[ AddHyp ]->count(); i < nb; ++i ) { - addItem( myHypCombo[ AddHyp ]->itemText( i ), theId, theIndex ); - myHypCombo[ AddHyp ]->removeItem( i ); - break; + int curIndex = myHypCombo[ AddHyp ]->itemData( i ).toInt(); + if ( theIndex == curIndex ) + { + addItem( myHypCombo[ AddHyp ]->itemText( i ), theId, theIndex ); + myHypCombo[ AddHyp ]->removeItem( i ); + break; + } } } + else + { + myAddHypList->clear(); + } } } @@ -375,7 +376,6 @@ int SMESHGUI_MeshTab::currentHyp( const int theId ) const * range 0 <= i < this->nbAddHypTypes() */ //================================================================================ - int SMESHGUI_MeshTab::nbAddHypTypes() const { return myAddHypList->count(); @@ -393,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 ) ); @@ -437,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 @@ -464,7 +485,6 @@ void SMESHGUI_MeshTab::onHyp( int theIndex ) * SLOT called when myMoreAddHypBtn ("plus") clicked */ //================================================================================ - void SMESHGUI_MeshTab::onMoreAddHyp() { int hypIndex = currentHyp( AddHyp ); @@ -489,7 +509,6 @@ void SMESHGUI_MeshTab::onMoreAddHyp() * SLOT called when myLessAddHypBtn ("minus") clicked */ //================================================================================ - void SMESHGUI_MeshTab::onLessAddHyp() { if ( QListWidgetItem * item = myAddHypList->currentItem() ) @@ -617,12 +636,31 @@ SMESHGUI_MeshDlg::SMESHGUI_MeshDlg( const bool theToCreate, const bool theIsMesh objectWg( Mesh, Btn )->hide(); objectWg( Geom, Btn )->hide(); } + setTitile( theToCreate, theIsMesh ); } SMESHGUI_MeshDlg::~SMESHGUI_MeshDlg() { } +//================================================================================ +/*! + * \brief Set dialog title + */ +//================================================================================ +void SMESHGUI_MeshDlg::setTitile( const bool theToCreate, const bool theIsMesh ) +{ + if ( theToCreate ) + { + setWindowTitle( tr( theIsMesh ? "CREATE_MESH" : "CREATE_SUBMESH" )); + } + else + { + setWindowTitle( tr( theIsMesh ? "EDIT_MESH" : "EDIT_SUBMESH") ); + } + +} + //================================================================================ /*! * \brief Gets tab with given id @@ -665,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; @@ -692,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(); @@ -717,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() ); @@ -762,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 ); } //================================================================================ @@ -773,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(); @@ -787,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 )