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=d4c27bc109b357cca146fc02007322e244647cc1;hb=60bdcf56b18b6a2e8e6b90906a99ff43241991b8;hpb=8b4ba0cdff7660465a9ea7b26ef0df0757afed97 diff --git a/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx b/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx index d4c27bc10..7e824a7b9 100644 --- a/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_aParameterDlg.cxx @@ -1,17 +1,39 @@ -using namespace std; -// File : SMESHGUI_aParameterDlg.cxx -// Created : Wed Jun 12 21:06:21 2002 -// Author : Nicolas REJNERI - -// Project : SALOME -// Module : SMESH -// Copyright : Open CASCADE 2002 +// 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 +// +// +// +// File : SMESHGUI_aParameterDlg.cxx +// Author : Nicolas REJNERI +// Module : SMESH // $Header$ #include "SMESHGUI_aParameterDlg.h" +#include "SMESHGUI_aParameter.h" #include "SMESHGUI.h" -#include "QAD_SpinBoxDbl.h" -#include "QAD_Tools.h" +#include "SMESHGUI_SpinBox.h" +#include "SMESHGUI_Utils.h" + +#include "SUIT_Tools.h" +#include "SUIT_Desktop.h" // QT Includes #include @@ -20,215 +42,214 @@ using namespace std; #include #include #include +#include -//====================================================================================== -// function : SMESHGUI_aParameterDlg() -// purpose : Constructs a SMESHGUI_aParametertDlg for double values -// -// parent : parent widget -// title : is the title for the user in dialog box -// label : text label for the value -// -// bottom : the minimal value to be entered -// top : the maximum value to be entered -// decimals : number of decimals to be entered -// -// The dialog will by default be modal, unless you set 'modal' to -// false when constructing dialog -// -//====================================================================================== -SMESHGUI_aParameterDlg::SMESHGUI_aParameterDlg( QWidget* parent, - QString title, - QString label, - const double bottom, - const double top, - const int decimals, - bool modal ) -: QDialog( parent, "MyParameterDialog", modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - myIntSpin( 0 ), myDblSpin( 0 ) -{ - /* creating widgets */ - init( true ); - /* title */ - setCaption( title ); - /* caption */ - myTextLabel->setText( label ); - /* range */ - myDblSpin->setRange( bottom, top ); - ((QDoubleValidator*)(myDblSpin->validator()))->setRange( bottom, top, decimals ); - - /* Move widget on the botton right corner of main widget */ - QAD_Tools::centerWidget( this, parent ); -} +using namespace std; -//====================================================================================== +//====================================================================================== // function : SMESHGUI_aParameterDlg() -// purpose : Constructs a SMESHGUI_aParametertDlg for int values -// -// parent : parent widget -// title : is the title for the user in dialog box -// label : text label for the value -// -// bottom : the minimal value to be entered -// top : the maximum value to be entered // // The dialog will by default be modal, unless you set 'modal' to // false when constructing dialog -// -//====================================================================================== -SMESHGUI_aParameterDlg::SMESHGUI_aParameterDlg( QWidget* parent, - QString title, - QString label, - const int bottom, - const int top, - bool modal ) -: QDialog( parent, "MyParameterDialog", modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ), - myIntSpin( 0 ), myDblSpin( 0 ) +// +//====================================================================================== +SMESHGUI_aParameterDlg::SMESHGUI_aParameterDlg + ( SMESHGUI* theModule, + std::list params, + QString title, + bool modal) +: QDialog( SMESH::GetDesktop( theModule ), "MyParameterDialog", modal, WStyle_Customize | + WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu), + myParamList(params), + mySMESHGUI(theModule) { /* creating widgets */ - init( false ); + init(); /* title */ - setCaption( title ); - /* caption */ - myTextLabel->setText( label ); - /* range */ - myIntSpin->setRange( bottom, top ); - ((QIntValidator*)(myIntSpin->validator()))->setRange( bottom, top ); + 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( bool isDouble ) +//====================================================================================== +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 ); - /* Label */ - /* aTitle1 : text prompt on left of edit line */ - myTextLabel = new QLabel( GroupC1, "TextLabel" ); - GroupC1Layout->addWidget( myTextLabel, 0, 0 ); - /* Spin box */ - if ( isDouble ) { - myIntSpin = 0; - myDblSpin = new QAD_SpinBoxDbl( GroupC1 ); - myDblSpin->setPrecision( 12 ); - myDblSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - myDblSpin->setMinimumSize( 150, 0 ); - GroupC1Layout->addWidget( myDblSpin, 0, 1 ); - } - else { - myDblSpin = 0; - myIntSpin = new QSpinBox( GroupC1 ); - myIntSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); - myIntSpin->setMinimumSize( 150, 0 ); - GroupC1Layout->addWidget( myIntSpin, 0, 1 ); + 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++) + { + SMESHGUI_aParameterPtr param = (*paramIt); + 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); + } } + + 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( accept() ) ); - 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 : SMESHGUI_aParameterDlg::setValue -// purpose : sets double value -//====================================================================================== -void SMESHGUI_aParameterDlg::setValue( const double val ) +//======================================================================= +//function : ClickOnOk +//purpose : +//======================================================================= +void SMESHGUI_aParameterDlg::ClickOnOk() { - if ( myDblSpin ) - myDblSpin->setValue( val ); + 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); + + accept(); + } } -//====================================================================================== -// function : SMESHGUI_aParameterDlg::setValue -// purpose : sets int value -//====================================================================================== -void SMESHGUI_aParameterDlg::setValue( const int val ) + +//======================================================================= +// function : Parameters() +// purpose : return a list of parameters from a dialog box +//======================================================================= +bool SMESHGUI_aParameterDlg::Parameters( SMESHGUI* theModule, + list params, + const char *aTitle) { - if ( myIntSpin ) - myIntSpin->setValue( val ); + if (!params.empty()) { + SMESHGUI_aParameterDlg *Dialog = + new SMESHGUI_aParameterDlg( theModule, params, aTitle, TRUE); + return (Dialog->exec() == QDialog::Accepted); + } + return false; } -//====================================================================================== -// function : SMESHGUI_aParameterDlg::getDblValue -// purpose : returns double value entered by user -//====================================================================================== -double SMESHGUI_aParameterDlg::getDblValue() + +//======================================================================= +// function : onValueChanged +// purpose : +//======================================================================= +void SMESHGUI_aParameterDlg::onValueChanged() { - if ( myDblSpin ) - return myDblSpin->value(); - return 0.0; + 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 : SMESHGUI_aParameterDlg::getIntValu -// purpose : returns int value entered by user -//====================================================================================== -int SMESHGUI_aParameterDlg::getIntValue() +//======================================================================= +// function : onValueChanged +// purpose : +//======================================================================= +void SMESHGUI_aParameterDlg::UpdateShown( const SMESHGUI_aParameterPtr param, QWidget* w ) { - if ( myIntSpin ) - return myIntSpin->value(); - return 0; + 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 ); + } } - - - - - - - - -