[SCM] calf/master: + Preset GUI: improved preset saving (uses GtkComboBoxEntry, asks for confirmation before overwriting existing presets)
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:37:13 UTC 2013
The following commit has been merged in the master branch:
commit 7f065b4bb76cb1e5fec33ac921b8b2e245c5c193
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date: Thu May 15 22:23:27 2008 +0000
+ Preset GUI: improved preset saving (uses GtkComboBoxEntry, asks for confirmation before overwriting existing presets)
git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@179 78b06b96-2940-0410-b7fc-879d825d01d8
diff --git a/calf.glade b/calf.glade
index 7dc2fc9..9960a40 100644
--- a/calf.glade
+++ b/calf.glade
@@ -3,16 +3,14 @@
<glade-interface>
-<widget class="GtkWindow" id="store_preset">
- <property name="border_width">10</property>
+<widget class="GtkDialog" id="store_preset">
<property name="visible">True</property>
<property name="title" translatable="yes">Store preset</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">True</property>
+ <property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
- <property name="icon_name">gtk-add</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
@@ -20,21 +18,22 @@
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
- <child>
- <widget class="GtkVBox" id="vbox1">
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">10</property>
+ <property name="spacing">0</property>
<child>
- <widget class="GtkHBox" id="hbox1">
+ <widget class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="label1">
+ <widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes"><b>_Preset name: </b></property>
<property name="use_underline">True</property>
@@ -59,16 +58,11 @@
</child>
<child>
- <widget class="GtkEntry" id="preset_name">
+ <widget class="GtkComboBoxEntry" id="preset_name">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
+ <property name="add_tearoffs">False</property>
<property name="has_frame">True</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">True</property>
+ <property name="focus_on_click">True</property>
</widget>
<packing>
<property name="padding">0</property>
@@ -79,20 +73,18 @@
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox1">
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
- <property name="spacing">6</property>
<child>
- <widget class="GtkButton" id="cancel_button">
- <property agent="glademm" name="cxx_visibility">public</property>
+ <widget class="GtkButton" id="cancelbutton1">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
@@ -100,31 +92,34 @@
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
</widget>
</child>
<child>
- <widget class="GtkButton" id="ok_button">
- <property agent="glademm" name="cxx_visibility">public</property>
+ <widget class="GtkButton" id="okbutton1">
<property name="visible">True</property>
<property name="can_default">True</property>
- <property name="has_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
+
</widget>
</child>
</widget>
+
</glade-interface>
diff --git a/src/preset.cpp b/src/preset.cpp
index cb97607..405618e 100644
--- a/src/preset.cpp
+++ b/src/preset.cpp
@@ -266,5 +266,13 @@ void preset_list::get_for_plugin(preset_vector &vec, const char *plugin)
void preset_list::add(const plugin_preset &sp)
{
+ for (unsigned int i = 0; i < presets.size(); i++)
+ {
+ if (presets[i].plugin == sp.plugin && presets[i].name == sp.name)
+ {
+ presets[i] = sp;
+ return;
+ }
+ }
presets.push_back(sp);
}
diff --git a/src/preset_gui.cpp b/src/preset_gui.cpp
index d63a727..27a8cac 100644
--- a/src/preset_gui.cpp
+++ b/src/preset_gui.cpp
@@ -39,34 +39,6 @@ void store_preset_dlg_destroy(GtkWindow *window, gpointer data)
store_preset_dlg = NULL;
}
-void store_preset_ok(GtkAction *action, plugin_gui *gui)
-{
- plugin_preset sp;
- sp.name = gtk_entry_get_text(GTK_ENTRY(glade_xml_get_widget(store_preset_xml, "preset_name")));
- sp.bank = 0;
- sp.program = 0;
- sp.plugin = gui->effect_name;
- sp.get_from(gui->plugin);
- preset_list tmp;
- try {
- tmp.load(tmp.get_preset_filename().c_str());
- }
- catch(...)
- {
- tmp = global_presets;
- }
- tmp.add(sp);
- global_presets = tmp;
- global_presets.save(tmp.get_preset_filename().c_str());
- gtk_widget_destroy(store_preset_dlg);
- gui->window->main->refresh_all_presets();
-}
-
-void store_preset_cancel(GtkAction *action, plugin_gui *gui)
-{
- gtk_widget_destroy(store_preset_dlg);
-}
-
void synth::store_preset(GtkWindow *toplevel, plugin_gui *gui)
{
if (store_preset_dlg)
@@ -77,9 +49,60 @@ void synth::store_preset(GtkWindow *toplevel, plugin_gui *gui)
store_preset_xml = glade_xml_new(PKGLIBDIR "/calf.glade", NULL, NULL);
store_preset_dlg = glade_xml_get_widget(store_preset_xml, "store_preset");
gtk_signal_connect(GTK_OBJECT(store_preset_dlg), "destroy", G_CALLBACK(store_preset_dlg_destroy), NULL);
- gtk_signal_connect(GTK_OBJECT(glade_xml_get_widget(store_preset_xml, "ok_button")), "clicked", G_CALLBACK(store_preset_ok), gui);
- gtk_signal_connect(GTK_OBJECT(glade_xml_get_widget(store_preset_xml, "cancel_button")), "clicked", G_CALLBACK(store_preset_cancel), gui);
- gtk_window_set_transient_for(GTK_WINDOW(store_preset_dlg), toplevel);
+ GtkWidget *preset_name_combo = glade_xml_get_widget(store_preset_xml, "preset_name");
+ GtkTreeModel *model = GTK_TREE_MODEL(gtk_list_store_new(1, G_TYPE_STRING));
+ gtk_combo_box_set_model(GTK_COMBO_BOX(preset_name_combo), model);
+ gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(preset_name_combo), 0);
+ for(preset_vector::const_iterator i = global_presets.presets.begin(); i != global_presets.presets.end(); i++)
+ {
+ if (i->plugin != gui->effect_name)
+ continue;
+ gtk_combo_box_append_text(GTK_COMBO_BOX(preset_name_combo), i->name.c_str());
+ }
+ int response = gtk_dialog_run(GTK_DIALOG(store_preset_dlg));
+
+ plugin_preset sp;
+ sp.name = gtk_combo_box_get_active_text(GTK_COMBO_BOX(preset_name_combo));
+ sp.bank = 0;
+ sp.program = 0;
+ sp.plugin = gui->effect_name;
+
+ gtk_widget_destroy(store_preset_dlg);
+ if (response == GTK_RESPONSE_OK)
+ {
+ sp.get_from(gui->plugin);
+ preset_list tmp;
+ try {
+ tmp.load(tmp.get_preset_filename().c_str());
+ }
+ catch(...)
+ {
+ tmp = global_presets;
+ }
+ bool found = false;
+ for(preset_vector::const_iterator i = tmp.presets.begin(); i != tmp.presets.end(); i++)
+ {
+ if (i->plugin == gui->effect_name && i->name == sp.name)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ {
+ GtkWidget *dialog = gtk_message_dialog_new(gui->window->toplevel, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL,
+ "Preset '%s' already exists. Overwrite?", sp.name.c_str());
+ int response = gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+ if (response != GTK_RESPONSE_OK)
+ return;
+ }
+ tmp.add(sp);
+ global_presets = tmp;
+ global_presets.save(tmp.get_preset_filename().c_str());
+ gui->window->main->refresh_all_presets();
+ }
+ //gtk_window_set_transient_for(GTK_WINDOW(store_preset_dlg), toplevel);
}
void synth::activate_preset(GtkAction *action, activate_preset_params *params)
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list