X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_aParameterDlg.cxx;h=7e824a7b9031c2875a6b1014d40788468617a394;hp=24560d0ef13e90dc541d1556ef224895075d93b0;hb=40793ae45e14edfdc3aa185537e495f2c905b3c7;hpb=e4737e85f0da6d3f90fd08f6be1c2825195fe16f diff --git a/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx b/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx index 24560d0ef..7e824a7b9 100644 --- a/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx @@ -1,23 +1,23 @@ // SMESH SMESHGUI : GUI for SMESH component // // Copyright (C) 2003 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. -// -// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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. +// +// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // // @@ -26,14 +26,14 @@ // Module : SMESH // $Header$ -#include "QAD_Tools.h" -#include "QAD_Desktop.h" -#include "QAD_Application.h" - #include "SMESHGUI_aParameterDlg.h" #include "SMESHGUI_aParameter.h" #include "SMESHGUI.h" #include "SMESHGUI_SpinBox.h" +#include "SMESHGUI_Utils.h" + +#include "SUIT_Tools.h" +#include "SUIT_Desktop.h" // QT Includes #include @@ -42,160 +42,214 @@ #include #include #include +#include using namespace std; -//====================================================================================== +//====================================================================================== // function : SMESHGUI_aParameterDlg() // // The dialog will by default be modal, unless you set 'modal' to // false when constructing dialog -// -//====================================================================================== +// +//====================================================================================== SMESHGUI_aParameterDlg::SMESHGUI_aParameterDlg - (std::list params, - QWidget* parent, + ( SMESHGUI* theModule, + std::list params, QString title, - bool modal ) -: QDialog( parent, "MyParameterDialog", modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - myParamList( params ) + bool modal) +: QDialog( SMESH::GetDesktop( theModule ), "MyParameterDialog", modal, WStyle_Customize | + WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), + myParamList(params), + mySMESHGUI(theModule) { /* creating widgets */ init(); /* title */ - setCaption( title ); + setCaption(title); /* Move widget on the botton right corner of main widget */ - QAD_Tools::centerWidget( this, parent ); + SUIT_Tools::centerWidget(this, SMESH::GetDesktop( theModule ) ); } -//====================================================================================== +//====================================================================================== // function : SMESHGUI_aParameterDlg::init() // purpose : creates dialog's layout -//====================================================================================== +//====================================================================================== void SMESHGUI_aParameterDlg::init() { - setSizeGripEnabled( TRUE ); - - QGridLayout* topLayout = new QGridLayout( this ); - topLayout->setMargin( 11 ); topLayout->setSpacing( 6 ); + setSizeGripEnabled(TRUE); + + QVBoxLayout* topLayout = new QVBoxLayout(this); + topLayout->setMargin(11); topLayout->setSpacing(6); /***************************************************************/ - QGroupBox* GroupC1 = new QGroupBox( this, "GroupC1" ); - GroupC1->setColumnLayout(0, Qt::Vertical ); - GroupC1->layout()->setSpacing( 0 ); - GroupC1->layout()->setMargin( 0 ); - QGridLayout* GroupC1Layout = new QGridLayout( GroupC1->layout() ); - GroupC1Layout->setAlignment( Qt::AlignTop ); - GroupC1Layout->setSpacing( 6 ); - GroupC1Layout->setMargin( 11 ); + QGroupBox* GroupC1 = new QGroupBox(this, "GroupC1"); + GroupC1->setColumnLayout(0, Qt::Vertical); + GroupC1->layout()->setSpacing(0); + GroupC1->layout()->setMargin(0); + QGridLayout* GroupC1Layout = new QGridLayout(GroupC1->layout()); + GroupC1Layout->setAlignment(Qt::AlignTop); + GroupC1Layout->setSpacing(6); + GroupC1Layout->setMargin(11); /* Spin boxes with labels */ list::iterator paramIt = myParamList.begin(); - for ( int row = 0; paramIt != myParamList.end(); paramIt++ , row++ ) + for (int row = 0; paramIt != myParamList.end(); paramIt++ , row++) { SMESHGUI_aParameterPtr param = (*paramIt); - QLabel * label = new QLabel( GroupC1, "TextLabel" ); - GroupC1Layout->addWidget( label, row, 0 ); - label->setText( param->Label() ); - QWidget* aSpinWidget; - switch ( param->GetType() ) { - case SMESHGUI_aParameter::DOUBLE: { - SMESHGUI_SpinBox* spin = new SMESHGUI_SpinBox( GroupC1 ); - aSpinWidget = spin; - spin->setPrecision( 12 ); - break; + QLabel * label = new QLabel(GroupC1, "TextLabel"); + GroupC1Layout->addWidget(label, row, 0); + label->setText(param->Label()); + QWidget* aSpinWidget = param->CreateWidget( GroupC1 ); + if (aSpinWidget) { + GroupC1Layout->addWidget(aSpinWidget, row, 1); + aSpinWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); + aSpinWidget->setMinimumSize(150, 0); + + QString sig = param->sigValueChanged(); + if( !sig.isEmpty() && param->GetType()!=SMESHGUI_aParameter::TABLE ) + connect( aSpinWidget, sig.latin1(), this, SLOT( onValueChanged() ) ); + + param->InitializeWidget(aSpinWidget); + mySpinList.push_back(aSpinWidget); + myLabelList.push_back(label); } - case SMESHGUI_aParameter::INT: { - QSpinBox* spin = new QSpinBox( GroupC1 ); - aSpinWidget = spin; - break; - } - default:; - } - GroupC1Layout->addWidget( aSpinWidget, row, 1 ); - aSpinWidget->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - aSpinWidget->setMinimumSize( 150, 0 ); - param->InitializeWidget( aSpinWidget ); - mySpinList.push_back( aSpinWidget ); } + + paramIt = myParamList.begin(); + std::list::const_iterator anIt = mySpinList.begin(); + for( ; paramIt!=myParamList.end(); paramIt++, anIt++ ) + UpdateShown( *paramIt, *anIt ); + /***************************************************************/ - QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); + QGroupBox* GroupButtons = new QGroupBox(this, "GroupButtons"); + GroupButtons->setColumnLayout(0, Qt::Vertical); + GroupButtons->layout()->setSpacing(0); + GroupButtons->layout()->setMargin(0); + QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout()); + GroupButtonsLayout->setAlignment(Qt::AlignTop); + GroupButtonsLayout->setSpacing(6); + GroupButtonsLayout->setMargin(11); /* Ok button */ - myButtonOk = new QPushButton( GroupButtons, "buttonOk" ); - myButtonOk->setText( tr("SMESH_BUT_OK") ); - myButtonOk->setAutoDefault( TRUE ); - myButtonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( myButtonOk, 0, 0 ); + myButtonOk = new QPushButton(GroupButtons, "buttonOk"); + myButtonOk->setText(tr("SMESH_BUT_OK")); + myButtonOk->setAutoDefault(TRUE); + myButtonOk->setDefault(TRUE); + GroupButtonsLayout->addWidget(myButtonOk, 0, 0); /* add spacer between buttons */ - GroupButtonsLayout->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); + GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1); /* Cancel button */ - myButtonCancel = new QPushButton( GroupButtons, "buttonCancel" ); - myButtonCancel->setText( tr("SMESH_BUT_CANCEL") ); - myButtonCancel->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( myButtonCancel, 0, 2 ); - + myButtonCancel = new QPushButton(GroupButtons, "buttonCancel"); + myButtonCancel->setText(tr("SMESH_BUT_CANCEL")); + myButtonCancel->setAutoDefault(TRUE); + GroupButtonsLayout->addWidget(myButtonCancel, 0, 2); + /***************************************************************/ - topLayout->addWidget( GroupC1, 0, 0); - topLayout->addWidget( GroupButtons, 1, 0); + topLayout->addWidget(GroupC1, 1 ); + topLayout->addWidget(GroupButtons, 0 ); /* signals and slots connections */ - connect( myButtonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( myButtonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); - - /* Retrieve SMESHGUI */ - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; + connect(myButtonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(myButtonCancel, SIGNAL(clicked()), this, SLOT(reject())); } - -//====================================================================================== +//====================================================================================== // function : ~SMESHGUI_aParameterDlg() // purpose : Destructor -//====================================================================================== -SMESHGUI_aParameterDlg::~SMESHGUI_aParameterDlg() +//====================================================================================== +SMESHGUI_aParameterDlg::~SMESHGUI_aParameterDlg() { } //======================================================================= //function : ClickOnOk -//purpose : +//purpose : //======================================================================= - void SMESHGUI_aParameterDlg::ClickOnOk() { - if ( !mySMESHGUI->ActiveStudyLocked() ) { - list::iterator paramIt = myParamList.begin(); - list::iterator widgetIt = mySpinList.begin(); - for ( ; + if (!mySMESHGUI->isActiveStudyLocked()) { + list::iterator paramIt = myParamList.begin(); + list::iterator widgetIt = mySpinList.begin(); + for (; paramIt != myParamList.end() && widgetIt != mySpinList.end(); - paramIt++ , widgetIt++ ) - (*paramIt)->TakeValue( *widgetIt ); + paramIt++ , widgetIt++) + (*paramIt)->TakeValue(*widgetIt); accept(); } } - //======================================================================= // function : Parameters() // purpose : return a list of parameters from a dialog box //======================================================================= -bool SMESHGUI_aParameterDlg::Parameters( list params, const char *aTitle) +bool SMESHGUI_aParameterDlg::Parameters( SMESHGUI* theModule, + list params, + const char *aTitle) { - if ( !params.empty() ) { + if (!params.empty()) { SMESHGUI_aParameterDlg *Dialog = - new SMESHGUI_aParameterDlg(params, - QAD_Application::getDesktop(), - aTitle, - TRUE); + new SMESHGUI_aParameterDlg( theModule, params, aTitle, TRUE); return (Dialog->exec() == QDialog::Accepted); } return false; } + +//======================================================================= +// function : onValueChanged +// purpose : +//======================================================================= +void SMESHGUI_aParameterDlg::onValueChanged() +{ + if( sender()->inherits( "QWidget" ) ) + { + QWidget* w = ( QWidget* )sender(); + + SMESHGUI_aParameterPtr param; + + std::list::const_iterator anIt = mySpinList.begin(), + aLast = mySpinList.end(); + std::list::const_iterator aPIt = myParamList.begin(); + for( ; anIt!=aLast; anIt++, aPIt++ ) + if( *anIt == w ) + { + (*aPIt)->TakeValue( w ); + UpdateShown( *aPIt, w ); + break; + } + } +} + +//======================================================================= +// function : onValueChanged +// purpose : +//======================================================================= +void SMESHGUI_aParameterDlg::UpdateShown( const SMESHGUI_aParameterPtr param, QWidget* w ) +{ + SMESHGUI_dependParameter* depPar = dynamic_cast( param.get() ); + if( !depPar ) + depPar = dynamic_cast( param.get() ); + + if( !depPar ) + return; + + SMESHGUI_dependParameter::ShownMap& map = depPar->shownMap(); + if( map.isEmpty() ) + return; + + int val; + depPar->TakeValue( w ); + depPar->GetNewInt( val ); + bool hasValue = map.contains( val ); + + std::list::const_iterator anIt = mySpinList.begin(), + aLast = mySpinList.end(), + aLIt = myLabelList.begin(); + for( int i=0; anIt!=aLast; anIt++, aLIt++, i++ ) + { + bool shown = hasValue && map[ val ].contains( i ); + (*anIt)->setShown( shown ); + (*aLIt)->setShown( shown ); + } +}