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"
18 #define SPACING_SIZE 6
19 #define MARGIN_SIZE 11
20 #define MIN_EDIT_SIZE 100
25 Plot2d_FitDataDlg::Plot2d_FitDataDlg( QWidget* parent )
26 : QDialog( parent ? parent : QAD_Application::getDesktop(),
29 WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
31 setCaption( tr( "FIT_DATA_TLT" ) );
32 setSizeGripEnabled( TRUE );
33 QGridLayout* topLayout = new QGridLayout( this );
34 topLayout->setSpacing( SPACING_SIZE );
35 topLayout->setMargin( MARGIN_SIZE );
38 myRangeGrp = new QButtonGroup( this );
39 myRangeGrp->setColumnLayout( 0, Qt::Vertical );
40 myRangeGrp->layout()->setSpacing( 0 );
41 myRangeGrp->layout()->setMargin( 0 );
42 QGridLayout* aGridLayout = new QGridLayout( myRangeGrp->layout() );
43 aGridLayout->setAlignment( Qt::AlignTop );
44 aGridLayout->setMargin( MARGIN_SIZE );
45 aGridLayout->setSpacing( SPACING_SIZE );
47 myModeAllRB = new QRadioButton( tr( "FIT_ALL" ), myRangeGrp );
48 myModeHorRB = new QRadioButton( tr( "FIT_HORIZONTAL" ), myRangeGrp );
49 myModeVerRB = new QRadioButton( tr( "FIT_VERTICAL" ), myRangeGrp );
51 QDoubleValidator* aValidator = new QDoubleValidator( this );
52 myXMinEdit = new QLineEdit( myRangeGrp );
53 myXMinEdit->setValidator( aValidator );
54 myXMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
55 myXMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
56 myXMinEdit->setText( "0.0" );
58 myYMinEdit = new QLineEdit( myRangeGrp );
59 myYMinEdit->setValidator( aValidator );
60 myYMinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
61 myYMinEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
62 myYMinEdit->setText( "0.0" );
64 myXMaxEdit = new QLineEdit( myRangeGrp );
65 myXMaxEdit->setValidator( aValidator );
66 myXMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
67 myXMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
68 myXMaxEdit->setText( "0.0" );
70 myYMaxEdit = new QLineEdit( myRangeGrp );
71 myYMaxEdit->setValidator( aValidator );
72 myYMaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
73 myYMaxEdit->setMinimumSize( MIN_EDIT_SIZE, 0 );
74 myYMaxEdit->setText( "0.0" );
76 QFrame* aHLine = new QFrame( myRangeGrp );
77 aHLine->setFrameStyle( QFrame::HLine | QFrame::Sunken );
79 QHBoxLayout* aModeLayout = new QHBoxLayout;
80 aModeLayout->setMargin( 0 );
81 aModeLayout->setSpacing( SPACING_SIZE );
82 aModeLayout->addWidget( myModeAllRB );
83 aModeLayout->addWidget( myModeHorRB );
84 aModeLayout->addWidget( myModeVerRB );
86 QLabel* horLab = new QLabel( tr( "HORIZONTAL_AXIS" ), myRangeGrp );
87 QLabel* verLab = new QLabel( tr( "VERTICAL_AXIS" ), myRangeGrp );
88 QFont font = horLab->font(); font.setBold( true );
89 horLab->setFont( font ); verLab->setFont( font );
91 aGridLayout->addMultiCellLayout( aModeLayout, 0, 0, 0, 4 );
92 aGridLayout->addMultiCellWidget( aHLine, 1, 1, 0, 4 );
93 aGridLayout->addWidget ( horLab, 2, 0 );
94 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
96 aGridLayout->addWidget ( myXMinEdit, 2, 2 );
97 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
99 aGridLayout->addWidget ( myXMaxEdit, 2, 4 );
100 aGridLayout->addWidget ( verLab, 3, 0 );
101 aGridLayout->addWidget ( new QLabel( tr( "MIN_VALUE_LAB" ), myRangeGrp ),
103 aGridLayout->addWidget ( myYMinEdit, 3, 2 );
104 aGridLayout->addWidget ( new QLabel( tr( "MAX_VALUE_LAB" ), myRangeGrp ),
106 aGridLayout->addWidget ( myYMaxEdit, 3, 4 );
109 myOkBtn = new QPushButton( tr( "BUT_OK" ), this, "buttonOk" );
110 myOkBtn->setAutoDefault( TRUE );
111 myOkBtn->setDefault( TRUE );
112 myCancelBtn = new QPushButton( tr( "BUT_CANCEL" ), this, "buttonCancel" );
113 myCancelBtn->setAutoDefault( TRUE );
115 topLayout->addMultiCellWidget( myRangeGrp, 0, 0, 0, 2 );
116 topLayout->addWidget( myOkBtn, 1, 0 );
117 topLayout->setColStretch( 1, 5 );
118 topLayout->addWidget( myCancelBtn, 1, 2 );
121 connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( accept() ) );
122 connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
123 connect( myRangeGrp, SIGNAL( clicked( int ) ), this, SLOT( onModeChanged( int ) ) );
126 myModeAllRB->setChecked( true );
129 /* Center widget inside it's parent widget */
130 QAD_Tools::centerWidget( this, parentWidget() );
136 void Plot2d_FitDataDlg::setRange( const double xMin,
141 myXMinEdit->setText( QString::number( xMin ) );
142 myXMaxEdit->setText( QString::number( xMax ) );
143 myYMinEdit->setText( QString::number( yMin ) );
144 myYMaxEdit->setText( QString::number( yMax ) );
148 Gets range, returns mode (see getMode())
150 int Plot2d_FitDataDlg::getRange( double& xMin,
155 xMin = myXMinEdit->text().toDouble();
156 xMax = myXMaxEdit->text().toDouble();
157 yMin = myYMinEdit->text().toDouble();
158 yMax = myYMaxEdit->text().toDouble();
160 if ( myModeAllRB->isChecked() )
162 if ( myModeHorRB->isChecked() )
164 if ( myModeVerRB->isChecked() )
170 Gets mode : 0 - Fit all; 1 - Fit horizontal, 2 - Fit vertical
172 int Plot2d_FitDataDlg::getMode()
175 if ( myModeAllRB->isChecked() )
177 if ( myModeHorRB->isChecked() )
179 if ( myModeVerRB->isChecked() )
185 Called when range mode changed
187 void Plot2d_FitDataDlg::onModeChanged(int mode)
191 case 0: // fit all mode
192 myXMinEdit->setEnabled(true);
193 myXMaxEdit->setEnabled(true);
194 myYMinEdit->setEnabled(true);
195 myYMaxEdit->setEnabled(true);
197 case 1: // fit horizontal mode
198 badFocus = myYMinEdit->hasFocus() || myYMaxEdit->hasFocus();
199 myXMinEdit->setEnabled(true);
200 myXMaxEdit->setEnabled(true);
201 myYMinEdit->setEnabled(false);
202 myYMaxEdit->setEnabled(false);
204 myXMinEdit->setFocus();
206 case 2: // fit vertical mode
207 badFocus = myXMinEdit->hasFocus() || myXMaxEdit->hasFocus();
208 myXMinEdit->setEnabled(false);
209 myXMaxEdit->setEnabled(false);
210 myYMinEdit->setEnabled(true);
211 myYMaxEdit->setEnabled(true);
213 myYMinEdit->setFocus();