minimal library drag support elements
[melted_gui] / src / instance.c
index 62d955b..05400b3 100644 (file)
 #include "ui.h"
 #include "opts.h"
 #include "timecode.h"
+#include "player.h"
+#include "library.h"
+
+GtkTargetEntry drag_targets[] = { { (char*) "application/playlist_item_t", 0, 0 } };
+
+gboolean instance_button_click(instance_t* app, control_buttons_t button)
+{
+#if 0
+    switch(button)
+    {
+        case BUTTON_PLAYLIST_ITEM_ADD:
+            omnplay_playlist_item_add(app, 0);
+            break;
+        case BUTTON_PLAYLIST_ITEM_DEL:
+            omnplay_playlist_item_del(app);
+            break;
+        case BUTTON_PLAYLIST_ITEM_EDIT:
+            omnplay_playlist_item_edit(app);
+            break;
+        case BUTTON_PLAYLIST_LOAD:
+            omnplay_playlist_load(app);
+            break;
+        case BUTTON_PLAYLIST_SAVE:
+            omnplay_playlist_save(app);
+            break;
+        case BUTTON_PLAYLIST_BLOCK_SINGLE:
+        case BUTTON_PLAYLIST_BLOCK_LOOP:
+            omnplay_playlist_block(app, button);
+            break;
+        case BUTTON_PLAYLIST_ITEM_UP:
+            omnplay_playlist_item_swap(app, -1);
+            break;
+        case BUTTON_PLAYLIST_ITEM_DOWN:
+            omnplay_playlist_item_swap(app, +1);
+            break;
+        case BUTTON_PLAYER_CUE:
+        case BUTTON_PLAYER_PLAY:
+        case BUTTON_PLAYER_PAUSE:
+        case BUTTON_PLAYER_STOP:
+            omnplay_ctl(app, button);
+            break;
+        case BUTTON_LIBRARY_ADD:
+            omnplay_library_add(app, 0);
+            break;
+        case BUTTON_LIBRARY_REFRESH:
+            omnplay_library_refresh(app);
+            break;
+        case BUTTON_LIBRARY_FIND:
+            omnplay_library_search(app, 0);
+            break;
+        case BUTTON_LIBRARY_FIND_NEXT:
+            omnplay_library_search(app, 1);
+            break;
+        case BUTTON_PLAYLIST_RELINK:
+            omnplay_playlist_relink(app);
+            break;
+    };
+#endif
+    return TRUE;
+};
+
+static gboolean on_button_click(GtkWidget *button, gpointer user_data)
+{
+    int i;
+    instance_t* app = (instance_t*)user_data;
+
+    for(i = 1; i < BUTTON_LAST; i++)
+        if(app->buttons[i] == button)
+            return instance_button_click(app, (control_buttons_t)i);
+
+    return FALSE;
+};
 
 static gboolean on_main_window_delete_event( GtkWidget *widget, GdkEvent *event, gpointer user_data )
 {
@@ -115,11 +187,9 @@ void instance_init(instance_t* app)
     pthread_mutex_init(&app->library.lock, &attr);
     pthread_mutexattr_destroy(&attr);
 
-#if 0
-    /* create a status thread */
+    /* run unit monitoring threads */
     for(i = 0; i < app->players.count; i++)
-        app->players.item[i].thread = g_thread_create(
-            omnplay_thread_proc, &app->players.item[i], TRUE, NULL);
+        player_run(app, i);
 
     /* attach buttons click */
     for(i = 1; i < BUTTON_LAST; i++)
@@ -127,8 +197,7 @@ void instance_init(instance_t* app)
             GTK_SIGNAL_FUNC( on_button_click), app );
 
     /* load library */
-    omnplay_library_load(app);
-#endif
+    library_init(app);
 
 #if 0
     /* setup drag n drop source/target */
@@ -159,9 +228,11 @@ void instance_release(instance_t* app)
 
     app->f_exit = 1;
 
+    library_release(app);
+
+    /* stop unit monitoring threads */
     for(i = 0; i < app->players.count; i++)
-        /* create a omneon status thread */
-        g_thread_join(app->players.item[i].thread);
+        player_stop(app, i);
 
     /* destroy lock */
     pthread_mutex_destroy(&app->players.lock);