#include <mvcp/mvcp.h>
#include <mvcp/mvcp_remote.h>
-#include "instance.h"
+#include "library.h"
#include "ui.h"
#include "timecode.h"
#include "support.h"
+extern GtkTargetEntry drag_targets[];
+
void library_release(instance_t* app)
{
mvcp_close(app->library.handle[0]);
library_add_fake(user_data, GTK_TREE_STORE(model), iter);
};
+static void library_drag_data_get_cb(GtkWidget *widget, GdkDragContext *context,
+ GtkSelectionData *selection_data, guint info, guint time, gpointer userdata)
+{
+ int c;
+ playlist_item_t* items;
+ instance_t* app = (instance_t*)userdata;
+
+ g_warning("library_drag_data_get_cb");
+
+ items = library_get_selected_items(app, &c);
+
+ /* clear item */
+ if(items)
+ {
+ gtk_selection_data_set(selection_data, selection_data->target, 8,
+ (const guchar *)items, sizeof(playlist_item_t) * c);
+ free(items);
+ };
+};
+
+static void library_drag_begin_cb(GtkWidget *widget, GdkDragContext *context, gpointer userdata)
+{
+ g_warning("library_drag_begin_cb");
+ gtk_drag_source_set_icon_stock(widget, GTK_STOCK_DND);
+};
+
+
void library_init(instance_t* app)
{
/* connect to library */
/* load lib */
library_init_load(app);
+ /* allow drag source */
+ gtk_drag_source_set(app->library_tree, GDK_BUTTON1_MASK,
+ drag_targets, 1, (GdkDragAction)(GDK_ACTION_COPY));
+
/* set handlers */
gtk_signal_connect(GTK_OBJECT(app->library_tree), "row-expanded",
GTK_SIGNAL_FUNC(on_library_row_expanded), app);
gtk_signal_connect(GTK_OBJECT(app->library_tree), "row-collapsed",
GTK_SIGNAL_FUNC(on_library_row_collapsed), app);
+ g_signal_connect(GTK_OBJECT(app->library_tree), "drag_data_get",
+ G_CALLBACK(library_drag_data_get_cb), app);
+ g_signal_connect(GTK_OBJECT(app->library_tree), "drag_begin",
+ G_CALLBACK(library_drag_begin_cb), app);
-#if 0
- pthread_mutex_lock(&app->library.lock);
+};
- if(app->library.filename[0])
+static void library_get_selected_items_iter
+(
+ GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data
+)
+{
+ int l;
+ mvcp_dir_entry_t *dir;
+ mvcp_list_entry_t *list;
+ playlist_item_t** pitems = (playlist_item_t**)data;
+ playlist_item_t* items = *pitems;
+
+ /* request pointers to list and dir entries of library items */
+ gtk_tree_model_get(model, iter,
+ 3, &dir,
+ 4, &list,
+ -1);
+
+ /* check if defined */
+ if(dir && list)
{
- app->library.count = MAX_LIBRARY_ITEMS;
- omnplay_library_load_file(app->library.item, &app->library.count, app->library.filename);
+ /* allocate items */
+ if(!items)
+ {
+ items = (playlist_item_t*)malloc(sizeof(playlist_item_t));
+ memset(items, 0, sizeof(playlist_item_t));
+ };
+
+ /* find numbers of items in list */
+ for(l = 0; items[l].id[0]; l++); l--;
+ g_warning("library_get_selected_items_iter: l=%d", l);
+
+ /* realloc items */
+ items = (playlist_item_t*)realloc(items, (l + 2) * sizeof(playlist_item_t));
+
+ /* clean last item */
+ memset(&items[l + 1], 0, sizeof(playlist_item_t));
+
+ /* setup items */
+ memset(&items[l + 0], 0, sizeof(playlist_item_t));
+ strncpy(items[l].id, dir->name, PATH_MAX);
+ strncpy(items[l].title, dir->full, PATH_MAX);
+ items[l].dur = list->size;
};
- omnplay_library_sort(app);
+ *pitems = items;
+};
- pthread_mutex_unlock(&app->library.lock);
+playlist_item_t* library_get_selected_items(instance_t* app, int *count)
+{
+ int l = 0;
+ playlist_item_t* items = NULL;
- omnplay_library_draw(app);
-#endif
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(app->library_tree));
+ if(selection)
+ {
+ gtk_tree_selection_selected_foreach(
+ selection,
+ library_get_selected_items_iter,
+ &items);
+
+ if(items)
+ {
+ for(; items[l].id[0]; l++); l--;
+ };
+ };
+
+ *count = l;
+ return items;
};
+
#if 0
playlist_item_t* omnplay_library_find(omnplay_instance_t* app, char* id)
{