enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h
[ardour.git] / gtk2_ardour / export_preset_selector.cc
index dab10e335d7c5680d16816cd832b572430178726..018beae39ac04bfb2511d14adde015cab8d23ef8 100644 (file)
@@ -22,7 +22,7 @@
 
 #include "ardour/export_preset.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 ExportPresetSelector::ExportPresetSelector () :
   label (_("Preset"), Gtk::ALIGN_LEFT),
@@ -31,6 +31,7 @@ ExportPresetSelector::ExportPresetSelector () :
   new_button (Gtk::Stock::NEW)
 {
        list = Gtk::ListStore::create (cols);
+        list->set_sort_column (cols.label, Gtk::SORT_ASCENDING);
        entry.set_model (list);
        entry.set_text_column (cols.label);
 
@@ -40,18 +41,13 @@ ExportPresetSelector::ExportPresetSelector () :
        pack_start (remove_button, false, false, 6);
        pack_start (new_button, false, false, 0);
 
-       entry.set_name ("PaddedButton");
-       save_button.set_name ("PaddedButton");
-       remove_button.set_name ("PaddedButton");
-       new_button.set_name ("PaddedButton");
-
        save_button.set_sensitive (false);
        remove_button.set_sensitive (false);
        new_button.set_sensitive (false);
 
        select_connection = entry.signal_changed().connect (sigc::mem_fun (*this, &ExportPresetSelector::update_selection));
        save_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportPresetSelector::save_current));
-       new_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportPresetSelector::save_current));
+       new_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportPresetSelector::create_new));
        remove_button.signal_clicked().connect (sigc::mem_fun (*this, &ExportPresetSelector::remove_current));
 
        show_all_children ();
@@ -75,7 +71,7 @@ ExportPresetSelector::sync_with_manager ()
        for (PresetList::const_iterator it = presets.begin(); it != presets.end(); ++it) {
                tree_it = list->append();
                tree_it->set_value (cols.preset, *it);
-               tree_it->set_value (cols.label, Glib::ustring ((*it)->name()));
+               tree_it->set_value (cols.label, std::string ((*it)->name()));
 
                if (*it == current) {
                        select_connection.block (true);
@@ -89,7 +85,7 @@ void
 ExportPresetSelector::update_selection ()
 {
        Gtk::ListStore::iterator it = entry.get_active ();
-       Glib::ustring text = entry.get_entry()->get_text();
+       std::string text = entry.get_entry()->get_text();
        bool preset_name_exists = false;
 
        for (PresetList::const_iterator it = profile_manager->get_presets().begin(); it != profile_manager->get_presets().end(); ++it) {
@@ -122,11 +118,21 @@ ExportPresetSelector::update_selection ()
                }
        }
 
-       save_button.set_sensitive (current);
-       remove_button.set_sensitive (current);
+       save_button.set_sensitive (current != 0);
+       remove_button.set_sensitive (current != 0);
        new_button.set_sensitive (!current && !text.empty() && !preset_name_exists);
 }
 
+void
+ExportPresetSelector::create_new ()
+{
+       if (!profile_manager) { return; }
+
+       previous = current = profile_manager->new_preset (entry.get_entry()->get_text());
+       sync_with_manager ();
+       update_selection (); // Update preset widget states
+}
+
 void
 ExportPresetSelector::save_current ()
 {
@@ -142,6 +148,18 @@ ExportPresetSelector::remove_current ()
 {
        if (!profile_manager) { return; }
 
+       Gtk::MessageDialog dialog (_("Do you really want to remove this preset?"),
+                       false,
+                       Gtk::MESSAGE_QUESTION,
+                       Gtk::BUTTONS_YES_NO);
+
+       if (Gtk::RESPONSE_YES != dialog.run ()) {
+               /* User has selected "no" or closed the dialog, better
+                * abort
+                */
+               return;
+       }
+
        profile_manager->remove_preset();
        entry.get_entry()->set_text ("");
        sync_with_manager ();