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 #ifndef QWT_ABSTRACT_SLIDER_H 11 #define QWT_ABSTRACT_SLIDER_H 12 13 #include <qwidget.h> 14 #include "qwt_global.h" 15 #include "qwt_double_range.h" 16 17 /*! 18 \brief An abstract base class for slider widgets 19 20 QwtAbstractSlider is a base class for 21 slider widgets. It handles mouse events 22 and updates the slider's value accordingly. Derived classes 23 only have to implement the getValue() and 24 getScrollMode() members, and should react to a 25 valueChange(), which normally requires repainting. 26 */ 27 28 class QWT_EXPORT QwtAbstractSlider : public QWidget, public QwtDoubleRange 29 { 30 Q_OBJECT 31 Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly ) 32 Q_PROPERTY( bool valid READ isValid WRITE setValid ) 33 Q_PROPERTY( double mass READ mass WRITE setMass ) 34 #ifndef Q_MOC_RUN // Qt3 moc 35 #define QWT_PROPERTY Q_PROPERTY 36 Q_PROPERTY( Orientation orientation 37 READ orientation WRITE setOrientation ) 38 #else // Qt4 moc 39 // MOC_SKIP_BEGIN 40 Q_PROPERTY( Qt::Orientation orientation 41 READ orientation WRITE setOrientation ) 42 // MOC_SKIP_END 43 #endif 44 45 public: 46 /*! 47 Scroll mode 48 \sa getScrollMode() 49 */ 50 enum ScrollMode 51 { 52 ScrNone, 53 ScrMouse, 54 ScrTimer, 55 ScrDirect, 56 ScrPage 57 }; 58 59 explicit QwtAbstractSlider(Qt::Orientation, QWidget *parent = NULL); 60 virtual ~QwtAbstractSlider(); 61 62 void setUpdateTime(int t); 63 void stopMoving(); 64 void setTracking(bool enable); 65 66 virtual void setMass(double val); 67 virtual double mass() const; 68 69 #if QT_VERSION >= 0x040000 70 virtual void setOrientation(Qt::Orientation o); 71 Qt::Orientation orientation() const; 72 #else 73 virtual void setOrientation(Orientation o); 74 Orientation orientation() const; 75 #endif 76 77 bool isReadOnly() const; 78 79 /* 80 Wrappers for QwtDblRange::isValid/QwtDblRange::setValid made 81 to be available as Q_PROPERTY in the designer. 82 */ 83 84 /*! 85 \sa QwtDblRange::isValid() 86 */ isValid()87 bool isValid() const { return QwtDoubleRange::isValid(); } 88 89 /*! 90 \param valid true/false 91 \sa QwtDblRange::isValid() 92 */ setValid(bool valid)93 void setValid(bool valid) { QwtDoubleRange::setValid(valid); } 94 95 public slots: 96 virtual void setValue(double val); 97 virtual void fitValue(double val); 98 virtual void incValue(int steps); 99 100 virtual void setReadOnly(bool); 101 102 signals: 103 104 /*! 105 \brief Notify a change of value. 106 107 In the default setting 108 (tracking enabled), this signal will be emitted every 109 time the value changes ( see setTracking() ). 110 \param value new value 111 */ 112 void valueChanged(double value); 113 114 /*! 115 This signal is emitted when the user presses the 116 movable part of the slider (start ScrMouse Mode). 117 */ 118 void sliderPressed(); 119 120 /*! 121 This signal is emitted when the user releases the 122 movable part of the slider. 123 */ 124 125 void sliderReleased(); 126 /*! 127 This signal is emitted when the user moves the 128 slider with the mouse. 129 \param value new value 130 */ 131 void sliderMoved(double value); 132 133 protected: 134 virtual void setPosition(const QPoint &); 135 virtual void valueChange(); 136 137 virtual void timerEvent(QTimerEvent *e); 138 virtual void mousePressEvent(QMouseEvent *e); 139 virtual void mouseReleaseEvent(QMouseEvent *e); 140 virtual void mouseMoveEvent(QMouseEvent *e); 141 virtual void keyPressEvent(QKeyEvent *e); 142 virtual void wheelEvent(QWheelEvent *e); 143 144 /*! 145 \brief Determine the value corresponding to a specified poind 146 147 This is an abstract virtual function which is called when 148 the user presses or releases a mouse button or moves the 149 mouse. It has to be implemented by the derived class. 150 \param p point 151 */ 152 virtual double getValue(const QPoint & p) = 0; 153 /*! 154 \brief Determine what to do when the user presses a mouse button. 155 156 This function is abstract and has to be implemented by derived classes. 157 It is called on a mousePress event. The derived class can determine 158 what should happen next in dependence of the position where the mouse 159 was pressed by returning scrolling mode and direction. QwtAbstractSlider 160 knows the following modes:<dl> 161 <dt>QwtAbstractSlider::ScrNone 162 <dd>Scrolling switched off. Don't change the value. 163 <dt>QwtAbstractSlider::ScrMouse 164 <dd>Change the value while the user keeps the 165 button pressed and moves the mouse. 166 <dt>QwtAbstractSlider::ScrTimer 167 <dd>Automatic scrolling. Increment the value 168 in the specified direction as long as 169 the user keeps the button pressed. 170 <dt>QwtAbstractSlider::ScrPage 171 <dd>Automatic scrolling. Same as ScrTimer, but 172 increment by page size.</dl> 173 174 \param p point where the mouse was pressed 175 \retval scrollMode The scrolling mode 176 \retval direction direction: 1, 0, or -1. 177 */ 178 virtual void getScrollMode( const QPoint &p, 179 int &scrollMode, int &direction) = 0; 180 181 void setMouseOffset(double); 182 double mouseOffset() const; 183 184 int scrollMode() const; 185 186 private: 187 void buttonReleased(); 188 189 class PrivateData; 190 PrivateData *d_data; 191 }; 192 193 #endif 194