# qwt_knob.h

    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 #ifndef QWT_KNOB_H
    00011 #define QWT_KNOB_H
    00012
    00013 #include "qwt_global.h"
    00014 #include "qwt_abstract_slider.h"
    00015 #include "qwt_abstract_scale.h"
    00016
    00017 class QwtRoundScaleDraw;
    00018
    00034 class QWT_EXPORT QwtKnob : public QwtAbstractSlider, public QwtAbstractScale
    00035 {
    00036     Q_OBJECT
    00037     Q_ENUMS (Symbol)
    00038     Q_PROPERTY( int knobWidth READ knobWidth WRITE setKnobWidth )
    00039     Q_PROPERTY( int borderWidth READ borderWidth WRITE setBorderWidth )
    00040     Q_PROPERTY( double totalAngle READ totalAngle WRITE setTotalAngle )
    00041     Q_PROPERTY( Symbol symbol READ symbol WRITE setSymbol )
    00042
    00043 public:
    00049     enum Symbol { Line, Dot };
    00050
    00051     explicit QwtKnob(QWidget* parent = NULL);
    00052 #if QT_VERSION < 0x040000
    00053     explicit QwtKnob(QWidget* parent, const char *name);
    00054 #endif
    00055     virtual ~QwtKnob();
    00056
    00057     void setKnobWidth(int w);
    00058     int knobWidth() const;
    00059
    00060     void setTotalAngle (double angle);
    00061     double totalAngle() const;
    00062
    00063     void setBorderWidth(int bw);
    00064     int borderWidth() const;
    00065
    00066     void setSymbol(Symbol);
    00067     Symbol symbol() const;
    00068
    00069     virtual QSize sizeHint() const;
    00070     virtual QSize minimumSizeHint() const;
    00071
    00072     void setScaleDraw(QwtRoundScaleDraw *);
    00073     const QwtRoundScaleDraw *scaleDraw() const;
    00074     QwtRoundScaleDraw *scaleDraw();
    00075
    00076 protected:
    00077     virtual void paintEvent(QPaintEvent *e);
    00078     virtual void resizeEvent(QResizeEvent *e);
    00079
    00080     void draw(QPainter *p, const QRect& ur);
    00081     void drawKnob(QPainter *p, const QRect &r);
    00082     void drawMarker(QPainter *p, double arc, const QColor &c);
    00083
    00084 private:
    00085     void initKnob();
    00086     void layoutKnob( bool update = true );
    00087     double getValue(const QPoint &p);
    00088     void getScrollMode( const QPoint &p, int &scrollMode, int &direction );
    00089     void recalcAngle();
    00090
    00091     virtual void valueChange();
    00092     virtual void rangeChange();
    00093     virtual void scaleChange();
    00094     virtual void fontChange(const QFont &oldFont);
    00095
    00096     class PrivateData;
    00097     PrivateData *d_data;
    00098 };
    00099
    00100 #endif