]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/playlist.m
* Updates due to the new playlist core
[vlc] / modules / gui / macosx / playlist.m
index a7af30c95840580ee4c3b8452d996cbebc50aa3e..f0b374b47f6dac6d129cac52bdbe670a7288609d 100644 (file)
 #include <sys/mount.h>
 #include <vlc_keys.h>
 
-#include "intf.h"
+#import "intf.h"
 #import "wizard.h"
 #import "bookmarks.h"
 #import "playlistinfo.h"
-#include "playlist.h"
-#include "controls.h"
-#include "vlc_osd.h"
-#include "misc.h"
+#import "playlist.h"
+#import "controls.h"
+#import "vlc_osd.h"
+#import "misc.h"
 #import <vlc_interaction.h>
 
 /*****************************************************************************
@@ -204,7 +204,7 @@ NSLog( @"%d children for %s", i_return, p_item->p_input->psz_name );
     if( o_value == nil )
     {
         o_value = [[NSValue valueWithPointer: p_return] retain];
-        msg_Err( VLCIntf, @"missing playlist item's pointer value" );
+        msg_Err( VLCIntf, "missing playlist item's pointer value" );
     }
     return o_value;
 }
@@ -364,40 +364,44 @@ NSLog( @"expandable" );
 
     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 ? p_parser->pp_shortcuts[i] : 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 );
@@ -428,14 +432,10 @@ NSLog( @"expandable" );
     [o_status_field setStringValue: [NSString stringWithFormat:
                         _NS("No items in the playlist")]];
 
-    [o_random_ckb setTitle: _NS("Random")];
 #if 0
     [o_search_button setTitle: _NS("Search")];
 #endif
     [o_search_field setToolTip: _NS("Search in Playlist")];
-    [[o_loop_popup itemAtIndex:0] setTitle: _NS("Standard Play")];
-    [[o_loop_popup itemAtIndex:1] setTitle: _NS("Repeat One")];
-    [[o_loop_popup itemAtIndex:2] setTitle: _NS("Repeat All")];
     [o_mi_addNode setTitle: _NS("Add Folder to Playlist")];
 
     [o_save_accessory_text setStringValue: _NS("File Format:")];
@@ -464,14 +464,15 @@ NSLog( @"expandable" );
 
     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")];
         }
@@ -492,19 +493,18 @@ NSLog( @"expandable" );
     var_Get( p_playlist, "repeat", &val );
     if( val.b_bool == VLC_TRUE )
     {
-        [o_loop_popup selectItemAtIndex: 1];
+        [[[VLCMain sharedInstance] getControls] repeatOne];
    }
     else if( val2.b_bool == VLC_TRUE )
     {
-        [o_loop_popup selectItemAtIndex: 2];
+        [[[VLCMain sharedInstance] getControls] repeatAll];
     }
     else
     {
-        [o_loop_popup selectItemAtIndex: 0];
+        [[[VLCMain sharedInstance] getControls] repeatOff];
     }
 
-    var_Get( p_playlist, "random", &val );
-    [o_random_ckb setState: val.b_bool];
+    [[[VLCMain sharedInstance] getControls] shuffle];
 
     vlc_object_release( p_playlist );
 }
@@ -598,10 +598,10 @@ NSLog( @"expandable" );
         /* 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 );
@@ -976,7 +976,7 @@ NSLog( @"expandable" );
     {
         for( i = 0; i < (int)[o_options count]; i++ )
         {
-            vlc_input_item_AddOption( p_input, strdup( [[o_options objectAtIndex:i] UTF8String] ) );
+            input_ItemAddOption( p_input, strdup( [[o_options objectAtIndex:i] UTF8String] ) );
         }
     }
 
@@ -1073,48 +1073,6 @@ NSLog( @"expandable" );
     vlc_object_release( p_playlist );
 }
 
-- (IBAction)handlePopUp:(id)sender
-
-{
-    intf_thread_t * p_intf = VLCIntf;
-    vlc_value_t val1,val2;
-    playlist_t * p_playlist = pl_Yield( p_intf );
-
-    switch( [o_loop_popup indexOfSelectedItem] )
-    {
-        case 1:
-
-             val1.b_bool = 0;
-             var_Set( p_playlist, "loop", val1 );
-             val1.b_bool = 1;
-             var_Set( p_playlist, "repeat", val1 );
-             vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat One" ) );
-        break;
-
-        case 2:
-             val1.b_bool = 0;
-             var_Set( p_playlist, "repeat", val1 );
-             val1.b_bool = 1;
-             var_Set( p_playlist, "loop", val1 );
-             vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat All" ) );
-        break;
-
-        default:
-             var_Get( p_playlist, "repeat", &val1 );
-             var_Get( p_playlist, "loop", &val2 );
-             if( val1.b_bool || val2.b_bool )
-             {
-                  val1.b_bool = 0;
-                  var_Set( p_playlist, "repeat", val1 );
-                  var_Set( p_playlist, "loop", val1 );
-                  vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat Off" ) );
-             }
-         break;
-     }
-     vlc_object_release( p_playlist );
-     [self playlistUpdated];
-}
-
 - (NSMutableArray *)subSearchItem:(playlist_item_t *)p_item
 {
     playlist_t *p_playlist = pl_Yield( VLCIntf );
@@ -1136,7 +1094,7 @@ NSLog( @"expandable" );
         vlc_mutex_lock( &p_playlist->object_lock );
         o_current_name = [NSString stringWithUTF8String:
             p_item->pp_children[i_current]->p_input->psz_name];
-        psz_temp = vlc_input_item_GetInfo( p_item->p_input ,
+        psz_temp = input_ItemGetInfo( p_item->p_input ,
                    _("Meta-information"),_("Artist") );
         o_current_author = [NSString stringWithUTF8String: psz_temp];
         free( psz_temp);
@@ -1407,17 +1365,15 @@ NSLog( @"expandable" );
     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")];
         }