X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_preset_selector.cc;h=3898916bc05899d767ec871c5a8accf20ad62f97;hb=b4d7120a58cb3fc2a49542acab868e0eb0790864;hp=fbbc215fb0c1d8d5d3151f78c87a6a9f32993a7f;hpb=e0aaed6d65f160c328cb8b56d7c6552ee15d65e2;p=ardour.git diff --git a/gtk2_ardour/export_preset_selector.cc b/gtk2_ardour/export_preset_selector.cc index fbbc215fb0..3898916bc0 100644 --- a/gtk2_ardour/export_preset_selector.cc +++ b/gtk2_ardour/export_preset_selector.cc @@ -31,29 +31,30 @@ 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 +69,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 +90,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,14 +107,14 @@ 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, this should not make any changes in the profile manager if (previous && !text.compare (previous->name())) { current = previous; @@ -121,17 +122,27 @@ ExportPresetSelector::update_selection () current.reset (); } } - + save_button.set_sensitive (current); remove_button.set_sensitive (current); 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 @@ -141,7 +152,7 @@ void ExportPresetSelector::remove_current () { if (!profile_manager) { return; } - + profile_manager->remove_preset(); entry.get_entry()->set_text (""); sync_with_manager ();