File: ScaleWidget.h

package info (click to toggle)
kwave 0.7.2-5
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 9,048 kB
  • ctags: 4,906
  • sloc: cpp: 31,275; ansic: 13,111; sh: 9,511; perl: 2,724; makefile: 786; asm: 145
file content (139 lines) | stat: -rw-r--r-- 4,401 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/***************************************************************************
          ScaleWidget.h  -  widget for drawing a scale under an image
			     -------------------
    begin                : Sep 18 2001
    copyright            : (C) 2001 by Thomas Eschenbacher
    email                : Thomas Eschenbacher <thomas.eschenbacher@gmx.de>
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef _SCALE_WIDGET_H_
#define _SCALE_WIDGET_H_

#include "config.h"
#include <qpixmap.h>
#include <qstring.h>
#include <qwidget.h>

class QPainter;
class QSize;

class ScaleWidget : public QWidget
{
public:

    /**
     * Primitve constructor for usage in a Qt designer's dialog
     * @param parent the widget's parent widget
     * @param name the name of the widget
     */
    ScaleWidget(QWidget *parent, const char *name);

    /**
     * Constructor with initialization.
     * @param parent the widget's parent widget
     * @param low left/lower border value
     * @param high right/upper border value
     * @param unit text of the units to show
     */
    ScaleWidget(QWidget *parent, int low, int high, const QString &unit);

    /** Destructor */
    ~ScaleWidget();

    /**
     * Sets the border values.
     * @param min left/lower border value
     * @param max right/upper border value
     */
    void setMinMax(int min, int max);

    /**
     * Set the text of the units.
     * @param text the units to show
     */
    void setUnit(const QString &text);

    /**
     * Sets logarithmic or linear mode.
     * @param log if true, set logarithmic mode, if not select
     *        linear mode
     */
    void setLogMode(bool log);

    /** minimum size of the widtget, @see QWidget::minimumSize() */
    virtual const QSize minimumSize();

    /** optimal size for the widget, @see QWidget::sizeHint() */
    virtual const QSize sizeHint();

protected:

    /**
     * Draws the widget.
     * @see QWidget::paintEvent
     */
    void paintEvent(QPaintEvent *);

    /**
     * Draws a linear scale
     * @param p reference to the painter
     * @param w width of the drawing area in pixels
     * @param h height of the drawing area in pixels
     * @param inverse of true, the coordinate system is rotated
     *        to be upside-down and the scale has to be drawn
     *        mirrored in x and y axis.
     */
    void drawLinear(QPainter &p, int w, int h, bool inverse);

    /**
     * @todo implementation of logarithmic scale
     */
    void drawLog(QPainter &p, int w, int h, bool inverse);

    /**
     * Painting routine for own small font with fixed size
     * There are Problems with smaller displays using QFont,
     * sizes are not correct.
     * @param p reference to the painter
     * @param x coordinate of the left edge of the first character
     * @param y coordinate of the lower edge of the first character
     * @param ofs width of each character
     * @param reverse if true, print reverse: x is right edge of
     *        the text, like "align right".
     * @param text the text to be printed. Must only contain known
     *        characters that are present in the font bitmap, like
     *        numbers, letters and some special chars like "%",
     *        space, dot and comma.
     */
    void paintText(QPainter &p, int x, int y, int ofs,
                            bool reverse, const QString &text);

private:

    /** Lower boundary value */
    int m_low;

    /** Upper boundary value */
    int m_high;

    /** If true, logarithmic mode, linear mode if false */
    bool m_logmode;

    /** String containing the name of the unit */
    QString m_unittext;

    /** Pixmap with all letters of our small font */
    QPixmap m_scalefont;

};

#endif // SCALE_WIDGET_H