X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_preset_selector.cc;h=7f5fac72d5cb347f0eb266914eceace2af235b90;hb=d7aa102ce5e4fd7ea6b7e4683fc5a01ef5e3387b;hp=69d3aa7111c145964c8028571fc291d07251d564;hpb=ccc3461a580324055684f598d439209fe951b574;p=ardour.git diff --git a/gtk2_ardour/export_preset_selector.cc b/gtk2_ardour/export_preset_selector.cc index 69d3aa7111..7f5fac72d5 100644 --- a/gtk2_ardour/export_preset_selector.cc +++ b/gtk2_ardour/export_preset_selector.cc @@ -18,11 +18,14 @@ */ -#include "export_preset_selector.h" +#include +#include + +#include "ardour/export_preset.h" -#include +#include "export_preset_selector.h" -#include "i18n.h" +#include "pbd/i18n.h" ExportPresetSelector::ExportPresetSelector () : label (_("Preset"), Gtk::ALIGN_LEFT), @@ -31,29 +34,25 @@ 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); - + pack_start (label, false, false, 0); pack_start (entry, true, true, 6); pack_start (save_button, false, false, 0); 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 (); } @@ -68,15 +67,15 @@ void ExportPresetSelector::sync_with_manager () { list->clear(); - + PresetList const & presets = profile_manager->get_presets(); Gtk::ListStore::iterator tree_it; - + 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); entry.set_active (tree_it); @@ -89,15 +88,15 @@ 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) { if (!(*it)->name().compare (text)) { preset_name_exists = true; } } - + if (list->iter_is_valid (it)) { - + previous = current = it->get_value (cols.preset); if (!profile_manager->load_preset (current)) { Gtk::MessageDialog dialog (_("The selected preset did not load successfully!\nPerhaps it references a format that has been removed?"), @@ -106,36 +105,42 @@ ExportPresetSelector::update_selection () } sync_with_manager (); CriticalSelectionChanged(); - + /* Make an edit, so that signal changed will be emitted on re-selection */ - + select_connection.block (true); entry.get_entry()->set_text (""); entry.get_entry()->set_text (text); select_connection.block (false); - - } else { // Text has been edited + + } else { // Text has been edited, this should not make any changes in the profile manager if (previous && !text.compare (previous->name())) { - current = previous; - } else { current.reset (); - profile_manager->load_preset (current); - CriticalSelectionChanged(); } } - - 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 () { if (!profile_manager) { return; } - + previous = current = profile_manager->save_preset (entry.get_entry()->get_text()); sync_with_manager (); update_selection (); // Update preset widget states @@ -145,7 +150,19 @@ void 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 ();