00001 #include "axis_limits_dialog.h" 00002 #include "ui_axis_limits_dialog.h" 00003 00004 #include <QLineEdit> 00005 #include <QDoubleValidator> 00006 00007 using std::numeric_limits; 00008 00009 AxisLimitsDialog::AxisLimitsDialog(QWidget *parent) : 00010 QDialog(parent), 00011 ui(new Ui::AxisLimitsDialog) 00012 { 00013 ui->setupUi(this); 00014 00015 _limits.min = ( -numeric_limits<double>::max() / 2 ); 00016 _limits.max = ( numeric_limits<double>::max() / 2 ); 00017 00018 ui->lineEditMinY->setValidator( new QDoubleValidator( this) ); 00019 ui->lineEditMaxY->setValidator( new QDoubleValidator( this) ); 00020 00021 } 00022 00023 AxisLimitsDialog::~AxisLimitsDialog() 00024 { 00025 delete ui; 00026 } 00027 00028 void AxisLimitsDialog::setDefaultRange(PlotData::RangeValue range) 00029 { 00030 _parent_limits = range; 00031 00032 if( !ui->checkBoxMinY->isChecked() ) 00033 { 00034 ui->lineEditMinY->setText( QString::number( _parent_limits.min )); 00035 } 00036 if( !ui->checkBoxMaxY->isChecked() ) 00037 { 00038 ui->lineEditMaxY->setText( QString::number( _parent_limits.max )); 00039 } 00040 } 00041 00042 void AxisLimitsDialog::enableMin(bool enabled, double value) 00043 { 00044 _parent_limits.min = value; 00045 ui->lineEditMinY->setText( QString::number( _parent_limits.min )); 00046 ui->checkBoxMinY->setChecked(enabled); 00047 } 00048 00049 void AxisLimitsDialog::enableMax(bool enabled, double value) 00050 { 00051 _parent_limits.max = value; 00052 ui->lineEditMaxY->setText( QString::number( _parent_limits.max )); 00053 ui->checkBoxMaxY->setChecked(enabled); 00054 } 00055 00056 bool AxisLimitsDialog::limitsEnabled() const 00057 { 00058 return ui->checkBoxMinY->isChecked() || ui->checkBoxMaxY->isChecked(); 00059 } 00060 00061 void AxisLimitsDialog::on_checkBoxMinY_toggled(bool checked) 00062 { 00063 ui->lineEditMinY->setEnabled(checked); 00064 ui->pushButtonMinY->setEnabled(checked); 00065 } 00066 00067 void AxisLimitsDialog::on_checkBoxMaxY_toggled(bool checked) 00068 { 00069 ui->lineEditMaxY->setEnabled(checked); 00070 ui->pushButtonMaxY->setEnabled(checked); 00071 } 00072 00073 void AxisLimitsDialog::on_pushButtonDone_pressed() 00074 { 00075 double ymin = -numeric_limits<double>::max(); 00076 double ymax = numeric_limits<double>::max(); 00077 00078 if ( !ui->lineEditMinY->text().isEmpty() ) 00079 { 00080 ymin = ui->lineEditMinY->text().toDouble(); 00081 } 00082 00083 if ( !ui->lineEditMaxY->text().isEmpty() ) 00084 { 00085 ymax = ui->lineEditMaxY->text().toDouble(); 00086 } 00087 00088 if( ymin > ymax) 00089 { 00090 //swap 00091 ui->lineEditMinY->setText( QString::number( ymax )); 00092 ui->lineEditMaxY->setText( QString::number( ymin )); 00093 } 00094 else{ 00095 _limits.min = ( ui->checkBoxMinY->isChecked() ? ymin : -numeric_limits<double>::max()/2 ); 00096 _limits.max = ( ui->checkBoxMaxY->isChecked() ? ymax : numeric_limits<double>::max()/2 ); 00097 this->accept(); 00098 } 00099 } 00100 00101 void AxisLimitsDialog::on_pushButtonMinY_pressed() 00102 { 00103 ui->lineEditMinY->setText( QString::number( _parent_limits.min) ); 00104 } 00105 00106 void AxisLimitsDialog::on_pushButtonMaxY_pressed() 00107 { 00108 ui->lineEditMaxY->setText( QString::number( _parent_limits.max) ); 00109 } 00110 00111 void AxisLimitsDialog::closeEvent(QCloseEvent *event) 00112 { 00113 on_pushButtonDone_pressed(); 00114 }