playlist basic operations
[melted_gui] / src / instance.c
index 2bd06b0..20066dd 100644 (file)
 
 GtkTargetEntry drag_targets[] = { { (char*) "application/playlist_item_t", 0, 0 } };
 
-gboolean instance_button_click(instance_t* app, control_buttons_t button)
+static gboolean library_tree_key(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+    instance_t* app = (instance_t*)data;
+
+    switch(event->keyval)
+    {
+        case GDK_C:
+        case GDK_c:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                int count;
+                playlist_item_t* items;
+
+                items = library_get_selected_items(app, &count);
+
+                if(items)
+                {
+                    int i;
+
+                    for(i = 0; i < count; i++)
+                        app->clipboard.item[i] = items[i];
+
+                    app->clipboard.count = count;
+                };
+
+                return TRUE;
+            };
+            break;
+        case GDK_V:
+        case GDK_v:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                g_warning("CTRL+v\n");
+                return TRUE;
+            };
+            break;
+        case GDK_X:
+        case GDK_x:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                g_warning("CTRL+x\n");
+                return TRUE;
+            };
+            break;
+        case GDK_KEY_BackSpace:
+//            omnplay_library_add(app, 0);
+            return TRUE;
+        case GDK_KEY_F5:
+//            omnplay_library_refresh(app);
+            return TRUE;
+    };
+
+    return FALSE;
+};
+
+static gboolean playlist_grid_key(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+    instance_t* app = (instance_t*)data;
+
+    switch(event->keyval)
+    {
+        case GDK_C:
+        case GDK_c:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                playlist_item_copy(app);
+                return TRUE;
+            };
+            break;
+        case GDK_V:
+        case GDK_v:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                playlist_item_paste(app, 0);
+                return TRUE;
+            };
+            break;
+        case GDK_X:
+        case GDK_x:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                playlist_item_copy(app);
+                playlist_delete_selected_items(app);
+                return TRUE;
+            };
+            break;
+        case GDK_S:
+        case GDK_s:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+//                omnplay_playlist_save(app);
+                return TRUE;
+            };
+            break;
+        case GDK_O:
+        case GDK_o:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+//                omnplay_playlist_load(app);
+                return TRUE;
+            };
+            break;
+        case GDK_KEY_uparrow:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                playlist_item_swap(app, -1);
+                return TRUE;
+            };
+            break;
+        case GDK_KEY_downarrow:
+            if(event->state & GDK_CONTROL_MASK)
+            {
+                playlist_item_swap(app, -1);
+                return TRUE;
+            };
+            break;
+        case GDK_KEY_space:
+//            omnplay_ctl(app, BUTTON_PLAYER_PLAY);
+            return TRUE;
+        case GDK_KEY_Return:
+//            omnplay_ctl(app, BUTTON_PLAYER_CUE);
+            return TRUE;
+        case GDK_KEY_Insert:
+//            omnplay_playlist_item_add(app, 0);
+            return TRUE;
+        case GDK_KEY_Delete:
+            playlist_delete_selected_items(app);
+            return TRUE;
+        case GDK_E:
+        case GDK_e:
+//            omnplay_playlist_item_edit(app);
+            return TRUE;
+    };
+
+    return FALSE;
+};
+
+static gboolean library_tree_button(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+//    g_warning("on_library_grid_button: event->button=%d, event->type=%d", event->button, event->type);
+
+    if(event->button==1 && event->type==GDK_2BUTTON_PRESS)
+    {
+//        omnplay_library_add((omnplay_instance_t* )data, 0);
+        return TRUE;
+    };
+
+    return FALSE;
+};
+
+static gboolean playlist_grid_button(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+    instance_t* app = (instance_t*)data;
+
+//    g_warning("on_playlist_grid_button");
+
+    if(event->button==1 && event->type==GDK_2BUTTON_PRESS)
+    {
+//        omnplay_playlist_item_edit(app);
+        return TRUE;
+    };
+
+    return FALSE;
+};
+
+static 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);
+            playlist_item_add(app, 0);
             break;
         case BUTTON_PLAYLIST_ITEM_DEL:
-            omnplay_playlist_item_del(app);
+            playlist_delete_selected_items(app);
             break;
         case BUTTON_PLAYLIST_ITEM_EDIT:
-            omnplay_playlist_item_edit(app);
+            playlist_item_edit(app);
             break;
         case BUTTON_PLAYLIST_LOAD:
-            omnplay_playlist_load(app);
+            playlist_load(app);
             break;
         case BUTTON_PLAYLIST_SAVE:
-            omnplay_playlist_save(app);
+            playlist_save(app);
             break;
         case BUTTON_PLAYLIST_BLOCK_SINGLE:
         case BUTTON_PLAYLIST_BLOCK_LOOP:
-            omnplay_playlist_block(app, button);
+            playlist_block(app, (BUTTON_PLAYLIST_BLOCK_LOOP == button)?1:0);
             break;
         case BUTTON_PLAYLIST_ITEM_UP:
-            omnplay_playlist_item_swap(app, -1);
+            playlist_item_swap(app, -1);
             break;
         case BUTTON_PLAYLIST_ITEM_DOWN:
-            omnplay_playlist_item_swap(app, +1);
+            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);
+//            omnplay_ctl(app, button);
             break;
         case BUTTON_LIBRARY_ADD:
-            omnplay_library_add(app, 0);
+//            omnplay_library_add(app, 0);
+            playlist_item_add_from_library(app, 0);
             break;
         case BUTTON_LIBRARY_REFRESH:
-            omnplay_library_refresh(app);
+//            omnplay_library_refresh(app);
             break;
         case BUTTON_LIBRARY_FIND:
-            omnplay_library_search(app, 0);
+//            omnplay_library_search(app, 0);
             break;
         case BUTTON_LIBRARY_FIND_NEXT:
-            omnplay_library_search(app, 1);
+//            omnplay_library_search(app, 1);
             break;
         case BUTTON_PLAYLIST_RELINK:
-            omnplay_playlist_relink(app);
+//            omnplay_playlist_relink(app);
             break;
+        default:
+            g_warning("instance_button_click: unknow button clicked");
     };
-#endif
     return TRUE;
 };
 
@@ -161,23 +327,21 @@ void instance_init(instance_t* app)
     gtk_signal_connect( GTK_OBJECT( app->window ), "destroy",
         GTK_SIGNAL_FUNC(on_main_window_destroy), app);
 
-#if 0
     gtk_widget_add_events(app->playlist_grid, GDK_BUTTON_PRESS_MASK);
     gtk_widget_add_events(app->playlist_grid, GDK_KEY_PRESS_MASK);
     gtk_signal_connect(GTK_OBJECT(app->playlist_grid), "key-press-event",
-        GTK_SIGNAL_FUNC(on_playlist_grid_key), app);
+        GTK_SIGNAL_FUNC(playlist_grid_key), app);
 
-    gtk_widget_add_events(app->library_grid, GDK_BUTTON_PRESS_MASK);
-    gtk_widget_add_events(app->library_grid, GDK_KEY_PRESS_MASK);
-    gtk_signal_connect(GTK_OBJECT(app->library_grid), "key-press-event",
-        GTK_SIGNAL_FUNC(on_library_grid_key), app);
+    gtk_widget_add_events(app->library_tree, GDK_BUTTON_PRESS_MASK);
+    gtk_widget_add_events(app->library_tree, GDK_KEY_PRESS_MASK);
+    gtk_signal_connect(GTK_OBJECT(app->library_tree), "key-press-event",
+        GTK_SIGNAL_FUNC(library_tree_key), app);
 
     gtk_signal_connect(GTK_OBJECT(app->playlist_grid), "button-press-event",
-        GTK_SIGNAL_FUNC(on_playlist_grid_button), app);
+        GTK_SIGNAL_FUNC(playlist_grid_button), app);
 
-    gtk_signal_connect(GTK_OBJECT(app->library_grid), "button-press-event",
-        GTK_SIGNAL_FUNC(on_library_grid_button), app);
-#endif
+    gtk_signal_connect(GTK_OBJECT(app->library_tree), "button-press-event",
+        GTK_SIGNAL_FUNC(library_tree_button), app);
 
     /* create lock */
     pthread_mutexattr_init(&attr);