X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Futil%2Fcustomwidgets.hpp;h=c984f85c3d7f7fd0ad67eb04796b952745311463;hb=1085ee39332b53761770d5a532d1b0eeb1c7ae8c;hp=3a95cabe241772d5dfb1a26acf3bcc1aba12f08d;hpb=9abcaacf83bd53b1f4b6569f7952e7025ddd0860;p=vlc diff --git a/modules/gui/qt4/util/customwidgets.hpp b/modules/gui/qt4/util/customwidgets.hpp index 3a95cabe24..c984f85c3d 100644 --- a/modules/gui/qt4/util/customwidgets.hpp +++ b/modules/gui/qt4/util/customwidgets.hpp @@ -35,6 +35,7 @@ #include #include #include +#include class QPixmap; @@ -54,9 +55,11 @@ class QToolButtonExt : public QToolButton public: QToolButtonExt( QWidget *parent = 0, int ms = 0 ); private: + bool shortClick; bool longClick; private slots: void releasedSlot(); + void clickedSlot(); signals: void shortClicked(); void longClicked(); @@ -97,75 +100,53 @@ protected: virtual int valueFromText( const QString& ) const { return -1; } }; -class AnimatedIcon : public QLabel -{ - /** An animated pixmap +/** An animated pixmap * Use this widget to display an animated icon based on a series of * pixmaps. The pixmaps will be stored in memory and should be kept small. * First, create the widget, add frames and then start playing. Looping * is supported. - * Frames #1 to #n are displayed at regular intervals when playing. - * Frame #0 is the idle frame, displayed when the icon is not animated. - * If not #0 frame has been specified, the last frame will be shown when - * idle. **/ - +class PixmapAnimator : public QAbstractAnimation +{ Q_OBJECT public: - /** Create an empty AnimatedIcon */ - AnimatedIcon( QWidget *parent ); - virtual ~AnimatedIcon(); - - /** Adds a frame to play in the loop. - * @param pixmap The QPixmap to display. Data will be copied internally. - * @param index If -1, append the frame. If 0, replace the idle frame. - * Otherwise, insert the frame at the given position. - **/ - void addFrame( const QPixmap &pixmap, int index = -1 ); - - /** Play the animation (or restart it) - * @param loops Number of times to play the loop. 0 means stop, while -1 - * means play forever. When stopped, the frame #0 will be - * displayed until play() is called again. - * @param interval Delay between frames, in milliseconds (minimum 20ms) - * @note If isPlaying() is true, then restart the animation from frame #1 - **/ - void play( int loops = 1, int interval = 200 ); - - /** Stop playback. Same as play(0). */ - inline void stop() - { - play( 0 ); - } - - /** Is the animation currently running? */ - inline bool isPlaying() - { - return mTimer.isActive(); - } - -private: - QTimer mTimer; - QPixmap *mIdleFrame; - QList mFrames; // Keeps deep copies of all the frames - int mCurrentFrame, mRemainingLoops; - -private slots: - /** Slot connected to the timeout() signal of our internal timer */ - void onTimerTick(); + PixmapAnimator( QWidget *parent, QList _frames ); + void setFps( int _fps ) { fps = _fps; interval = 1000.0 / fps; }; + virtual int duration() const { return interval * pixmaps.count(); }; + virtual ~PixmapAnimator() { while( pixmaps.count() ) pixmaps.erase( pixmaps.end() ); }; + QPixmap *getPixmap() { return currentPixmap; } +protected: + virtual void updateCurrentTime ( int msecs ); + QList pixmaps; + QPixmap *currentPixmap; + int fps; + int interval; + int lastframe_msecs; + int current_frame; +signals: + void pixmapReady( const QPixmap & ); }; -class SpinningIcon : public AnimatedIcon +/** This spinning icon, to the colors of the VLC cone, will show + * that there is some background activity running + **/ +class SpinningIcon : public QLabel { - /** This spinning icon, to the colors of the VLC cone, will show - * that there is some background activity running - **/ - Q_OBJECT public: - SpinningIcon( QWidget *parent, bool noIdleFrame = false ); + SpinningIcon( QWidget *parent ); + void play( int loops = -1, int fps = 0 ) + { + animator->setLoopCount( loops ); + if ( fps ) animator->setFps( fps ); + animator->start(); + } + void stop() { animator->stop(); } + bool isPlaying() { return animator->state() == PixmapAnimator::Running; } +private: + PixmapAnimator *animator; }; /* VLC Key/Wheel hotkeys interactions */