source: ntrip/branches/BNC_2.11.0/qwt/qwt_plot_magnifier.cpp@ 10580

Last change on this file since 10580 was 4271, checked in by mervart, 12 years ago
File size: 3.2 KB
Line 
1/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2 * Qwt Widget Library
3 * Copyright (C) 1997 Josef Wilgen
4 * Copyright (C) 2002 Uwe Rathmann
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the Qwt License, Version 1.0
8 *****************************************************************************/
9
10#include "qwt_plot.h"
11#include "qwt_plot_canvas.h"
12#include "qwt_scale_div.h"
13#include "qwt_plot_magnifier.h"
14#include <qevent.h>
15
16class QwtPlotMagnifier::PrivateData
17{
18public:
19 PrivateData()
20 {
21 for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
22 isAxisEnabled[axis] = true;
23 }
24
25 bool isAxisEnabled[QwtPlot::axisCnt];
26};
27
28/*!
29 Constructor
30 \param canvas Plot canvas to be magnified
31*/
32QwtPlotMagnifier::QwtPlotMagnifier( QwtPlotCanvas *canvas ):
33 QwtMagnifier( canvas )
34{
35 d_data = new PrivateData();
36}
37
38//! Destructor
39QwtPlotMagnifier::~QwtPlotMagnifier()
40{
41 delete d_data;
42}
43
44/*!
45 \brief En/Disable an axis
46
47 Only Axes that are enabled will be zoomed.
48 All other axes will remain unchanged.
49
50 \param axis Axis, see QwtPlot::Axis
51 \param on On/Off
52
53 \sa isAxisEnabled()
54*/
55void QwtPlotMagnifier::setAxisEnabled( int axis, bool on )
56{
57 if ( axis >= 0 && axis < QwtPlot::axisCnt )
58 d_data->isAxisEnabled[axis] = on;
59}
60
61/*!
62 Test if an axis is enabled
63
64 \param axis Axis, see QwtPlot::Axis
65 \return True, if the axis is enabled
66
67 \sa setAxisEnabled()
68*/
69bool QwtPlotMagnifier::isAxisEnabled( int axis ) const
70{
71 if ( axis >= 0 && axis < QwtPlot::axisCnt )
72 return d_data->isAxisEnabled[axis];
73
74 return true;
75}
76
77//! Return observed plot canvas
78QwtPlotCanvas *QwtPlotMagnifier::canvas()
79{
80 return qobject_cast<QwtPlotCanvas *>( parent() );
81}
82
83//! Return Observed plot canvas
84const QwtPlotCanvas *QwtPlotMagnifier::canvas() const
85{
86 return qobject_cast<const QwtPlotCanvas *>( parent() );
87}
88
89//! Return plot widget, containing the observed plot canvas
90QwtPlot *QwtPlotMagnifier::plot()
91{
92 QwtPlotCanvas *w = canvas();
93 if ( w )
94 return w->plot();
95
96 return NULL;
97}
98
99//! Return plot widget, containing the observed plot canvas
100const QwtPlot *QwtPlotMagnifier::plot() const
101{
102 const QwtPlotCanvas *w = canvas();
103 if ( w )
104 return w->plot();
105
106 return NULL;
107}
108
109/*!
110 Zoom in/out the axes scales
111 \param factor A value < 1.0 zooms in, a value > 1.0 zooms out.
112*/
113void QwtPlotMagnifier::rescale( double factor )
114{
115 factor = qAbs( factor );
116 if ( factor == 1.0 || factor == 0.0 )
117 return;
118
119 bool doReplot = false;
120 QwtPlot* plt = plot();
121
122 const bool autoReplot = plt->autoReplot();
123 plt->setAutoReplot( false );
124
125 for ( int axisId = 0; axisId < QwtPlot::axisCnt; axisId++ )
126 {
127 const QwtScaleDiv *scaleDiv = plt->axisScaleDiv( axisId );
128 if ( isAxisEnabled( axisId ) && scaleDiv->isValid() )
129 {
130 const double center =
131 scaleDiv->lowerBound() + scaleDiv->range() / 2;
132 const double width_2 = scaleDiv->range() / 2 * factor;
133
134 plt->setAxisScale( axisId, center - width_2, center + width_2 );
135 doReplot = true;
136 }
137 }
138
139 plt->setAutoReplot( autoReplot );
140
141 if ( doReplot )
142 plt->replot();
143}
Note: See TracBrowser for help on using the repository browser.