1 // Copyright (C) 2003 CEA/DEN, EDF R&D
5 // File : Plot2d_FitDataDlg.cxx
6 // Author : Vadim SANDLER
10 #include "Plot2d_FitDataDlg.h"
13 #include <qvalidator.h>
14 #include <qpushbutton.h>
15 #include <qradiobutton.h>
16 #include <qbuttongroup.h>
17 #include <qlineedit.h>
19 #define SPACING_SIZE 6
20 #define MARGIN_SIZE 11
21 #define MIN_EDIT_SIZE 100
26 Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent, bool secondAxisY )
27 : QDialog( parent ? parent : 0,
30 WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
31 myY2MinEdit( 0 ), myY2MaxEdit( 0 ), mySecondAxisY( secondAxisY )
34 setCaption( tr( "FIT_DATA_TLT" ) );
35 setSizeGripEnabled( TRUE );
36 QGridLayout* topLayout = new QGridLayout( this );
37 topLayout->setSpacing( SPACING_SIZE );
38 topLayout->setMargin( MARGIN_SIZE );
41 myRangeGrp = new QButtonGroup( this );
42 myRangeGrp->setColumnLayout( 0, Qt::Vertical );
43 myRangeGrp->layout()->setSpacing( 0 );
44 myRangeGrp->layout()->setMargin( 0 );
45 QGridLayout* aGridLayout = new QGridLayout( myRangeGrp->layout() );
46 aGridLayout->setAlignment( Qt::AlignTop );
47 aGridLayout->setMargin( MARGIN_SIZE );
48 aGridLayout->setSpacing( SPACING_SIZE );
50 myModeAllRB = new QRadioButton( tr( "FIT_ALL" ), myRangeGrp );
51 myModeHorRB = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp );
52 myModeVerRB = new QRadioButton( tr( "FIT_VERTICAL" ), myRangeGrp );
54 QDoubleValidator* aValidator = new QDoubleValidator( this );
55 myXMinEdit = new QLineEdit( myRangeGrp );
56 myXMinEdit->setValidator( aValidator );
57 myXMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
58 myXMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
59 myXMinEdit->setText( "0.0" );
61 myYMinEdit = new QLineEdit( myRangeGrp );
62 myYMinEdit->setValidator( aValidator );
63 myYMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
64 myYMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
65 myYMinEdit->setText( "0.0" );
67 myXMaxEdit = new QLineEdit( myRangeGrp );
68 myXMaxEdit->setValidator( aValidator );
69 myXMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
70 myXMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
71 myXMaxEdit->setText( "0.0" );
73 myYMaxEdit = new QLineEdit( myRangeGrp );
74 myYMaxEdit->setValidator( aValidator );
75 myYMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
76 myYMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
77 myYMaxEdit->setText( "0.0" );
80 myY2MinEdit = new QLineEdit( myRangeGrp );
81 myY2MinEdit->setValidator( aValidator );
82 myY2MinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
83 myY2MinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
84 myY2MinEdit->setText( "0.0" );
86 myY2MaxEdit = new QLineEdit( myRangeGrp );
87 myY2MaxEdit->setValidator( aValidator );
88 myY2MaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
89 myY2MaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
90 myY2MaxEdit->setText( "0.0" );
93 QFrame* aHLine = new QFrame( myRangeGrp );
94 aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
96 QHBoxLayout* aModeLayout = new QHBoxLayout;
97 aModeLayout->setMargin( 0 );
98 aModeLayout->setSpacing( SPACING_SIZE );
99 aModeLayout->addWidget( myModeAllRB );
100 aModeLayout->addWidget( myModeHorRB );
101 aModeLayout->addWidget( myModeVerRB );
103 QLabel* horLab = new QLabel( tr( "HORIZONTAL_AXIS" ), myRangeGrp );
104 QLabel* verLab = new QLabel( tr( "VERTICAL_AXIS" ), myRangeGrp );
106 verLab->setText( tr( "VERTICAL_LEFT_AXIS" ) );
108 QFont font = horLab->font(); font.setBold( true );
109 horLab->setFont( font ); verLab->setFont( font );
111 aGridLayout->addMultiCellLayout( aModeLayout, 0, 0, 0, 4 );
112 aGridLayout->addMultiCellWidget( aHLine, 1, 1, 0, 4 );
113 aGridLayout->addWidget ( horLab, 2, 0 );
114 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
116 aGridLayout->addWidget ( myXMinEdit, 2, 2 );
117 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
119 aGridLayout->addWidget ( myXMaxEdit, 2, 4 );
120 aGridLayout->addWidget ( verLab, 3, 0 );
121 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
123 aGridLayout->addWidget ( myYMinEdit, 3, 2 );
124 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
126 aGridLayout->addWidget ( myYMaxEdit, 3, 4 );
129 QLabel* ver2Lab = new QLabel(tr( "VERTICAL_RIGHT_AXIS" ), myRangeGrp );
130 ver2Lab->setFont( font );
131 aGridLayout->addWidget ( ver2Lab, 4, 0 );
132 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
134 aGridLayout->addWidget ( myY2MinEdit, 4, 2 );
135 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
137 aGridLayout->addWidget ( myY2MaxEdit, 4, 4 );
141 myOkBtn = new QPushButton( tr( "BUT_OK" ), this, "buttonOk" );
142 myOkBtn->setAutoDefault( TRUE );
143 myOkBtn->setDefault( TRUE );
144 myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this, "buttonCancel" );
145 myCancelBtn->setAutoDefault( TRUE );
147 topLayout->addMultiCellWidget( myRangeGrp, 0, 0, 0, 2 );
148 topLayout->addWidget( myOkBtn, 1, 0 );
149 topLayout->setColStretch( 1, 5 );
150 topLayout->addWidget( myCancelBtn, 1, 2 );
153 connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
154 connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
155 connect( myRangeGrp, SIGNAL( clicked( int ) ), this, SLOT( onModeChanged( int ) ) );
158 myModeAllRB->setChecked( true );
165 void Plot2d_FitDataDlg::setRange( const double xMin,
172 myXMinEdit->setText( QString::number( xMin ) );
173 myXMaxEdit->setText( QString::number( xMax ) );
174 myYMinEdit->setText( QString::number( yMin ) );
175 myYMaxEdit->setText( QString::number( yMax ) );
177 myY2MinEdit->setText( QString::number( y2Min ) );
178 myY2MaxEdit->setText( QString::number( y2Max ) );
183 Gets range, returns mode (see getMode())
185 int Plot2d_FitDataDlg::getRange( double& xMin,
192 xMin = myXMinEdit->text().toDouble();
193 xMax = myXMaxEdit->text().toDouble();
194 yMin = myYMinEdit->text().toDouble();
195 yMax = myYMaxEdit->text().toDouble();
197 y2Min = myY2MinEdit->text().toDouble();
198 y2Max = myY2MaxEdit->text().toDouble();
205 if ( myModeAllRB->isChecked() )
207 if ( myModeHorRB->isChecked() )
209 if ( myModeVerRB->isChecked() )
215 Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical
217 int Plot2d_FitDataDlg::getMode()
220 if ( myModeAllRB->isChecked() )
222 if ( myModeHorRB->isChecked() )
224 if ( myModeVerRB->isChecked() )
230 Called when range mode changed
232 void Plot2d_FitDataDlg::onModeChanged(int mode)
236 case 0: // fit all mode
237 myXMinEdit->setEnabled(true);
238 myXMaxEdit->setEnabled(true);
239 myYMinEdit->setEnabled(true);
240 myYMaxEdit->setEnabled(true);
242 myY2MinEdit->setEnabled(true);
243 myY2MaxEdit->setEnabled(true);
246 case 1: // fit horizontal mode
247 badFocus = myYMinEdit->hasFocus() || myYMaxEdit->hasFocus();
248 myXMinEdit->setEnabled(true);
249 myXMaxEdit->setEnabled(true);
250 myYMinEdit->setEnabled(false);
251 myYMaxEdit->setEnabled(false);
253 myY2MinEdit->setEnabled(false);
254 myY2MaxEdit->setEnabled(false);
257 myXMinEdit->setFocus();
259 case 2: // fit vertical mode
260 badFocus = myXMinEdit->hasFocus() || myXMaxEdit->hasFocus();
261 myXMinEdit->setEnabled(false);
262 myXMaxEdit->setEnabled(false);
263 myYMinEdit->setEnabled(true);
264 myYMaxEdit->setEnabled(true);
266 myY2MinEdit->setEnabled(true);
267 myY2MaxEdit->setEnabled(true);
270 myYMinEdit->setFocus();