浏览代码

VLCMediaListAspect.m: Handle WillAdd/Added WillDelete/Deleted events.

Pierre d'Herbemont 17 年之前
父节点
当前提交
7c5ff33799
共有 1 个文件被更改,包括 37 次插入1 次删除
  1. 37 1
      Sources/VLCMediaListAspect.m

+ 37 - 1
Sources/VLCMediaListAspect.m

@@ -41,13 +41,38 @@
 {
     return [self count];
 }
-
 - (id) objectInMediaAtIndex:(int)i
 {
     return [self mediaAtIndex:i];
 }
 @end
 
+/* libvlc event callback */
+static void HandleMediaListViewItemAdded(const libvlc_event_t *event, void *user_data)
+{
+    id self = user_data;
+    int index = event->u.media_list_view_item_added.index;
+    [self didChange:NSKeyValueChangeInsertion valuesAtIndexes:[NSIndexSet indexSetWithIndex:index] forKey:@"Media"];
+}
+static void HandleMediaListViewWillAddItem(const libvlc_event_t *event, void *user_data)
+{
+    id self = user_data;
+    int index = event->u.media_list_view_will_add_item.index;
+    [self willChange:NSKeyValueChangeInsertion valuesAtIndexes:[NSIndexSet indexSetWithIndex:index] forKey:@"Media"];
+}
+static void HandleMediaListViewItemDeleted( const libvlc_event_t * event, void * user_data)
+{
+    id self = user_data;
+    int index = event->u.media_list_view_will_add_item.index;
+    [self didChange:NSKeyValueChangeRemoval valuesAtIndexes:[NSIndexSet indexSetWithIndex:index] forKey:@"Media"];
+}
+static void HandleMediaListViewWillDeleteItem(const libvlc_event_t *event, void *user_data)
+{
+    id self = user_data;
+    int index = event->u.media_list_view_will_add_item.index;
+    [self willChange:NSKeyValueChangeRemoval valuesAtIndexes:[NSIndexSet indexSetWithIndex:index] forKey:@"Media"];
+}
+
 @implementation VLCMediaListAspect
 - (void)dealloc
 {
@@ -105,7 +130,18 @@
 @implementation VLCMediaListAspect (Private)
 - (void)initInternalMediaListView
 {
+    libvlc_exception_t e;
+    libvlc_exception_init( &e );
+
+    libvlc_event_manager_t *p_em = libvlc_media_list_event_manager( p_mlv, &e );
+
     /* Add internal callback */
+    libvlc_event_attach( p_em, libvlc_MediaListViewItemAdded,   HandleMediaListViewItemAdded,   self, &e );
+    libvlc_event_attach( p_em, libvlc_MediaListViewWillAddItem, HandleMediaListViewWillAddItem, self, &e );
+    libvlc_event_attach( p_em, libvlc_MediaListViewItemDeleted, HandleMediaListViewItemDeleted, self, &e );
+    libvlc_event_attach( p_em, libvlc_MediaListViewWillDeleteItem, HandleMediaListViewWillDeleteItem, self, &e );
+
+    quit_on_exception( &e );
 }
 @end