1 // Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // File : Plot2d_FitDataDlg.cxx
20 // Author : Vadim SANDLER
24 #include "Plot2d_FitDataDlg.h"
27 #include <qvalidator.h>
28 #include <qpushbutton.h>
29 #include <qradiobutton.h>
30 #include <qbuttongroup.h>
31 #include <qlineedit.h>
33 #define SPACING_SIZE 6
34 #define MARGIN_SIZE 11
35 #define MIN_EDIT_SIZE 100
40 Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent, bool secondAxisY )
41 : QDialog( parent ? parent : 0,
44 WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
45 myY2MinEdit( 0 ), myY2MaxEdit( 0 ), mySecondAxisY( secondAxisY )
48 setCaption( tr( "FIT_DATA_TLT" ) );
49 setSizeGripEnabled( TRUE );
50 QGridLayout* topLayout = new QGridLayout( this );
51 topLayout->setSpacing( SPACING_SIZE );
52 topLayout->setMargin( MARGIN_SIZE );
55 myRangeGrp = new QButtonGroup( this );
56 myRangeGrp->setColumnLayout( 0, Qt::Vertical );
57 myRangeGrp->layout()->setSpacing( 0 );
58 myRangeGrp->layout()->setMargin( 0 );
59 QGridLayout* aGridLayout = new QGridLayout( myRangeGrp->layout() );
60 aGridLayout->setAlignment( Qt::AlignTop );
61 aGridLayout->setMargin( MARGIN_SIZE );
62 aGridLayout->setSpacing( SPACING_SIZE );
64 myModeAllRB = new QRadioButton( tr( "FIT_ALL" ), myRangeGrp );
65 myModeHorRB = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp );
66 myModeVerRB = new QRadioButton( tr( "FIT_VERTICAL" ), myRangeGrp );
68 QDoubleValidator* aValidator = new QDoubleValidator( this );
69 myXMinEdit = new QLineEdit( myRangeGrp );
70 myXMinEdit->setValidator( aValidator );
71 myXMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
72 myXMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
73 myXMinEdit->setText( "0.0" );
75 myYMinEdit = new QLineEdit( myRangeGrp );
76 myYMinEdit->setValidator( aValidator );
77 myYMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
78 myYMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
79 myYMinEdit->setText( "0.0" );
81 myXMaxEdit = new QLineEdit( myRangeGrp );
82 myXMaxEdit->setValidator( aValidator );
83 myXMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
84 myXMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
85 myXMaxEdit->setText( "0.0" );
87 myYMaxEdit = new QLineEdit( myRangeGrp );
88 myYMaxEdit->setValidator( aValidator );
89 myYMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
90 myYMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
91 myYMaxEdit->setText( "0.0" );
94 myY2MinEdit = new QLineEdit( myRangeGrp );
95 myY2MinEdit->setValidator( aValidator );
96 myY2MinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
97 myY2MinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
98 myY2MinEdit->setText( "0.0" );
100 myY2MaxEdit = new QLineEdit( myRangeGrp );
101 myY2MaxEdit->setValidator( aValidator );
102 myY2MaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
103 myY2MaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
104 myY2MaxEdit->setText( "0.0" );
107 QFrame* aHLine = new QFrame( myRangeGrp );
108 aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
110 QHBoxLayout* aModeLayout = new QHBoxLayout;
111 aModeLayout->setMargin( 0 );
112 aModeLayout->setSpacing( SPACING_SIZE );
113 aModeLayout->addWidget( myModeAllRB );
114 aModeLayout->addWidget( myModeHorRB );
115 aModeLayout->addWidget( myModeVerRB );
117 QLabel* horLab = new QLabel( tr( "HORIZONTAL_AXIS" ), myRangeGrp );
118 QLabel* verLab = new QLabel( tr( "VERTICAL_AXIS" ), myRangeGrp );
120 verLab->setText( tr( "VERTICAL_LEFT_AXIS" ) );
122 QFont font = horLab->font(); font.setBold( true );
123 horLab->setFont( font ); verLab->setFont( font );
125 aGridLayout->addMultiCellLayout( aModeLayout, 0, 0, 0, 4 );
126 aGridLayout->addMultiCellWidget( aHLine, 1, 1, 0, 4 );
127 aGridLayout->addWidget ( horLab, 2, 0 );
128 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
130 aGridLayout->addWidget ( myXMinEdit, 2, 2 );
131 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
133 aGridLayout->addWidget ( myXMaxEdit, 2, 4 );
134 aGridLayout->addWidget ( verLab, 3, 0 );
135 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
137 aGridLayout->addWidget ( myYMinEdit, 3, 2 );
138 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
140 aGridLayout->addWidget ( myYMaxEdit, 3, 4 );
143 QLabel* ver2Lab = new QLabel(tr( "VERTICAL_RIGHT_AXIS" ), myRangeGrp );
144 ver2Lab->setFont( font );
145 aGridLayout->addWidget ( ver2Lab, 4, 0 );
146 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
148 aGridLayout->addWidget ( myY2MinEdit, 4, 2 );
149 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
151 aGridLayout->addWidget ( myY2MaxEdit, 4, 4 );
155 myOkBtn = new QPushButton( tr( "BUT_OK" ), this, "buttonOk" );
156 myOkBtn->setAutoDefault( TRUE );
157 myOkBtn->setDefault( TRUE );
158 myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this, "buttonCancel" );
159 myCancelBtn->setAutoDefault( TRUE );
161 topLayout->addMultiCellWidget( myRangeGrp, 0, 0, 0, 2 );
162 topLayout->addWidget( myOkBtn, 1, 0 );
163 topLayout->setColStretch( 1, 5 );
164 topLayout->addWidget( myCancelBtn, 1, 2 );
167 connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
168 connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
169 connect( myRangeGrp, SIGNAL( clicked( int ) ), this, SLOT( onModeChanged( int ) ) );
172 myModeAllRB->setChecked( true );
179 void Plot2d_FitDataDlg::setRange( const double xMin,
186 myXMinEdit->setText( QString::number( xMin ) );
187 myXMaxEdit->setText( QString::number( xMax ) );
188 myYMinEdit->setText( QString::number( yMin ) );
189 myYMaxEdit->setText( QString::number( yMax ) );
191 myY2MinEdit->setText( QString::number( y2Min ) );
192 myY2MaxEdit->setText( QString::number( y2Max ) );
197 Gets range, returns mode (see getMode())
199 int Plot2d_FitDataDlg::getRange( double& xMin,
206 xMin = myXMinEdit->text().toDouble();
207 xMax = myXMaxEdit->text().toDouble();
208 yMin = myYMinEdit->text().toDouble();
209 yMax = myYMaxEdit->text().toDouble();
211 y2Min = myY2MinEdit->text().toDouble();
212 y2Max = myY2MaxEdit->text().toDouble();
219 if ( myModeAllRB->isChecked() )
221 if ( myModeHorRB->isChecked() )
223 if ( myModeVerRB->isChecked() )
229 Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical
231 int Plot2d_FitDataDlg::getMode()
234 if ( myModeAllRB->isChecked() )
236 if ( myModeHorRB->isChecked() )
238 if ( myModeVerRB->isChecked() )
244 Called when range mode changed
246 void Plot2d_FitDataDlg::onModeChanged(int mode)
250 case 0: // fit all mode
251 myXMinEdit->setEnabled(true);
252 myXMaxEdit->setEnabled(true);
253 myYMinEdit->setEnabled(true);
254 myYMaxEdit->setEnabled(true);
256 myY2MinEdit->setEnabled(true);
257 myY2MaxEdit->setEnabled(true);
260 case 1: // fit horizontal mode
261 badFocus = myYMinEdit->hasFocus() || myYMaxEdit->hasFocus();
262 myXMinEdit->setEnabled(true);
263 myXMaxEdit->setEnabled(true);
264 myYMinEdit->setEnabled(false);
265 myYMaxEdit->setEnabled(false);
267 myY2MinEdit->setEnabled(false);
268 myY2MaxEdit->setEnabled(false);
271 myXMinEdit->setFocus();
273 case 2: // fit vertical mode
274 badFocus = myXMinEdit->hasFocus() || myXMaxEdit->hasFocus();
275 myXMinEdit->setEnabled(false);
276 myXMaxEdit->setEnabled(false);
277 myYMinEdit->setEnabled(true);
278 myYMaxEdit->setEnabled(true);
280 myY2MinEdit->setEnabled(true);
281 myY2MaxEdit->setEnabled(true);
284 myYMinEdit->setFocus();