All the ranges of the axes work properly without zooming in and out each time

git-svn-id: file:///afs/psi.ch/project/sls_det_software/svn/slsDetectorGui@11 af1100a4-978c-4157-bff7-07162d2ba061
This commit is contained in:
l_maliakal_d
2012-06-19 15:01:40 +00:00
parent 8246154032
commit 69e6500522
22 changed files with 521 additions and 412 deletions

View File

@ -6,7 +6,7 @@
#include <iostream>
#include <qtoolbutton.h>
#include <qgroupbox.h>
#include <qgridlayout.h>
#include <qlabel.h>
@ -17,96 +17,180 @@
using namespace std;
SlsQt2DPlotLayout::SlsQt2DPlotLayout(QWidget *parent):QGroupBox(parent){
the_layout=0;
the_plot = new SlsQt2DPlot(this);
the_layout=0;
the_plot = new SlsQt2DPlot(this);
z_range_ne = new SlsQtNumberEntry(this,1,"Set the z axis range from",2,"to",2);
// z_range_ne->SetNDecimalsOfDoubleValidators(2);
z_range_ne->setFixedWidth(402);
z_range_ne->hide();
z_range_ne = new SlsQtNumberEntry(this,1,"Set the z axis range from",2,"to",2);
z_range_ne->setFixedWidth(402);
#ifndef IAN
zRangeChecked = false;
z_range_ne->hide();
#endif
logsChecked = false;
Layout();
ConnectSignalsAndSlots();
CreateTheButtons();
Layout();
ConnectSignalsAndSlots();
}
SlsQt2DPlotLayout::~SlsQt2DPlotLayout(){
if(the_layout) delete the_layout;
if(the_layout) delete the_layout;
delete the_plot;
delete z_range_ne;
delete the_plot;
delete z_range_ne;
}
void SlsQt2DPlotLayout::CreateTheButtons(){
/** Dhanya: All these buttons are already in another class, logz is used and a wrapper around it*/
#ifdef IAN
btnInterpolate = new QToolButton(this);
btnInterpolate->setText("Interpolate");
btnInterpolate->setCheckable(true);
btnInterpolate->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
btnContour = new QToolButton(this);
btnContour->setText("Contour");
btnContour->setCheckable(true);
btnContour->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
#endif
btnLogz = new QToolButton(this);
btnLogz->setText("Log Scale (Z)");
btnLogz->setCheckable(true);
btnLogz->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
#ifndef IAN
btnLogz->hide();
#endif
}
void SlsQt2DPlotLayout::Layout(){
if(the_layout) delete the_layout;
the_layout = new QGridLayout(this);
the_layout->addWidget(the_plot,2,1,3,3);
the_layout->addWidget(z_range_ne,5,1,1,3);
if(the_layout) delete the_layout;
the_layout = new QGridLayout(this);
#ifdef IAN
the_layout->addWidget(btnInterpolate,1,1);
the_layout->addWidget(btnContour,1,2);
the_layout->addWidget(btnLogz,1,3);
#endif
the_layout->addWidget(the_plot,2,1,3,3);
the_layout->addWidget(z_range_ne,5,1,1,3);
#ifdef IAN
the_layout->setMargin(12);
#endif
}
void SlsQt2DPlotLayout::ConnectSignalsAndSlots(){
#ifndef IAN
connect(this, SIGNAL(InterpolateSignal(bool)), the_plot, SLOT(InterpolatedPlot(bool)));
connect(this, SIGNAL(ContourSignal(bool)), the_plot, SLOT(showContour(bool)));
connect(z_range_ne, SIGNAL(CheckBoxChanged(bool)), this, SLOT(ResetRange()));
connect(z_range_ne, SIGNAL(AValueChanged(SlsQtNumberEntry*)), this, SLOT(ResetRange()));
#else
connect(btnInterpolate, SIGNAL(toggled(bool)),the_plot, SLOT(InterpolatedPlot(bool)));
connect(btnContour, SIGNAL(toggled(bool)),the_plot, SLOT(showContour(bool)));
connect(btnLogz, SIGNAL(toggled(bool)),this,SLOT(SetZScaleToLog(bool)));
btnInterpolate->setChecked(false);
btnContour->setChecked(false);
#endif
connect(z_range_ne, SIGNAL(CheckBoxChanged(bool)), this, SLOT(ResetRange()));
connect(z_range_ne, SIGNAL(AValueChanged(SlsQtNumberEntry*)), this, SLOT(ResetRange()));
btnLogz->setChecked(false);
}
void SlsQt2DPlotLayout::UpdateNKeepSetRangeIfSet(){
if(z_range_ne->CheckBoxState()){
//just reset histogram range before update
the_plot->SetZMinMax(z_range_ne->GetValue(0),z_range_ne->GetValue(1));
}
the_plot->Update();
#ifdef IAN
if(z_range_ne->CheckBoxState()){
#else
if(zRangeChecked){
#endif
//just reset histogram range before update
the_plot->SetZMinMax(z_range_ne->GetValue(0),z_range_ne->GetValue(1));
}
the_plot->Update();
}
void SlsQt2DPlotLayout::ResetRange(){
//refind z limits
the_plot->SetZMinMax();
if(logsChecked) the_plot->SetZMinimumToFirstGreaterThanZero();
//refind z limits
the_plot->SetZMinMax();
if(btnLogz->isChecked()) the_plot->SetZMinimumToFirstGreaterThanZero();
#ifdef IAN
if(z_range_ne->CheckBoxState()){
#else
if(zRangeChecked){cout<<"entering:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
#endif
//first time check validity
bool same = (z_range_ne->GetValue(0)==z_range_ne->GetValue(1)) ? 1:0;
if(!z_range_ne->IsValueOk(0)||same) z_range_ne->SetValue(the_plot->GetZMinimum(),0);cout<<"isok 0:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
if(!z_range_ne->IsValueOk(1)||same) z_range_ne->SetValue(the_plot->GetZMaximum(),1);cout<<"isok1:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
z_range_ne->SetRange(the_plot->GetZMinimum(),z_range_ne->GetValue(1),0); cout<<"setrange:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
z_range_ne->SetRange(z_range_ne->GetValue(0),the_plot->GetZMaximum(),1); cout<<"setrange:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
if(z_range_ne->CheckBoxState()){
//first time check validity
bool same = (z_range_ne->GetValue(0)==z_range_ne->GetValue(1)) ? 1:0;
if(!z_range_ne->IsValueOk(0)||same) z_range_ne->SetValue(the_plot->GetZMinimum(),0);
if(!z_range_ne->IsValueOk(1)||same) z_range_ne->SetValue(the_plot->GetZMaximum(),1);
z_range_ne->SetRange(the_plot->GetZMinimum(),z_range_ne->GetValue(1),0);
z_range_ne->SetRange(z_range_ne->GetValue(0),the_plot->GetZMaximum(),1);
//set histogram range
the_plot->SetZMinMax(z_range_ne->GetValue(0),z_range_ne->GetValue(1));
}
the_plot->Update();
//set histogram range
the_plot->SetZMinMax(z_range_ne->GetValue(0),z_range_ne->GetValue(1)); cout<<"setminmax:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
}
the_plot->Update();
}
void SlsQt2DPlotLayout::SetZScaleToLog(bool yes){
logsChecked=yes;
the_plot->LogZ(yes);
ResetRange();
#ifndef IAN
#ifdef VERBOSE
cout<<"Setting ZScale to log:"<<yes<<endl;
#endif
btnLogz->setChecked(yes);
#endif
the_plot->LogZ(yes);
ResetRange();
}
void SlsQt2DPlotLayout::SetXTitle(QString st){
GetPlot()->axisWidget(QwtPlot::xBottom)->setTitle(st);
#ifndef IAN
QwtText title(st);
title.setFont(QFont("Sans Serif",11,QFont::Normal));
GetPlot()->axisWidget(QwtPlot::xBottom)->setTitle(title);
#else
GetPlot()->axisWidget(QwtPlot::xBottom)->setTitle(st);
#endif
}
void SlsQt2DPlotLayout::SetYTitle(QString st){
GetPlot()->axisWidget(QwtPlot::yLeft)->setTitle(st);
#ifndef IAN
QwtText title(st);
title.setFont(QFont("Sans Serif",11,QFont::Normal));
GetPlot()->axisWidget(QwtPlot::yLeft)->setTitle(title);
#else
GetPlot()->axisWidget(QwtPlot::yLeft)->setTitle(st);
#endif
}
void SlsQt2DPlotLayout::SetZTitle(QString st){
GetPlot()->axisWidget(QwtPlot::yRight)->setTitle(st);
#ifndef IAN
QwtText title(st);
title.setFont(QFont("Sans Serif",11,QFont::Normal));
GetPlot()->axisWidget(QwtPlot::yRight)->setTitle(title);
#else
GetPlot()->axisWidget(QwtPlot::yRight)->setTitle(st);
#endif
}
void SlsQt2DPlotLayout::SetTitle(QString st){
setTitle(st);
#ifndef IAN
void SlsQt2DPlotLayout::SetZRange(double zmin, double zmax){
#ifdef VERBOSE
cout<<"zmin:"<<zmin<<"\tzmax:"<<zmax<<endl;
#endif
z_range_ne->SetNumber(zmin,0);
z_range_ne->SetNumber(zmax,1);
cout<<"\n\nthe valuessssssssssssssss:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
ResetRange();
cout<<"finaaaal valueeeeeeees:"<<z_range_ne->GetValue(0)<<"\t"<<z_range_ne->GetValue(1)<<endl;
}
void SlsQt2DPlotLayout::EnableZRange(bool enable){
#ifdef VERBOSE
cout<<"Setting Z Range Enable to "<<enable<<endl;
#endif
zRangeChecked = enable;
ResetRange();
}
#endif