From 2a4ebd17d6710fdd09dded86eb6cc54c5585d60b Mon Sep 17 00:00:00 2001 From: itmuckel Date: Wed, 11 May 2022 21:22:24 +0200 Subject: [PATCH] Save last route type --- gtk2_ardour/add_route_dialog.cc | 52 ++++++++++++++++++++++++++++++--- gtk2_ardour/add_route_dialog.h | 24 ++++++++------- gtk2_ardour/enums.cc | 18 ++++++++---- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 605f1159b0..744b3c78f6 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -361,6 +361,10 @@ AddRouteDialog::on_response (int r) UIConfiguration::instance().set_show_on_cue_page (show_on_cue_page()); UIConfiguration::instance().set_insert_at_position ((int) insert_at()); + /* save last route type */ + auto* node = _session->extra_xml ("AddRouteDialog", true); + node->set_property (X_("LastRouteType"), enum_2_string (type_wanted ())); + reset_name_edited (); /* Don't call ArdourDialog::on_response() because that will automatically hide the dialog. @@ -567,7 +571,7 @@ AddRouteDialog::get_template_path () AddRouteDialog::TypeWanted AddRouteDialog::type_wanted() { - if (trk_template_chooser.get_selection()->count_selected_rows() != 1) { + if (trk_template_chooser.get_selection ()->count_selected_rows () != 1) { return AudioTrack; } TreeIter iter = trk_template_chooser.get_selection ()->get_selected (); @@ -576,9 +580,9 @@ AddRouteDialog::type_wanted() const string str = (*iter)[track_template_columns.name]; if (str == _("Audio Busses")) { return AudioBus; - } else if (str == _("MIDI Busses")){ + } else if (str == _("MIDI Busses")) { return MidiBus; - } else if (str == _("MIDI Tracks")){ + } else if (str == _("MIDI Tracks")) { return MidiTrack; } else if (str == _("Audio Tracks")) { return AudioTrack; @@ -587,11 +591,31 @@ AddRouteDialog::type_wanted() } else if (str == _("Foldback Busses")) { return FoldbackBus; } else { - assert (0); return AudioTrack; } } +std::string +AddRouteDialog::type_wanted_to_localized_string (AddRouteDialog::TypeWanted type_wanted) { + switch(type_wanted) { + case AudioBus: + return _("Audio Busses"); + case MidiBus: + return _("MIDI Busses"); + case MidiTrack: + return _("MIDI Tracks"); + case AudioTrack: + return _("Audio Tracks"); + case VCAMaster: + return _("VCA Masters"); + case FoldbackBus: + return _("Foldback Busses"); + default: + return _("Audio Tracks"); + break; + } +} + void AddRouteDialog::maybe_update_name_template_entry () { @@ -990,6 +1014,26 @@ AddRouteDialog::refill_channel_setups () row[track_template_columns.modified_with] = x->modified_with; } + /* load and select last route type */ + if (_session) { + auto node = _session->extra_xml (X_("AddRouteDialog"), false); + std::string last_route{}; + + if (node && node->get_property (X_ ("LastRouteType"), last_route)) { + auto type_wanted = static_cast (string_2_enum (last_route, TypeWanted)); + + for (const auto& row : trk_template_chooser.get_model ()->children ()) { + std::string node_value{}; + row.get_value (0, node_value); + + if (node_value == type_wanted_to_localized_string (type_wanted)) { + trk_template_chooser.get_selection ()->select (row); + break; + } + } + } + } + set_popdown_strings (channel_combo, channel_combo_strings); if (!channel_current_choice.empty()) { diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index 93a608ef1b..542d8f8f84 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -47,6 +47,7 @@ #include "ardour/plugin.h" #include "ardour/types.h" #include "ardour/template_utils.h" +#include "ardour/route_group.h" #include "ardour_dialog.h" #include "instrument_selector.h" @@ -117,17 +118,18 @@ private: Gtk::ComboBoxText strict_io_combo; Gtk::CheckButton show_on_cue_chkbox; - void track_type_chosen (); - void refill_channel_setups (); - void refill_route_groups (); - void refill_track_modes (); - void add_route_group (ARDOUR::RouteGroup*); - void group_changed (); - void channel_combo_changed (); - bool channel_separator (const Glib::RefPtr& m, const Gtk::TreeModel::iterator& i); - bool route_separator (const Glib::RefPtr& m, const Gtk::TreeModel::iterator& i); - void maybe_update_name_template_entry (); - void instrument_changed (); + void track_type_chosen (); + std::string type_wanted_to_localized_string (TypeWanted type_wanted); + void refill_channel_setups (); + void refill_route_groups (); + void refill_track_modes (); + void add_route_group (ARDOUR::RouteGroup*); + void group_changed (); + void channel_combo_changed (); + bool channel_separator (const Glib::RefPtr& m, const Gtk::TreeModel::iterator& i); + bool route_separator (const Glib::RefPtr& m, const Gtk::TreeModel::iterator& i); + void maybe_update_name_template_entry (); + void instrument_changed (); struct TrackTemplateColumns : public Gtk::TreeModel::ColumnRecord { TrackTemplateColumns () diff --git a/gtk2_ardour/enums.cc b/gtk2_ardour/enums.cc index 5dbcbd18fa..25120a218d 100644 --- a/gtk2_ardour/enums.cc +++ b/gtk2_ardour/enums.cc @@ -24,12 +24,11 @@ #include "pbd/enumwriter.h" -#include "widgets/ardour_icon.h" - +#include "add_route_dialog.h" #include "audio_clock.h" #include "editing.h" -#include "enums.h" #include "editor_items.h" +#include "enums.h" #include "startup_fsm.h" using namespace std; @@ -60,11 +59,12 @@ setup_gtk_ardour_enums () StartupFSM::MainState startup_state; StartupFSM::DialogID startup_dialog; Gtk::ResponseType dialog_response; + AddRouteDialog::TypeWanted type_wanted; #define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear() #define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear() -#define REGISTER_ENUM(e) i.push_back (e); s.push_back (#e) -#define REGISTER_CLASS_ENUM(t,e) i.push_back (t::e); s.push_back (#e) +#define REGISTER_ENUM(e) i.emplace_back (e); s.emplace_back (#e) +#define REGISTER_CLASS_ENUM(t,e) i.emplace_back (t::e); s.emplace_back (#e) REGISTER_CLASS_ENUM (AudioClock, Timecode); REGISTER_CLASS_ENUM (AudioClock, BBT); @@ -217,4 +217,12 @@ setup_gtk_ardour_enums () REGISTER_ENUM (RESPONSE_APPLY); REGISTER_ENUM (RESPONSE_HELP); REGISTER (dialog_response); + + REGISTER_CLASS_ENUM (AddRouteDialog, AudioTrack); + REGISTER_CLASS_ENUM (AddRouteDialog, MidiTrack); + REGISTER_CLASS_ENUM (AddRouteDialog, AudioBus); + REGISTER_CLASS_ENUM (AddRouteDialog, MidiBus); + REGISTER_CLASS_ENUM (AddRouteDialog, VCAMaster); + REGISTER_CLASS_ENUM (AddRouteDialog, FoldbackBus); + REGISTER (type_wanted); }