vlc_value_t, vlc_value_t, void * );
static int VolumeChanged( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
+static int SoundMuteChanged( vlc_object_t *, const char *,
+ vlc_value_t, vlc_value_t, void * );
+
+static int RandomChanged( vlc_object_t *, const char *,
+ vlc_value_t, vlc_value_t, void * );
+static int LoopChanged( vlc_object_t *, const char *,
+ vlc_value_t, vlc_value_t, void * );
+static int RepeatChanged( vlc_object_t *, const char *,
+ vlc_value_t, vlc_value_t, void * );
+
static int InputEvent( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void * );
var_AddCallback( THEPL, "activity", PLItemChanged, this );
var_AddCallback( THEPL, "playlist-item-append", PLItemAppended, this );
var_AddCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
+ var_AddCallback( THEPL, "random", RandomChanged, this );
+ var_AddCallback( THEPL, "repeat", RepeatChanged, this );
+ var_AddCallback( THEPL, "loop", LoopChanged, this );
var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
+ var_AddCallback( p_intf->p_libvlc, "volume-muted", SoundMuteChanged, this );
/* Warn our embedded IM about input changes */
CONNECT( this, inputChanged( input_thread_t * ),
}
var_DelCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
+ var_DelCallback( p_intf->p_libvlc, "volume-muted", SoundMuteChanged, this );
var_DelCallback( THEPL, "activity", PLItemChanged, this );
var_DelCallback( THEPL, "item-change", ItemChanged, im );
var_DelCallback( THEPL, "item-current", PLItemChanged, this );
var_DelCallback( THEPL, "playlist-item-append", PLItemAppended, this );
var_DelCallback( THEPL, "playlist-item-deleted", PLItemRemoved, this );
+ var_DelCallback( THEPL, "random", RandomChanged, this );
+ var_DelCallback( THEPL, "repeat", RepeatChanged, this );
+ var_DelCallback( THEPL, "loop", LoopChanged, this );
+
}
vout_thread_t* MainInputManager::getVout()
case VolumeChanged_Type:
emit volumeChanged();
return;
+ case SoundMuteChanged_Type:
+ emit soundMuteChanged();
+ return;
case PLItemAppended_Type:
plEv = static_cast<PLEvent*>( event );
emit playlistItemAppended( plEv->i_item, plEv->i_parent );
plEv = static_cast<PLEvent*>( event );
emit playlistItemRemoved( plEv->i_item );
return;
+ case RandomChanged_Type:
+ emit randomChanged( var_GetBool( THEPL, "random" ) );
+ return;
+ case LoopChanged_Type:
+ case RepeatChanged_Type:
+ notifyRepeatLoop();
+ return;
default:
if( type != ItemChanged_Type ) return;
}
getIM()->togglePlayPause();
}
+void MainInputManager::play()
+{
+ /* No input, play */
+ if( !p_input )
+ playlist_Play( THEPL );
+ else
+ {
+ if( PLAYING_S != var_GetInteger( p_input, "state" ) )
+ {
+ getIM()->togglePlayPause();
+ }
+ }
+}
+
+void MainInputManager::pause()
+{
+ if(p_input && PLAYING_S == var_GetInteger( p_input, "state" ) )
+ {
+ getIM()->togglePlayPause();
+ }
+}
+
void MainInputManager::toggleRandom()
{
var_ToggleBool( THEPL, "random" );
}
+void MainInputManager::notifyRepeatLoop()
+{
+ int i_value = var_GetBool( THEPL, "loop" ) * REPEAT_ONE
+ + var_GetBool( THEPL, "repeat" ) * REPEAT_ALL;
+
+ emit repeatLoopChanged( i_value );
+}
+
+void MainInputManager::loopRepeatLoopStatus()
+{
+ /* Toggle Normal -> Loop -> Repeat -> Normal ... */
+ if( var_GetBool( THEPL, "repeat" ) )
+ var_SetBool( THEPL, "repeat", false );
+ else if( var_GetBool( THEPL, "loop" ) )
+ {
+ var_SetBool( THEPL, "loop", false );
+ var_SetBool( THEPL, "repeat", true );
+ }
+ else
+ var_SetBool( THEPL, "loop", true );
+}
+
void MainInputManager::activatePlayQuit( bool b_exit )
{
var_SetBool( THEPL, "play-and-exit", b_exit );
}
-/* Static callbacks for MIM */
+
+/****************************
+ * Static callbacks for MIM *
+ ****************************/
static int PLItemChanged( vlc_object_t *p_this, const char *psz_var,
vlc_value_t oldval, vlc_value_t, void *param )
{
return VLC_SUCCESS;
}
+static int SoundMuteChanged( vlc_object_t *p_this, const char *psz_var,
+ vlc_value_t oldval, vlc_value_t newval, void *param )
+{
+ MainInputManager *mim = (MainInputManager*)param;
+
+ IMEvent *event = new IMEvent( SoundMuteChanged_Type );
+ QApplication::postEvent( mim, event );
+ return VLC_SUCCESS;
+}
+
static int PLItemAppended
( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
{
QApplication::postEvent( mim, event );
return VLC_SUCCESS;
}
+
+static int RandomChanged
+( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
+{
+ MainInputManager *mim = static_cast<MainInputManager*>(data);
+
+ IMEvent *event = new IMEvent( RandomChanged_Type );
+ QApplication::postEvent( mim, event );
+ return VLC_SUCCESS;
+}
+
+/* Probably could be merged with next callback */
+static int LoopChanged
+( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
+{
+ MainInputManager *mim = static_cast<MainInputManager*>(data);
+
+ IMEvent *event = new IMEvent( LoopChanged_Type );
+ QApplication::postEvent( mim, event );
+ return VLC_SUCCESS;
+}
+
+static int RepeatChanged
+( vlc_object_t * obj, const char *var, vlc_value_t old, vlc_value_t cur, void *data )
+{
+ MainInputManager *mim = static_cast<MainInputManager*>(data);
+
+ IMEvent *event = new IMEvent( RepeatChanged_Type );
+ QApplication::postEvent( mim, event );
+ return VLC_SUCCESS;
+}