00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef QT_MULTI_SLIDER_H
00010 #define QT_MULTI_SLIDER_H
00011
00012 #include <QtCore/QPointer>
00013 #include <QtCore/QString>
00014 #include <QtCore/QRect>
00015 #include <QtCore/QSharedData>
00016 #include <QtGui/QAbstractSlider>
00017 #include <QtGui/QProgressBar>
00018
00019 #include "qtsvgpixmapcache.h"
00020
00021
00022 class QtMultiSliderHelper : public QAbstractSlider
00023 {
00024 Q_OBJECT
00025 public:
00026 QtMultiSliderHelper(QWidget * parent = 0);
00027 virtual ~QtMultiSliderHelper();
00028
00029 private:
00030 void paintEvent(QPaintEvent * event);
00031 };
00032
00033 class QtMultiSlider : public QProgressBar
00034 {
00035 Q_OBJECT
00036 Q_PROPERTY(QString skin READ skin WRITE setSkin)
00037 public:
00038 QtMultiSlider(QWidget * parent = 0);
00039 virtual ~QtMultiSlider();
00040
00041 QtMultiSliderHelper * topSlider();
00042 QtMultiSliderHelper * bottomSlider();
00043
00044 void setSkin(const QString& skin);
00045 QString skin() const;
00046 public Q_SLOTS:
00047
00048 void setMaximumRange(int maximum);
00049 void setMinimumRange(int minimum);
00050 void setValue(int);
00051
00052 private Q_SLOTS:
00053
00054 void checkMinimumRange(int value);
00055 void checkMaximumRange(int value);
00056
00057 Q_SIGNALS:
00058
00059 void maximumExceeded(bool exceeded);
00060 void minimumExceeded(bool exceeded);
00061
00062 private:
00063 QtSvgPixmapCache *m_rendererValueBar;
00064 QtSvgPixmapCache *m_rendererValueBarFilled;
00065 QtSvgPixmapCache *m_rendererValueBarTop;
00066 QtSvgPixmapCache *m_rendererValueBarBottom;
00067
00068 QtSvgPixmapCache *m_rendererTopSlider;
00069 QtSvgPixmapCache *m_rendererTopSliderHovered;
00070 QtSvgPixmapCache *m_rendererTopSliderPressed;
00071
00072 QtSvgPixmapCache *m_rendererBottomSlider;
00073 QtSvgPixmapCache *m_rendererBottomSliderHovered;
00074 QtSvgPixmapCache *m_rendererBottomSliderPressed;
00075
00076 QtSvgPixmapCache *m_rendererGroove;
00077
00078 QRect m_valueBarRect;
00079
00080 bool m_previousExceededMaximum;
00081 bool m_previousExceededMinimum;
00082
00083 QPointer<QtMultiSliderHelper> m_topSlider;
00084 QPointer<QtMultiSliderHelper> m_bottomSlider;
00085
00086 QPointer<QtSvgPixmapCache> m_topSliderRenderer;
00087 QPointer<QtSvgPixmapCache> m_bottomSliderRenderer;
00088
00089 void init();
00090
00091 void paintEvent(QPaintEvent * event);
00092
00093 void updateSliders(QMouseEvent * event);
00094
00095 int valueToPixel(int value);
00096 int pixelToValue(int pixel);
00097
00098 QSize minimumSizeHint() const;
00099 QSize sizeHint() const;
00100
00101
00102 void mouseMoveEvent(QMouseEvent * event);
00103 void mousePressEvent(QMouseEvent * event);
00104 void mouseReleaseEvent(QMouseEvent * event);
00105
00106 QPoint m_dragStartPosition;
00107 int m_dragStartValue;
00108 bool m_dragInProgress;
00109
00110 void leaveEvent(QEvent * event);
00111
00112 QString m_skin;
00113 };
00114
00115 #endif // QT_MULTI_SLIDER_H