]> git.sesse.net Git - vlc/commitdiff
* Nicer playlist reordering for OSX. cosmetic changes. refs #150
authorDerk-Jan Hartman <hartman@videolan.org>
Sun, 21 Aug 2005 23:33:58 +0000 (23:33 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Sun, 21 Aug 2005 23:33:58 +0000 (23:33 +0000)
modules/gui/macosx/playlist.h
modules/gui/macosx/playlist.m

index 63836ff5cb8aa19aa3486f1aed86985e8a51cb21..4f12945799dab4e89b3b595500b81ba6a769af95 100644 (file)
@@ -41,6 +41,7 @@
     IBOutlet id o_tc_duration;
     IBOutlet id o_outline_view;
 
+    NSMutableDictionary *o_outline_dict;
     int i_current_view;
 }
 
@@ -98,7 +99,6 @@
     NSImage *o_descendingSortingImage;
     NSImage *o_ascendingSortingImage;
 
-    NSMutableDictionary *o_outline_dict;
     NSMutableArray *o_nodes_array;
     NSMutableArray *o_items_array;
 
index 6d4936f4a12fc5bf136830d4c3e0158782ea36f3..3d30ba7f4f436784f1b21ac37ef3aedb8a75a7a3 100644 (file)
  *****************************************************************************/
 @implementation VLCPlaylistCommon
 
+- (id)init
+{
+    self = [super init];
+    if ( self != nil )
+    {
+        o_outline_dict = [[NSMutableDictionary alloc] init];
+    }
+    return self;
+}        
 - (void)awakeFromNib
 {
     playlist_t * p_playlist = vlc_object_find( VLCIntf, VLC_OBJECT_PLAYLIST,
         if( p_view && p_view->p_root )
         {
             i_return = p_view->p_root->i_children;
+
             if( i_current_view == VIEW_CATEGORY )
             {
                 i_return--; /* remove the GENERAL item from the list */
 
     vlc_object_release( p_playlist );
 
-    o_value = [[NSValue valueWithPointer: p_return] retain];
-
+    o_value = [o_outline_dict objectForKey:[NSString stringWithFormat: @"%p", p_return]];
+    if( o_value == nil )
+    {
+        o_value = [[NSValue valueWithPointer: p_return] retain];
+    }
     return o_value;
 }
 
     self = [super init];
     if ( self != nil )
     {
-        o_outline_dict = [[NSMutableDictionary alloc] init];
         o_nodes_array = [[NSMutableArray alloc] init];
         o_items_array = [[NSMutableArray alloc] init];
-
-
-        //i_moveRow = -1;
     }
     return self;
 }
@@ -630,7 +639,8 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
     vlc_object_release(p_playlist);
 }
 
-/* Check if p_item is a child of p_node recursively. We need to check the item     existence first since OSX sometimes tries to redraw items that have been
+/* Check if p_item is a child of p_node recursively. We need to check the item
+   existence first since OSX sometimes tries to redraw items that have been
    deleted. We don't do it when not required  since this verification takes
    quite a long time on big playlists (yes, pretty hacky). */
 - (BOOL)isItem: (playlist_item_t *)p_item
@@ -1603,6 +1613,7 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
 
     [pboard declareTypes: [NSArray arrayWithObjects:
         @"VLCPlaylistItemPboardType",NSFilenamesPboardType, nil] owner: self];
+    [pboard setData:[NSData data] forType:@"VLCPlaylistItemPboardType"];
     [pboard setPropertyList:[NSArray array]
                                         forType:NSFilenamesPboardType];
 
@@ -1617,14 +1628,21 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
     NSPasteboard *o_pasteboard = [info draggingPasteboard];
 
     if( !p_playlist ) return NSDragOperationNone;
+    
+    /* Dropping ON items is not allowed */
+    if( index == NSOutlineViewDropOnItemIndex )
+    {
+        vlc_object_release( p_playlist );
+        return NSDragOperationNone;
+    }
 
     /* We refuse to drop an item in anything else than a child of the General
        Node. We still accept items that would be root nodes of the outlineview
-       however, to allow drop in an empty playlist.*/
+       however, to allow drop in an empty playlist. */
     if( !([self isItem: [item pointerValue] inNode: p_playlist->p_general
                                     checkItemExistence: NO] || item == nil) )
     {
-        vlc_object_release(p_playlist);
+        vlc_object_release( p_playlist );
         return NSDragOperationNone;
     }
 
@@ -1639,7 +1657,7 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
                     [[o_nodes_array objectAtIndex: i] pointerValue]
                     checkItemExistence: NO] )
             {
-                vlc_object_release(p_playlist);
+                vlc_object_release( p_playlist );
                 return NSDragOperationNone;
             }
         }