summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/add_route_dialog.cc95
-rw-r--r--gtk2_ardour/add_route_dialog.h6
-rw-r--r--gtk2_ardour/ardour_ui.cc19
-rw-r--r--gtk2_ardour/ardour_ui.h16
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc6
-rw-r--r--gtk2_ardour/editor_audio_import.cc4
-rw-r--r--gtk2_ardour/editor_edit_groups.cc2
-rw-r--r--gtk2_ardour/mixer_ui.cc2
-rw-r--r--gtk2_ardour/route_group_dialog.cc42
-rw-r--r--gtk2_ardour/route_group_dialog.h22
-rw-r--r--gtk2_ardour/route_time_axis.cc24
-rw-r--r--gtk2_ardour/route_time_axis.h1
-rw-r--r--gtk2_ardour/wscript1
-rw-r--r--libs/ardour/ardour/session.h12
-rw-r--r--libs/ardour/session.cc10
-rw-r--r--libs/ardour/session_state.cc30
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