aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv_gtk2.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-12-18 00:56:34 +0000
committerDavid Robillard <d@drobilla.net>2011-12-18 00:56:34 +0000
commite5a90b60c1cc62c782ac6b63025696dda95dae38 (patch)
treeacc64fc1894c57ff3df14759abebd831ea77cbbe /src/jalv_gtk2.c
parent102ba23f77650bbeaceca98c3a6539f1e637b4f7 (diff)
downloadjalv-e5a90b60c1cc62c782ac6b63025696dda95dae38.tar.gz
jalv-e5a90b60c1cc62c782ac6b63025696dda95dae38.tar.bz2
jalv-e5a90b60c1cc62c782ac6b63025696dda95dae38.zip
Preset saving.
git-svn-id: http://svn.drobilla.net/lad/trunk/jalv@3880 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/jalv_gtk2.c')
-rw-r--r--src/jalv_gtk2.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/jalv_gtk2.c b/src/jalv_gtk2.c
index c56bab1..029376a 100644
--- a/src/jalv_gtk2.c
+++ b/src/jalv_gtk2.c
@@ -60,7 +60,7 @@ on_save_activate(GtkWidget* widget, void* ptr)
Jalv* jalv = (Jalv*)ptr;
GtkWidget* dialog = gtk_file_chooser_dialog_new(
"Save State",
- NULL, // FIXME: parent
+ jalv->window,
GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
@@ -91,6 +91,36 @@ typedef struct {
} PresetRecord;
static void
+on_save_preset_activate(GtkWidget* widget, void* ptr)
+{
+ Jalv* jalv = (Jalv*)ptr;
+
+ GtkDialog* dialog = GTK_DIALOG(gtk_dialog_new_with_buttons(
+ "Save Preset", jalv->window,
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL));
+
+ GtkWidget* content = gtk_dialog_get_content_area(dialog);
+ GtkWidget* hbox = gtk_hbox_new(FALSE, 0);
+ GtkWidget* entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Label:"), FALSE, TRUE, 6);
+ gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, TRUE, 6);
+ gtk_box_pack_start(GTK_BOX(content), hbox, TRUE, TRUE, 12);
+
+ gtk_widget_show_all(GTK_WIDGET(dialog));
+ gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+ gtk_dialog_set_default_response(dialog, GTK_RESPONSE_ACCEPT);
+ if (gtk_dialog_run(dialog) == GTK_RESPONSE_ACCEPT) {
+ const char* label_str = gtk_entry_get_text(GTK_ENTRY(entry));
+ jalv_save_preset(jalv, label_str);
+ }
+
+ gtk_widget_destroy(GTK_WIDGET(dialog));
+}
+
+static void
on_preset_activate(GtkWidget* widget, gpointer data)
{
PresetRecord* record = (PresetRecord*)data;
@@ -145,6 +175,7 @@ jalv_open_ui(Jalv* jalv,
SuilInstance* instance)
{
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ jalv->window = window;
g_signal_connect(window, "destroy",
G_CALLBACK(on_window_destroy), NULL);
@@ -169,7 +200,11 @@ jalv_open_ui(Jalv* jalv,
GtkWidget* presets = gtk_menu_item_new_with_mnemonic("_Presets");
GtkWidget* presets_menu = gtk_menu_new();
+ GtkWidget* save_preset = gtk_menu_item_new_with_mnemonic("_Save Preset...");
gtk_menu_item_set_submenu(GTK_MENU_ITEM(presets), presets_menu);
+ gtk_menu_shell_append(GTK_MENU_SHELL(presets_menu), save_preset);
+ gtk_menu_shell_append(GTK_MENU_SHELL(presets_menu),
+ gtk_separator_menu_item_new());
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), presets);
jalv_load_presets(jalv, add_preset_to_menu, presets_menu);
@@ -182,6 +217,9 @@ jalv_open_ui(Jalv* jalv,
g_signal_connect(G_OBJECT(save), "activate",
G_CALLBACK(on_save_activate), jalv);
+ g_signal_connect(G_OBJECT(save_preset), "activate",
+ G_CALLBACK(on_save_preset_activate), jalv);
+
GtkWidget* alignment = gtk_alignment_new(0.5, 0.5, 1.0, 1.0);
gtk_box_pack_start(GTK_BOX(vbox), alignment, TRUE, TRUE, 0);