diff --git a/gtk2_ardour/mixer_snapshots.cc b/gtk2_ardour/mixer_snapshots.cc index 5b48d02aea..4b83573c87 100644 --- a/gtk2_ardour/mixer_snapshots.cc +++ b/gtk2_ardour/mixer_snapshots.cc @@ -158,6 +158,25 @@ void MixerSnapshotList::set_session (Session* s) } } +bool MixerSnapshotList::prompt_delete(const std::string& name) +{ + const string prompt = string_compose( + _("Do you really want to overwrite snapshot \"%1\" ?\n(this cannot be undone)"), + name + ); + + vector choices; + choices.push_back(_("No, do nothing.")); + choices.push_back(_("Yes, overwrite it.")); + + ArdourWidgets::Choice prompter (_("Overwrite Snapshot"), prompt, choices); + + if(prompter.run() == 1) { + return true; + } + return false; +} + void MixerSnapshotList::new_snapshot() { ArdourWidgets::Prompter prompter (true); prompter.set_name ("Prompter"); @@ -166,11 +185,19 @@ void MixerSnapshotList::new_snapshot() { prompter.set_initial_text (_session->name()); prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); - string name; if (prompter.run() == RESPONSE_ACCEPT) { prompter.get_result(name); if (name.length()) { + + TreeModel::const_iterator iter = get_row_by_name(name); + if(iter) { + const string row_name = (*iter)[_columns.name]; + if(prompt_delete(row_name)) { + remove_row(iter); + } + } + RouteList rl = PublicEditor::instance().get_selection().tracks.routelist(); _session->snapshot_manager().create_snapshot(name, rl, _global); redisplay(); @@ -587,7 +614,13 @@ void MixerSnapshotList::new_row_from_snapshot(MixerSnapshot* snapshot) TreeModel::Row row = *(_snapshot_model->append()); - row[_columns.name] = snapshot->get_label(); + string snapshot_name = snapshot->get_label(); + if (snapshot_name.length() > 45) { + snapshot_name = snapshot_name.substr(0, 45); + snapshot_name.append("..."); + } + + row[_columns.name] = snapshot_name; row[_columns.snapshot] = snapshot; //additional information only for global snapshots diff --git a/gtk2_ardour/mixer_snapshots.h b/gtk2_ardour/mixer_snapshots.h index ff826732e1..27a54b86f0 100644 --- a/gtk2_ardour/mixer_snapshots.h +++ b/gtk2_ardour/mixer_snapshots.h @@ -111,6 +111,7 @@ private: Gtk::TreeModel::const_iterator get_row_by_name(const std::string&); bool remove_row(Gtk::TreeModel::const_iterator&); void add_promoted_snapshot(ARDOUR::MixerSnapshot*); + bool prompt_delete(const std::string&); }; #endif // __gtk_ardour_mixer_snapshots_h__