X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Finstance.c;h=20066dd721881a267c0e4cf2f04735dae1a360d9;hb=cd24eeef6c4d1ad70ff4882ba9566e27d4dc8e0f;hp=05400b3574e2def9c5ae9a06fc98cf94502bef05;hpb=07c6d84a23c9043e2334987fc8533f68e5e23183;p=melted_gui diff --git a/src/instance.c b/src/instance.c index 05400b3..20066dd 100644 --- a/src/instance.c +++ b/src/instance.c @@ -38,62 +38,229 @@ #include "timecode.h" #include "player.h" #include "library.h" +#include "playlist.h" 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; }; @@ -154,34 +321,31 @@ void instance_init(instance_t* app) int i; pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - gtk_signal_connect( GTK_OBJECT( app->window ), "delete-event", GTK_SIGNAL_FUNC(on_main_window_delete_event), 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); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&app->players.lock, &attr); pthread_mutex_init(&app->playlist.lock, &attr); pthread_mutex_init(&app->library.lock, &attr); @@ -196,30 +360,11 @@ void instance_init(instance_t* app) gtk_signal_connect(GTK_OBJECT(app->buttons[i]), "clicked", GTK_SIGNAL_FUNC( on_button_click), app ); - /* load library */ + /* init library */ library_init(app); -#if 0 - /* setup drag n drop source/target */ - static GtkTargetEntry drag_targets[] = { { (char*) "application/playlist_item_t", 0, 0 } }; - - gtk_drag_source_set(app->library_grid, GDK_BUTTON1_MASK, - drag_targets, 1, (GdkDragAction)(GDK_ACTION_COPY)); - - gtk_drag_source_set(app->playlist_grid, GDK_BUTTON1_MASK, - drag_targets, 1, (GdkDragAction)(GDK_ACTION_COPY | GDK_ACTION_MOVE)); - - gtk_drag_dest_set(app->playlist_grid, (GtkDestDefaults)(GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP), - drag_targets, 1, (GdkDragAction)(GDK_ACTION_COPY | GDK_ACTION_MOVE)); - - g_signal_connect (app->library_grid, "drag_data_get", G_CALLBACK(library_grid_drag_data_get_cb), app); - g_signal_connect (app->playlist_grid, "drag_data_get", G_CALLBACK(playlist_grid_drag_data_get_cb), app); - g_signal_connect (app->library_grid, "drag_begin", G_CALLBACK(library_grid_drag_begin_cb), app); - g_signal_connect (app->playlist_grid, "drag_begin", G_CALLBACK(playlist_grid_drag_begin_cb), app); - g_signal_connect (app->playlist_grid, "drag_data_received", G_CALLBACK (playlist_grid_drag_data_received), app); - g_signal_connect (app->playlist_grid, "drag_data_delete", G_CALLBACK (playlist_grid_drag_data_delete), app); - g_signal_connect (app->playlist_grid, "drag_motion", G_CALLBACK (playlist_grid_drag_motion), app); -#endif + /* init playlist */ + playlist_init(app); }; void instance_release(instance_t* app) @@ -228,23 +373,22 @@ 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++) player_stop(app, i); + /* release laylist */ + playlist_release(app); + + /* release library */ + library_release(app); + /* destroy lock */ pthread_mutex_destroy(&app->players.lock); /* destroy lock */ pthread_mutex_destroy(&app->playlist.lock); -#if 0 - /* load library */ - omnplay_library_save(app); -#endif - /* destroy library lock */ pthread_mutex_destroy(&app->library.lock); };