2018-02-27 18:06:05 +01:00
/***************************************************************************
amarokslider . h - description
- - - - - - - - - - - - - - - - - - -
begin : Dec 15 2003
copyright : ( C ) 2003 by Mark Kretschmann
email : markey @ web . de
copyright : ( C ) 2005 by Gábor Lehel
email : illissius @ gmail . com
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/***************************************************************************
* *
* This program is free software ; you can redistribute it and / or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation ; either version 2 of the License , or *
* ( at your option ) any later version . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2019-03-09 16:48:45 +01:00
# ifndef VOLUMESLIDER_H
# define VOLUMESLIDER_H
2018-02-27 18:06:05 +01:00
2018-05-01 00:41:33 +02:00
# include "config.h"
# include <QtGlobal>
# include <QObject>
# include <QWidget>
# include <QList>
# include <QString>
2018-02-27 18:06:05 +01:00
# include <QPixmap>
2018-05-01 00:41:33 +02:00
# include <QColor>
# include <QPalette>
2018-02-27 18:06:05 +01:00
# include <QSlider>
2020-02-09 02:29:35 +01:00
class QTimer ;
2018-05-01 00:41:33 +02:00
class QEvent ;
class QMouseEvent ;
class QPaintEvent ;
class QWheelEvent ;
class QContextMenuEvent ;
2018-02-27 18:06:05 +01:00
2019-03-09 16:48:45 +01:00
class SliderSlider : public QSlider {
2018-02-27 18:06:05 +01:00
Q_OBJECT
public :
2019-03-09 16:48:45 +01:00
SliderSlider ( Qt : : Orientation , QWidget * , uint max = 0 ) ;
2018-02-27 18:06:05 +01:00
virtual void setValue ( int ) ;
2019-03-09 16:48:45 +01:00
// WARNING non-virtual - and thus only really intended for internal use this is a major flaw in the class presently, however it suits our current needs fine
2018-02-27 18:06:05 +01:00
int value ( ) const { return adjustValue ( QSlider : : value ( ) ) ; }
signals :
2019-03-09 16:48:45 +01:00
// we emit this when the user has specifically changed the slider so connect to it if valueChanged() is too generic Qt also emits valueChanged(int)
2018-02-27 18:06:05 +01:00
void sliderReleased ( int ) ;
protected :
virtual void wheelEvent ( QWheelEvent * ) ;
virtual void mouseMoveEvent ( QMouseEvent * ) ;
virtual void mouseReleaseEvent ( QMouseEvent * ) ;
virtual void mousePressEvent ( QMouseEvent * ) ;
virtual void slideEvent ( QMouseEvent * ) ;
bool m_sliding ;
/// we flip the value for vertical sliders
int adjustValue ( int v ) const {
int mp = ( minimum ( ) + maximum ( ) ) / 2 ;
return orientation ( ) = = Qt : : Vertical ? mp - ( v - mp ) : v ;
}
private :
bool m_outside ;
int m_prevValue ;
2019-03-09 16:48:45 +01:00
SliderSlider ( const SliderSlider & ) ; // undefined
SliderSlider & operator = ( const SliderSlider & ) ; // undefined
2018-02-27 18:06:05 +01:00
} ;
2019-03-09 16:48:45 +01:00
class PrettySlider : public SliderSlider {
2018-02-27 18:06:05 +01:00
Q_OBJECT
public :
typedef enum {
Normal , // Same behavior as Slider *unless* there's a moodbar
Pretty
} SliderMode ;
2018-05-01 00:41:33 +02:00
PrettySlider ( Qt : : Orientation orientation , SliderMode mode , QWidget * parent , uint max = 0 ) ;
2018-02-27 18:06:05 +01:00
protected :
virtual void slideEvent ( QMouseEvent * ) ;
virtual void mousePressEvent ( QMouseEvent * ) ;
private :
PrettySlider ( const PrettySlider & ) ; // undefined
PrettySlider & operator = ( const PrettySlider & ) ; // undefined
SliderMode m_mode ;
} ;
2019-03-09 16:48:45 +01:00
class VolumeSlider : public SliderSlider {
2018-02-27 18:06:05 +01:00
Q_OBJECT
public :
VolumeSlider ( QWidget * parent , uint max = 0 ) ;
2019-03-09 16:48:45 +01:00
void SetEnabled ( const bool enabled ) ;
2018-02-27 18:06:05 +01:00
protected :
virtual void paintEvent ( QPaintEvent * ) ;
virtual void enterEvent ( QEvent * ) ;
virtual void leaveEvent ( QEvent * ) ;
virtual void paletteChange ( const QPalette & ) ;
virtual void slideEvent ( QMouseEvent * ) ;
virtual void mousePressEvent ( QMouseEvent * ) ;
virtual void contextMenuEvent ( QContextMenuEvent * ) ;
virtual void wheelEvent ( QWheelEvent * e ) ;
private slots :
virtual void slotAnimTimer ( ) ;
private :
void generateGradient ( ) ;
QPixmap drawVolumePixmap ( ) const ;
void drawVolumeSliderHandle ( ) ;
VolumeSlider ( const VolumeSlider & ) ; // undefined
VolumeSlider & operator = ( const VolumeSlider & ) ; // undefined
////////////////////////////////////////////////////////////////
static const int ANIM_INTERVAL = 18 ;
static const int ANIM_MAX = 18 ;
bool m_animEnter ;
int m_animCount ;
QTimer * m_animTimer ;
QPixmap m_pixmapInset ;
QPixmap m_pixmapGradient ;
QColor m_previous_theme_text_color ;
QColor m_previous_theme_highlight_color ;
QList < QPixmap > m_handlePixmaps ;
} ;
2019-03-09 16:48:45 +01:00
# endif // VOLUMESLIDER_H