#include "instance.h"
#include "ui.h"
#include "timecode.h"
+#include "support.h"
void library_release(instance_t* app)
{
mvcp_parser_close(app->library.handle[1]);
};
-
-static int library_load_node(instance_t* app, GtkTreeStore *tree_store, GtkTreeIter* parent, char* path)
+static void library_add_fake(instance_t* app, GtkTreeStore *tree_store, GtkTreeIter* parent)
{
- int i;
GtkTreeIter iter;
- mvcp_dir_entry_t entry;
- mvcp_dir dir = mvcp_dir_init(app->library.handle[0], path);
-
- for (i = 0; i < mvcp_dir_count(dir); i++)
- {
- if(mvcp_ok != mvcp_dir_get(dir, i, &entry))
- continue;
-
- g_warning("library_load_node: path=[%s], entry.dur=[%d], entry.full=[%s], entry.name[%s]",
- path, entry.dir, entry.full, entry.name);
-
- if(entry.dir)
- {
- gtk_tree_store_prepend(tree_store, &iter, parent);
-
- gtk_tree_store_set(tree_store, &iter,
- 0, app->library.icons[0],
- 1, "<dir>",
- 2, entry.name,
- 3, NULL,
- 4, NULL,
- 5, FALSE,
- 6, "red",
- -1 );
-
- library_load_node(app, tree_store, &iter, entry.full);
- }
- else
- {
- gtk_tree_store_append(tree_store, &iter, parent);
-
- gtk_tree_store_set(tree_store, &iter,
- 0, app->library.icons[1],
- 1, "<file>",
- 2, entry.name,
- 3, NULL,
- 4, NULL,
- 5, FALSE,
- 6, "red",
- -1 );
- };
- };
-
- return 0;
+ gtk_tree_store_append(tree_store, &iter, parent);
+ gtk_tree_store_set(tree_store, &iter, -1);
};
static int library_init_load(instance_t* app)
{
- int i;
- char tc[12];
- GtkTreeStore *tree_store;
GtkTreeIter iter;
+ GtkTreeStore *tree_store;
tree_store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(app->library_tree)));
gtk_tree_store_clear(tree_store);
-/*
gtk_tree_store_append(tree_store, &iter, NULL);
-
gtk_tree_store_set(tree_store, &iter,
- 0, NULL,
- 1, "/",
- 2, "<dir>",
+ 0, app->library.icons[0],
+ 1, "<dir>>",
+ 2, "LIBRARY",
3, NULL,
4, NULL,
5, FALSE,
6, "red",
-1 );
-*/
-
- library_load_node(app, tree_store, NULL, "/home/studio/Videos");
+ library_add_fake(app, tree_store, &iter);
gtk_tree_view_collapse_all(GTK_TREE_VIEW(app->library_tree));
return 0;
};
+static void library_add_item(instance_t* app, GtkTreeStore *treestore, GtkTreeIter *iter, mvcp_dir_entry_t* e)
+{
+ GtkTreeIter this, child;
+
+ if(e->dir)
+ {
+ gtk_tree_store_prepend(treestore, &this, iter);
+
+ gtk_tree_store_set(treestore, &this,
+ 0, app->library.icons[0],
+ 1, "<dir>",
+ 2, e->name,
+ 3, e,
+ 4, NULL,
+ 5, FALSE,
+ 6, "red",
+ -1 );
+
+ gtk_tree_store_append(treestore, &child, &this);
+ gtk_tree_store_set(treestore, &child, -1);
+ }
+ else
+ {
+ gtk_tree_store_append(treestore, &this, iter);
+
+ gtk_tree_store_set(treestore, &this,
+ 0, app->library.icons[1],
+ 1, "<file>",
+ 2, e->name,
+ 3, e,
+ 4, NULL,
+ 5, FALSE,
+ 6, "red",
+ -1 );
+ };
+};
+
+static void on_library_row_expanded
+(
+ GtkTreeView *treeview,
+ GtkTreeIter *iter,
+ GtkTreePath *path,
+ gpointer user_data
+)
+{
+ int i;
+ char* p;
+ GtkTreeIter fake;
+ GtkTreeModel *model;
+ GdkCursor* cursor;
+ mvcp_dir dir;
+ mvcp_dir_entry_t *e, entry;
+ instance_t* app = (instance_t*)user_data;
+
+ g_warning("on_library_row_expanded: HERE");
+
+ /* Set busy cursor */
+ cursor = gdk_cursor_new(GDK_WATCH);
+ gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(treeview))->window, cursor);
+ gdk_cursor_unref(cursor);
+ gdk_flush();
+
+ model = gtk_tree_view_get_model(treeview);
+
+ /* save fake item */
+ gtk_tree_model_iter_children(GTK_TREE_MODEL(model), &fake, iter);
+
+ /* request mvcp entry */
+ gtk_tree_model_get(GTK_TREE_MODEL(model), iter,
+ 3, &e,
+ -1);
+
+ /* setup root path */
+ if(!e)
+ p = "/home/studio/Videos";
+ else
+ p = e->full;
+
+
+ /* read dir */
+ dir = mvcp_dir_init(app->library.handle[0], p);
+ for (i = 0; i < mvcp_dir_count(dir); i++)
+ {
+ if(mvcp_ok != mvcp_dir_get(dir, i, &entry))
+ continue;
+
+// g_warning("on_library_row_expanded: path=[%s], entry.dur=[%d], entry.full=[%s], entry.name[%s]",
+// p, entry.dir, entry.full, entry.name);
+
+ e = (mvcp_dir_entry_t*)malloc(sizeof(mvcp_dir_entry_t));
+ memset(e, 0, sizeof(mvcp_dir_entry_t));
+ *e = entry;
+
+ library_add_item(app, GTK_TREE_STORE(model), iter, e);
+ };
+
+ /* restore cursor */
+ gdk_window_set_cursor(gtk_widget_get_toplevel(GTK_WIDGET(treeview))->window, NULL);
+
+ /* delete fake item */
+ gtk_tree_store_remove(GTK_TREE_STORE(model), &fake);
+};
+
+static void on_library_row_collapsed
+(
+ GtkTreeView *treeview,
+ GtkTreeIter *iter,
+ GtkTreePath *path,
+ gpointer user_data
+)
+{
+ GtkTreeModel *model;
+ GtkTreeIter child;
+ g_warning("on_library_row_collapsed: HERE");
+
+ /* delete all items */
+ model = gtk_tree_view_get_model(treeview);
+ while (gtk_tree_model_iter_children(GTK_TREE_MODEL(model), &child, iter))
+ {
+ mvcp_dir_entry_t *e;
+
+ /* request mvcp entry */
+ gtk_tree_model_get(GTK_TREE_MODEL(model), &child,
+ 3, &e,
+ -1);
+
+ /* free entry */
+ if(e) free(e);
+
+ gtk_tree_store_remove(GTK_TREE_STORE(model), &child);
+ };
+
+ /* add a fake element */
+ library_add_fake(user_data, GTK_TREE_STORE(model), iter);
+};
void library_init(instance_t* app)
{
return;
};
+ /* setup icons */
app->library.icons[0] = create_pixbuf("Axialis_Team_playlist_open_16x16.png");
app->library.icons[1] = create_pixbuf("Axialis_Team_playlist_save_16x16.png");
+ /* load lib */
library_init_load(app);
+ /* 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);
+
#if 0
pthread_mutex_lock(&app->library.lock);