X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fcomponents%2Finterface_widgets.hpp;h=16af5fe99effbdadfcfe28ea6e0f7d74c31be6b3;hb=a70095543572745dca9b9ef1c776ed751e76d936;hp=f6dd9240d5f24e1bd06caecd6799884151b9d970;hpb=db44bc2201d007bb1c1599ef79ba51b2ef1d24c2;p=vlc diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp index f6dd9240d5..16af5fe99e 100644 --- a/modules/gui/qt4/components/interface_widgets.hpp +++ b/modules/gui/qt4/components/interface_widgets.hpp @@ -1,7 +1,7 @@ /***************************************************************************** * interface_widgets.hpp : Custom widgets for the main interface **************************************************************************** - * Copyright (C) 2006 the VideoLAN team + * Copyright (C) 2006-2008 the VideoLAN team * $Id$ * * Authors: Clément Stenac @@ -30,58 +30,52 @@ # include "config.h" #endif -#include -#include -#include +#include "main_interface.hpp" /* Interface integration */ +#include "input_manager.hpp" /* Speed control */ -#include "qt4.hpp" -#include "main_interface.hpp" -#include "input_manager.hpp" +#include "components/controller.hpp" +#include "components/controller_widget.hpp" #include #include +#include +#include class ResizeEvent; -class QPalette; class QPixmap; -class QLabel; class QHBoxLayout; +class QMenu; +class QSlider; /******************** Video Widget ****************/ 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 * ); + WId request( int *, int *, unsigned int *, unsigned int *, bool ); + void release( void ); int control( void *, int, va_list ); + void sync( void ); + +protected: + virtual QPaintEngine *paintEngine() const + { + return NULL; + } - virtual QSize sizeHint() const; private: intf_thread_t *p_intf; - int i_vout; - - QSize videoSize; + QWidget *stable; + QLayout *layout; signals: - void askVideoWidgetToShow( unsigned int, unsigned int ); + void sizeChanged( int, int ); public slots: void SetSizing( unsigned int, unsigned int ); - -protected: - virtual QPaintEngine *paintEngine() const - { - return NULL; - } - - virtual void paintEvent(QPaintEvent *); }; /******************** Background Widget ****************/ @@ -90,17 +84,18 @@ class BackgroundWidget : public QWidget Q_OBJECT public: BackgroundWidget( intf_thread_t * ); - virtual ~BackgroundWidget(); - + void setExpandstoHeight( bool b_expand ) { b_expandPixmap = b_expand; } private: - QPalette plt; - QLabel *label; + QString pixmapUrl; + bool b_expandPixmap; virtual void contextMenuEvent( QContextMenuEvent *event ); intf_thread_t *p_intf; - virtual void resizeEvent( QResizeEvent * event ); +protected: + void paintEvent( QPaintEvent *e ); + static const int MARGIN = 5; public slots: void toggle(){ TOGGLEV( this ); } - void updateArt( input_item_t* ); + void updateArt( const QString& ); }; #if 0 @@ -119,243 +114,64 @@ private slots: }; #endif -/* Advanced Button Bar */ -class QPushButton; -class AdvControlsWidget : public QFrame -{ - Q_OBJECT -public: - AdvControlsWidget( intf_thread_t *, bool ); - virtual ~AdvControlsWidget(); - - void enableInput( bool ); - void enableVideo( bool ); - -private: - intf_thread_t *p_intf; - QPushButton *recordButton, *ABButton; - QPushButton *snapshotButton, *frameButton; - - static mtime_t timeA, timeB; - int i_last_input_id; - -private slots: - void snapshot(); -#if 0 - void frame(); -#endif - void fromAtoB(); - void record(); - void AtoBLoop( float, int, int ); - void setIcon(); - -signals: - void timeChanged(); -}; - -/* Button Bar */ -class InputSlider; -class QSlider; -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 *_p_i, MainInterface *_p_mi, - bool b_advControls, bool b_shiny, bool b_fsCreation = false); - virtual ~ControlsWidget(); - - QPushButton *playlistButton; - void setStatus( int ); - void enableInput( bool ); -public slots: - void setNavigation( int ); -protected: - friend class MainInterface; - friend class VolumeClickHandler; -protected: - intf_thread_t *p_intf; - QWidget *discFrame; - QWidget *telexFrame; - QGridLayout *controlLayout; - InputSlider *slider; - QPushButton *prevSectionButton, *nextSectionButton, *menuButton; - 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; - 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 ); - void enableVideo( bool ); -signals: - void advancedControlsToggled( bool ); -}; - -/* 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 - -/*********************************** - * Fullscreen controller - ***********************************/ -class FullscreenControllerWidget : public ControlsWidget +class TimeLabel : public QLabel { Q_OBJECT public: - FullscreenControllerWidget( intf_thread_t *, MainInterface*, bool, bool ); - virtual ~FullscreenControllerWidget(); - - /* */ - void attachVout( vout_thread_t *p_vout ); - void detachVout(); - void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout ); - + TimeLabel( intf_thread_t *_p_intf ); 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 b_fscHidden; -#endif - - virtual void customEvent( QEvent *event ); - - vout_thread_t *p_vout; - - /* 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 */ -}; - - -#define VOLUME_MAX 200 -class VolumeClickHandler : public QObject -{ -public: - VolumeClickHandler( intf_thread_t *_p_intf, ControlsWidget *_m ) :QObject(_m) - {m = _m; p_intf = _p_intf; } - virtual ~VolumeClickHandler() {}; - bool eventFilter( QObject *obj, QEvent *e ) + virtual void mousePressEvent( QMouseEvent *event ) { - if (e->type() == QEvent::MouseButtonPress ) - { - aout_VolumeMute( p_intf, NULL ); - audio_volume_t i_volume; - aout_VolumeGet( p_intf, &i_volume ); - m->updateVolume( i_volume * VOLUME_MAX / (AOUT_VOLUME_MAX/2) ); - return true; - } - return false; + toggleTimeDisplay(); + event->accept(); } -private: - ControlsWidget *m; - intf_thread_t *p_intf; -}; - -#include -#include -class TimeLabel : public QLabel -{ - Q_OBJECT - void mousePressEvent( QMouseEvent *event ) - { - emit timeLabelClicked(); - } - void mouseDoubleClickEvent( QMouseEvent *event ) + virtual void mouseDoubleClickEvent( QMouseEvent *event ) { + event->accept(); + toggleTimeDisplay(); emit timeLabelDoubleClicked(); } +private: + intf_thread_t *p_intf; + bool b_remainingTime; + int cachedLength; + QTimer *bufTimer; + float bufVal; + bool buffering; + bool showBuffering; + char psz_length[MSTRTIME_MAX_SIZE]; + char psz_time[MSTRTIME_MAX_SIZE]; + void toggleTimeDisplay(); + void paintEvent( QPaintEvent* ); signals: - void timeLabelClicked(); void timeLabelDoubleClicked(); +private slots: + void setDisplayPosition( float pos, int64_t time, int length ); + void setDisplayPosition( float pos ); + void updateBuffering( float ); + void updateBuffering(); }; class SpeedLabel : public QLabel { Q_OBJECT public: - SpeedLabel( intf_thread_t *_p_intf, const QString text ): QLabel( text) - { p_intf = _p_intf; } + SpeedLabel( intf_thread_t *, QWidget * ); + virtual ~SpeedLabel(); protected: - virtual void mouseDoubleClickEvent ( QMouseEvent * event ) + virtual void mousePressEvent ( QMouseEvent * event ) { - THEMIM->getIM()->setRate( INPUT_RATE_DEFAULT ); + showSpeedMenu( event->pos() ); } +private slots: + void showSpeedMenu( QPoint ); + void setRate( float ); private: intf_thread_t *p_intf; + QMenu *speedControlMenu; + QString tooltipStringPattern; + SpeedControlWidget *speedControl; }; /******************** Speed Control Widgets ****************/ @@ -363,14 +179,16 @@ class SpeedControlWidget : public QFrame { Q_OBJECT public: - SpeedControlWidget( intf_thread_t *); - virtual ~SpeedControlWidget(); - void updateControls( int ); + SpeedControlWidget( intf_thread_t *, QWidget * ); + void updateControls( float ); private: intf_thread_t *p_intf; QSlider *speedSlider; + int lastValue; + public slots: - void setEnable( bool ); + void activateOnState(); + private slots: void updateRate( int ); void resetRate(); @@ -380,23 +198,22 @@ class CoverArtLabel : public QLabel { Q_OBJECT public: - CoverArtLabel( vlc_object_t *p_this, input_item_t *p_input = NULL ); - virtual ~CoverArtLabel() {}; + CoverArtLabel( QWidget *parent, intf_thread_t * ); + virtual ~CoverArtLabel(); + private: - input_item_t *p_input; - vlc_object_t *p_this; - QString prevArt; + intf_thread_t *p_intf; public slots: - void requestUpdate() { emit updateRequested(); }; - void update( input_item_t* p_item ) - { if( p_input ) vlc_gc_decref( p_input ); - if( ( p_input = p_item ) ) vlc_gc_incref( p_input ); - requestUpdate(); } + void requestUpdate() { emit updateRequested(); } + void update( ) + { + requestUpdate(); + } + void showArtUpdate( const QString& ); private slots: - void doUpdate(); - void downloadCover(); + void askForUpdate(); signals: void updateRequested();