[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