X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Finput_manager.hpp;h=522f02f59434771fa2fcdb8c665bd870a0a335d7;hb=3554eedcce5f33711220578285aad015595c53c6;hp=9c6678f5aaaa67fe4814e0039429bf6403256049;hpb=3561b9b28f58eb7a4183e158a8fd973800d31ceb;p=vlc diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp index 9c6678f5aa..522f02f594 100644 --- a/modules/gui/qt4/input_manager.hpp +++ b/modules/gui/qt4/input_manager.hpp @@ -5,6 +5,7 @@ * $Id$ * * Authors: Clément Stenac + * Jean-Baptiste * * 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 @@ -21,14 +22,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#ifndef _INPUT_MANAGER_H_ -#define _INPUT_MANAGER_H_ +#ifndef QVLC_INPUT_MANAGER_H_ +#define QVLC_INPUT_MANAGER_H_ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#include #include #include "qt4.hpp" @@ -36,86 +36,175 @@ #include #include -static int const PositionUpdate_Type = QEvent::User + IMEventType + 1; -static int const ItemChanged_Type = QEvent::User + IMEventType + 2; -static int const ItemStateChanged_Type = QEvent::User + IMEventType + 3; -static int const ItemTitleChanged_Type = QEvent::User + IMEventType + 4; -static int const ItemRateChanged_Type = QEvent::User + IMEventType + 5; -static int const VolumeChanged_Type = QEvent::User + IMEventType + 6; + +enum { + PositionUpdate_Type = QEvent::User + IMEventType + 1, + ItemChanged_Type, + ItemStateChanged_Type, + ItemTitleChanged_Type, + ItemRateChanged_Type, + VolumeChanged_Type, + ItemEsChanged_Type, + ItemTeletextChanged_Type, + InterfaceVoutUpdate_Type, + StatisticsUpdate_Type, /*10*/ + InterfaceAoutUpdate_Type, + MetaChanged_Type, + NameChanged_Type, + InfoChanged_Type, + SynchroChanged_Type, + CachingEvent_Type, + BookmarksChanged_Type, + RecordingEvent_Type, + ProgramChanged_Type, +/* SignalChanged_Type, */ + + FullscreenControlToggle_Type = QEvent::User + IMEventType + 20, + FullscreenControlShow_Type, + FullscreenControlHide_Type, + FullscreenControlPlanHide_Type, +}; class IMEvent : public QEvent { -public: - IMEvent( int type, int id ) : QEvent( (QEvent::Type)(type) ) - { i_id = id ; } ; - virtual ~IMEvent() {}; +friend class InputManager; + public: + IMEvent( int type, input_item_t *p_input = NULL ) + : QEvent( (QEvent::Type)(type) ) + { + if( (p_item = p_input) != NULL ) + vlc_gc_incref( p_item ); + } + virtual ~IMEvent() + { + if( p_item ) + vlc_gc_decref( p_item ); + } - int i_id; +private: + input_item_t *p_item; }; class InputManager : public QObject { Q_OBJECT; + friend class MainInputManager; + public: InputManager( QObject *, intf_thread_t * ); virtual ~InputManager(); void delInput(); - bool hasInput() { return p_input && !p_input->b_dead && !p_input->b_die; } - bool hasAudio() { return b_has_audio; } - bool hasVideo() { return b_has_video; } - bool b_has_audio, b_has_video, b_had_audio, b_had_video, b_has_subs; + bool hasInput() + { + return p_input /* We have an input */ + && !p_input->b_dead /* not dead yet, */ + && !p_input->b_eof /* not EOF either, */ + && vlc_object_alive (p_input); /* and the VLC object is alive */ + } + + bool hasAudio(); + bool hasVideo() { return hasInput() && b_video; } + void requestArtUpdate(); + + QString getName() { return oldName; } private: intf_thread_t *p_intf; input_thread_t *p_input; - int i_input_id; + input_item_t *p_item; int i_old_playing_status; - QString old_name; + QString oldName; QString artUrl; int i_rate; + float f_cache; + bool b_video; + mtime_t timeA, timeB; void customEvent( QEvent * ); + void addCallbacks(); void delCallbacks(); + void UpdateRate(); - void UpdateMeta(); + void UpdateName(); void UpdateStatus(); void UpdateNavigation(); void UpdatePosition(); - void UpdateTracks(); + void UpdateTeletext(); void UpdateArt(); + void UpdateInfo(); + void UpdateMeta(); + void UpdateMeta(input_item_t *); + void UpdateVout(); + void UpdateAout(); + void UpdateStats(); + void UpdateCaching(); + void UpdateRecord(); + void UpdateProgramEvent(); public slots: void setInput( input_thread_t * ); ///< Our controlled input changed void sliderUpdate( float ); ///< User dragged the slider. We get new pos - void togglePlayPause(); + /* SpeedRate Rate Management */ + void reverse(); void slower(); void faster(); + void littlefaster(); + void littleslower(); void normalRate(); void setRate( int ); + /* Jumping */ + void jumpFwd(); + void jumpBwd(); + /* Menus */ void sectionNext(); void sectionPrev(); void sectionMenu(); -#ifdef ZVBI_COMPILED - void telexGotoPage( int ); - void telexToggle( bool ); - void telexSetTransparency( bool ); -#endif + /* Teletext */ + void telexSetPage( int ); ///< Goto teletext page + void telexSetTransparency( bool ); ///< Transparency on teletext background + void activateTeletext( bool ); ///< Toggle buttons after click + /* A to B Loop */ + void setAtoB(); + +private slots: + void togglePlayPause(); + void AtoBLoop( float, int, int ); signals: /// Send new position, new time and new length void positionUpdated( float , int, int ); void rateChanged( int ); - void nameChanged( QString ); + void nameChanged( const QString& ); /// Used to signal whether we should show navigation buttons - void navigationChanged( int ); + void titleChanged( bool ); + void chapterChanged( bool ); + /// Statistics are updated + void statisticsUpdated( input_item_t* ); + void infoChanged( input_item_t* ); + void currentMetaChanged( input_item_t* ); + void metaChanged( input_item_t *); + void artChanged( QString ); /// Play/pause status void statusChanged( int ); - void artChanged( QString ); -#ifdef ZVBI_COMPILED - void teletextEnabled( bool ); -#endif + void recordingStateChanged( bool ); + /// Teletext + void teletextPossible( bool ); + void teletextActivated( bool ); + void teletextTransparencyActivated( bool ); + void newTelexPageSet( int ); + /// Advanced buttons + void AtoBchanged( bool, bool ); + /// Vout + void voutChanged( bool ); + void voutListChanged( vout_thread_t **pp_vout, int i_vout ); + /// Other + void synchroChanged(); + void bookmarksChanged(); + void cachingChanged( float ); + /// Program Event changes + void encryptionChanged( bool ); }; class MainInputManager : public QObject @@ -130,27 +219,35 @@ public: } static void killInstance() { - if( instance ) delete instance; + delete instance; + instance = NULL; } - virtual ~MainInputManager(); input_thread_t *getInput() { return p_input; }; InputManager *getIM() { return im; }; + vout_thread_t* getVout(); + aout_instance_t *getAout(); + private: MainInputManager( intf_thread_t * ); + virtual ~MainInputManager(); + + static MainInputManager *instance; + void customEvent( QEvent * ); InputManager *im; input_thread_t *p_input; - intf_thread_t *p_intf; - static MainInputManager *instance; + public slots: void togglePlayPause(); void stop(); void next(); void prev(); + void activatePlayQuit( bool ); + signals: void inputChanged( input_thread_t * ); void volumeChanged();