we always only use the "C" locale when saving.
[ardour.git] / gtk2_ardour / add_route_dialog.cc
index 0a146470022cb70489bd39c080cd7811685f906d..50db64d3fe9c3ec54e7083bc4736ec8782f69d6d 100644 (file)
@@ -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;
@@ -77,15 +78,19 @@ AddRouteDialog::AddRouteDialog ()
        track_bus_combo.append_text (_("Audio Tracks"));
        track_bus_combo.append_text (_("MIDI Tracks"));
        track_bus_combo.append_text (_("Audio+MIDI Tracks"));
-       track_bus_combo.append_text (_("Busses"));
+       track_bus_combo.append_text (_("Audio Busses"));
+       track_bus_combo.append_text (_("MIDI Busses"));
        track_bus_combo.set_active (0);
 
        insert_at_combo.append_text (_("First"));
        insert_at_combo.append_text (_("Before Selection"));
        insert_at_combo.append_text (_("After Selection"));
        insert_at_combo.append_text (_("Last"));
+       insert_at_combo.set_active (3);
 
-       insert_at_combo.set_active (1);
+       strict_io_combo.append_text (_("Flexible-I/O"));
+       strict_io_combo.append_text (_("Strict-I/O"));
+       strict_io_combo.set_active (Config->get_strict_io () ? 1 : 0);
 
        VBox* vbox = manage (new VBox);
        Gtk::Label* l;
@@ -135,16 +140,10 @@ AddRouteDialog::AddRouteDialog ()
        table2->attach (channel_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0);
        ++n;
 
-       if (!ARDOUR::Profile->get_sae ()) {
-
-               /* Track mode */
-
-               mode_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
-               table2->attach (mode_label, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0);
-               table2->attach (mode_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0);
-               ++n;
-
-       }
+       mode_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
+       table2->attach (mode_label, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0);
+       table2->attach (mode_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0);
+       ++n;
 
        instrument_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
        table2->attach (instrument_label, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0);
@@ -164,6 +163,20 @@ 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.. */
+
+       if (Profile->get_mixbus ()) {
+               strict_io_combo.set_active (1);
+       } else {
+               l = manage (new Label (_("Output Ports:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false));
+               table2->attach (*l, 1, 2, n, n + 1, Gtk::FILL, Gtk::EXPAND, 0, 0);
+               table2->attach (strict_io_combo, 2, 3, n, n + 1, Gtk::FILL, Gtk::EXPAND | Gtk::FILL, 0, 0);
+
+               ARDOUR_UI_UTILS::set_tooltip (strict_io_combo,
+                               _("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."));
+               ++n;
+       }
+
        options_box->pack_start (*table2, false, true);
        vbox->pack_start (*options_box, false, true);
 
@@ -204,8 +217,10 @@ AddRouteDialog::TypeWanted
 AddRouteDialog::type_wanted() const
 {
        std::string str = track_bus_combo.get_active_text();
-       if (str == _("Busses")) {
+       if (str == _("Audio Busses")) {
                return AudioBus;
+       } else if (str == _("MIDI Busses")){
+               return MidiBus;
        } else if (str == _("MIDI Tracks")){
                return MidiTrack;
        } else if (str == _("Audio+MIDI Tracks")) {
@@ -224,9 +239,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_combo.set_sensitive (false);
                return;
        }
 
+       strict_io_combo.set_sensitive (true);
+
        switch (type_wanted()) {
        case AudioTrack:
                name_template_entry.set_text (_("Audio"));
@@ -238,6 +256,7 @@ AddRouteDialog::maybe_update_name_template_entry ()
                name_template_entry.set_text (_("Audio+MIDI"));
                break;
        case AudioBus:
+       case MidiBus:
                name_template_entry.set_text (_("Bus"));
                break;
        }
@@ -286,6 +305,14 @@ AddRouteDialog::track_type_chosen ()
                mode_label.set_sensitive (true);
                instrument_label.set_sensitive (false);
                break;
+       case MidiBus:
+               mode_combo.set_sensitive (false);
+               channel_combo.set_sensitive (false);
+               instrument_combo.set_sensitive (true);
+               configuration_label.set_sensitive (false);
+               mode_label.set_sensitive (true);
+               instrument_label.set_sensitive (true);
+               break;
        }
 
        maybe_update_name_template_entry ();
@@ -325,11 +352,8 @@ AddRouteDialog::refill_track_modes ()
        vector<string> s;
 
        s.push_back (_("Normal"));
-
-       if (!ARDOUR::Profile->get_sae ()) {
-               s.push_back (_("Non Layered"));
-               s.push_back (_("Tape"));
-       }
+       s.push_back (_("Non Layered"));
+       s.push_back (_("Tape"));
 
        set_popdown_strings (mode_combo, s);
        mode_combo.set_active_text (s.front());
@@ -338,10 +362,6 @@ AddRouteDialog::refill_track_modes ()
 ARDOUR::TrackMode
 AddRouteDialog::mode ()
 {
-       if (ARDOUR::Profile->get_sae()) {
-               return ARDOUR::Normal;
-       }
-
        std::string str = mode_combo.get_active_text();
        if (str == _("Normal")) {
                return ARDOUR::Normal;
@@ -376,6 +396,7 @@ AddRouteDialog::channels ()
                ret.set (DataType::MIDI, 0);
                break;
 
+       case MidiBus:
        case MidiTrack:
                ret.set (DataType::AUDIO, 0);
                ret.set (DataType::MIDI, 1);
@@ -441,49 +462,47 @@ AddRouteDialog::refill_channel_setups ()
 
        ARDOUR::find_route_templates (route_templates);
 
-       if (!ARDOUR::Profile->get_sae()) {
-               if (!route_templates.empty()) {
-                       vector<string> v;
-                       for (vector<TemplateInfo>::iterator x = route_templates.begin(); x != route_templates.end(); ++x) {
-                               chn.name = x->name;
-                               chn.channels = 0;
-                               chn.template_path = x->path;
-                               channel_setups.push_back (chn);
-                       }
+       if (!route_templates.empty()) {
+               vector<string> v;
+               for (vector<TemplateInfo>::iterator x = route_templates.begin(); x != route_templates.end(); ++x) {
+                       chn.name = x->name;
+                       chn.channels = 0;
+                       chn.template_path = x->path;
+                       channel_setups.push_back (chn);
                }
+       }
 
-               /* clear template path for the rest */
+       /* clear template path for the rest */
 
-               chn.template_path = "";
+       chn.template_path = "";
 
-               chn.name = _("3 Channel");
-               chn.channels = 3;
-               channel_setups.push_back (chn);
+       chn.name = _("3 Channel");
+       chn.channels = 3;
+       channel_setups.push_back (chn);
 
-               chn.name = _("4 Channel");
-               chn.channels = 4;
-               channel_setups.push_back (chn);
+       chn.name = _("4 Channel");
+       chn.channels = 4;
+       channel_setups.push_back (chn);
 
-               chn.name = _("5 Channel");
-               chn.channels = 5;
-               channel_setups.push_back (chn);
+       chn.name = _("5 Channel");
+       chn.channels = 5;
+       channel_setups.push_back (chn);
 
-               chn.name = _("6 Channel");
-               chn.channels = 6;
-               channel_setups.push_back (chn);
+       chn.name = _("6 Channel");
+       chn.channels = 6;
+       channel_setups.push_back (chn);
 
-               chn.name = _("8 Channel");
-               chn.channels = 8;
-               channel_setups.push_back (chn);
+       chn.name = _("8 Channel");
+       chn.channels = 8;
+       channel_setups.push_back (chn);
 
-               chn.name = _("12 Channel");
-               chn.channels = 12;
-               channel_setups.push_back (chn);
+       chn.name = _("12 Channel");
+       chn.channels = 12;
+       channel_setups.push_back (chn);
 
-               chn.name = _("Custom");
-               chn.channels = 0;
-               channel_setups.push_back (chn);
-       }
+       chn.name = _("Custom");
+       chn.channels = 0;
+       channel_setups.push_back (chn);
 
        for (ChannelSetups::iterator i = channel_setups.begin(); i != channel_setups.end(); ++i) {
                channel_combo_strings.push_back ((*i).name);
@@ -509,6 +528,11 @@ AddRouteDialog::route_group ()
        return _session->route_group_by_name (route_group_combo.get_active_text());
 }
 
+bool
+AddRouteDialog::use_strict_io() {
+       return strict_io_combo.get_active_row_number () == 1;
+}
+
 void
 AddRouteDialog::refill_route_groups ()
 {