Allow edit group creation from the route UI's menu. Allow new tracks to be put in...
authorCarl Hetherington <carl@carlh.net>
Sat, 20 Jun 2009 15:40:26 +0000 (15:40 +0000)
committerCarl Hetherington <carl@carlh.net>
Sat, 20 Jun 2009 15:40:26 +0000 (15:40 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@5226 d708f5d6-7413-0410-9779-e7cbd77b26cf

16 files changed:
gtk2_ardour/add_route_dialog.cc
gtk2_ardour/add_route_dialog.h
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/editor_audio_import.cc
gtk2_ardour/editor_edit_groups.cc
gtk2_ardour/mixer_ui.cc
gtk2_ardour/route_group_dialog.cc [new file with mode: 0644]
gtk2_ardour/route_group_dialog.h [new file with mode: 0644]
gtk2_ardour/route_time_axis.cc
gtk2_ardour/route_time_axis.h
gtk2_ardour/wscript
libs/ardour/ardour/session.h
libs/ardour/session.cc
libs/ardour/session_state.cc

index 6b7b5edc97abd3d812bad1fb5a88a8816f77118c..c08120dd85e6b334a9d8f86e7573468bc174b718 100644 (file)
 #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());
+}
index f99f4829e2a51378cb599a5b645c1acbc0e74dfa..984f98735fbf09cc8bf0b902732731169e069500 100644 (file)
@@ -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 ();
        
index 129d28f50739f07c9c576b7c1ad1bbd6fb7e6930..24e566eecb93705a7fb870162737711cf5f756b4 100644 (file)
@@ -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);
                }
        }
 }
index aae644dbec5477f9ecb76db2c272b275aa572a1a..343b94078166736e01e505e9796a632a8765b661 100644 (file)
@@ -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);
 
index 8d70f725f29347400f76e3fc8e1568c6e60effa5..ac74f3639104ef03324624bcf88fe5662cfe0df2 100644 (file)
@@ -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);
index 4301e1ac34202fc7c1c2a467274a97e82efe1577..1c23fdf21782e4a421697193c83ff9ffac0af2f9 100644 (file)
@@ -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;
index 9dbdbfad38b9d2653d75730fbaaa4359ef908d94..d311295706ddc4faddc870976d1df5850aaa11cb 100644 (file)
@@ -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
index 9c9e76d5df8a6fb809a6b66f672e58e5f23e548e..1f3cab2340036c8371320ff17a34f11fb9450105 100644 (file)
@@ -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 (file)
index 0000000..0e1b549
--- /dev/null
@@ -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 (file)
index 0000000..279d4b9
--- /dev/null
@@ -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
index 35c5ba69636d97c433177f080dc6bff47225bedb..3a75ea5b19ce8932bcec4f37650e14dfa8192935 100644 (file)
@@ -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;
+       }
+}
index cc0e46548e3cf5338c965f8fbe5f8c3a922f1ff8..7ed3b08efcacf9385e54cfb4d5517c99839f376c 100644 (file)
@@ -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 ();
 
index da2f2edadd60da3f2406e40e6b3af8bd944ac48a..7c8cf241a5924a40591883d38c0f960eec501394 100644 (file)
@@ -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
index 5b6b55b01c0056cac14666dbed5adcafdb92c928..f00ea22a14fdffb27c6a829200b782f17f16d42b 100644 (file)
@@ -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 ();
index a4cee0abea8becfb2edad142d84f406f68632bc1..18145a804810ae690009f9566d5711a2cc0942d9 100644 (file)
@@ -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;
 
index 3893b0a98cbe0411d8251b57c0d5fc9a0df86f23..bb2434b6c6ea0ebffe5dc650350ae239980b4752 100644 (file)
@@ -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