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 *,
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_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 RandomChanged_Type:
emit randomChanged( var_GetBool( THEPL, "random" ) );
return;
+ case LoopChanged_Type:
+ case RepeatChanged_Type:
+ notifyRepeatLoop();
+ return;
default:
if( type != ItemChanged_Type ) return;
}
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 );
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;
+}
RecordingEvent_Type,
ProgramChanged_Type,
RandomChanged_Type,
+ LoopChanged_Type,
+ RepeatChanged_Type,
/* SignalChanged_Type, */
FullscreenControlToggle_Type = QEvent::User + IMEventType + 20,
FullscreenControlPlanHide_Type,
};
+enum { NORMAL, /* loop: 0, repeat: 0 */
+ REPEAT_ONE,/* loop: 1, repeat: 0 */
+ REPEAT_ALL,/* loop: 0, repeat: 1 */
+};
+
class IMEvent : public QEvent
{
friend class InputManager;
input_thread_t *p_input;
intf_thread_t *p_intf;
+ void notifyRepeatLoop();
public slots:
void togglePlayPause();
void toggleRandom();
void prev();
void activatePlayQuit( bool );
+ void loopRepeatLoopStatus();
+
signals:
void inputChanged( input_thread_t * );
void volumeChanged();
void playlistItemAppended( int itemId, int parentId );
void playlistItemRemoved( int itemId );
void randomChanged( bool );
+ void repeatLoopChanged( int );
};
#endif