- BOOL bEnabled = TRUE;
- vlc_value_t val;
- intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
- input_thread_t * p_input = playlist_CurrentInput( p_playlist );
-
- if( [[o_mi title] isEqualToString: _NS("Faster")] ||
- [[o_mi title] isEqualToString: _NS("Slower")] )
- {
- if( p_input != NULL )
- {
- bEnabled = var_GetBool( p_input, "can-rate" );
- }
- 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 */
- PL_LOCK;
- bEnabled = p_playlist->items.i_size > 1;
- PL_UNLOCK;
- }
- 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, "can-seek", &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] embeddedList]
- windowContainsEmbedded: o_window])
- {
- bEnabled = TRUE;
- break;
- }
- }
-
- vlc_object_release( (vlc_object_t *)p_vout );
- }
- 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 */
- }
-
- /* Special case for telx menu */
- if( [[o_mi title] isEqualToString: _NS("Normal Size")] )
- {
- NSMenuItem *item = [[o_mi menu] itemWithTitle:_NS("Teletext")];
- bool b_telx = p_input && var_GetInteger( p_input, "teletext-es" ) >= 0;
-
- [[item submenu] setAutoenablesItems:NO];
- for( int k=0; k < [[item submenu] numberOfItems]; k++ )
- {
- [[[item submenu] itemAtIndex:k] setEnabled: b_telx];
- }
- }
-
- if( p_input ) vlc_object_release( p_input );
- pl_Release( p_intf );
-
- return( bEnabled );
-}
-
-@end
-
-/*****************************************************************************
- * VLCAutoGeneratedMenuContent implementation
- *****************************************************************************
- * Object connected to a playlistitem which remembers the data belonging to
- * the variable of the autogenerated menu
- *****************************************************************************/
-@implementation VLCAutoGeneratedMenuContent
-
--(id) initWithVariableName:(const char *)name ofObject:(vlc_object_t *)object
- andValue:(vlc_value_t)val ofType:(int)type
-{
- self = [super init];
-
- if( self != nil )
- {
- psz_name = strdup( name );
- _vlc_object = vlc_object_hold( object );
- value = val;
- i_type = type;
- }
-
- return( self );
-}
-
-- (void)dealloc
-{
- vlc_object_release( _vlc_object );
- free( psz_name );
- [super dealloc];
-}
-
-- (const char *)name
-{
- return psz_name;
-}
-
-- (vlc_value_t)value
-{
- return value;
-}
-
-- (vlc_object_t *)vlcObject
-{
- return vlc_object_hold( _vlc_object );
-}
-
-
-- (int)type
-{
- return i_type;