1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : Plot2d_FitDataDlg.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include "Plot2d_FitDataDlg.h"
29 #include <QPushButton>
30 #include <QRadioButton>
34 #define SPACING_SIZE 6
35 #define MARGIN_SIZE 11
36 #define MIN_EDIT_SIZE 100
41 Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent, bool secondAxisY )
42 : QDialog( parent ? parent : 0,
43 Qt::WindowTitleHint | Qt::WindowSystemMenuHint ),
44 myY2MinEdit( 0 ), myY2MaxEdit( 0 ), mySecondAxisY( secondAxisY )
47 setObjectName( "Plot2d_FitDataDlg" );
49 setWindowTitle( tr( "FIT_DATA_TLT" ) );
50 setSizeGripEnabled( TRUE );
51 QGridLayout* topLayout = new QGridLayout( this );
52 topLayout->setSpacing( SPACING_SIZE );
53 topLayout->setMargin( MARGIN_SIZE );
56 myRangeGrp = new QGroupBox( this );
57 QGridLayout* aGridLayout = new QGridLayout( myRangeGrp );
58 myRangeGrp->setLayout( aGridLayout );
59 aGridLayout->setAlignment( Qt::AlignTop );
60 aGridLayout->setMargin( MARGIN_SIZE );
61 aGridLayout->setSpacing( SPACING_SIZE );
63 myModeAllRB = new QRadioButton( tr( "FIT_ALL" ), myRangeGrp );
64 myModeHorRB = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp );
65 myModeVerRB = new QRadioButton( tr( "FIT_VERTICAL" ), myRangeGrp );
67 QDoubleValidator* aValidator = new QDoubleValidator( this );
68 myXMinEdit = new QLineEdit( myRangeGrp );
69 myXMinEdit->setValidator( aValidator );
70 myXMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
71 myXMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
72 myXMinEdit->setText( "0.0" );
74 myYMinEdit = new QLineEdit( myRangeGrp );
75 myYMinEdit->setValidator( aValidator );
76 myYMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
77 myYMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
78 myYMinEdit->setText( "0.0" );
80 myXMaxEdit = new QLineEdit( myRangeGrp );
81 myXMaxEdit->setValidator( aValidator );
82 myXMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
83 myXMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
84 myXMaxEdit->setText( "0.0" );
86 myYMaxEdit = new QLineEdit( myRangeGrp );
87 myYMaxEdit->setValidator( aValidator );
88 myYMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
89 myYMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
90 myYMaxEdit->setText( "0.0" );
93 myY2MinEdit = new QLineEdit( myRangeGrp );
94 myY2MinEdit->setValidator( aValidator );
95 myY2MinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
96 myY2MinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
97 myY2MinEdit->setText( "0.0" );
99 myY2MaxEdit = new QLineEdit( myRangeGrp );
100 myY2MaxEdit->setValidator( aValidator );
101 myY2MaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
102 myY2MaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
103 myY2MaxEdit->setText( "0.0" );
106 QFrame* aHLine = new QFrame( myRangeGrp );
107 aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
109 QHBoxLayout* aModeLayout = new QHBoxLayout;
110 aModeLayout->setMargin( 0 );
111 aModeLayout->setSpacing( SPACING_SIZE );
112 aModeLayout->addWidget( myModeAllRB );
113 aModeLayout->addWidget( myModeHorRB );
114 aModeLayout->addWidget( myModeVerRB );
116 QLabel* horLab = new QLabel( tr( "HORIZONTAL_AXIS" ), myRangeGrp );
117 QLabel* verLab = new QLabel( tr( "VERTICAL_AXIS" ), myRangeGrp );
119 verLab->setText( tr( "VERTICAL_LEFT_AXIS" ) );
121 QFont font = horLab->font(); font.setBold( true );
122 horLab->setFont( font ); verLab->setFont( font );
124 aGridLayout->addLayout( aModeLayout, 0, 0, 1, 5 );
125 aGridLayout->addWidget( aHLine, 1, 0, 1, 5 );
126 aGridLayout->addWidget( horLab, 2, 0 );
127 aGridLayout->addWidget( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
129 aGridLayout->addWidget( myXMinEdit, 2, 2 );
130 aGridLayout->addWidget( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
132 aGridLayout->addWidget( myXMaxEdit, 2, 4 );
133 aGridLayout->addWidget( verLab, 3, 0 );
134 aGridLayout->addWidget( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
136 aGridLayout->addWidget( myYMinEdit, 3, 2 );
137 aGridLayout->addWidget( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
139 aGridLayout->addWidget( myYMaxEdit, 3, 4 );
142 QLabel* ver2Lab = new QLabel(tr( "VERTICAL_RIGHT_AXIS" ), myRangeGrp );
143 ver2Lab->setFont( font );
144 aGridLayout->addWidget( ver2Lab, 4, 0 );
145 aGridLayout->addWidget( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
147 aGridLayout->addWidget( myY2MinEdit, 4, 2 );
148 aGridLayout->addWidget( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
150 aGridLayout->addWidget( myY2MaxEdit, 4, 4 );
154 myOkBtn = new QPushButton( tr( "BUT_OK" ), this );
155 myOkBtn->setObjectName( "buttonOk" );
156 myOkBtn->setAutoDefault( TRUE );
157 myOkBtn->setDefault( TRUE );
158 myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this );
159 myCancelBtn->setObjectName( "buttonCancel" );
160 myCancelBtn->setAutoDefault( TRUE );
162 topLayout->addWidget( myRangeGrp, 0, 0, 1, 3 );
163 topLayout->addWidget( myOkBtn, 1, 0 );
164 topLayout->setColumnStretch( 1, 5 );
165 topLayout->addWidget( myCancelBtn, 1, 2 );
168 connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
169 connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
170 connect( myRangeGrp, SIGNAL( clicked( int ) ), this, SLOT( onModeChanged( int ) ) );
173 myModeAllRB->setChecked( true );
180 void Plot2d_FitDataDlg::setRange( const double xMin,
187 myXMinEdit->setText( QString::number( xMin ) );
188 myXMaxEdit->setText( QString::number( xMax ) );
189 myYMinEdit->setText( QString::number( yMin ) );
190 myYMaxEdit->setText( QString::number( yMax ) );
192 myY2MinEdit->setText( QString::number( y2Min ) );
193 myY2MaxEdit->setText( QString::number( y2Max ) );
198 Gets range, returns mode (see getMode())
200 int Plot2d_FitDataDlg::getRange( double& xMin,
207 xMin = myXMinEdit->text().toDouble();
208 xMax = myXMaxEdit->text().toDouble();
209 yMin = myYMinEdit->text().toDouble();
210 yMax = myYMaxEdit->text().toDouble();
212 y2Min = myY2MinEdit->text().toDouble();
213 y2Max = myY2MaxEdit->text().toDouble();
220 if ( myModeAllRB->isChecked() )
222 if ( myModeHorRB->isChecked() )
224 if ( myModeVerRB->isChecked() )
230 Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical
232 int Plot2d_FitDataDlg::getMode()
235 if ( myModeAllRB->isChecked() )
237 if ( myModeHorRB->isChecked() )
239 if ( myModeVerRB->isChecked() )
245 Called when range mode changed
247 void Plot2d_FitDataDlg::onModeChanged(int mode)
251 case 0: // fit all mode
252 myXMinEdit->setEnabled(true);
253 myXMaxEdit->setEnabled(true);
254 myYMinEdit->setEnabled(true);
255 myYMaxEdit->setEnabled(true);
257 myY2MinEdit->setEnabled(true);
258 myY2MaxEdit->setEnabled(true);
261 case 1: // fit horizontal mode
262 badFocus = myYMinEdit->hasFocus() || myYMaxEdit->hasFocus();
263 myXMinEdit->setEnabled(true);
264 myXMaxEdit->setEnabled(true);
265 myYMinEdit->setEnabled(false);
266 myYMaxEdit->setEnabled(false);
268 myY2MinEdit->setEnabled(false);
269 myY2MaxEdit->setEnabled(false);
272 myXMinEdit->setFocus();
274 case 2: // fit vertical mode
275 badFocus = myXMinEdit->hasFocus() || myXMaxEdit->hasFocus();
276 myXMinEdit->setEnabled(false);
277 myXMaxEdit->setEnabled(false);
278 myYMinEdit->setEnabled(true);
279 myYMaxEdit->setEnabled(true);
281 myY2MinEdit->setEnabled(true);
282 myY2MaxEdit->setEnabled(true);
285 myYMinEdit->setFocus();