// rdslider.h // // An audio- and touchscreen-friendly slider widget. // // (C) Copyright 2009,2016 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU Library General Public License // version 2 as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public // License along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // #ifndef RDSLIDER_H #define RDSLIDER_H #include #include #include #include #include #include #include #include #include class RDSlider : public QWidget,public Q3RangeControl { Q_OBJECT public: enum TickSetting {NoTicks=0,TicksLeft=1,TicksRight=2,TicksAbove=3, TicksBelow=4,TicksBothSides=5}; enum Orientation {Left=0,Right=1,Up=2,Down=3}; RDSlider(QWidget *parent); RDSlider(RDSlider::Orientation orient,QWidget *parent); RDSlider(int minValue,int maxValue,int pageStep,int value, RDSlider::Orientation orient,QWidget *parent); RDSlider::Orientation orientation() const; void setOrientation(RDSlider::Orientation orient); void setTracking(bool enable); bool tracking() const; void setTickInterval(int i); void setTickmarks(TickSetting s); void setMinValue(int min_value); void setMaxValue(int max_value); void setRange(int min_value,int max_value); void setLineStep(int step); void setPageStep(int step); void setKnobColor(QColorGroup group); void setKnobColor(QColor color); void setKnobSize(QSize size); void setKnobSize(int w,int h); signals: void valueChanged(int value); void sliderPressed(); void sliderMoved(int value); void sliderReleased(); public slots: void setGeometry(int x,int y,int w, int h); void setGeometry(QRect &rect); void setValue(int setting); void addStep(); void subtractStep(); private: void paintEvent(QPaintEvent *); void mouseMoveEvent(QMouseEvent *); void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); void init(RDSlider::Orientation orient); void calcKnob(); void calcKnob(int x,int y,int w,int h); RDSlider::Orientation rdslider_orient; QColorGroup knob_color; QRect curr_knob; QRect prev_knob; QRect page_up; QRect page_down; QSize knob_size; QPixmap *knob_map; int base_x; int base_y; bool rdslider_moving; int page_step; int line_step; bool tracking_enabled; bool deferred_change; int tick_interval; TickSetting tick_setting; }; #endif // RDSLIDER_H