You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.4 KiB
156 lines
4.4 KiB
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** |
|
* Qwt Widget Library |
|
* Copyright (C) 1997 Josef Wilgen |
|
* Copyright (C) 2002 Uwe Rathmann |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the Qwt License, Version 1.0 |
|
*****************************************************************************/ |
|
|
|
// vim: expandtab |
|
|
|
#ifndef QWT_COUNTER_H |
|
#define QWT_COUNTER_H |
|
|
|
#include <qwidget.h> |
|
#include "qwt_global.h" |
|
#include "qwt_double_range.h" |
|
|
|
/*! |
|
\brief The Counter Widget |
|
|
|
A Counter consists of a label displaying a number and |
|
one ore more (up to three) push buttons on each side |
|
of the label which can be used to increment or decrement |
|
the counter's value. |
|
|
|
A Counter has a range from a minimum value to a maximum value |
|
and a step size. The range can be specified using |
|
QwtDblRange::setRange(). |
|
The counter's value is an integer multiple of the step size. |
|
The number of steps by which a button increments or decrements |
|
the value can be specified using QwtCounter::setIncSteps(). |
|
The number of buttons can be changed with |
|
QwtCounter::setNumButtons(). |
|
|
|
Holding the space bar down with focus on a button is the |
|
fastest method to step through the counter values. |
|
When the counter underflows/overflows, the focus is set |
|
to the smallest up/down button and counting is disabled. |
|
Counting is re-enabled on a button release event (mouse or |
|
space bar). |
|
|
|
Example: |
|
\code |
|
#include "../include/qwt_counter.h> |
|
|
|
QwtCounter *cnt; |
|
|
|
cnt = new QwtCounter(parent, name); |
|
|
|
cnt->setRange(0.0, 100.0, 1.0); // From 0.0 to 100, step 1.0 |
|
cnt->setNumButtons(2); // Two buttons each side |
|
cnt->setIncSteps(QwtCounter::Button1, 1); // Button 1 increments 1 step |
|
cnt->setIncSteps(QwtCounter::Button2, 20); // Button 2 increments 20 steps |
|
|
|
connect(cnt, SIGNAL(valueChanged(double)), my_class, SLOT(newValue(double))); |
|
\endcode |
|
*/ |
|
|
|
class QWT_EXPORT QwtCounter : public QWidget, public QwtDoubleRange |
|
{ |
|
Q_OBJECT |
|
|
|
Q_PROPERTY( int numButtons READ numButtons WRITE setNumButtons ) |
|
Q_PROPERTY( double basicstep READ step WRITE setStep ) |
|
Q_PROPERTY( double minValue READ minVal WRITE setMinValue ) |
|
Q_PROPERTY( double maxValue READ maxVal WRITE setMaxValue ) |
|
Q_PROPERTY( int stepButton1 READ stepButton1 WRITE setStepButton1 ) |
|
Q_PROPERTY( int stepButton2 READ stepButton2 WRITE setStepButton2 ) |
|
Q_PROPERTY( int stepButton3 READ stepButton3 WRITE setStepButton3 ) |
|
Q_PROPERTY( double value READ value WRITE setValue ) |
|
Q_PROPERTY( bool editable READ editable WRITE setEditable ) |
|
|
|
public: |
|
/*! |
|
Button index |
|
*/ |
|
|
|
enum Button { |
|
Button1, |
|
Button2, |
|
Button3, |
|
ButtonCnt |
|
}; |
|
|
|
explicit QwtCounter(QWidget *parent = NULL); |
|
#if QT_VERSION < 0x040000 |
|
explicit QwtCounter(QWidget *parent, const char *name); |
|
#endif |
|
virtual ~QwtCounter(); |
|
|
|
bool editable() const; |
|
void setEditable(bool); |
|
|
|
void setNumButtons(int n); |
|
int numButtons() const; |
|
|
|
void setIncSteps(QwtCounter::Button btn, int nSteps); |
|
int incSteps(QwtCounter::Button btn) const; |
|
|
|
virtual void setValue(double); |
|
virtual QSize sizeHint() const; |
|
|
|
virtual void polish(); |
|
|
|
// a set of dummies to help the designer |
|
|
|
double step() const; |
|
void setStep(double s); |
|
double minVal() const; |
|
void setMinValue(double m); |
|
double maxVal() const; |
|
void setMaxValue(double m); |
|
void setStepButton1(int nSteps); |
|
int stepButton1() const; |
|
void setStepButton2(int nSteps); |
|
int stepButton2() const; |
|
void setStepButton3(int nSteps); |
|
int stepButton3() const; |
|
virtual double value() const; |
|
|
|
signals: |
|
/*! |
|
This signal is emitted when a button has been released |
|
\param value The new value |
|
*/ |
|
void buttonReleased (double value); |
|
|
|
/*! |
|
This signal is emitted when the counter's value has changed |
|
\param value The new value |
|
*/ |
|
void valueChanged (double value); |
|
|
|
protected: |
|
virtual bool event(QEvent *); |
|
virtual void wheelEvent(QWheelEvent *); |
|
virtual void keyPressEvent(QKeyEvent *); |
|
virtual void rangeChange(); |
|
|
|
private slots: |
|
void btnReleased(); |
|
void btnClicked(); |
|
void textChanged(); |
|
|
|
private: |
|
void initCounter(); |
|
void updateButtons(); |
|
void showNum(double); |
|
virtual void valueChange(); |
|
|
|
class PrivateData; |
|
PrivateData *d_data; |
|
}; |
|
|
|
#endif
|
|
|