qwt_abstract_scale_draw.h 3.53 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
5
 *
pixhawk's avatar
pixhawk committed
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
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_ABSTRACT_SCALE_DRAW_H
#define QWT_ABSTRACT_SCALE_DRAW_H

#include "qwt_global.h"
#include "qwt_scale_div.h"
#include "qwt_text.h"


#if QT_VERSION < 0x040000
class QColorGroup;
#else
class QPalette;
#endif
class QPainter;
class QFont;
class QwtScaleTransformation;
class QwtScaleMap;

/*!
  \brief A abstract base class for drawing scales

  QwtAbstractScaleDraw can be used to draw linear or logarithmic scales.

  After a scale division has been specified as a QwtScaleDiv object
  using QwtAbstractScaleDraw::setScaleDiv(const QwtScaleDiv &s),
  the scale can be drawn with the QwtAbstractScaleDraw::draw() member.
*/
class QWT_EXPORT QwtAbstractScaleDraw
{
public:

41 42
    /*!
       Components of a scale
pixhawk's avatar
pixhawk committed
43

44 45 46
       - Backbone
       - Ticks
       - Labels
pixhawk's avatar
pixhawk committed
47

48 49 50
       \sa QwtAbstractScaleDraw::enableComponent,
           QwtAbstractScaleDraw::hasComponent
        */
pixhawk's avatar
pixhawk committed
51

52
    enum ScaleComponent {
pixhawk's avatar
pixhawk committed
53 54 55 56
        Backbone = 1,
        Ticks = 2,
        Labels = 4
    };
57

pixhawk's avatar
pixhawk committed
58 59 60 61 62
    QwtAbstractScaleDraw();
    QwtAbstractScaleDraw( const QwtAbstractScaleDraw & );
    virtual ~QwtAbstractScaleDraw();

    QwtAbstractScaleDraw &operator=(const QwtAbstractScaleDraw &);
63

pixhawk's avatar
pixhawk committed
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
    void setScaleDiv(const QwtScaleDiv &s);
    const QwtScaleDiv& scaleDiv() const;

    void setTransformation(QwtScaleTransformation *);
    const QwtScaleMap &map() const;

    void enableComponent(ScaleComponent, bool enable = true);
    bool hasComponent(ScaleComponent) const;

    void setTickLength(QwtScaleDiv::TickType, int length);
    int tickLength(QwtScaleDiv::TickType) const;
    int majTickLength() const;

    void setSpacing(int margin);
    int spacing() const;
79

pixhawk's avatar
pixhawk committed
80 81 82 83 84 85 86 87
#if QT_VERSION < 0x040000
    virtual void draw(QPainter *, const QColorGroup &) const;
#else
    virtual void draw(QPainter *, const QPalette &) const;
#endif

    virtual QwtText label(double) const;

88 89
    /*!
      Calculate the extent
pixhawk's avatar
pixhawk committed
90 91 92 93

      The extent is the distcance from the baseline to the outermost
      pixel of the scale draw in opposite to its orientation.
      It is at least minimumExtent() pixels.
94

pixhawk's avatar
pixhawk committed
95 96 97 98 99 100 101 102 103 104 105 106
      \sa setMinimumExtent(), minimumExtent()
    */
    virtual int extent(const QPen &, const QFont &) const = 0;

    void setMinimumExtent(int);
    int minimumExtent() const;

    QwtScaleMap &scaleMap();

protected:
    /*!
       Draw a tick
107

pixhawk's avatar
pixhawk committed
108 109 110 111 112
       \param painter Painter
       \param value Value of the tick
       \param len Lenght of the tick

       \sa drawBackbone(), drawLabel()
113
    */
pixhawk's avatar
pixhawk committed
114 115 116 117 118 119 120 121 122 123
    virtual void drawTick(QPainter *painter, double value, int len) const = 0;

    /*!
      Draws the baseline of the scale
      \param painter Painter

      \sa drawTick(), drawLabel()
    */
    virtual void drawBackbone(QPainter *painter) const = 0;

124
    /*!
pixhawk's avatar
pixhawk committed
125
        Draws the label for a major scale tick
126

pixhawk's avatar
pixhawk committed
127 128 129 130
        \param painter Painter
        \param value Value

        \sa drawTick, drawBackbone
131
    */
pixhawk's avatar
pixhawk committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145
    virtual void drawLabel(QPainter *painter, double value) const = 0;

    void invalidateCache();
    const QwtText &tickLabel(const QFont &, double value) const;

private:
    int operator==(const QwtAbstractScaleDraw &) const;
    int operator!=(const QwtAbstractScaleDraw &) const;

    class PrivateData;
    PrivateData *d_data;
};

#endif