X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Finterface_widgets.hpp;h=3c0a880d7818a3e2a185af8dcb83af19f30bf83e;hb=098dab901c1a17c869a52d0d4042d03f00a83d67;hp=3a079c63bd2c2b4ecebba914ecd22bbbdf21ea2a;hpb=a24e0766f7e5a78edf5ddc534cb6cd0005d8cbd9;p=vlc diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp index 3a079c63bd..3c0a880d78 100644 --- a/modules/gui/qt4/components/interface_widgets.hpp +++ b/modules/gui/qt4/components/interface_widgets.hpp @@ -26,16 +26,41 @@ #ifndef _INTFWIDGETS_H_ #define _INTFWIDGETS_H_ -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#include +#include #include + #include "qt4.hpp" +#include "main_interface.hpp" +#include "input_manager.hpp" #include #include + #define VOLUME_MAX 200 +/* on WIN32 hide() for fullscreen controller doesnt work, so it have to be + done by trick with setting the opacity of window */ +#ifdef WIN32 + #define WIN32TRICK +#endif + +/* to trying transparency with fullscreen controller on windows enable that */ +/* it can be enabled on-non windows systems, + but it will be transparent only with composite manager */ +#ifndef WIN32 + #define HAVE_TRANSPARENCY 1 +#else + #define HAVE_TRANSPARENCY 0 +#endif + +/* Default value of opacity for FS controller */ +#define DEFAULT_OPACITY 0.75 + class ResizeEvent; class QPalette; class QPixmap; @@ -46,53 +71,59 @@ class QHBoxLayout; class VideoWidget : public QFrame { Q_OBJECT +friend class MainInterface; + public: VideoWidget( intf_thread_t * ); virtual ~VideoWidget(); void *request( vout_thread_t *, int *, int *, unsigned int *, unsigned int * ); - void release( void * ); - int control( void *, int, va_list ); + void release( void * ); + int control( void *, int, va_list ); - int i_video_height, i_video_width; - vout_thread_t *p_vout; - - QSize widgetSize; - QSize sizeHint() const; + virtual QSize sizeHint() const; private: - QWidget *frame; intf_thread_t *p_intf; - vlc_mutex_t lock; + int i_vout; + + QSize videoSize; + signals: - void askResize(); - void askVideoWidgetToShow(); + void askVideoWidgetToShow( unsigned int, unsigned int ); + public slots: void SetSizing( unsigned int, unsigned int ); + +protected: + virtual QPaintEngine *paintEngine() const + { + return NULL; + } + + virtual void paintEvent(QPaintEvent *); }; /******************** Background Widget ****************/ -class BackgroundWidget : public QFrame +class BackgroundWidget : public QWidget { Q_OBJECT public: BackgroundWidget( intf_thread_t * ); virtual ~BackgroundWidget(); - QSize widgetSize; - QSize sizeHint() const; - bool b_need_update; + private: QPalette plt; QLabel *label; - virtual void resizeEvent( QResizeEvent *e ); virtual void contextMenuEvent( QContextMenuEvent *event ); intf_thread_t *p_intf; - int i_runs; + virtual void resizeEvent( QResizeEvent * event ); public slots: void toggle(){ TOGGLEV( this ); } - void update( input_thread_t * ); + void updateArt( QString ); }; +#if 0 class VisualSelector : public QFrame { Q_OBJECT @@ -106,6 +137,7 @@ private slots: void prev(); void next(); }; +#endif /* Advanced Button Bar */ class QPushButton; @@ -128,7 +160,9 @@ private: private slots: void snapshot(); +#if 0 void frame(); +#endif void fromAtoB(); void record(); void AtoBLoop( float, int, int ); @@ -141,14 +175,15 @@ class QGridLayout; class VolumeClickHandler; class SoundSlider; class QAbstractSlider; +class QToolButton; class ControlsWidget : public QFrame { Q_OBJECT public: /* p_intf, advanced control visible or not, blingbling or not */ - ControlsWidget( intf_thread_t *, MainInterface*, bool, bool ); -// QSize sizeHint() const; + ControlsWidget( intf_thread_t *_p_i, MainInterface *_p_mi, + bool b_advControls, bool b_shiny, bool b_fsCreation = false); virtual ~ControlsWidget(); QPushButton *playlistButton; @@ -157,39 +192,110 @@ public: void enableVideo( bool ); public slots: void setNavigation( int ); - void updateOnTimer(); protected: friend class MainInterface; friend class VolumeClickHandler; -private: +protected: intf_thread_t *p_intf; QWidget *discFrame; QWidget *telexFrame; QGridLayout *controlLayout; InputSlider *slider; QPushButton *prevSectionButton, *nextSectionButton, *menuButton; - QPushButton *playButton, *fullscreenButton; - QPushButton *slowerButton, *fasterButton; + QPushButton *playButton, *fullscreenButton, *extSettingsButton; + QPushButton *telexTransparent, *telexOn; + QSpinBox *telexPage; + QToolButton *slowerButton, *fasterButton; + QHBoxLayout *controlButLayout; AdvControlsWidget *advControls; QLabel *volMuteLabel; QAbstractSlider *volumeSlider; + VolumeClickHandler *hVolLabel; bool b_advancedVisible; -private slots: + bool b_telexTransparent; + bool b_telexEnabled; +protected slots: void play(); void stop(); void prev(); void next(); void updateVolume( int ); + void updateVolume( void ); + void updateInput(); void fullscreen(); void extSettings(); void faster(); void slower(); void toggleAdvanced(); + void toggleTeletext(); + void toggleTeletextTransparency(); + void enableTeletext( bool ); signals: void advancedControlsToggled( bool ); }; +/*********************************** + * Fullscreen controller + ***********************************/ +class FullscreenControllerWidget : public ControlsWidget +{ + Q_OBJECT +public: + FullscreenControllerWidget( intf_thread_t *, MainInterface*, bool, bool ); + virtual ~FullscreenControllerWidget(); + + /* */ + void attachVout( vout_thread_t *p_vout ); + void detachVout( vout_thread_t *p_vout ); + void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout ); + +protected: + friend class MainInterface; + friend class VolumeClickHandler; + + virtual void mouseMoveEvent( QMouseEvent *event ); + virtual void mousePressEvent( QMouseEvent *event ); + virtual void enterEvent( QEvent *event ); + virtual void leaveEvent( QEvent *event ); + virtual void keyPressEvent( QKeyEvent *event ); + +private slots: + void showFSC(); + void planHideFSC(); + void hideFSC(); + + void slowHideFSC(); + + +private: + QTimer *p_hideTimer; +#if HAVE_TRANSPARENCY + QTimer *p_slowHideTimer; +#endif + + int i_mouse_last_x; + int i_mouse_last_y; + + bool b_mouse_over; + + bool b_slow_hide_begin; + int i_slow_hide_timeout; + +#ifdef WIN32TRICK + bool fscHidden; +#endif + + virtual void customEvent( QEvent *event ); + + /* Shared variable between FSC and VLC (protected by a lock) */ + vlc_mutex_t lock; + bool b_fullscreen; + int i_hide_timeout; /* FSC hiding timeout, same as mouse hiding timeout */ +}; + + + class VolumeClickHandler : public QObject { public: @@ -231,6 +337,21 @@ signals: void timeLabelDoubleClicked(); }; +class SpeedLabel : public QLabel +{ + Q_OBJECT +public: + SpeedLabel( intf_thread_t *_p_intf, const QString text ): QLabel( text) + { p_intf = _p_intf; } + +protected: + virtual void mouseDoubleClickEvent ( QMouseEvent * event ) + { + THEMIM->getIM()->setRate( INPUT_RATE_DEFAULT ); + } +private: + intf_thread_t *p_intf; +}; /******************** Speed Control Widgets ****************/ class SpeedControlWidget : public QFrame @@ -243,7 +364,8 @@ public: private: intf_thread_t *p_intf; QSlider *speedSlider; - QPushButton *normalSpeedButton; +public slots: + void setEnable( bool ); private slots: void updateRate( int ); void resetRate();