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 "QAD_Tools.h"
15 #include "QAD_Application.h"
16 #include "QAD_Desktop.h"
19 #define SPACING_SIZE 6
20 #define MARGIN_SIZE 11
21 #define MIN_EDIT_SIZE 100
26 Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent )
27 : QDialog( parent ? parent : QAD_Application::getDesktop(),
30 WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
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 );
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 );
48 myModeAllRB = new QRadioButton( tr( "FIT_ALL" ), myRangeGrp );
49 myModeHorRB = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp );
50 myModeVerRB = new QRadioButton( tr( "FIT_VERTICAL" ), myRangeGrp );
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" );
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" );
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" );
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" );
77 QFrame* aHLine = new QFrame( myRangeGrp );
78 aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
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 );
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 );
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 ),
97 aGridLayout->addWidget ( myXMinEdit, 2, 2 );
98 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
100 aGridLayout->addWidget ( myXMaxEdit, 2, 4 );
101 aGridLayout->addWidget ( verLab, 3, 0 );
102 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
104 aGridLayout->addWidget ( myYMinEdit, 3, 2 );
105 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
107 aGridLayout->addWidget ( myYMaxEdit, 3, 4 );
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 );
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 );
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 ) ) );
127 myModeAllRB->setChecked( true );
130 /* Center widget inside it's parent widget */
131 QAD_Tools::centerWidget( this, parentWidget() );
137 void Plot2d_FitDataDlg::setRange( const double xMin,
142 myXMinEdit->setText( QString::number( xMin ) );
143 myXMaxEdit->setText( QString::number( xMax ) );
144 myYMinEdit->setText( QString::number( yMin ) );
145 myYMaxEdit->setText( QString::number( yMax ) );
149 Gets range, returns mode (see getMode())
151 int Plot2d_FitDataDlg::getRange( double& xMin,
156 xMin = myXMinEdit->text().toDouble();
157 xMax = myXMaxEdit->text().toDouble();
158 yMin = myYMinEdit->text().toDouble();
159 yMax = myYMaxEdit->text().toDouble();
161 if ( myModeAllRB->isChecked() )
163 if ( myModeHorRB->isChecked() )
165 if ( myModeVerRB->isChecked() )
171 Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical
173 int Plot2d_FitDataDlg::getMode()
176 if ( myModeAllRB->isChecked() )
178 if ( myModeHorRB->isChecked() )
180 if ( myModeVerRB->isChecked() )
186 Called when range mode changed
188 void Plot2d_FitDataDlg::onModeChanged(int mode)
192 case 0: // fit all mode
193 myXMinEdit->setEnabled(true);
194 myXMaxEdit->setEnabled(true);
195 myYMinEdit->setEnabled(true);
196 myYMaxEdit->setEnabled(true);
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);
205 myXMinEdit->setFocus();
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);
214 myYMinEdit->setFocus();