summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-03-28 18:07:43 +0200
committerRobin Gareus <robin@gareus.org>2016-03-28 18:25:34 +0200
commita16c7a8a906c4087fd1d1a756648ca75b7e91e78 (patch)
tree158ff80dd643f82282260ab1c350b14da1b94876
parent5f16e48d7e2b08a23847ad45c96f6583349ff820 (diff)
add option to create new routes with strict-i/o enabled.
-rw-r--r--gtk2_ardour/add_route_dialog.cc12
-rw-r--r--gtk2_ardour/add_route_dialog.h3
-rw-r--r--gtk2_ardour/ardour_ui.cc104
-rw-r--r--gtk2_ardour/ardour_ui.h38
4 files changed, 110 insertions, 47 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index b2602f029e..54a1b5361d 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -39,6 +39,7 @@
#include "utils.h"
#include "add_route_dialog.h"
#include "route_group_dialog.h"
+#include "tooltips.h"
#include "i18n.h"
using namespace Gtk;
@@ -57,6 +58,7 @@ AddRouteDialog::AddRouteDialog ()
, configuration_label (_("Configuration:"))
, mode_label (_("Record Mode:"))
, instrument_label (_("Instrument:"))
+ , strict_io (_("Strict I/O"))
{
set_name ("AddRouteDialog");
set_modal (true);
@@ -159,6 +161,13 @@ AddRouteDialog::AddRouteDialog ()
table2->attach (insert_at_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0);
++n;
+ /* New Route's Routing is.. */
+ strict_io.set_active (Config->get_strict_io ());
+ ARDOUR_UI_UTILS::set_tooltip (strict_io,
+ _("With strict-i/o enabled, Effect Processors will not modify the number of channels on a track. The number of output channels will always match the number of input channels."));
+ table2->attach (strict_io, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0);
+ ++n;
+
options_box->pack_start (*table2, false, true);
vbox->pack_start (*options_box, false, true);
@@ -221,9 +230,12 @@ AddRouteDialog::maybe_update_name_template_entry ()
name_template_entry.get_text() != _("MIDI") &&
name_template_entry.get_text() != _("Audio+MIDI") &&
name_template_entry.get_text() != _("Bus")) {
+ strict_io.set_sensitive (false);
return;
}
+ strict_io.set_sensitive (true);
+
switch (type_wanted()) {
case AudioTrack:
name_template_entry.set_text (_("Audio"));
diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h
index 08359c2000..05be01ef3d 100644
--- a/gtk2_ardour/add_route_dialog.h
+++ b/gtk2_ardour/add_route_dialog.h
@@ -76,6 +76,8 @@ class AddRouteDialog : public ArdourDialog
};
InsertAt insert_at();
+ bool use_strict_io() { return strict_io.get_active (); }
+
private:
Gtk::Entry name_template_entry;
Gtk::ComboBoxText track_bus_combo;
@@ -90,6 +92,7 @@ class AddRouteDialog : public ArdourDialog
InstrumentSelector instrument_combo;
Gtk::Label insert_at_label;
Gtk::ComboBoxText insert_at_combo;
+ Gtk::CheckButton strict_io;
std::vector<ARDOUR::TemplateInfo> route_templates;
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 2206e14118..fe9a5c3713 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -71,6 +71,7 @@
#include "ardour/ardour.h"
#include "ardour/audio_backend.h"
+#include "ardour/audio_track.h"
#include "ardour/audioengine.h"
#include "ardour/audiofilesource.h"
#include "ardour/automation_watch.h"
@@ -78,6 +79,7 @@
#include "ardour/filename_extensions.h"
#include "ardour/filesystem_paths.h"
#include "ardour/ltc_file_reader.h"
+#include "ardour/midi_track.h"
#include "ardour/port.h"
#include "ardour/plugin_manager.h"
#include "ardour/process_thread.h"
@@ -1776,10 +1778,15 @@ ARDOUR_UI::open_session ()
}
}
-
void
-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)
+ARDOUR_UI::session_add_mixed_track (
+ const ChanCount& input,
+ const ChanCount& output,
+ RouteGroup* route_group,
+ uint32_t how_many,
+ const string& name_template,
+ bool strict_io,
+ PluginInfoPtr instrument)
{
list<boost::shared_ptr<MidiTrack> > tracks;
@@ -1797,18 +1804,26 @@ ARDOUR_UI::session_add_mixed_track (const ChanCount& input, const ChanCount& out
}
catch (...) {
- MessageDialog msg (_main_window,
- string_compose (_("There are insufficient ports available\n\
-to create a new track or bus.\n\
-You should save %1, exit and\n\
-restart with more ports."), PROGRAM_NAME));
- msg.run ();
+ display_insufficient_ports_message ();
+ return;
+ }
+
+ if (strict_io) {
+ for (list<boost::shared_ptr<MidiTrack> >::iterator i = tracks.begin(); i != tracks.end(); ++i) {
+ (*i)->set_strict_io (true);
+ }
}
}
void
-ARDOUR_UI::session_add_midi_bus (RouteGroup* route_group, uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
+ARDOUR_UI::session_add_midi_bus (
+ RouteGroup* route_group,
+ uint32_t how_many,
+ const string& name_template,
+ bool strict_io,
+ PluginInfoPtr instrument)
{
+ RouteList routes;
if (_session == 0) {
warning << _("You cannot add a track without a session already loaded.") << endmsg;
@@ -1816,32 +1831,40 @@ ARDOUR_UI::session_add_midi_bus (RouteGroup* route_group, uint32_t how_many, con
}
try {
- RouteList routes = _session->new_midi_route (route_group, how_many, name_template, instrument);
+ routes = _session->new_midi_route (route_group, how_many, name_template, instrument);
if (routes.size() != how_many) {
error << string_compose(P_("could not create %1 new Midi Bus", "could not create %1 new Midi Busses", how_many), how_many) << endmsg;
}
}
catch (...) {
- MessageDialog msg (_main_window,
- string_compose (_("There are insufficient ports available\n\
-to create a new track or bus.\n\
-You should save %1, exit and\n\
-restart with more ports."), PROGRAM_NAME));
- msg.run ();
+ display_insufficient_ports_message ();
+ return;
+ }
+
+ if (strict_io) {
+ for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
+ (*i)->set_strict_io (true);
+ }
}
}
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_midi_route (
+ bool disk,
+ RouteGroup* route_group,
+ uint32_t how_many,
+ const string& name_template,
+ bool strict_io,
+ 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);
+ session_add_mixed_track (one_midi_channel, one_midi_channel, route_group, how_many, name_template, strict_io, instrument);
} else {
- session_add_midi_bus (route_group, how_many, name_template, instrument);
+ session_add_midi_bus (route_group, how_many, name_template, strict_io, instrument);
}
}
@@ -1853,7 +1876,8 @@ ARDOUR_UI::session_add_audio_route (
ARDOUR::TrackMode mode,
RouteGroup* route_group,
uint32_t how_many,
- string const & name_template
+ string const & name_template,
+ bool strict_io
)
{
list<boost::shared_ptr<AudioTrack> > tracks;
@@ -1885,14 +1909,30 @@ ARDOUR_UI::session_add_audio_route (
}
catch (...) {
- MessageDialog msg (_main_window,
- string_compose (_("There are insufficient ports available\n\
+ display_insufficient_ports_message ();
+ return;
+ }
+
+ if (strict_io) {
+ for (list<boost::shared_ptr<AudioTrack> >::iterator i = tracks.begin(); i != tracks.end(); ++i) {
+ (*i)->set_strict_io (true);
+ }
+ for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
+ (*i)->set_strict_io (true);
+ }
+ }
+}
+
+void
+ARDOUR_UI::display_insufficient_ports_message ()
+{
+ MessageDialog msg (_main_window,
+ string_compose (_("There are insufficient ports available\n\
to create a new track or bus.\n\
You should save %1, exit and\n\
restart with more ports."), PROGRAM_NAME));
- pop_back_splash (msg);
- msg.run ();
- }
+ pop_back_splash (msg);
+ msg.run ();
}
void
@@ -3924,7 +3964,6 @@ ARDOUR_UI::add_route (Gtk::Window* /* ignored */)
}
setup_order_hint(add_route_dialog->insert_at());
-
string template_path = add_route_dialog->track_template();
DisplaySuspender ds;
@@ -3943,6 +3982,7 @@ ARDOUR_UI::add_route (Gtk::Window* /* ignored */)
PluginInfoPtr instrument = add_route_dialog->requested_instrument ();
RouteGroup* route_group = add_route_dialog->route_group ();
AutoConnectOption oac = Config->get_output_auto_connect();
+ bool strict_io = add_route_dialog->use_strict_io ();
if (oac & AutoConnectMaster) {
output_chan.set (DataType::AUDIO, (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan.n_audio()));
@@ -3955,19 +3995,19 @@ ARDOUR_UI::add_route (Gtk::Window* /* ignored */)
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);
+ session_add_audio_track (input_chan.n_audio(), output_chan.n_audio(), add_route_dialog->mode(), route_group, count, name_template, strict_io);
break;
case AddRouteDialog::MidiTrack:
- session_add_midi_track (route_group, count, name_template, instrument);
+ session_add_midi_track (route_group, count, name_template, strict_io, instrument);
break;
case AddRouteDialog::MixedTrack:
- session_add_mixed_track (input_chan, output_chan, route_group, count, name_template, instrument);
+ session_add_mixed_track (input_chan, output_chan, route_group, count, name_template, strict_io, instrument);
break;
case AddRouteDialog::AudioBus:
- session_add_audio_bus (input_chan.n_audio(), output_chan.n_audio(), route_group, count, name_template);
+ session_add_audio_bus (input_chan.n_audio(), output_chan.n_audio(), route_group, count, name_template, strict_io);
break;
case AddRouteDialog::MidiBus:
- session_add_midi_bus (route_group, count, name_template, instrument);
+ session_add_midi_bus (route_group, count, name_template, strict_io, instrument);
break;
}
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 09baa2c9ee..632fe07c85 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -278,27 +278,38 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
ARDOUR::TrackMode mode,
ARDOUR::RouteGroup* route_group,
uint32_t how_many,
- std::string const & name_template
+ std::string const & name_template,
+ bool strict_io
) {
-
- session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template);
+ session_add_audio_route (true, input_channels, output_channels, mode, route_group, how_many, name_template, strict_io);
}
- void session_add_audio_bus (int input_channels, int32_t output_channels, ARDOUR::RouteGroup* route_group,
- uint32_t how_many, std::string const & name_template) {
- session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template);
+ void session_add_audio_bus (
+ int input_channels,
+ int32_t output_channels,
+ ARDOUR::RouteGroup* route_group,
+ uint32_t how_many,
+ std::string const & name_template,
+ bool strict_io
+ ) {
+ session_add_audio_route (false, input_channels, output_channels, ARDOUR::Normal, route_group, how_many, name_template, strict_io);
}
-
- void session_add_midi_track (ARDOUR::RouteGroup* route_group, uint32_t how_many, std::string const & name_template,
+ void session_add_midi_track (
+ ARDOUR::RouteGroup* route_group,
+ uint32_t how_many,
+ std::string const & name_template,
+ bool strict_io,
ARDOUR::PluginInfoPtr instrument) {
- session_add_midi_route (true, route_group, how_many, name_template, instrument);
+ session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument);
}
- void session_add_mixed_track (const ARDOUR::ChanCount& input, const ARDOUR::ChanCount& output, ARDOUR::RouteGroup* route_group, uint32_t how_many, std::string const & name_template,
- ARDOUR::PluginInfoPtr instrument);
+ void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr);
+ void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr);
+ void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool);
+ void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr);
- void session_add_midi_bus (ARDOUR::RouteGroup* route_group, uint32_t how_many, std::string const & name_template, ARDOUR::PluginInfoPtr instrument);
+ void display_insufficient_ports_message ();
void attach_to_engine ();
void post_engine ();
@@ -601,9 +612,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void edit_metadata ();
void import_metadata ();
- void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &);
- void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, ARDOUR::PluginInfoPtr);
-
void set_transport_sensitivity (bool);
//stuff for ProTools-style numpad