- BOOL bEnabled = TRUE;
- vlc_value_t val;
- intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Yield( p_intf );
-
- vlc_mutex_lock( &p_playlist->object_lock );
-
-#define p_input p_playlist->p_input
-
- if( [[o_mi title] isEqualToString: _NS("Faster")] ||
- [[o_mi title] isEqualToString: _NS("Slower")] )
- {
- if( p_input != NULL )
- {
- bEnabled = p_input->b_can_pace_control;
- }
- else
- {
- bEnabled = FALSE;
- }
- }
- else if( [[o_mi title] isEqualToString: _NS("Stop")] )
- {
- if( p_input == NULL )
- {
- bEnabled = FALSE;
- }
- [o_main setupMenus]; /* Make sure input menu is up to date */
- }
- else if( [[o_mi title] isEqualToString: _NS("Previous")] ||
- [[o_mi title] isEqualToString: _NS("Next")] )
- {
- /** \todo fix i_size use */
- bEnabled = p_playlist->items.i_size > 1;
- }
- else if( [[o_mi title] isEqualToString: _NS("Random")] )
- {
- int i_state;
- var_Get( p_playlist, "random", &val );
- i_state = val.b_bool ? NSOnState : NSOffState;
- [o_mi setState: i_state];
- }
- else if( [[o_mi title] isEqualToString: _NS("Repeat One")] )
- {
- int i_state;
- var_Get( p_playlist, "repeat", &val );
- i_state = val.b_bool ? NSOnState : NSOffState;
- [o_mi setState: i_state];
- }
- else if( [[o_mi title] isEqualToString: _NS("Repeat All")] )
- {
- int i_state;
- var_Get( p_playlist, "loop", &val );
- i_state = val.b_bool ? NSOnState : NSOffState;
- [o_mi setState: i_state];
- }
- else if( [[o_mi title] isEqualToString: _NS("Step Forward")] ||
- [[o_mi title] isEqualToString: _NS("Step Backward")] ||
- [[o_mi title] isEqualToString: _NS("Jump To Time")])
- {
- if( p_input != NULL )
- {
- var_Get( p_input, "seekable", &val);
- bEnabled = val.b_bool;
- }
- else bEnabled = FALSE;
- }
- else if( [[o_mi title] isEqualToString: _NS("Mute")] )
- {
- [o_mi setState: p_intf->p_sys->b_mute ? NSOnState : NSOffState];
- [o_main setupMenus]; /* Make sure audio menu is up to date */
- }
- else if( [[o_mi title] isEqualToString: _NS("Half Size")] ||
- [[o_mi title] isEqualToString: _NS("Normal Size")] ||
- [[o_mi title] isEqualToString: _NS("Double Size")] ||
- [[o_mi title] isEqualToString: _NS("Fit to Screen")] ||
- [[o_mi title] isEqualToString: _NS("Snapshot")] ||
- [[o_mi title] isEqualToString: _NS("Fullscreen")] ||
- [[o_mi title] isEqualToString: _NS("Float on Top")] )
- {
- id o_window;
- NSArray *o_windows = [NSApp orderedWindows];
- NSEnumerator *o_enumerator = [o_windows objectEnumerator];
- bEnabled = FALSE;
-
- vout_thread_t *p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
- {
- if( [[o_mi title] isEqualToString: _NS("Float on Top")] )
- {
- var_Get( p_vout, "video-on-top", &val );
- [o_mi setState: val.b_bool ? NSOnState : NSOffState];
- }
-
- while( (o_window = [o_enumerator nextObject]))
- {
- if( [[o_window className] isEqualToString: @"VLCVoutWindow"] ||
- [[[VLCMain sharedInstance] getEmbeddedList]
- windowContainsEmbedded: o_window])
- {
- bEnabled = TRUE;
- break;
- }
- }
- vlc_object_release( (vlc_object_t *)p_vout );
- }
- else if( [[o_mi title] isEqualToString: _NS("Fullscreen")] )
- {
- var_Get( p_playlist, "fullscreen", &val );
- [o_mi setState: val.b_bool];
- bEnabled = TRUE;
- }
- [o_main setupMenus]; /* Make sure video menu is up to date */
- }
-
- vlc_mutex_unlock( &p_playlist->object_lock );
- vlc_object_release( p_playlist );
-
- return( bEnabled );
-}
-
-@end
-
-/*****************************************************************************
- * VLCMenuExt implementation
- *****************************************************************************
- * Object connected to a playlistitem which remembers the data belonging to
- * the variable of the autogenerated menu
- *****************************************************************************/
-@implementation VLCMenuExt
-
-- (id)initWithVar: (const char *)_psz_name Object: (int)i_id
- Value: (vlc_value_t)val ofType: (int)_i_type
-{
- self = [super init];
-
- if( self != nil )
- {
- psz_name = strdup( _psz_name );
- i_object_id = i_id;
- value = val;
- i_type = _i_type;
- }
-
- return( self );
-}
-
-- (void)dealloc
-{
- free( psz_name );
- [super dealloc];
-}
-
-- (char *)name
-{
- return psz_name;
-}
-
-- (int)objectID
-{
- return i_object_id;
-}
-
-- (vlc_value_t)value
-{
- return value;
-}
-
-- (int)type
-{
- return i_type;