#endif
#include "input_manager.hpp"
+#include <vlc_keys.h>
#include <QApplication>
/* Reset all InfoPanels but stats */
emit artChanged( NULL );
emit infoChanged( NULL );
- emit metaChanged( NULL );
+ emit metaChanged( (input_item_t *)NULL );
+
+ emit encryptionChanged( false );
}
/* Convert the event from the callbacks in actions */
#ifndef NDEBUG
if( i_type != PositionUpdate_Type &&
- i_type != StatisticsUpdate_Type )
+ i_type != StatisticsUpdate_Type &&
+ i_type != ItemChanged_Type )
msg_Dbg( p_intf, "New Event: type %i", i_type );
#endif
UpdateStatus();
// UpdateName();
UpdateArt();
+ /* Update duration of file */
}
+ UpdateMeta( ple->i_id );
break;
case ItemStateChanged_Type:
// TODO: Fusion with above state
case RecordingEvent_Type:
UpdateRecord();
break;
+ case ProgramChanged_Type:
+ UpdateProgramEvent();
+ break;
default:
msg_Warn( p_intf, "This shouldn't happen: %i", i_type );
assert(0);
case INPUT_EVENT_PROGRAM:
/* This is for PID changes */
- /* event = new IMEvent( ProgramChanged_Type, 0 );
- break; */
+ event = new IMEvent( ProgramChanged_Type, 0 );
+ break;
+
case INPUT_EVENT_SIGNAL:
/* This is for capture-card signals */
/* event = new IMEvent( SignalChanged_Type, 0 );
QApplication::postEvent( im, event );
return VLC_SUCCESS;
}
+
static int VbiEvent( vlc_object_t *, const char *,
vlc_value_t, vlc_value_t, void *param )
{
InputManager *im = (InputManager*)param;
IMEvent *event = new IMEvent( ItemTeletextChanged_Type, 0 );
- if( event )
- QApplication::postEvent( im, event );
+ QApplication::postEvent( im, event );
return VLC_SUCCESS;
}
bool b_transparent = false;
vlc_object_t *p_vbi = (vlc_object_t *)
- vlc_object_find_name( p_input, "zvbi", FIND_ANYWHERE );
+ vlc_object_find_name( p_input, "zvbi", FIND_CHILD );
if( p_vbi )
{
emit statisticsUpdated( input_GetItem( p_input ) );
}
+inline void InputManager::UpdateMeta( int id )
+{
+ emit metaChanged( id );
+}
+
inline void InputManager::UpdateMeta()
{
emit metaChanged( input_GetItem( p_input ) );
}
}
+void InputManager::UpdateProgramEvent()
+{
+ if( hasInput() )
+ {
+ bool b_scrambled = var_GetBool( p_input, "program-scrambled" );
+ emit encryptionChanged( b_scrambled );
+ }
+}
+
/* User update of the slider */
void InputManager::sliderUpdate( float new_pos )
{
/* User togglePlayPause */
void InputManager::togglePlayPause()
{
- vlc_value_t state;
if( hasInput() )
{
- var_Get( p_input, "state", &state );
- state.i_int = ( state.i_int != PLAYING_S ) ? PLAYING_S : PAUSE_S;
- var_Set( p_input, "state", state );
- emit statusChanged( state.i_int );
+ int state = var_GetInteger( p_input, "state" );
+ state = ( state != PLAYING_S ) ? PLAYING_S : PAUSE_S;
+ var_SetInteger( p_input, "state", state );
+ emit statusChanged( state );
}
}
if( hasInput() )
{
int i_type = var_Type( p_input, "next-chapter" );
- vlc_value_t val; val.b_bool = true;
- var_Set( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
- "prev-chapter":"prev-title", val );
+ var_SetBool( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
+ "prev-chapter":"prev-title", true );
}
}
if( hasInput() )
{
int i_type = var_Type( p_input, "next-chapter" );
- vlc_value_t val; val.b_bool = true;
- var_Set( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
- "next-chapter":"next-title", val );
+ var_SetBool( p_input, (i_type & VLC_VAR_TYPE) != 0 ?
+ "next-chapter":"next-title", true );
}
}
if( hasInput() )
{
vlc_value_t val, text;
- vlc_value_t root;
if( var_Change( p_input, "title 0", VLC_VAR_GETLIST, &val, &text ) < 0 )
return;
/* XXX is it "Root" or "Title" we want here ?" (set 0 by default) */
- root.i_int = 0;
+ int root = 0;
for( int i = 0; i < val.p_list->i_count; i++ )
{
if( !strcmp( text.p_list->p_values[i].psz_string, "Title" ) )
- root.i_int = i;
+ root = i;
}
var_Change( p_input, "title 0", VLC_VAR_FREELIST, &val, &text );
- var_Set( p_input, "title 0", root );
+ var_SetInteger( p_input, "title 0", root );
}
}
if( i_teletext_es >= 0 )
{
vlc_object_t *p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,
- "zvbi", FIND_ANYWHERE );
+ "zvbi", FIND_CHILD );
if( p_vbi )
{
var_SetInteger( p_vbi, "vbi-page", page );
if( hasInput() )
{
vlc_object_t *p_vbi = (vlc_object_t *) vlc_object_find_name( p_input,
- "zvbi", FIND_ANYWHERE );
+ "zvbi", FIND_CHILD );
if( p_vbi )
{
var_SetBool( p_vbi, "vbi-opaque", !b_transparentTelextext );
var_SetVoid( p_input, "rate-faster" );
}
+void InputManager::littlefaster()
+{
+ var_SetInteger( p_intf->p_libvlc, "key-action", ACTIONID_RATE_FASTER_FINE );
+}
+
+void InputManager::littleslower()
+{
+ var_SetInteger( p_intf->p_libvlc, "key-action", ACTIONID_RATE_SLOWER_FINE );
+}
+
void InputManager::normalRate()
{
if( hasInput() )
var_SetInteger( p_input, "rate", new_rate );
}
+void InputManager::jumpFwd()
+{
+ int i_interval = config_GetInt( p_input, "short-jump-size" );
+ if( i_interval > 0 )
+ {
+ mtime_t val = (mtime_t)(i_interval) * 1000000L;
+ var_SetTime( p_input, "time-offset", val );
+ }
+}
+
+void InputManager::jumpBwd()
+{
+ int i_interval = config_GetInt( p_input, "short-jump-size" );
+ if( i_interval > 0 )
+ {
+ mtime_t val = -1 *(mtime_t)(i_interval) * 1000000L;
+ var_SetTime( p_input, "time-offset", val );
+ }
+}
+
void InputManager::setAtoB()
{
if( !timeA )
{
timeB = var_GetTime( THEMIM->getInput(), "time" );
var_SetTime( THEMIM->getInput(), "time" , timeA );
+ CONNECT( this, positionUpdated( float, int, int ),
+ this, AtoBLoop( float, int, int ) );
}
else
{
timeA = 0;
timeB = 0;
+ disconnect( this, SIGNAL( positionUpdated( float, int, int ) ),
+ this, SLOT( AtoBLoop( float, int, int ) ) );
}
emit AtoBchanged( (timeA != 0 ), (timeB != 0 ) );
}
/* Function called regularly when in an AtoB loop */
-void InputManager::AtoBLoop( int i_time )
+void InputManager::AtoBLoop( float, int i_time, int )
{
if( timeB )
{
im = new InputManager( this, p_intf );
var_AddCallback( THEPL, "item-change", ItemChanged, im );
- var_AddCallback( THEPL, "playlist-current", PLItemChanged, this );
+ var_AddCallback( THEPL, "item-current", PLItemChanged, this );
var_AddCallback( THEPL, "activity", PLItemChanged, this );
var_AddCallback( p_intf->p_libvlc, "volume-change", VolumeChanged, this );
/* emit check if playlist has allready started playing */
vlc_value_t val;
- var_Change( THEPL, "playlist-current", VLC_VAR_CHOICESCOUNT, &val, NULL );
+ var_Change( THEPL, "item-current", VLC_VAR_CHOICESCOUNT, &val, NULL );
IMEvent *event = new IMEvent( ItemChanged_Type, val.i_int);
customEvent( event );
var_DelCallback( THEPL, "activity", PLItemChanged, this );
var_DelCallback( THEPL, "item-change", ItemChanged, im );
- var_DelCallback( THEPL, "playlist-current", PLItemChanged, this );
+ var_DelCallback( THEPL, "item-current", PLItemChanged, this );
}
vout_thread_t* MainInputManager::getVout()
}
else
{
+ /* remove previous stored p_input */
+ if( p_input )
+ {
+ vlc_object_release( p_input );
+ p_input = NULL;
+ }
/* we are working as a dialogs provider */
playlist_t *p_playlist = pl_Hold( p_intf );
p_input = playlist_CurrentInput( p_playlist );
if( p_input )
{
emit inputChanged( p_input );
- vlc_object_release( p_input );
}
pl_Release( p_intf );
}
getIM()->togglePlayPause();
}
+void MainInputManager::activatePlayQuit( bool b_exit )
+{
+ var_SetBool( THEPL, "play-and-exit", b_exit );
+}
+
/* Static callbacks for MIM */
static int PLItemChanged( vlc_object_t *p_this, const char *psz_var,
vlc_value_t oldval, vlc_value_t newval, void *param )