From 102ba23f77650bbeaceca98c3a6539f1e637b4f7 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 16 Dec 2011 20:15:21 +0000 Subject: Support presets in Gtk UI. git-svn-id: http://svn.drobilla.net/lad/trunk/jalv@3878 a436a847-0d15-0410-975c-d299462d15a1 --- src/jalv_gtk2.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) (limited to 'src/jalv_gtk2.c') diff --git a/src/jalv_gtk2.c b/src/jalv_gtk2.c index fae3f6a..c56bab1 100644 --- a/src/jalv_gtk2.c +++ b/src/jalv_gtk2.c @@ -79,13 +79,55 @@ on_save_activate(GtkWidget* widget, void* ptr) } static void -on_quit_activate(GtkWidget* widget, - gpointer data) +on_quit_activate(GtkWidget* widget, gpointer data) { GtkWidget* window = (GtkWidget*)data; gtk_widget_destroy(window); } +typedef struct { + Jalv* jalv; + LilvNode* preset; +} PresetRecord; + +static void +on_preset_activate(GtkWidget* widget, gpointer data) +{ + PresetRecord* record = (PresetRecord*)data; + jalv_apply_preset(record->jalv, record->preset); +} + +static void +on_preset_destroy(gpointer data, GClosure* closure) +{ + PresetRecord* record = (PresetRecord*)data; + lilv_node_free(record->preset); + free(record); +} + +static int +add_preset_to_menu(Jalv* jalv, + const LilvNode* node, + const LilvNode* title, + void* data) +{ + GtkWidget* presets_menu = GTK_WIDGET(data); + const char* label = lilv_node_as_string(title); + GtkWidget* item = gtk_menu_item_new_with_label(label); + + PresetRecord* record = (PresetRecord*)malloc(sizeof(PresetRecord)); + record->jalv = jalv; + record->preset = lilv_node_duplicate(node); + + g_signal_connect_data(G_OBJECT(item), "activate", + G_CALLBACK(on_preset_activate), + record, on_preset_destroy, + 0); + + gtk_menu_shell_append(GTK_MENU_SHELL(presets_menu), item); + return 0; +} + int jalv_ui_resize(Jalv* jalv, int width, int height) { @@ -124,6 +166,14 @@ jalv_open_ui(Jalv* jalv, gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), save); gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), quit); gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file); + + GtkWidget* presets = gtk_menu_item_new_with_mnemonic("_Presets"); + GtkWidget* presets_menu = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(presets), presets_menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), presets); + + jalv_load_presets(jalv, add_preset_to_menu, presets_menu); + gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(quit), "activate", -- cgit v1.2.1