Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

qwt_abstract_scale.cpp

00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  * 
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
00008  *****************************************************************************/
00009 
00010 #include "qwt_scale_engine.h"
00011 #include "qwt_scale_draw.h"
00012 #include "qwt_scale_div.h"
00013 #include "qwt_double_interval.h"
00014 #include "qwt_abstract_scale.h"
00015 
00016 class QwtAbstractScale::PrivateData
00017 {
00018 public:
00019     PrivateData():
00020         maxMajor(5),
00021         maxMinor(3),
00022         stepSize(0.0),
00023         autoScale(true)
00024     {
00025         scaleEngine = new QwtLinearScaleEngine;
00026         scaleDraw = new QwtScaleDraw();
00027     }
00028 
00029     ~PrivateData()
00030     {
00031         delete scaleEngine;
00032         delete scaleDraw;
00033     }
00034 
00035     QwtScaleEngine *scaleEngine;
00036     QwtScaleDraw *scaleDraw;
00037 
00038     int maxMajor;
00039     int maxMinor;
00040     double stepSize;
00041 
00042     bool autoScale;
00043 };
00044 
00052 QwtAbstractScale::QwtAbstractScale()
00053 {
00054     d_data = new PrivateData;
00055     rescale(0.0, 100.0);
00056 }
00057 
00059 QwtAbstractScale::~QwtAbstractScale()
00060 {
00061     delete d_data;
00062 }
00063 
00074 void QwtAbstractScale::setScale(double vmin, double vmax, double stepSize)
00075 {
00076     d_data->autoScale = false;
00077     d_data->stepSize = stepSize;
00078 
00079     rescale(vmin, vmax, stepSize);
00080 }
00081 
00091 void QwtAbstractScale::setScale(const QwtDoubleInterval &interval, 
00092     double step)
00093 {
00094     setScale(interval.minValue(), interval.maxValue(), step);
00095 }
00096 
00097 
00107 void QwtAbstractScale::setScale(const QwtScaleDiv &scaleDiv)
00108 {
00109     d_data->autoScale = false;
00110 
00111     if (scaleDiv != d_data->scaleDraw->scaleDiv())
00112     {
00113         d_data->scaleDraw->setScaleDiv(scaleDiv);
00114         scaleChange();
00115     }
00116 }
00117 
00127 void QwtAbstractScale::rescale(double vmin, double vmax, double stepSize) 
00128 {
00129     const QwtScaleDiv scaleDiv = d_data->scaleEngine->divideScale(
00130         vmin, vmax, d_data->maxMajor, d_data->maxMinor, stepSize);
00131 
00132     if ( scaleDiv != d_data->scaleDraw->scaleDiv() )
00133     {
00134         d_data->scaleDraw->setTransformation(
00135             d_data->scaleEngine->transformation());
00136         d_data->scaleDraw->setScaleDiv(scaleDiv);
00137         scaleChange();
00138     }
00139 }
00140 
00147 void QwtAbstractScale::setAutoScale()
00148 {
00149     if (!d_data->autoScale) 
00150     {
00151         d_data->autoScale = true;
00152         scaleChange();
00153     }
00154 }
00155 
00159 bool QwtAbstractScale::autoScale() const
00160 {
00161     return d_data->autoScale;
00162 }
00163 
00173 void QwtAbstractScale::setScaleMaxMajor(int ticks)
00174 {
00175     if (ticks != d_data->maxMajor)
00176     {
00177         d_data->maxMajor = ticks;
00178         updateScaleDraw();
00179     }
00180 }
00181 
00191 void QwtAbstractScale::setScaleMaxMinor(int ticks)
00192 {
00193     if ( ticks != d_data->maxMinor)
00194     {
00195         d_data->maxMinor = ticks;
00196         updateScaleDraw();
00197     }
00198 }
00199 
00204 int QwtAbstractScale::scaleMaxMinor() const 
00205 {
00206     return d_data->maxMinor;
00207 }
00208 
00213 int QwtAbstractScale::scaleMaxMajor() const 
00214 {
00215     return d_data->maxMajor;
00216 }
00217 
00224 void QwtAbstractScale::setScaleDraw(QwtScaleDraw *scaleDraw)
00225 {
00226     if ( scaleDraw == NULL || scaleDraw == d_data->scaleDraw )
00227         return;
00228 
00229     delete d_data->scaleDraw;
00230     d_data->scaleDraw = scaleDraw;
00231 } 
00232 
00237 QwtScaleDraw *QwtAbstractScale::scaleDraw() 
00238 {
00239     return d_data->scaleDraw;
00240 }
00241 
00246 const QwtScaleDraw *QwtAbstractScale::scaleDraw() const
00247 {
00248     return d_data->scaleDraw;
00249 }
00250 
00251 void QwtAbstractScale::updateScaleDraw()
00252 {
00253     rescale( d_data->scaleDraw->scaleDiv().lBound(), 
00254         d_data->scaleDraw->scaleDiv().hBound(), d_data->stepSize);
00255 }
00256 
00266 void QwtAbstractScale::setScaleEngine(QwtScaleEngine *scaleEngine)
00267 {
00268     if ( scaleEngine != NULL && scaleEngine != d_data->scaleEngine )
00269     {
00270         delete d_data->scaleEngine;
00271         d_data->scaleEngine = scaleEngine;
00272     }
00273 }
00274 
00279 const QwtScaleEngine *QwtAbstractScale::scaleEngine() const
00280 {
00281     return d_data->scaleEngine;
00282 }
00283 
00288 QwtScaleEngine *QwtAbstractScale::scaleEngine()
00289 {
00290     return d_data->scaleEngine;
00291 }
00292 
00298 void QwtAbstractScale::scaleChange()
00299 {
00300 }

Generated on Wed Aug 31 23:02:28 2005 for Qwt User's Guide by  doxygen 1.4.1