summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_ui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/ardour_ui.cc')
-rw-r--r--gtk2_ardour/ardour_ui.cc59
1 files changed, 38 insertions, 21 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index e41f712351..b3976f581d 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -753,7 +753,6 @@ void
ARDOUR_UI::finish()
{
if (_session) {
- int tries = 0;
if (_session->dirty()) {
vector<string> actions;
@@ -1361,7 +1360,8 @@ ARDOUR_UI::open_session ()
void
-ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
+ARDOUR_UI::session_add_mixed_track (const ChanCount& input, const ChanCount& output, RouteGroup* route_group,
+ uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
{
list<boost::shared_ptr<MidiTrack> > tracks;
@@ -1371,18 +1371,14 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t
}
try {
- if (disk) {
-
- tracks = _session->new_midi_track (instrument, ARDOUR::Normal, route_group, how_many, name_template);
-
- if (tracks.size() != how_many) {
- if (how_many == 1) {
- error << _("could not create a new midi track") << endmsg;
- } else {
- error << string_compose (_("could not create %1 new midi tracks"), how_many) << endmsg;
- }
+ tracks = _session->new_midi_track (input, output, instrument, ARDOUR::Normal, route_group, how_many, name_template);
+
+ if (tracks.size() != how_many) {
+ if (how_many == 1) {
+ error << _("could not create a new mixed track") << endmsg;
+ } else {
+ error << string_compose (_("could not create %1 new mixed tracks"), how_many) << endmsg;
}
-
}
}
@@ -1395,7 +1391,18 @@ restart JACK with more ports."), PROGRAM_NAME));
msg.run ();
}
}
+
+void
+ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
+{
+ ChanCount one_midi_channel;
+ one_midi_channel.set (DataType::MIDI, 1);
+
+ if (disk) {
+ session_add_mixed_track (one_midi_channel, one_midi_channel, route_group, how_many, name_template, instrument);
+ }
+}
void
ARDOUR_UI::session_add_audio_route (
@@ -3120,8 +3127,8 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
return;
}
- uint32_t input_chan = add_route_dialog->channels ();
- uint32_t output_chan;
+ ChanCount input_chan= add_route_dialog->channels ();
+ ChanCount output_chan;
string name_template = add_route_dialog->name_template ();
PluginInfoPtr instrument = add_route_dialog->requested_instrument ();
RouteGroup* route_group = add_route_dialog->route_group ();
@@ -3129,19 +3136,29 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
AutoConnectOption oac = Config->get_output_auto_connect();
if (oac & AutoConnectMaster) {
- output_chan = (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan);
+ output_chan.set (DataType::AUDIO, (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan.n_audio()));
+ output_chan.set (DataType::MIDI, 0);
} else {
output_chan = input_chan;
}
+ cerr << "ARD said " << input_chan << " and " << output_chan << endl;
+
/* XXX do something with name template */
- if (add_route_dialog->midi_tracks_wanted()) {
+ switch (add_route_dialog->type_wanted()) {
+ case AddRouteDialog::AudioTrack:
+ session_add_audio_track (input_chan.n_audio(), output_chan.n_audio(), add_route_dialog->mode(), route_group, count, name_template);
+ break;
+ case AddRouteDialog::MidiTrack:
session_add_midi_track (route_group, count, name_template, instrument);
- } else if (add_route_dialog->audio_tracks_wanted()) {
- session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), route_group, count, name_template);
- } else {
- session_add_audio_bus (input_chan, output_chan, route_group, count, name_template);
+ break;
+ case AddRouteDialog::MixedTrack:
+ session_add_mixed_track (input_chan, output_chan, route_group, count, name_template, instrument);
+ break;
+ case AddRouteDialog::AudioBus:
+ session_add_audio_bus (input_chan.n_audio(), output_chan.n_audio(), route_group, count, name_template);
+ break;
}
}