Salome HOME
NRI : Merge from V1_2.
[modules/kernel.git] / src / Plot2d / Plot2d_FitDataDlg.cxx
1 //  Copyright (C) 2003  CEA/DEN, EDF R&D
2 //
3 //
4 //
5 //  File   : Plot2d_FitDataDlg.cxx
6 //  Author : Vadim SANDLER
7 //  Module : SALOME
8 //  $Header$
9
10 #include "Plot2d_FitDataDlg.h"
11 #include <qlabel.h>
12 #include <qlayout.h>
13 #include <qvalidator.h>
14 #include "QAD_Tools.h"
15 #include "QAD_Application.h"
16 #include "QAD_Desktop.h"
17
18 #define SPACING_SIZE      6
19 #define MARGIN_SIZE       11
20 #define MIN_EDIT_SIZE     100
21
22 /*!
23   Constructor 
24 */
25 Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent )
26      : QDialog( parent ? parent : QAD_Application::getDesktop(), 
27                "Plot2d_FitDataDlg", 
28                true, 
29                WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
30 {
31   setCaption( tr( "FIT_DATA_TLT" ) );
32   setSizeGripEnabled( TRUE );
33   QGridLayout* topLayout = new QGridLayout( this ); 
34   topLayout->setSpacing( SPACING_SIZE );
35   topLayout->setMargin( MARGIN_SIZE );
36
37   // 'Range' group
38   myRangeGrp = new QButtonGroup( this );
39   myRangeGrp->setColumnLayout( 0, Qt::Vertical );
40   myRangeGrp->layout()->setSpacing( 0 );
41   myRangeGrp->layout()->setMargin( 0 );
42   QGridLayout* aGridLayout = new QGridLayout( myRangeGrp->layout() );
43   aGridLayout->setAlignment( Qt::AlignTop );
44   aGridLayout->setMargin( MARGIN_SIZE );
45   aGridLayout->setSpacing( SPACING_SIZE );
46
47   myModeAllRB  = new QRadioButton( tr( "FIT_ALL" ),        myRangeGrp );
48   myModeHorRB  = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp );
49   myModeVerRB  = new QRadioButton( tr( "FIT_VERTICAL" ),   myRangeGrp );
50
51   QDoubleValidator* aValidator = new QDoubleValidator( this );
52   myXMinEdit = new QLineEdit( myRangeGrp );
53   myXMinEdit->setValidator( aValidator );
54   myXMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
55   myXMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
56   myXMinEdit->setText( "0.0" );
57
58   myYMinEdit = new QLineEdit( myRangeGrp );
59   myYMinEdit->setValidator( aValidator );
60   myYMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
61   myYMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
62   myYMinEdit->setText( "0.0" );
63
64   myXMaxEdit = new QLineEdit( myRangeGrp );
65   myXMaxEdit->setValidator( aValidator );
66   myXMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
67   myXMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
68   myXMaxEdit->setText( "0.0" );
69
70   myYMaxEdit = new QLineEdit( myRangeGrp );
71   myYMaxEdit->setValidator( aValidator );
72   myYMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
73   myYMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
74   myYMaxEdit->setText( "0.0" );
75
76   QFrame* aHLine = new QFrame( myRangeGrp );
77   aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
78
79   QHBoxLayout* aModeLayout = new QHBoxLayout;
80   aModeLayout->setMargin( 0 );
81   aModeLayout->setSpacing( SPACING_SIZE );
82   aModeLayout->addWidget( myModeAllRB );
83   aModeLayout->addWidget( myModeHorRB );
84   aModeLayout->addWidget( myModeVerRB );
85
86   QLabel* horLab = new QLabel( tr( "HORIZONTAL_AXIS" ), myRangeGrp );
87   QLabel* verLab = new QLabel( tr( "VERTICAL_AXIS" ), myRangeGrp );
88   QFont font = horLab->font(); font.setBold( true );
89   horLab->setFont( font ); verLab->setFont( font );
90
91   aGridLayout->addMultiCellLayout( aModeLayout,    0, 0, 0, 4 );
92   aGridLayout->addMultiCellWidget( aHLine,         1, 1, 0, 4 );
93   aGridLayout->addWidget         ( horLab,         2,    0 );
94   aGridLayout->addWidget         ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ), 
95                                                    2,    1 );
96   aGridLayout->addWidget         ( myXMinEdit,     2,    2 );
97   aGridLayout->addWidget         ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ), 
98                                                    2,    3 );
99   aGridLayout->addWidget         ( myXMaxEdit,     2,    4 );
100   aGridLayout->addWidget         ( verLab,         3,    0 );
101   aGridLayout->addWidget         ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ), 
102                                                    3,    1 );
103   aGridLayout->addWidget         ( myYMinEdit,     3,    2 );
104   aGridLayout->addWidget         ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ), 
105                                                    3,    3 );
106   aGridLayout->addWidget         ( myYMaxEdit,     3,    4 );
107   
108   // OK/Cancel buttons
109   myOkBtn = new QPushButton( tr( "BUT_OK" ), this, "buttonOk" );
110   myOkBtn->setAutoDefault( TRUE );
111   myOkBtn->setDefault( TRUE );
112   myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this, "buttonCancel" );
113   myCancelBtn->setAutoDefault( TRUE );
114
115   topLayout->addMultiCellWidget( myRangeGrp, 0, 0, 0, 2 );
116   topLayout->addWidget( myOkBtn, 1, 0 );
117   topLayout->setColStretch( 1, 5 );
118   topLayout->addWidget( myCancelBtn, 1, 2 );
119
120   // connect signals
121   connect( myOkBtn,      SIGNAL( clicked() ),      this, SLOT( accept() ) );
122   connect( myCancelBtn,  SIGNAL( clicked() ),      this, SLOT( reject() ) );
123   connect( myRangeGrp,   SIGNAL( clicked( int ) ), this, SLOT( onModeChanged( int ) ) );
124
125   // initial state
126   myModeAllRB->setChecked( true );
127   onModeChanged( 0 );
128
129   /* Center widget inside it's parent widget */
130   QAD_Tools::centerWidget( this, parentWidget() );
131 }
132
133 /*!
134   Sets range
135 */
136 void Plot2d_FitDataDlg::setRange( const double xMin, 
137                                   const double xMax,
138                                   const double yMin,
139                                   const double yMax ) 
140 {
141   myXMinEdit->setText( QString::number( xMin ) );
142   myXMaxEdit->setText( QString::number( xMax ) );
143   myYMinEdit->setText( QString::number( yMin ) );
144   myYMaxEdit->setText( QString::number( yMax ) );
145 }
146
147 /*!
148   Gets range, returns mode (see getMode())
149 */
150 int Plot2d_FitDataDlg::getRange( double& xMin, 
151                                  double& xMax,
152                                  double& yMin,
153                                  double& yMax ) 
154 {
155   xMin = myXMinEdit->text().toDouble();
156   xMax = myXMaxEdit->text().toDouble();
157   yMin = myYMinEdit->text().toDouble();
158   yMax = myYMaxEdit->text().toDouble();
159   int myMode = 0;
160   if ( myModeAllRB->isChecked() )
161     myMode = 0;
162   if ( myModeHorRB->isChecked() )
163     myMode = 1;
164   if ( myModeVerRB->isChecked() )
165     myMode = 2;
166   return myMode;
167 }
168
169 /*!
170   Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical
171 */
172 int Plot2d_FitDataDlg::getMode() 
173 {
174   int myMode = 0;
175   if ( myModeAllRB->isChecked() )
176     myMode = 0;
177   if ( myModeHorRB->isChecked() )
178     myMode = 1;
179   if ( myModeVerRB->isChecked() )
180     myMode = 2;
181   return myMode;
182 }
183
184 /*!
185   Called when range mode changed
186 */
187 void Plot2d_FitDataDlg::onModeChanged(int mode) 
188 {
189   bool badFocus;
190   switch( mode ) {
191   case 0: // fit all mode
192     myXMinEdit->setEnabled(true);
193     myXMaxEdit->setEnabled(true);
194     myYMinEdit->setEnabled(true);
195     myYMaxEdit->setEnabled(true);
196     break;
197   case 1: // fit horizontal mode
198     badFocus = myYMinEdit->hasFocus() || myYMaxEdit->hasFocus();
199     myXMinEdit->setEnabled(true);
200     myXMaxEdit->setEnabled(true);
201     myYMinEdit->setEnabled(false);
202     myYMaxEdit->setEnabled(false);
203     if (badFocus)
204       myXMinEdit->setFocus();
205     break;
206   case 2: // fit vertical mode
207     badFocus = myXMinEdit->hasFocus() || myXMaxEdit->hasFocus();
208     myXMinEdit->setEnabled(false);
209     myXMaxEdit->setEnabled(false);
210     myYMinEdit->setEnabled(true);
211     myYMaxEdit->setEnabled(true);
212     if (badFocus)
213       myYMinEdit->setFocus();
214     break;
215   }
216 }
217