X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Finput_manager.hpp;h=dac3bc3dedd6d1ca37a00a2391efce5a11e2a7ee;hb=01f2d198c11044816c1782bdfc3fe35c0ae813e2;hp=a03801a154a1900f34a2372482abda18f8e3dd80;hpb=fa94475a3c6b6fb5cc6943dd3a86d81a404a90e4;p=vlc diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp index a03801a154..dac3bc3ded 100644 --- a/modules/gui/qt4/input_manager.hpp +++ b/modules/gui/qt4/input_manager.hpp @@ -33,44 +33,11 @@ #include "qt4.hpp" #include "util/singleton.hpp" +#include "adapters/variables.hpp" #include #include - - -enum { - PositionUpdate_Type = QEvent::User + IMEventType + 1, - ItemChanged_Type, - ItemStateChanged_Type, - ItemTitleChanged_Type, - ItemRateChanged_Type, - VolumeChanged_Type, - SoundMuteChanged_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, - RandomChanged_Type, - LoopChanged_Type, - RepeatChanged_Type, - LeafToParent_Type, - EPGEvent_Type, -/* SignalChanged_Type, */ - - FullscreenControlToggle_Type = QEvent::User + IMEventType + 20, - FullscreenControlShow_Type, - FullscreenControlHide_Type, - FullscreenControlPlanHide_Type, -}; +class QSignalMapper; enum { NORMAL, /* loop: 0, repeat: 0 */ REPEAT_ONE,/* loop: 0, repeat: 1 */ @@ -79,37 +46,73 @@ enum { NORMAL, /* loop: 0, repeat: 0 */ class IMEvent : public QEvent { -friend class InputManager; -friend class MainInputManager; - public: - IMEvent( int type, input_item_t *p_input = NULL ) +public: + enum event_types { + PositionUpdate = QEvent::User + IMEventTypeOffset + 1, + ItemChanged, + ItemStateChanged, + ItemTitleChanged, + ItemRateChanged, + ItemEsChanged, + ItemTeletextChanged, + InterfaceVoutUpdate, + StatisticsUpdate, /*10*/ + InterfaceAoutUpdate, + MetaChanged, + NameChanged, + InfoChanged, + SynchroChanged, + CachingEvent, + BookmarksChanged, + RecordingEvent, + ProgramChanged, + RandomChanged, + LoopOrRepeatChanged, + EPGEvent, + /* SignalChanged, */ + + FullscreenControlToggle = QEvent::User + IMEventTypeOffset + 20, + FullscreenControlShow, + FullscreenControlHide, + FullscreenControlPlanHide, + }; + + IMEvent( event_types 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 ); } + input_item_t *item() const { return p_item; }; + private: input_item_t *p_item; }; -enum PLEventTypes -{ - PLItemAppended_Type = QEvent::User + PLEventType + 1, - PLItemRemoved_Type -}; - class PLEvent : public QEvent { public: - PLEvent( int t, int i, int p = 0 ) + enum PLEventTypes + { + PLItemAppended = QEvent::User + PLEventTypeOffset + 1, + PLItemRemoved, + LeafToParent, + PLEmpty + }; + + PLEvent( PLEventTypes t, int i, int p = 0 ) : QEvent( (QEvent::Type)(t) ), i_item(i), i_parent(p) {} + int getItemId() const { return i_item; }; + int getParentId() const { return i_parent; }; +private: /* Needed for "playlist-item*" and "leaf-to-parent" callbacks * !! Can be a input_item_t->i_id or a playlist_item_t->i_id */ int i_item; @@ -131,15 +134,15 @@ public: { 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 */ + && !p_input->b_eof /* not EOF either */; } int playingStatus(); bool hasAudio(); bool hasVideo() { return hasInput() && b_video; } bool hasVisualisation(); - void requestArtUpdate(); + void requestArtUpdate( input_item_t *p_item, bool b_forced ); + void setArt( input_item_t *p_item, QString fileUrl ); QString getName() { return oldName; } static const QString decodeArtURL( input_item_t *p_item ); @@ -206,7 +209,6 @@ public slots: void setAtoB(); private slots: - void togglePlayPause(); void AtoBLoop( float, int64_t, int ); signals: @@ -218,12 +220,14 @@ signals: /// Used to signal whether we should show navigation buttons void titleChanged( bool ); void chapterChanged( bool ); + void inputCanSeek( 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 ); + void artChanged( QString ); /* current item art ( same as item == NULL ) */ + void artChanged( input_item_t * ); /// Play/pause status void playingStatusChanged( int ); void recordingStateChanged( bool ); @@ -250,6 +254,8 @@ class MainInputManager : public QObject, public Singleton { Q_OBJECT friend class Singleton; + friend class VLCMenuBar; + public: input_thread_t *getInput() { return p_input; } InputManager *getIM() { return im; } @@ -262,6 +268,13 @@ public: audio_output_t *getAout(); bool getPlayExitState(); + bool hasEmptyPlaylist(); + + void requestVoutUpdate() { return im->UpdateVout(); } + +protected: + QSignalMapper *menusAudioMapper; + private: MainInputManager( intf_thread_t * ); virtual ~MainInputManager(); @@ -271,8 +284,10 @@ private: InputManager *im; input_thread_t *p_input; intf_thread_t *p_intf; + QVLCBool random, repeat, loop; + QVLCFloat volume; + QVLCBool mute; - void notifyRepeatLoop(); public slots: void togglePlayPause(); void play(); @@ -286,12 +301,20 @@ public slots: void loopRepeatLoopStatus(); +private slots: + void notifyRandom( bool ); + void notifyRepeatLoop( bool ); + void notifyVolume( float ); + void notifyMute( bool ); + void menusUpdateAudio( const QString& ); + signals: void inputChanged( input_thread_t * ); - void volumeChanged(); - void soundMuteChanged(); + void volumeChanged( float ); + void soundMuteChanged( bool ); void playlistItemAppended( int itemId, int parentId ); void playlistItemRemoved( int itemId ); + void playlistNotEmpty( bool ); void randomChanged( bool ); void repeatLoopChanged( int ); void leafBecameParent( int );