#import "controls.h"
#import "vlc_osd.h"
#import "misc.h"
-#import <vlc_interaction.h>
+#import <vlc_interface.h>
/*****************************************************************************
* VLCPlaylistView implementation
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)o_tc byItem:(id)item
{
id o_value = nil;
- intf_thread_t *p_intf = VLCIntf;
playlist_item_t *p_item;
if( item == nil || ![item isKindOfClass: [NSValue class]] ) return( @"error" );
if( [[o_tc identifier] isEqualToString:@"1"] )
{
- o_value = [NSString stringWithUTF8String:
- p_item->p_input->psz_name];
- if( o_value == NULL )
- o_value = [NSString stringWithCString:
+ /* sanity check to prevent the NSString class from crashing */
+ if( p_item->p_input->psz_name != NULL )
+ {
+ o_value = [NSString stringWithUTF8String:
p_item->p_input->psz_name];
+ if( o_value == NULL )
+ o_value = [NSString stringWithCString:
+ p_item->p_input->psz_name];
+ }
}
else if( [[o_tc identifier] isEqualToString:@"2"] && p_item->p_input->p_meta &&
p_item->p_input->p_meta->psz_artist && *p_item->p_input->p_meta->psz_artist )
for( i_index = 0; i_index < p_list->i_count; i_index++ )
{
- NSMenuItem * o_lmi;
- module_t * p_parser = (module_t *)p_list->p_values[i_index].p_object ;
+ vlc_bool_t b_enabled;
+ char *objectname;
+ NSMenuItem *o_lmi;
+ module_t *p_parser = (module_t *)p_list->p_values[i_index].p_object ;
if( !strcmp( p_parser->psz_capability, "services_discovery" ) )
{
- /* create the menu entries used in the playlist menu */
+ /* Check for submodules */
+ int i = -1;
+ while( p_parser->pp_shortcuts[++i] != NULL ); i--;
+
+ /* Check whether to enable these menuitems */
+ objectname = i>=0 ? (char *)p_parser->pp_shortcuts[i] : (char *)p_parser->psz_object_name;
+ b_enabled = playlist_IsServicesDiscoveryLoaded( p_playlist, objectname );
+
+ /* Create the menu entries used in the playlist menu */
o_lmi = [[o_mi_services submenu] addItemWithTitle:
[NSString stringWithUTF8String:
p_parser->psz_longname ? p_parser->psz_longname :
( p_parser->psz_shortname ? p_parser->psz_shortname:
- p_parser->psz_object_name)]
+ objectname)]
action: @selector(servicesChange:)
keyEquivalent: @""];
[o_lmi setTarget: self];
- [o_lmi setRepresentedObject:
- [NSString stringWithCString: p_parser->psz_object_name]];
- if( playlist_IsServicesDiscoveryLoaded( p_playlist,
- p_parser->psz_object_name ) )
- [o_lmi setState: NSOnState];
+ [o_lmi setRepresentedObject: [NSString stringWithCString: objectname]];
+ if( b_enabled ) [o_lmi setState: NSOnState];
- /* create the menu entries for the main menu */
+ /* Create the menu entries for the main menu */
o_lmi = [[o_mm_mi_services submenu] addItemWithTitle:
[NSString stringWithUTF8String:
p_parser->psz_longname ? p_parser->psz_longname :
( p_parser->psz_shortname ? p_parser->psz_shortname:
- p_parser->psz_object_name)]
+ objectname)]
action: @selector(servicesChange:)
keyEquivalent: @""];
[o_lmi setTarget: self];
- [o_lmi setRepresentedObject:
- [NSString stringWithCString: p_parser->psz_object_name]];
- if( playlist_IsServicesDiscoveryLoaded( p_playlist,
- p_parser->psz_object_name ) )
- [o_lmi setState: NSOnState];
+ [o_lmi setRepresentedObject: [NSString stringWithCString:objectname]];
+ if( b_enabled ) [o_lmi setState: NSOnState];
}
}
vlc_list_release( p_list );
playlist_t *p_playlist = pl_Yield( VLCIntf );
- if( p_playlist->i_size >= 2 )
+ if( playlist_CurrentSize( p_playlist ) >= 2 )
{
[o_status_field setStringValue: [NSString stringWithFormat:
- _NS("%i items in the playlist"), p_playlist->i_size]];
+ _NS("%i items in the playlist"),
+ playlist_CurrentSize( p_playlist )]];
}
else
{
- if( p_playlist->i_size == 0 )
- {
+ if( playlist_IsEmpty( p_playlist ) )
[o_status_field setStringValue: _NS("No items in the playlist")];
- }
else
- {
[o_status_field setStringValue: _NS("1 item in the playlist")];
- }
}
vlc_object_release( p_playlist );
}
/* Since outlineView: willDisplayCell:... may call this function with
p_items that don't exist anymore, first check if the item is still
in the playlist. Any cleaner solution welcomed. */
- for( i = 0; i < p_playlist->i_all_size; i++ )
+ for( i = 0; i < p_playlist->all_items.i_size; i++ )
{
- if( p_playlist->pp_all_items[i] == p_item ) break;
- else if ( i == p_playlist->i_all_size - 1 )
+ if( ARRAY_VAL( p_playlist->all_items, i) == p_item ) break;
+ else if ( i == p_playlist->all_items.i_size - 1 )
{
vlc_object_release( p_playlist );
vlc_mutex_unlock( &p_playlist->object_lock );
p_item = NULL;
}
}
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, p_node, p_item );
+ playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, VLC_TRUE, p_node, p_item );
}
vlc_object_release( p_playlist );
}
}
else
{
- playlist_LockDelete( p_playlist, p_item->i_id );
+ playlist_DeleteFromInput( p_playlist, p_item->p_input->i_id, VLC_FALSE );
}
}
[self playlistUpdated];
}
/* Add the item */
- playlist_PlaylistAddInput( p_playlist, p_input, PLAYLIST_INSERT,
- i_position == -1 ? PLAYLIST_END : i_position + i_item );
+ playlist_AddInput( p_playlist, p_input, PLAYLIST_INSERT,
+ i_position == -1 ? PLAYLIST_END : i_position + i_item, VLC_TRUE,
+ VLC_FALSE );
if( i_item == 0 && !b_enqueue )
{
playlist_item_t *p_item;
- p_item = playlist_ItemGetByInput( p_playlist, p_input );
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, NULL, p_item );
+ p_item = playlist_ItemGetByInput( p_playlist, p_input, VLC_TRUE );
+ playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, VLC_TRUE, NULL, p_item );
}
else
{
playlist_item_t *p_item;
- p_item = playlist_ItemGetByInput( p_playlist, p_input );
- playlist_Control( p_playlist, PLAYLIST_PREPARSE, p_item );
+ p_item = playlist_ItemGetByInput( p_playlist, p_input, VLC_TRUE );
+ playlist_Control( p_playlist, PLAYLIST_PREPARSE, VLC_TRUE, p_item );
}
}
[self playlistUpdated];
if( i_item == 0 && !b_enqueue )
{
playlist_item_t *p_item;
- p_item = playlist_ItemGetByInput( p_playlist, p_input );
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, NULL, p_item );
+ p_item = playlist_ItemGetByInput( p_playlist, p_input, VLC_TRUE );
+ playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, VLC_TRUE, NULL, p_item );
}
else
{
playlist_item_t *p_item;
- p_item = playlist_ItemGetByInput( p_playlist, p_input );
- playlist_Control( p_playlist, PLAYLIST_PREPARSE, p_item );
+ p_item = playlist_ItemGetByInput( p_playlist, p_input, VLC_TRUE );
+ playlist_Control( p_playlist, PLAYLIST_PREPARSE, VLC_TRUE, p_item );
}
}
[self playlistUpdated];
playlist_item_t * p_item;
ret_v = intf_UserStringInput( p_playlist, _("New Node"),
_("Please enter a name for the new node."), &psz_name );
+
if( psz_name != NULL && psz_name != "" )
p_item = playlist_NodeCreate( p_playlist, psz_name,
- p_playlist->p_local_category );
- else
+ p_playlist->p_local_category, 0 );
+ else if(! config_GetInt( p_playlist, "interact" ) )
+ {
+ /* in case that the interaction is disabled, just give it a bogus name */
p_item = playlist_NodeCreate( p_playlist, _("Empty Folder"),
- p_playlist->p_local_category );
+ p_playlist->p_local_category, 0 );
+ }
if(! p_item )
- msg_Warn( VLCIntf, "node creation failed" );
+ msg_Warn( VLCIntf, "node creation failed or cancelled by user" );
vlc_object_release( p_playlist );
[ourPool release];
id o_value = [super outlineView: outlineView child: index ofItem: item];
playlist_t *p_playlist = pl_Yield( VLCIntf );
- /* FIXME: playlist->i_size doesn't provide the correct number of items anymore
- * check the playlist API for the fixed function, once zorglub implemented it -- fpk, 9/17/06 */
-
- if( p_playlist->i_size >= 2 )
+ if( playlist_CurrentSize( p_playlist ) >= 2 )
{
[o_status_field setStringValue: [NSString stringWithFormat:
- _NS("%i items in the playlist"), p_playlist->i_size]];
+ _NS("%i items in the playlist"),
+ playlist_CurrentSize( p_playlist )]];
}
else
{
- if( p_playlist->i_size == 0 )
+ if( playlist_IsEmpty( p_playlist ) )
{
[o_status_field setStringValue: _NS("No items in the playlist")];
}