[89] | 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 | // vim: expandtab
|
---|
| 11 |
|
---|
| 12 | #ifndef QWT_COUNTER_H
|
---|
| 13 | #define QWT_COUNTER_H
|
---|
| 14 |
|
---|
| 15 | #include <qwidget.h>
|
---|
| 16 | #include "qwt_global.h"
|
---|
| 17 | #include "qwt_double_range.h"
|
---|
| 18 |
|
---|
| 19 | /*!
|
---|
| 20 | \brief The Counter Widget
|
---|
| 21 |
|
---|
| 22 | A Counter consists of a label displaying a number and
|
---|
| 23 | one ore more (up to three) push buttons on each side
|
---|
| 24 | of the label which can be used to increment or decrement
|
---|
| 25 | the counter's value.
|
---|
| 26 |
|
---|
| 27 | A Counter has a range from a minimum value to a maximum value
|
---|
| 28 | and a step size. The range can be specified using
|
---|
| 29 | QwtDblRange::setRange().
|
---|
| 30 | The counter's value is an integer multiple of the step size.
|
---|
| 31 | The number of steps by which a button increments or decrements
|
---|
| 32 | the value can be specified using QwtCounter::setIncSteps().
|
---|
| 33 | The number of buttons can be changed with
|
---|
| 34 | QwtCounter::setNumButtons().
|
---|
| 35 |
|
---|
| 36 | Holding the space bar down with focus on a button is the
|
---|
| 37 | fastest method to step through the counter values.
|
---|
| 38 | When the counter underflows/overflows, the focus is set
|
---|
| 39 | to the smallest up/down button and counting is disabled.
|
---|
| 40 | Counting is re-enabled on a button release event (mouse or
|
---|
| 41 | space bar).
|
---|
| 42 |
|
---|
| 43 | Example:
|
---|
| 44 | \code
|
---|
| 45 | #include "../include/qwt_counter.h>
|
---|
| 46 |
|
---|
| 47 | QwtCounter *cnt;
|
---|
| 48 |
|
---|
| 49 | cnt = new QwtCounter(parent, name);
|
---|
| 50 |
|
---|
| 51 | cnt->setRange(0.0, 100.0, 1.0); // From 0.0 to 100, step 1.0
|
---|
| 52 | cnt->setNumButtons(2); // Two buttons each side
|
---|
| 53 | cnt->setIncSteps(QwtCounter::Button1, 1); // Button 1 increments 1 step
|
---|
| 54 | cnt->setIncSteps(QwtCounter::Button2, 20); // Button 2 increments 20 steps
|
---|
| 55 |
|
---|
| 56 | connect(cnt, SIGNAL(valueChanged(double)), my_class, SLOT(newValue(double)));
|
---|
| 57 | \endcode
|
---|
| 58 | */
|
---|
| 59 |
|
---|
| 60 | class QWT_EXPORT QwtCounter : public QWidget, public QwtDoubleRange
|
---|
| 61 | {
|
---|
| 62 | Q_OBJECT
|
---|
| 63 |
|
---|
| 64 | Q_PROPERTY( int numButtons READ numButtons WRITE setNumButtons )
|
---|
| 65 | Q_PROPERTY( double basicstep READ step WRITE setStep )
|
---|
| 66 | Q_PROPERTY( double minValue READ minVal WRITE setMinValue )
|
---|
| 67 | Q_PROPERTY( double maxValue READ maxVal WRITE setMaxValue )
|
---|
| 68 | Q_PROPERTY( int stepButton1 READ stepButton1 WRITE setStepButton1 )
|
---|
| 69 | Q_PROPERTY( int stepButton2 READ stepButton2 WRITE setStepButton2 )
|
---|
| 70 | Q_PROPERTY( int stepButton3 READ stepButton3 WRITE setStepButton3 )
|
---|
| 71 | Q_PROPERTY( double value READ value WRITE setValue )
|
---|
| 72 | Q_PROPERTY( bool editable READ editable WRITE setEditable )
|
---|
| 73 |
|
---|
| 74 | public:
|
---|
| 75 | /*!
|
---|
| 76 | Button index
|
---|
| 77 | */
|
---|
| 78 |
|
---|
| 79 | enum Button
|
---|
| 80 | {
|
---|
| 81 | Button1,
|
---|
| 82 | Button2,
|
---|
| 83 | Button3,
|
---|
| 84 | ButtonCnt
|
---|
| 85 | };
|
---|
| 86 |
|
---|
| 87 | explicit QwtCounter(QWidget *parent = NULL);
|
---|
| 88 | #if QT_VERSION < 0x040000
|
---|
| 89 | explicit QwtCounter(QWidget *parent, const char *name);
|
---|
| 90 | #endif
|
---|
| 91 | virtual ~QwtCounter();
|
---|
| 92 |
|
---|
| 93 | bool editable() const;
|
---|
| 94 | void setEditable(bool);
|
---|
| 95 |
|
---|
| 96 | void setNumButtons(int n);
|
---|
| 97 | int numButtons() const;
|
---|
| 98 |
|
---|
| 99 | void setIncSteps(QwtCounter::Button btn, int nSteps);
|
---|
| 100 | int incSteps(QwtCounter::Button btn) const;
|
---|
| 101 |
|
---|
| 102 | virtual void setValue(double);
|
---|
| 103 | virtual QSize sizeHint() const;
|
---|
| 104 |
|
---|
| 105 | virtual void polish();
|
---|
| 106 |
|
---|
| 107 | // a set of dummies to help the designer
|
---|
| 108 |
|
---|
| 109 | double step() const;
|
---|
| 110 | void setStep(double s);
|
---|
| 111 | double minVal() const;
|
---|
| 112 | void setMinValue(double m);
|
---|
| 113 | double maxVal() const;
|
---|
| 114 | void setMaxValue(double m);
|
---|
| 115 | void setStepButton1(int nSteps);
|
---|
| 116 | int stepButton1() const;
|
---|
| 117 | void setStepButton2(int nSteps);
|
---|
| 118 | int stepButton2() const;
|
---|
| 119 | void setStepButton3(int nSteps);
|
---|
| 120 | int stepButton3() const;
|
---|
| 121 | virtual double value() const;
|
---|
| 122 |
|
---|
| 123 | signals:
|
---|
| 124 | /*!
|
---|
| 125 | This signal is emitted when a button has been released
|
---|
| 126 | \param value The new value
|
---|
| 127 | */
|
---|
| 128 | void buttonReleased (double value);
|
---|
| 129 |
|
---|
| 130 | /*!
|
---|
| 131 | This signal is emitted when the counter's value has changed
|
---|
| 132 | \param value The new value
|
---|
| 133 | */
|
---|
| 134 | void valueChanged (double value);
|
---|
| 135 |
|
---|
| 136 | protected:
|
---|
| 137 | virtual bool event(QEvent *);
|
---|
| 138 | virtual void wheelEvent(QWheelEvent *);
|
---|
| 139 | virtual void keyPressEvent(QKeyEvent *);
|
---|
| 140 | virtual void rangeChange();
|
---|
| 141 |
|
---|
| 142 | private slots:
|
---|
| 143 | void btnReleased();
|
---|
| 144 | void btnClicked();
|
---|
| 145 | void textChanged();
|
---|
| 146 |
|
---|
| 147 | private:
|
---|
| 148 | void initCounter();
|
---|
| 149 | void updateButtons();
|
---|
| 150 | void showNum(double);
|
---|
| 151 | virtual void valueChange();
|
---|
| 152 |
|
---|
| 153 | class PrivateData;
|
---|
| 154 | PrivateData *d_data;
|
---|
| 155 | };
|
---|
| 156 |
|
---|
| 157 | #endif
|
---|