From bcc7f49d69083d5ca4c47aeda13813ac429e84aa Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Tue, 20 Nov 2007 14:12:57 +0000 Subject: [PATCH] src/control: Implement hierarchical_media_list_view. --- include/vlc/libvlc.h | 6 +- src/Makefile.am | 1 + src/control/hierarchical_media_list_view.c | 119 +++++++++++++++++++++ src/control/libvlc_internal.h | 6 +- 4 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 src/control/hierarchical_media_list_view.c diff --git a/include/vlc/libvlc.h b/include/vlc/libvlc.h index 49fd590ac0..bdf071abd4 100644 --- a/include/vlc/libvlc.h +++ b/include/vlc/libvlc.h @@ -526,9 +526,13 @@ VLC_PUBLIC_API libvlc_media_list_view_t * libvlc_media_list_flat_view( libvlc_media_list_t *, libvlc_exception_t * ); +VLC_PUBLIC_API libvlc_media_list_view_t * + libvlc_media_list_hierarchical_view( libvlc_media_list_t *, + libvlc_exception_t * ); + VLC_PUBLIC_API libvlc_event_manager_t * libvlc_media_list_event_manager( libvlc_media_list_t *, - libvlc_exception_t * ); + libvlc_exception_t * ); /** @} */ diff --git a/src/Makefile.am b/src/Makefile.am index a4ce102b9b..d26ccb27dd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -336,6 +336,7 @@ SOURCES_libvlc_control = \ control/dynamic_media_list.c \ control/event.c \ control/flat_media_list_view.c \ + control/hierarchical_media_list_view.c \ control/media_descriptor.c \ control/media_instance.c \ control/media_list.c \ diff --git a/src/control/hierarchical_media_list_view.c b/src/control/hierarchical_media_list_view.c new file mode 100644 index 0000000000..4dfbd93163 --- /dev/null +++ b/src/control/hierarchical_media_list_view.c @@ -0,0 +1,119 @@ +/***************************************************************************** + * hierarchical_media_list_view.c: libvlc hierarchical media list view functs. + ***************************************************************************** + * Copyright (C) 2007 the VideoLAN team + * $Id: flat_media_list.c 21287 2007-08-20 01:28:12Z pdherbemont $ + * + * Authors: Pierre d'Herbemont + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#include "libvlc_internal.h" +#include +#include +#include "vlc_arrays.h" + +//#define DEBUG_HIERARCHICAL_VIEW + +#ifdef DEBUG_HIERARCHICAL_VIEW +# define trace( fmt, ... ) printf( "%s(): " fmt, __FUNCTION__, ##__VA_ARGS__ ) +#else +# define trace( ... ) +#endif + +struct libvlc_media_list_view_private_t +{ + vlc_array_t array; +}; + +/* + * Private functions + */ + +/************************************************************************** + * flat_media_list_view_count (private) + * (called by media_list_view_count) + **************************************************************************/ +static int +hierarch_media_list_view_count( libvlc_media_list_view_t * p_mlv, + libvlc_exception_t * p_e ) +{ + return libvlc_media_list_count( p_mlv->p_mlist, p_e ); +} + +/************************************************************************** + * flat_media_list_view_item_at_index (private) + * (called by flat_media_list_view_item_at_index) + **************************************************************************/ +static libvlc_media_descriptor_t * +hierarch_media_list_view_item_at_index( libvlc_media_list_view_t * p_mlv, + int index, + libvlc_exception_t * p_e ) +{ + return libvlc_media_list_item_at_index( p_mlv->p_mlist, index, p_e ); +} + +/************************************************************************** + * flat_media_list_view_item_at_index (private) + * (called by flat_media_list_view_item_at_index) + **************************************************************************/ +static libvlc_media_list_view_t * +hierarch_media_list_view_children_at_index( libvlc_media_list_view_t * p_mlv, + int index, + libvlc_exception_t * p_e ) +{ + libvlc_media_descriptor_t * p_md; + libvlc_media_list_t * p_submlist; + p_md = libvlc_media_list_item_at_index( p_mlv->p_mlist, index, p_e ); + if( !p_md ) return NULL; + p_submlist = libvlc_media_descriptor_subitems( p_md, p_e ); + if( !p_submlist ) return NULL; + return libvlc_media_list_hierarchical_view( p_submlist, p_e ); +} + +/************************************************************************** + * flat_media_list_view_release (private) + * (called by media_list_view_release) + **************************************************************************/ +static void +hierarch_media_list_view_release( libvlc_media_list_view_t * p_mlv ) +{ +} + +/* + * Public libvlc functions + */ + +/************************************************************************** + * libvlc_media_list_flat_view (Public) + **************************************************************************/ +libvlc_media_list_view_t * +libvlc_media_list_hierarchical_view( libvlc_media_list_t * p_mlist, + libvlc_exception_t * p_e ) +{ + trace("\n"); + libvlc_media_list_view_t * p_mlv; + libvlc_media_list_lock( p_mlist ); + p_mlv = libvlc_media_list_view_new( p_mlist, + hierarch_media_list_view_count, + hierarch_media_list_view_item_at_index, + hierarch_media_list_view_children_at_index, + hierarch_media_list_view_release, + NULL, + p_e ); + libvlc_media_list_unlock( p_mlist ); + return p_mlv; +} diff --git a/src/control/libvlc_internal.h b/src/control/libvlc_internal.h index 5d271850f4..85a059a9f5 100644 --- a/src/control/libvlc_internal.h +++ b/src/control/libvlc_internal.h @@ -149,11 +149,11 @@ struct libvlc_media_list_view_t libvlc_media_list_view_item_at_index_func_t pf_item_at_index; libvlc_media_list_view_children_at_index_func_t pf_children_at_index; - libvlc_media_list_view_release_func_t pf_release; + libvlc_media_list_view_release_func_t pf_release; /* Notification callback */ - void (*pf_ml_item_added)(const libvlc_event_t *, void *); - void (*pf_ml_item_removed)(const libvlc_event_t *, void *); + void (*pf_ml_item_added)(const libvlc_event_t *, libvlc_media_list_view_t *); + void (*pf_ml_item_removed)(const libvlc_event_t *, libvlc_media_list_view_t *); }; struct libvlc_dynamic_media_list_t -- 2.39.5