diff options
-rw-r--r-- | gtk2_ardour/add_route_dialog.cc | 95 | ||||
-rw-r--r-- | gtk2_ardour/add_route_dialog.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 16 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_edit_groups.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/route_group_dialog.cc | 42 | ||||
-rw-r--r-- | gtk2_ardour/route_group_dialog.h | 22 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/wscript | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 12 | ||||
-rw-r--r-- | libs/ardour/session.cc | 10 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 30 |
16 files changed, 203 insertions, 89 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 6b7b5edc97..c08120dd85 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -23,12 +23,14 @@ #include <sigc++/bind.h> #include <gtkmm/stock.h> #include <gtkmm/separator.h> +#include <gtkmm/table.h> #include "pbd/error.h" #include "pbd/convert.h" #include "gtkmm2ext/utils.h" #include "ardour/profile.h" #include "ardour/template_utils.h" +#include "ardour/route_group.h" #include "ardour/session.h" #include "utils.h" @@ -49,8 +51,9 @@ static const char* track_mode_names[] = { 0 }; -AddRouteDialog::AddRouteDialog () +AddRouteDialog::AddRouteDialog (Session & s) : Dialog (_("ardour: add track/bus")), + _session (s), track_button (_("Tracks")), bus_button (_("Busses")), routes_adjustment (1, 1, 128, 1, 4), @@ -77,65 +80,65 @@ AddRouteDialog::AddRouteDialog () track_button.set_name ("AddRouteDialogRadioButton"); bus_button.set_name ("AddRouteDialogRadioButton"); routes_spinner.set_name ("AddRouteDialogSpinner"); + + refill_channel_setups (); + set_popdown_strings (track_mode_combo, track_mode_strings, true); + + edit_group_combo.append_text (_("No group")); + _session.foreach_edit_group (mem_fun (*this, &AddRouteDialog::add_edit_group)); + channel_combo.set_active_text (channel_combo_strings.front()); + track_mode_combo.set_active_text (track_mode_strings.front()); + edit_group_combo.set_active (0); + RadioButton::Group g = track_button.get_group(); bus_button.set_group (g); track_button.set_active (true); - /* add */ + Table* table = manage (new Table (5, 2)); + table->set_spacings (4); - HBox* hbox1 = manage (new HBox); - hbox1->set_spacing (6); - Label* label1 = manage (new Label (_("Add this many:"))); - hbox1->pack_start (*label1, PACK_SHRINK); - hbox1->pack_start (routes_spinner, PACK_SHRINK); + /* add */ - HBox* hbox2 = manage (new HBox); - hbox2->set_spacing (6); - hbox2->set_border_width (6); - hbox2->pack_start (*hbox1, PACK_EXPAND_WIDGET); + Label* l = manage (new Label (_("Add this many:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 0, 1); + table->attach (routes_spinner, 1, 2, 0, 1, FILL | EXPAND); /* track/bus choice & modes */ - HBox* hbox5 = manage (new HBox); - hbox5->set_spacing (6); - hbox5->pack_start (track_button, PACK_EXPAND_PADDING); - hbox5->pack_start (bus_button, PACK_EXPAND_PADDING); + HBox* hbox = manage (new HBox); + hbox->set_spacing (6); + hbox->pack_start (track_button, PACK_EXPAND_PADDING); + hbox->pack_start (bus_button, PACK_EXPAND_PADDING); + table->attach (*hbox, 0, 2, 1, 2); channel_combo.set_name (X_("ChannelCountSelector")); track_mode_combo.set_name (X_("ChannelCountSelector")); - refill_channel_setups (); - set_popdown_strings (track_mode_combo, track_mode_strings, true); - - channel_combo.set_active_text (channel_combo_strings.front()); - track_mode_combo.set_active_text (track_mode_strings.front()); - track_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen)); bus_button.signal_clicked().connect (mem_fun (*this, &AddRouteDialog::track_type_chosen)); - - VBox* vbox1 = manage (new VBox); - vbox1->set_spacing (6); - vbox1->set_border_width (6); - - Frame* frame1 = manage (new Frame (_("Channel Configuration"))); - frame1->add (channel_combo); - Frame* frame2 = manage (new Frame (_("Track Mode"))); - frame2->add (track_mode_combo); - vbox1->pack_start (*hbox5, PACK_SHRINK); - vbox1->pack_start (*frame1, PACK_SHRINK); + l = manage (new Label (_("Channel configuration:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 2, 3); + table->attach (channel_combo, 1, 2, 2, 3, FILL | EXPAND); - if (!ARDOUR::Profile->get_sae()) { - vbox1->pack_start (*frame2, PACK_SHRINK); + if (!ARDOUR::Profile->get_sae ()) { + l = manage (new Label (_("Track mode:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 3, 4); + table->attach (track_mode_combo, 1, 2, 3, 4, FILL | EXPAND); } + + l = manage (new Label (_("Add to edit group:"))); + l->set_alignment (1, 0.5); + table->attach (*l, 0, 1, 4, 5); + table->attach (edit_group_combo, 1, 2, 4, 5, FILL | EXPAND); + get_vbox()->pack_start (*table); get_vbox()->set_spacing (6); get_vbox()->set_border_width (6); - - get_vbox()->pack_start (*hbox2, PACK_SHRINK); - get_vbox()->pack_start (*vbox1, PACK_SHRINK); - get_vbox()->show_all (); /* track template info will be managed whenever @@ -320,3 +323,19 @@ AddRouteDialog::refill_channel_setups () set_popdown_strings (channel_combo, channel_combo_strings, true); channel_combo.set_active_text (channel_combo_strings.front()); } + +void +AddRouteDialog::add_edit_group (RouteGroup* g) +{ + edit_group_combo.append_text (g->name ()); +} + +RouteGroup* +AddRouteDialog::edit_group () +{ + if (edit_group_combo.get_active_row_number () == 0) { + return 0; + } + + return _session.edit_group_by_name (edit_group_combo.get_active_text()); +} diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index f99f4829e2..984f98735f 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -38,7 +38,7 @@ class AddRouteDialog : public Gtk::Dialog { public: - AddRouteDialog (); + AddRouteDialog (ARDOUR::Session &); ~AddRouteDialog (); bool track (); @@ -50,8 +50,10 @@ class AddRouteDialog : public Gtk::Dialog ARDOUR::DataType type(); ARDOUR::TrackMode mode(); + ARDOUR::RouteGroup* edit_group (); private: + ARDOUR::Session& _session; Gtk::Entry name_template_entry; Gtk::RadioButton track_button; Gtk::RadioButton bus_button; @@ -59,11 +61,13 @@ class AddRouteDialog : public Gtk::Dialog Gtk::SpinButton routes_spinner; Gtk::ComboBoxText channel_combo; Gtk::ComboBoxText track_mode_combo; + Gtk::ComboBoxText edit_group_combo; std::vector<ARDOUR::TemplateInfo> route_templates; void track_type_chosen (); void refill_channel_setups (); + void add_edit_group (ARDOUR::RouteGroup *); void reset_template_option_visibility (); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 129d28f507..24e566eecb 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1242,7 +1242,7 @@ ARDOUR_UI::open_session () void -ARDOUR_UI::session_add_midi_route (bool disk, uint32_t how_many) +ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* edit_group, uint32_t how_many) { list<boost::shared_ptr<MidiTrack> > tracks; @@ -1254,7 +1254,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, uint32_t how_many) try { if (disk) { - tracks = session->new_midi_track (ARDOUR::Normal, how_many); + tracks = session->new_midi_track (ARDOUR::Normal, edit_group, how_many); if (tracks.size() != how_many) { if (how_many == 1) { @@ -1282,7 +1282,7 @@ restart JACK with more ports.")); void -ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) +ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, RouteGroup* edit_group, uint32_t how_many) { list<boost::shared_ptr<AudioTrack> > tracks; RouteList routes; @@ -1294,7 +1294,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t try { if (track) { - tracks = session->new_audio_track (input_channels, output_channels, mode, how_many); + tracks = session->new_audio_track (input_channels, output_channels, mode, edit_group, how_many); if (tracks.size() != how_many) { if (how_many == 1) { @@ -1307,7 +1307,7 @@ ARDOUR_UI::session_add_audio_route (bool track, int32_t input_channels, int32_t } else { - routes = session->new_audio_route (input_channels, output_channels, how_many); + routes = session->new_audio_route (input_channels, output_channels, edit_group, how_many); if (routes.size() != how_many) { if (how_many == 1) { @@ -2764,7 +2764,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) } if (add_route_dialog == 0) { - add_route_dialog = new AddRouteDialog; + add_route_dialog = new AddRouteDialog (*session); if (float_window) { add_route_dialog->set_transient_for (*float_window); } @@ -2802,6 +2802,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) uint32_t output_chan; string name_template = add_route_dialog->name_template (); bool track = add_route_dialog->track (); + RouteGroup* edit_group = add_route_dialog->edit_group (); AutoConnectOption oac = Config->get_output_auto_connect(); @@ -2815,7 +2816,7 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) if (add_route_dialog->type() == ARDOUR::DataType::MIDI) { if (track) { - session_add_midi_track(count); + session_add_midi_track(edit_group, count); } else { MessageDialog msg (*editor, _("Sorry, MIDI Busses are not supported at this time.")); @@ -2824,9 +2825,9 @@ ARDOUR_UI::add_route (Gtk::Window* float_window) } } else { if (track) { - session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), count); + session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), edit_group, count); } else { - session_add_audio_bus (input_chan, output_chan, count); + session_add_audio_bus (input_chan, output_chan, edit_group, count); } } } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index aae644dbec..343b940781 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -198,16 +198,16 @@ class ARDOUR_UI : public Gtkmm2ext::UI void add_route (Gtk::Window* float_window); - void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many) { - session_add_audio_route (true, input_channels, output_channels, mode, how_many); + void session_add_audio_track (int input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup* edit_group, uint32_t how_many) { + session_add_audio_route (true, input_channels, output_channels, mode, edit_group, how_many); } - void session_add_audio_bus (int input_channels, int32_t output_channels, uint32_t how_many) { - session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, how_many); + void session_add_audio_bus (int input_channels, int32_t output_channels, ARDOUR::RouteGroup* edit_group, uint32_t how_many) { + session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, edit_group, how_many); } - void session_add_midi_track (uint32_t how_many) { - session_add_midi_route (true, how_many); + void session_add_midi_track (ARDOUR::RouteGroup* edit_group, uint32_t how_many) { + session_add_midi_route (true, edit_group, how_many); } /*void session_add_midi_bus () { @@ -524,8 +524,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI void edit_metadata (); void import_metadata (); - void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, uint32_t how_many); - void session_add_midi_route (bool disk, uint32_t how_many); + void session_add_audio_route (bool disk, int32_t input_channels, int32_t output_channels, ARDOUR::TrackMode mode, ARDOUR::RouteGroup *, uint32_t how_many); + void session_add_midi_route (bool disk, ARDOUR::RouteGroup *, uint32_t how_many); void set_transport_sensitivity (bool); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 8d70f725f2..ac74f36391 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -215,11 +215,11 @@ ARDOUR_UI::install_actions () ActionManager::register_toggle_action (common_actions, X_("ToggleKeyEditor"), _("Keybindings"), mem_fun(*this, &ARDOUR_UI::toggle_key_editor)); ActionManager::register_toggle_action (common_actions, X_("ToggleBundleManager"), _("Bundle Manager"), mem_fun(*this, &ARDOUR_UI::toggle_bundle_manager)); - act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, 1)); + act = ActionManager::register_action (common_actions, X_("AddAudioTrack"), _("Add Audio Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_track), 1, 1, ARDOUR::Normal, (ARDOUR::RouteGroup *) 0, 1)); ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, 1)); + act = ActionManager::register_action (common_actions, X_("AddAudioBus"), _("Add Audio Bus"), bind (mem_fun(*this, &ARDOUR_UI::session_add_audio_bus), 1, 1, (ARDOUR::RouteGroup *) 0, 1)); ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_midi_track), 1)); + act = ActionManager::register_action (common_actions, X_("AddMIDITrack"), _("Add MIDI Track"), bind (mem_fun(*this, &ARDOUR_UI::session_add_midi_track), (ARDOUR::RouteGroup *) 0, 1)); ActionManager::session_sensitive_actions.push_back (act); //act = ActionManager::register_action (common_actions, X_("AddMidiBus"), _("Add Midi Bus"), mem_fun(*this, &ARDOUR_UI::session_add_midi_bus)); //ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index 4301e1ac34..1c23fdf217 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -835,7 +835,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t { if (!existing_track) { if (ar) { - list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 1)); + list<boost::shared_ptr<AudioTrack> > at (session->new_audio_track (in_chans, out_chans, Normal, 0, 1)); if (at.empty()) { return -1; @@ -843,7 +843,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t existing_track = at.front(); } else if (mr) { - list<boost::shared_ptr<MidiTrack> > mt (session->new_midi_track (Normal, 1)); + list<boost::shared_ptr<MidiTrack> > mt (session->new_midi_track (Normal, 0, 1)); if (mt.empty()) { return -1; diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc index 9dbdbfad38..d311295706 100644 --- a/gtk2_ardour/editor_edit_groups.cc +++ b/gtk2_ardour/editor_edit_groups.cc @@ -79,7 +79,7 @@ Editor::disable_all_edit_groups () void Editor::new_edit_group () { - session->add_edit_group (""); + session->add_edit_group (new RouteGroup (*session, "")); } void diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 9c9e76d5df..1f3cab2340 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1125,7 +1125,7 @@ Mixer_UI::mix_groups_changed () void Mixer_UI::new_mix_group () { - session->add_mix_group (""); + session->add_mix_group (new RouteGroup (*session, "")); } void diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc new file mode 100644 index 0000000000..0e1b549f97 --- /dev/null +++ b/gtk2_ardour/route_group_dialog.cc @@ -0,0 +1,42 @@ +#include <gtkmm/stock.h> +#include "ardour/route_group.h" +#include "route_group_dialog.h" +#include "i18n.h" + +using namespace Gtk; +using namespace ARDOUR; + +RouteGroupDialog::RouteGroupDialog (RouteGroup* g) + : Dialog (_("Route group")), + _group (g), + _active (_("Active")) +{ + _name.set_text (_group->name ()); + _active.set_active (_group->is_active ()); + + HBox* h = manage (new HBox); + h->pack_start (*manage (new Label (_("Name:")))); + h->pack_start (_name); + + get_vbox()->pack_start (*h); + get_vbox()->pack_start (_active); + + add_button (Stock::CANCEL, RESPONSE_CANCEL); + /* XXX: change this depending on context */ + add_button (Stock::OK, RESPONSE_OK); + + show_all (); +} + +int +RouteGroupDialog::do_run () +{ + int const r = run (); + + if (r == Gtk::RESPONSE_OK) { + _group->set_name (_name.get_text ()); + _group->set_active (_active.get_active (), this); + } + + return r; +} diff --git a/gtk2_ardour/route_group_dialog.h b/gtk2_ardour/route_group_dialog.h new file mode 100644 index 0000000000..279d4b90ae --- /dev/null +++ b/gtk2_ardour/route_group_dialog.h @@ -0,0 +1,22 @@ +#ifndef __gtk_ardour_route_group_dialog_h__ +#define __gtk_ardour_route_group_dialog_h__ + +#include <gtkmm/dialog.h> +#include <gtkmm/entry.h> +#include <gtkmm/checkbutton.h> + +class RouteGroupDialog : public Gtk::Dialog +{ +public: + RouteGroupDialog (ARDOUR::RouteGroup *); + + int do_run (); + +private: + ARDOUR::RouteGroup* _group; + Gtk::Entry _name; + Gtk::CheckButton _active; +}; + + +#endif diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 35c5ba6963..3a75ea5b19 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -75,6 +75,7 @@ #include "simplerect.h" #include "streamview.h" #include "utils.h" +#include "route_group_dialog.h" #include "ardour/track.h" @@ -320,13 +321,18 @@ RouteTimeAxisView::edit_click (GdkEventButton *ev) RadioMenuItem::Group group; items.clear (); + + items.push_back (MenuElem (_("New group..."), mem_fun (*this, &RouteTimeAxisView::set_edit_group_to_new))); + + items.push_back (SeparatorElem ()); + items.push_back (RadioMenuElem (group, _("No group"), bind (mem_fun(*this, &RouteTimeAxisView::set_edit_group_from_menu), (RouteGroup *) 0))); if (_route->edit_group() == 0) { static_cast<RadioMenuItem*>(&items.back())->set_active (); } - + _session.foreach_edit_group (bind (mem_fun (*this, &RouteTimeAxisView::add_edit_group_menu_item), &group)); edit_group_menu.popup (ev->button, ev->time); @@ -2401,3 +2407,19 @@ RouteTimeAxisView::remove_underlay(StreamView* v) } } +void +RouteTimeAxisView::set_edit_group_to_new () +{ + RouteGroup* g = new RouteGroup (_session, "", RouteGroup::Active); + g->set_active (true, this); + + RouteGroupDialog d (g); + int const r = d.do_run (); + + if (r == Gtk::RESPONSE_OK) { + _session.add_edit_group (g); + _route->set_edit_group (g, this); + } else { + delete g; + } +} diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index cc0e46548e..7ed3b08efc 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -224,6 +224,7 @@ protected: void add_edit_group_menu_item (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*); void set_edit_group_from_menu (ARDOUR::RouteGroup *); + void set_edit_group_to_new (); void reset_samples_per_unit (); diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index da2f2edadd..7c8cf241a5 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -189,6 +189,7 @@ def build(bld): region_view.cc return_ui.cc rhythm_ferret.cc + route_group_dialog.cc route_params_ui.cc route_processor_selection.cc route_time_axis.cc diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 5b6b55b01c..f00ea22a14 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -486,8 +486,8 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable StateOfTheState state_of_the_state() const { return _state_of_the_state; } - RouteGroup* add_edit_group (std::string); - RouteGroup* add_mix_group (std::string); + void add_edit_group (RouteGroup *); + void add_mix_group (RouteGroup *); void remove_edit_group (RouteGroup&); void remove_mix_group (RouteGroup&); @@ -515,12 +515,14 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable /* fundamental operations. duh. */ std::list<boost::shared_ptr<AudioTrack> > new_audio_track ( - int input_channels, int output_channels, TrackMode mode = Normal, uint32_t how_many = 1); + int input_channels, int output_channels, TrackMode mode = Normal, RouteGroup* edit_group = 0, uint32_t how_many = 1 + ); - RouteList new_audio_route (int input_channels, int output_channels, uint32_t how_many); + RouteList new_audio_route (int input_channels, int output_channels, RouteGroup* edit_group, uint32_t how_many); std::list<boost::shared_ptr<MidiTrack> > new_midi_track ( - TrackMode mode = Normal, uint32_t how_many = 1); + TrackMode mode = Normal, RouteGroup* edit_group = 0, uint32_t how_many = 1 + ); void remove_route (boost::shared_ptr<Route>); void resort_routes (); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index a4cee0abea..18145a8048 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -1480,7 +1480,7 @@ Session::resort_routes_using (shared_ptr<RouteList> r) } list<boost::shared_ptr<MidiTrack> > -Session::new_midi_track (TrackMode mode, uint32_t how_many) +Session::new_midi_track (TrackMode mode, RouteGroup* edit_group, uint32_t how_many) { char track_name[32]; uint32_t track_id = 0; @@ -1589,6 +1589,7 @@ Session::new_midi_track (TrackMode mode, uint32_t how_many) */ track->midi_diskstream()->non_realtime_input_change(); + track->set_edit_group (edit_group, 0); track->DiskstreamChanged.connect (mem_fun (this, &Session::resort_routes)); //track->set_remote_control_id (control_id); @@ -1645,7 +1646,7 @@ Session::new_midi_track (TrackMode mode, uint32_t how_many) } list<boost::shared_ptr<AudioTrack> > -Session::new_audio_track (int input_channels, int output_channels, TrackMode mode, uint32_t how_many) +Session::new_audio_track (int input_channels, int output_channels, TrackMode mode, RouteGroup* edit_group, uint32_t how_many) { char track_name[32]; uint32_t track_id = 0; @@ -1757,6 +1758,8 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod channels_used += track->n_inputs ().n_audio(); + track->set_edit_group (edit_group, 0); + track->audio_diskstream()->non_realtime_input_change(); track->DiskstreamChanged.connect (mem_fun (this, &Session::resort_routes)); @@ -1835,7 +1838,7 @@ Session::set_remote_control_ids () RouteList -Session::new_audio_route (int input_channels, int output_channels, uint32_t how_many) +Session::new_audio_route (int input_channels, int output_channels, RouteGroup* edit_group, uint32_t how_many) { char bus_name[32]; uint32_t bus_id = 1; @@ -1934,6 +1937,7 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_ channels_used += bus->n_inputs ().n_audio(); + bus->set_edit_group (edit_group, 0); bus->set_remote_control_id (control_id); ++control_id; diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 3893b0a98c..bb2434b6c6 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -2058,17 +2058,17 @@ Session::load_route_groups (const XMLNode& node, bool edit) { XMLNodeList nlist = node.children(); XMLNodeConstIterator niter; - RouteGroup* rg; set_dirty(); for (niter = nlist.begin(); niter != nlist.end(); ++niter) { if ((*niter)->name() == "RouteGroup") { + RouteGroup* rg = new RouteGroup (*this, ""); if (edit) { - rg = add_edit_group (""); + add_edit_group (rg); rg->set_state (**niter); } else { - rg = add_mix_group (""); + add_mix_group (rg); rg->set_state (**niter); } } @@ -2133,24 +2133,20 @@ Session::possible_states () const return possible_states(_path); } -RouteGroup * -Session::add_edit_group (string name) +void +Session::add_edit_group (RouteGroup* g) { - RouteGroup* rg = new RouteGroup (*this, name); - edit_groups.push_back (rg); - edit_group_added (rg); /* EMIT SIGNAL */ - set_dirty(); - return rg; + edit_groups.push_back (g); + edit_group_added (g); /* EMIT SIGNAL */ + set_dirty (); } -RouteGroup * -Session::add_mix_group (string name) +void +Session::add_mix_group (RouteGroup* g) { - RouteGroup* rg = new RouteGroup (*this, name, RouteGroup::Relative); - mix_groups.push_back (rg); - mix_group_added (rg); /* EMIT SIGNAL */ - set_dirty(); - return rg; + mix_groups.push_back (g); + mix_group_added (g); /* EMIT SIGNAL */ + set_dirty (); } void |