aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv_gtk2.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-12-16 20:15:21 +0000
committerDavid Robillard <d@drobilla.net>2011-12-16 20:15:21 +0000
commit102ba23f77650bbeaceca98c3a6539f1e637b4f7 (patch)
tree88d7032347b31ab8e79e992e2b5ab0c002aa6ccd /src/jalv_gtk2.c
parent1849c5d7f96db8f2dfed04208e0c49685c50d4a4 (diff)
downloadjalv-102ba23f77650bbeaceca98c3a6539f1e637b4f7.tar.gz
jalv-102ba23f77650bbeaceca98c3a6539f1e637b4f7.tar.bz2
jalv-102ba23f77650bbeaceca98c3a6539f1e637b4f7.zip
Support presets in Gtk UI.
git-svn-id: http://svn.drobilla.net/lad/trunk/jalv@3878 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/jalv_gtk2.c')
-rw-r--r--src/jalv_gtk2.c54
1 files changed, 52 insertions, 2 deletions
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",