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