Properly create new presets, i.e. without duplicate id's on save-after-rename
authorSakari Bergen <sakari.bergen@beatwaves.net>
Sat, 12 Mar 2011 21:28:58 +0000 (21:28 +0000)
committerSakari Bergen <sakari.bergen@beatwaves.net>
Sat, 12 Mar 2011 21:28:58 +0000 (21:28 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9132 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/export_preset_selector.cc
gtk2_ardour/export_preset_selector.h
libs/ardour/ardour/export_profile_manager.h
libs/ardour/export_profile_manager.cc

index 551dbf58ad77ba2872119c1963c10c3a68f359ae..c0cf53036c3c40f32ee7e1dbfe1870244e817829 100644 (file)
@@ -51,7 +51,7 @@ ExportPresetSelector::ExportPresetSelector () :
 
        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 ();
@@ -127,6 +127,16 @@ ExportPresetSelector::update_selection ()
        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 ()
 {
index 4fd2dde3da56dd1c987ab395667c830ca91c69e1..73211cb523610fbbdde77e8fa126fa7c5dbd3d59 100644 (file)
@@ -48,6 +48,7 @@ class ExportPresetSelector : public Gtk::HBox
 
        void sync_with_manager ();
        void update_selection ();
+       void create_new ();
        void save_current ();
        void remove_current ();
 
index dc4b6b006016559a6f0a661fe8abf115ff374a0e..8e57b9e9d251657c0bd27da387de9fb80b836917 100644 (file)
@@ -66,6 +66,7 @@ class ExportProfileManager
 
        PresetList const & get_presets () { return preset_list; }
        bool load_preset (PresetPtr preset);
+       PresetPtr new_preset (std::string const & name);
        PresetPtr save_preset (std::string const & name);
        void remove_preset ();
 
@@ -79,6 +80,7 @@ class ExportProfileManager
        HandlerPtr  handler;
        Session &   session;
 
+       std::string preset_filename (std::string const & preset_name);
        void load_presets ();
        void load_preset_from_disk (PBD::sys::path const & path);
 
index cec6d0fefe7f003637f6fcb875676eb9bb09ac8d..dc7e1f430802b214b9c323a84995d3b798990947 100644 (file)
@@ -181,11 +181,27 @@ ExportProfileManager::load_presets ()
        }
 }
 
+std::string
+ExportProfileManager::preset_filename (std::string const & preset_name)
+{
+       string safe_name = legalize_for_path (preset_name);
+       return export_config_dir.to_string() + "/" + safe_name + export_preset_suffix;
+}
+
+ExportProfileManager::PresetPtr
+ExportProfileManager::new_preset (string const & name)
+{
+       // Generate new ID and do regular save
+       string filename = preset_filename (name);
+       current_preset.reset (new ExportPreset (filename, session));
+       preset_list.push_back (current_preset);
+       return save_preset (name);
+}
+
 ExportProfileManager::PresetPtr
 ExportProfileManager::save_preset (string const & name)
 {
-        string safe_name = legalize_for_path (name);
-       string filename = export_config_dir.to_string() + "/" + safe_name + export_preset_suffix;
+       string filename = preset_filename (name);
 
        if (!current_preset) {
                current_preset.reset (new ExportPreset (filename, session));