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 #ifndef QWT_SCALE_WIDGET_H
11 #define QWT_SCALE_WIDGET_H
12 
13 #include "qwt_global.h"
14 #include "qwt_text.h"
15 #include "qwt_scale_draw.h"
16 #include <qwidget.h>
17 #include <qfont.h>
18 #include <qcolor.h>
19 #include <qstring.h>
20 
21 class QPainter;
22 class QwtTransform;
23 class QwtScaleDiv;
24 class QwtColorMap;
25 
26 /*!
27   \brief A Widget which contains a scale
28 
29   This Widget can be used to decorate composite widgets with
30   a scale.
31 */
32 
33 class QWT_EXPORT QwtScaleWidget : public QWidget
34 {
35     Q_OBJECT
36 
37 public:
38     //! Layout flags of the title
39     enum LayoutFlag
40     {
41         /*!
42           The title of vertical scales is painted from top to bottom.
43           Otherwise it is painted from bottom to top.
44          */
45         TitleInverted = 1
46     };
47 
48     //! Layout flags of the title
49     typedef QFlags<LayoutFlag> LayoutFlags;
50 
51     explicit QwtScaleWidget( QWidget *parent = NULL );
52     explicit QwtScaleWidget( QwtScaleDraw::Alignment, QWidget *parent = NULL );
53     virtual ~QwtScaleWidget();
54 
55 Q_SIGNALS:
56     //! Signal emitted, whenever the scale division changes
57     void scaleDivChanged();
58 
59 public:
60     void setTitle( const QString &title );
61     void setTitle( const QwtText &title );
62     QwtText title() const;
63 
64     void setLayoutFlag( LayoutFlag, bool on );
65     bool testLayoutFlag( LayoutFlag ) const;
66 
67     void setBorderDist( int dist1, int dist2 );
68     int startBorderDist() const;
69     int endBorderDist() const;
70 
71     void getBorderDistHint( int &start, int &end ) const;
72 
73     void getMinBorderDist( int &start, int &end ) const;
74     void setMinBorderDist( int start, int end );
75 
76     void setMargin( int );
77     int margin() const;
78 
79     void setSpacing( int );
80     int spacing() const;
81 
82     void setScaleDiv( const QwtScaleDiv & );
83     void setTransformation( QwtTransform * );
84 
85     void setScaleDraw( QwtScaleDraw * );
86     const QwtScaleDraw *scaleDraw() const;
87     QwtScaleDraw *scaleDraw();
88 
89     void setLabelAlignment( Qt::Alignment );
90     void setLabelRotation( double rotation );
91 
92     void setColorBarEnabled( bool );
93     bool isColorBarEnabled() const;
94 
95     void setColorBarWidth( int );
96     int colorBarWidth() const;
97 
98     void setColorMap( const QwtInterval &, QwtColorMap * );
99 
100     QwtInterval colorBarInterval() const;
101     const QwtColorMap *colorMap() const;
102 
103     virtual QSize sizeHint() const;
104     virtual QSize minimumSizeHint() const;
105 
106     int titleHeightForWidth( int width ) const;
107     int dimForLength( int length, const QFont &scaleFont ) const;
108 
109     void drawColorBar( QPainter *painter, const QRectF & ) const;
110     void drawTitle( QPainter *painter, QwtScaleDraw::Alignment,
111         const QRectF &rect ) const;
112 
113     void setAlignment( QwtScaleDraw::Alignment );
114     QwtScaleDraw::Alignment alignment() const;
115 
116     QRectF colorBarRect( const QRectF& ) const;
117 
118 protected:
119     virtual void paintEvent( QPaintEvent * );
120     virtual void resizeEvent( QResizeEvent * );
121 
122     void draw( QPainter * ) const;
123 
124     void scaleChange();
125     void layoutScale( bool update_geometry = true );
126 
127 private:
128     void initScale( QwtScaleDraw::Alignment );
129 
130     class PrivateData;
131     PrivateData *d_data;
132 };
133 
134 Q_DECLARE_OPERATORS_FOR_FLAGS( QwtScaleWidget::LayoutFlags )
135 
136 #endif
137