re-group preferences part five of 27 (probably)
authorRobin Gareus <robin@gareus.org>
Fri, 30 Dec 2016 00:50:40 +0000 (01:50 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 30 Dec 2016 00:50:40 +0000 (01:50 +0100)
gtk2_ardour/rc_option_editor.cc

index 31f5d611ff6b8dec7ff8a1a2f7fd4e2eeca8bfca..efae728796755bcc21cbdddb0b04a39d21d2e6d4 100644 (file)
@@ -2201,302 +2201,11 @@ RCOptionEditor::RCOptionEditor ()
                                                            PROGRAM_NAME));
        add_option (_("Misc"), tsf);
 
-       /* TRANSPORT */
-
-       add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options")));
-
-       tsf = new BoolOption (
-                    "latched-record-enable",
-                    _("Keep record-enable engaged on stop"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_latched_record_enable),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_latched_record_enable)
-                    );
-       // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "loop-is-mode",
-                    _("Play loop is a transport mode"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_loop_is_mode),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_loop_is_mode)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
-                                           (_("<b>When enabled</b> the loop button does not start playback but forces playback to always play the loop\n\n"
-                                              "<b>When disabled</b> the loop button starts playing the loop, but stop then cancels loop playback")));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "stop-recording-on-xrun",
-                    _("Stop recording when an xrun occurs"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_recording_on_xrun),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_recording_on_xrun)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
-                                           string_compose (_("<b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine"),
-                                                           PROGRAM_NAME));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "create-xrun-marker",
-                    _("Create markers where xruns occur"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_create_xrun_marker),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_create_xrun_marker)
-                    );
-       // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "stop-at-session-end",
-                    _("Stop at the end of the session"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_at_session_end),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_at_session_end)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
-                                           string_compose (_("<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the transport "
-                                                             "when it reaches the current session end marker\n\n"
-                                                             "<b>When disabled</b> %1 will continue to roll past the session end marker at all times"),
-                                                           PROGRAM_NAME));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "seamless-loop",
-                    _("Do seamless looping (not possible when slaved to MTC, LTC etc)"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_seamless_loop),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_seamless_loop)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
-                                           string_compose (_("<b>When enabled</b> this will loop by reading ahead and wrapping around at the loop point, "
-                                                             "preventing any need to do a transport locate at the end of the loop\n\n"
-                                                             "<b>When disabled</b> looping is done by locating back to the start of the loop when %1 reaches the end "
-                                                             "which will often cause a small click or delay"), PROGRAM_NAME));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "disable-disarm-during-roll",
-                    _("Disable per-track record disarm while rolling"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_disable_disarm_during_roll),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_disable_disarm_during_roll)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("<b>When enabled</b> this will prevent you from accidentally stopping specific tracks recording during a take"));
-       add_option (_("Transport"), tsf);
-
-       tsf = new BoolOption (
-                    "quieten_at_speed",
-                    _("12dB gain reduction during fast-forward and fast-rewind"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_quieten_at_speed),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_quieten_at_speed)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("This will reduce the unpleasant increase in perceived volume "
-                                                  "that occurs when fast-forwarding or rewinding through some kinds of audio"));
-       add_option (_("Transport"), tsf);
-
-       ComboOption<float>* psc = new ComboOption<float> (
-                    "preroll-seconds",
-                    _("Preroll"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_preroll_seconds),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_preroll_seconds)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip (psc->tip_widget(),
-                                           (_("The amount of preroll (in seconds) to apply when <b>Play with Preroll</b> is initiated.\n\n"
-                                              "If <b>Follow Edits</b> is enabled, the preroll is applied to the playhead position when a region is selected or trimmed.")));
-       psc->add (0.0, _("0 (no pre-roll)"));
-       psc->add (0.1, _("0.1 second"));
-       psc->add (0.25, _("0.25 second"));
-       psc->add (0.5, _("0.5 second"));
-       psc->add (1.0, _("1.0 second"));
-       psc->add (2.0, _("2.0 seconds"));
-       add_option (_("Transport"), psc);
-
-       add_option (_("Sync"), new OptionEditorHeading (S_("Synchronization and Slave Options")));
-
-       _sync_source = new ComboOption<SyncSource> (
-               "sync-source",
-               _("External timecode source"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_source),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_source)
-               );
-
-       add_option (_("Sync"), _sync_source);
-
-       _sync_framerate = new BoolOption (
-                    "timecode-sync-frame-rate",
-                    _("Match session video frame rate to external timecode"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_sync_frame_rate),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_sync_frame_rate)
-                    );
-       Gtkmm2ext::UI::instance()->set_tip
-               (_sync_framerate->tip_widget(),
-                string_compose (_("This option controls the value of the video frame rate <i>while chasing</i> an external timecode source.\n\n"
-                                  "<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n"
-                                  "<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source."
-                                  "Instead the frame rate indication in the main clock will flash red and %1 will convert between the external "
-                                  "timecode standard and the session standard."), PROGRAM_NAME));
-
-       add_option (_("Sync"), _sync_framerate);
-
-       _sync_genlock = new BoolOption (
-               "timecode-source-is-synced",
-               _("Sync-lock timecode to clock (disable drift compensation)"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_is_synced),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_is_synced)
-               );
-       Gtkmm2ext::UI::instance()->set_tip
-               (_sync_genlock->tip_widget(),
-                string_compose (_("<b>When enabled</b> %1 will never varispeed when slaved to external timecode. "
-                                  "Sync Lock indicates that the selected external timecode source shares clock-sync "
-                                  "(Black &amp; Burst, Wordclock, etc) with the audio interface. "
-                                  "This option disables drift compensation. The transport speed is fixed at 1.0. "
-                                  "Vari-speed LTC will be ignored and cause drift."
-                                  "\n\n"
-                                  "<b>When disabled</b> %1 will compensate for potential drift, regardless if the "
-                                  "timecode sources shares clock sync."
-                                 ), PROGRAM_NAME));
-
-
-       add_option (_("Sync"), _sync_genlock);
-
-       _sync_source_2997 = new BoolOption (
-               "timecode-source-2997",
-               _("Lock to 29.9700 fps instead of 30000/1001"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_2997),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997)
-               );
-       Gtkmm2ext::UI::instance()->set_tip
-               (_sync_source_2997->tip_widget(),
-                _("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
-                        "SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
-                        "drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n"
-                        "Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
-                        "That is not the actual rate. However, some vendors use that rate - despite it being against the specs - "
-                        "because the variant of using exactly 29.97 fps has zero timecode drift.\n"
-                        ));
-
-       add_option (_("Sync"), _sync_source_2997);
-
-       add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Reader")));
-
-       _ltc_port = new ComboStringOption (
-               "ltc-source-port",
-               _("LTC incoming port"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_source_port),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_source_port)
-               );
-
-       vector<string> physical_inputs;
-       physical_inputs.push_back (_("None"));
-       AudioEngine::instance()->get_physical_inputs (DataType::AUDIO, physical_inputs);
-       _ltc_port->set_popdown_strings (physical_inputs);
-
-       populate_sync_options ();
-       AudioEngine::instance()->Running.connect (engine_started_connection, MISSING_INVALIDATOR, boost::bind (&RCOptionEditor::populate_sync_options, this), gui_context());
-
-       add_option (_("Sync/LTC"), _ltc_port);
-
-       add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Generator")));
-
-       add_option (_("Sync/LTC"),
-                   new BoolOption (
-                           "send-ltc",
-                           _("Enable LTC generator"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_ltc),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_ltc)
-                           ));
-
-       _ltc_send_continuously = new BoolOption (
-                           "ltc-send-continuously",
-                           _("Send LTC while stopped"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_send_continuously),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_send_continuously)
-                           );
-       Gtkmm2ext::UI::instance()->set_tip
-               (_ltc_send_continuously->tip_widget(),
-                string_compose (_("<b>When enabled</b> %1 will continue to send LTC information even when the transport (playhead) is not moving"), PROGRAM_NAME));
-       add_option (_("Sync/LTC"), _ltc_send_continuously);
-
-       _ltc_volume_slider = new HSliderOption("ltcvol", _("LTC generator level"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_output_volume),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_output_volume),
-                                       -50, 0, .5, 5,
-                                       .05, true);
-
-       Gtkmm2ext::UI::instance()->set_tip
-               (_ltc_volume_slider->tip_widget(),
-                _("Specify the Peak Volume of the generated LTC signal in dBFS. A good value is  0dBu ^= -18dBFS in an EBU calibrated system"));
-
-       add_option (_("Sync/LTC"), _ltc_volume_slider);
-
-
-       add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Clock Generator")));
-
-       add_option (_("Sync/MIDI"),
-                   new BoolOption (
-                           "send-midi-clock",
-                           _("Send MIDI Clock"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_midi_clock),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_midi_clock)
-                           ));
-
-       add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Time Code (MTC) Generator")));
-
-       add_option (_("Sync/MIDI"),
-                   new BoolOption (
-                           "send-mtc",
-                           _("Send MIDI Time Code"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mtc),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mtc)
-                           ));
-
-       add_option (_("Sync/MIDI"),
-                   new SpinOption<int> (
-                           "mtc-qf-speed-tolerance",
-                           _("Percentage either side of normal transport speed to transmit MTC"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_mtc_qf_speed_tolerance),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_mtc_qf_speed_tolerance),
-                           0, 20, 1, 5
-                           ));
-
-       add_option (_("Sync/MIDI"), new OptionEditorHeading (_("Midi Machine Control (MMC)")));
-
-       add_option (_("Sync/MIDI"),
-                   new BoolOption (
-                           "mmc-control",
-                           _("Respond to MMC commands"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_control),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_control)
-                           ));
-
-       add_option (_("Sync/MIDI"),
-                   new BoolOption (
-                           "send-mmc",
-                           _("Send MMC commands"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mmc),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mmc)
-                           ));
-
-       add_option (_("Sync/MIDI"),
-            new SpinOption<uint8_t> (
-                    "mmc-receive-device-id",
-                    _("Inbound MMC device ID"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_receive_device_id),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_receive_device_id),
-                    0, 128, 1, 10
-                    ));
-
-       add_option (_("Sync/MIDI"),
-            new SpinOption<uint8_t> (
-                    "mmc-send-device-id",
-                    _("Outbound MMC device ID"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_send_device_id),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_send_device_id),
-                    0, 128, 1, 10
-                    ));
-
-
        /* EDITOR */
 
-       add_option (_("Editing"), new OptionEditorHeading (_("Editor Settings")));
+       add_option (_("Editor"), new OptionEditorHeading (_("Editor Settings")));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
             new BoolOption (
                     "rubberbanding-snaps-to-grid",
                     _("Make rubberband selection rectangle snap to the grid"),
@@ -2510,11 +2219,11 @@ RCOptionEditor::RCOptionEditor ()
                     sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_name_new_markers),
                     sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_name_new_markers)
                );
-       add_option (_("Editing"), bo);
+       add_option (_("Editor"), bo);
        Gtkmm2ext::UI::instance()->set_tip (bo->tip_widget(), _("If enabled, popup a dialog when a new marker is created to allow its name to be set as it is created."
                                                                "\n\nYou can always rename markers by right-clicking on them"));
 
-       add_option (S_("Editing"),
+       add_option (S_("Editor"),
             new BoolOption (
                     "draggable-playhead",
                     _("Allow dragging of playhead"),
@@ -2523,7 +2232,7 @@ RCOptionEditor::RCOptionEditor ()
                     ));
 
 if (!Profile->get_mixbus()) {
-       add_option (_("Editing"),
+       add_option (_("Editor"),
                    new BoolOption (
                            "show-zoom-tools",
                            _("Show zoom toolbar (if torn off)"),
@@ -2531,7 +2240,7 @@ if (!Profile->get_mixbus()) {
                            sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_zoom_tools)
                            ));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
                    new BoolOption (
                            "use-mouse-position-as-zoom-focus-on-scroll",
                            _("Always use mouse cursor position as zoom focus when zooming using mouse scroll wheel"),
@@ -2540,7 +2249,7 @@ if (!Profile->get_mixbus()) {
                            ));
 }  // !mixbus
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
                    new BoolOption (
                            "use-time-rulers-to-zoom-with-vertical-drag",
                            _("Use time rulers area to zoom when clicking and dragging vertically"),
@@ -2548,7 +2257,7 @@ if (!Profile->get_mixbus()) {
                            sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_time_rulers_to_zoom_with_vertical_drag)
                            ));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
                    new BoolOption (
                            "use-double-click-to-zoom-to-selection",
                            _("Use double mouse click to zoom to selection"),
@@ -2556,7 +2265,7 @@ if (!Profile->get_mixbus()) {
                            sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_use_double_click_to_zoom_to_selection)
                            ));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
                    new BoolOption (
                            "update-editor-during-summary-drag",
                            _("Update editor window during drags of the summary"),
@@ -2564,7 +2273,7 @@ if (!Profile->get_mixbus()) {
                            sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_update_editor_during_summary_drag)
                            ));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
            new BoolOption (
                    "autoscroll-editor",
                    _("Auto-scroll editor window when dragging near its edges"),
@@ -2572,7 +2281,7 @@ if (!Profile->get_mixbus()) {
                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_autoscroll_editor)
                    ));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
             new BoolComboOption (
                     "show-region-gain-envelopes",
                     _("Show gain envelopes in audio regions"),
@@ -2582,9 +2291,9 @@ if (!Profile->get_mixbus()) {
                     sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_gain)
                     ));
 
-       add_option (_("Editing"), new OptionEditorHeading (_("Editor Behavior")));
+       add_option (_("Editor"), new OptionEditorHeading (_("Editor Behavior")));
 
-       add_option (_("Editing"),
+       add_option (_("Editor"),
             new BoolOption (
                     "automation-follows-regions",
                     _("Move relevant automation when audio regions are moved"),
@@ -2608,7 +2317,7 @@ if (!Profile->get_mixbus()) {
        fadeshape->add (FadeSlow, _("Slow"));
        fadeshape->add (FadeFast, _("Fast"));
 
-       add_option (_("Editing"), fadeshape);
+       add_option (_("Editor"), fadeshape);
 
        bco = new BoolComboOption (
                     "use-overlap-equivalency",
@@ -2619,7 +2328,7 @@ if (!Profile->get_mixbus()) {
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_use_overlap_equivalency)
                     );
 
-       add_option (_("Editing"), bco);
+       add_option (_("Editor"), bco);
 
        ComboOption<LayerModel>* lm = new ComboOption<LayerModel> (
                "layer-model",
@@ -2630,25 +2339,153 @@ if (!Profile->get_mixbus()) {
 
        lm->add (LaterHigher, _("later is higher"));
        lm->add (Manual, _("manual layering"));
-       add_option (_("Editing"), lm);
+       add_option (_("Editor"), lm);
+
+       ComboOption<RegionSelectionAfterSplit> *rsas = new ComboOption<RegionSelectionAfterSplit> (
+                   "region-selection-after-split",
+                   _("After splitting selected regions, select"),
+                   sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_selection_after_split),
+                   sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_selection_after_split));
+
+       // TODO: decide which of these modes are really useful
+       rsas->add(None, _("no regions"));
+       // rsas->add(NewlyCreatedLeft, _("newly-created regions before the split"));
+       // rsas->add(NewlyCreatedRight, _("newly-created regions after the split"));
+       rsas->add(NewlyCreatedBoth, _("newly-created regions"));
+       // rsas->add(Existing, _("unmodified regions in the existing selection"));
+       // rsas->add(ExistingNewlyCreatedLeft, _("existing selection and newly-created regions before the split"));
+       // rsas->add(ExistingNewlyCreatedRight, _("existing selection and newly-created regions after the split"));
+       rsas->add(ExistingNewlyCreatedBoth, _("existing selection and newly-created regions"));
+
+       add_option (_("Editor"), rsas);
+
+       /* MIXER -- SOLO AND MUTE */
+
+       add_option (_("Mixer"), new OptionEditorHeading (_("Solo")));
+
+       _solo_control_is_listen_control = new BoolOption (
+               "solo-control-is-listen-control",
+               _("Solo controls are Listen controls"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control)
+               );
+
+       add_option (_("Mixer"), _solo_control_is_listen_control);
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "exclusive-solo",
+                    _("Exclusive solo"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_exclusive_solo),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_exclusive_solo)
+                    ));
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "show-solo-mutes",
+                    _("Show solo muting"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_solo_mutes),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_solo_mutes)
+                    ));
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "solo-mute-override",
+                    _("Soloing overrides muting"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_override),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_override)
+                    ));
+
+       add_option (_("Mixer"),
+            new FaderOption (
+                    "solo-mute-gain",
+                    _("Solo-in-place mute cut (dB)"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_gain),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_gain)
+                    ));
+
+       _listen_position = new ComboOption<ListenPosition> (
+               "listen-position",
+               _("Listen Position"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_listen_position),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_listen_position)
+               );
+
+       _listen_position->add (AfterFaderListen, _("after-fader (AFL)"));
+       _listen_position->add (PreFaderListen, _("pre-fader (PFL)"));
+
+       add_option (_("Mixer"), _listen_position);
+
+       ComboOption<PFLPosition>* pp = new ComboOption<PFLPosition> (
+               "pfl-position",
+               _("PFL signals come from"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_pfl_position),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_pfl_position)
+               );
+
+       pp->add (PFLFromBeforeProcessors, _("before pre-fader processors"));
+       pp->add (PFLFromAfterProcessors, _("pre-fader but after pre-fader processors"));
+
+       add_option (_("Mixer"), pp);
+
+       ComboOption<AFLPosition>* pa = new ComboOption<AFLPosition> (
+               "afl-position",
+               _("AFL signals come from"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_afl_position),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_afl_position)
+               );
+
+       pa->add (AFLFromBeforeProcessors, _("immediately post-fader"));
+       pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)"));
+
+       add_option (_("Mixer"), pa);
+
+       add_option (_("Mixer"), new OptionEditorHeading (_("Default track / bus muting options")));
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "mute-affects-pre-fader",
+                    _("Mute affects pre-fader sends"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_pre_fader),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_pre_fader)
+                    ));
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "mute-affects-post-fader",
+                    _("Mute affects post-fader sends"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_post_fader),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_post_fader)
+                    ));
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "mute-affects-control-outs",
+                    _("Mute affects control outputs"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_control_outs),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_control_outs)
+                    ));
+
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "mute-affects-main-outs",
+                    _("Mute affects main outputs"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_main_outs),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs)
+                    ));
 
-       ComboOption<RegionSelectionAfterSplit> *rsas = new ComboOption<RegionSelectionAfterSplit> (
-                   "region-selection-after-split",
-                   _("After splitting selected regions, select"),
-                   sigc::mem_fun (*_rc_config, &RCConfiguration::get_region_selection_after_split),
-                   sigc::mem_fun (*_rc_config, &RCConfiguration::set_region_selection_after_split));
 
-       // TODO: decide which of these modes are really useful
-       rsas->add(None, _("no regions"));
-       // rsas->add(NewlyCreatedLeft, _("newly-created regions before the split"));
-       // rsas->add(NewlyCreatedRight, _("newly-created regions after the split"));
-       rsas->add(NewlyCreatedBoth, _("newly-created regions"));
-       // rsas->add(Existing, _("unmodified regions in the existing selection"));
-       // rsas->add(ExistingNewlyCreatedLeft, _("existing selection and newly-created regions before the split"));
-       // rsas->add(ExistingNewlyCreatedRight, _("existing selection and newly-created regions after the split"));
-       rsas->add(ExistingNewlyCreatedBoth, _("existing selection and newly-created regions"));
+if (!ARDOUR::Profile->get_mixbus()) {
+       add_option (_("Mixer"), new OptionEditorHeading (_("Send Routing")));
+       add_option (_("Mixer"),
+            new BoolOption (
+                    "link-send-and-route-panner",
+                    _("Link panners of Aux and External Sends with main panner by default"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_send_and_route_panner),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_send_and_route_panner)
+                    ));
+}
 
-       add_option (_("Editing"), rsas);
 
        /* AUDIO */
 
@@ -2684,7 +2521,7 @@ if (!Profile->get_mixbus()) {
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_tape_machine_mode)
                     ));
 
-       add_option (_("Audio"), new OptionEditorHeading (_("Connection of tracks and busses")));
+       add_option (_("Audio"), new OptionEditorHeading (_("Track and Bus Connections")));
 if (!Profile->get_mixbus()) {
 
        add_option (_("Audio"),
@@ -2800,222 +2637,391 @@ if (!Profile->get_mixbus()) {
                     sigc::mem_fun (*_rc_config, &RCConfiguration::set_replicate_missing_region_channels)
                     ));
 
-       /* SOLO AND MUTE */
-
-       add_option (_("Solo & mute"), new OptionEditorHeading (_("Solo")));
+       /* MIDI */
 
-       _solo_control_is_listen_control = new BoolOption (
-               "solo-control-is-listen-control",
-               _("Solo controls are Listen controls"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control)
-               );
+       add_option (_("MIDI"), new OptionEditorHeading (_("MIDI Preferences")));
 
-       add_option (_("Solo & mute"), _solo_control_is_listen_control);
+       add_option (_("MIDI"),
+                   new SpinOption<float> (
+                           "midi-readahead",
+                           _("MIDI read-ahead time (seconds)"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_readahead),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_readahead),
+                           0.1, 10, 0.05, 1,
+                           "", 1.0, 2
+                           ));
 
-       add_option (_("Solo & mute"),
-            new BoolOption (
-                    "exclusive-solo",
-                    _("Exclusive solo"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_exclusive_solo),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_exclusive_solo)
+       add_option (_("MIDI"),
+            new SpinOption<int32_t> (
+                    "initial-program-change",
+                    _("Initial program change"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_initial_program_change),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_initial_program_change),
+                    -1, 65536, 1, 10
                     ));
 
-       add_option (_("Solo & mute"),
+       add_option (_("MIDI"),
+                   new BoolOption (
+                           "display-first-midi-bank-as-zero",
+                           _("Display first MIDI bank/program as 0"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_first_midi_bank_is_zero),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero)
+                           ));
+
+       add_option (_("MIDI"),
             new BoolOption (
-                    "show-solo-mutes",
-                    _("Show solo muting"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_show_solo_mutes),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_show_solo_mutes)
+                    "never-display-periodic-midi",
+                    _("Never display periodic MIDI messages (MTC, MIDI Clock)"),
+                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_never_display_periodic_midi),
+                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_never_display_periodic_midi)
                     ));
 
-       add_option (_("Solo & mute"),
+       add_option (_("MIDI"),
             new BoolOption (
-                    "solo-mute-override",
-                    _("Soloing overrides muting"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_override),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_override)
+                    "sound-midi-notes",
+                    _("Sound MIDI notes as they are selected in the editor"),
+                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_sound_midi_notes),
+                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_sound_midi_notes)
                     ));
 
-       add_option (_("Solo & mute"),
-            new FaderOption (
-                    "solo-mute-gain",
-                    _("Solo-in-place mute cut (dB)"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_solo_mute_gain),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_solo_mute_gain)
-                    ));
+       add_option (_("MIDI"),
+                   new BoolOption (
+                           "midi-feedback",
+                           _("Send MIDI control feedback"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_feedback),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_feedback)
+                           ));
+
+       add_option (_("MIDI"), new OptionEditorHeading (_("Midi Audition")));
+
+       ComboOption<std::string>* audition_synth = new ComboOption<std::string> (
+               "midi-audition-synth-uri",
+               _("Midi Audition Synth (LV2)"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_audition_synth_uri),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_audition_synth_uri)
+               );
+
+       audition_synth->add(X_(""), _("None"));
+       PluginInfoList all_plugs;
+       PluginManager& manager (PluginManager::instance());
+#ifdef LV2_SUPPORT
+       all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end());
+
+       for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
+               if (manager.get_status (*i) == PluginManager::Hidden) continue;
+               if (!(*i)->is_instrument()) continue;
+               if ((*i)->type != ARDOUR::LV2) continue;
+               if ((*i)->name.length() > 46) {
+                       audition_synth->add((*i)->unique_id, (*i)->name.substr (0, 44) + "...");
+               } else {
+                       audition_synth->add((*i)->unique_id, (*i)->name);
+               }
+       }
+#endif
+
+       add_option (_("MIDI"), audition_synth);
+
+       /* Click */
+
+       add_option (_("Metronome"), new OptionEditorHeading (_("Click")));
+       add_option (_("Metronome"), new ClickOptions (_rc_config));
+
+
+       /* TRANSPORT & Sync */
+
+       add_option (_("Transport"), new OptionEditorHeading (S_("Transport Options")));
+
+       tsf = new BoolOption (
+                    "latched-record-enable",
+                    _("Keep record-enable engaged on stop"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_latched_record_enable),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_latched_record_enable)
+                    );
+       // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "loop-is-mode",
+                    _("Play loop is a transport mode"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_loop_is_mode),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_loop_is_mode)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+                                           (_("<b>When enabled</b> the loop button does not start playback but forces playback to always play the loop\n\n"
+                                              "<b>When disabled</b> the loop button starts playing the loop, but stop then cancels loop playback")));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "stop-recording-on-xrun",
+                    _("Stop recording when an xrun occurs"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_recording_on_xrun),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_recording_on_xrun)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+                                           string_compose (_("<b>When enabled</b> %1 will stop recording if an over- or underrun is detected by the audio engine"),
+                                                           PROGRAM_NAME));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "create-xrun-marker",
+                    _("Create markers where xruns occur"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_create_xrun_marker),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_create_xrun_marker)
+                    );
+       // Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _(""));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "stop-at-session-end",
+                    _("Stop at the end of the session"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_stop_at_session_end),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_stop_at_session_end)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+                                           string_compose (_("<b>When enabled</b> if %1 is <b>not recording</b>, it will stop the transport "
+                                                             "when it reaches the current session end marker\n\n"
+                                                             "<b>When disabled</b> %1 will continue to roll past the session end marker at all times"),
+                                                           PROGRAM_NAME));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "seamless-loop",
+                    _("Do seamless looping (not possible when slaved to MTC, LTC etc)"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_seamless_loop),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_seamless_loop)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(),
+                                           string_compose (_("<b>When enabled</b> this will loop by reading ahead and wrapping around at the loop point, "
+                                                             "preventing any need to do a transport locate at the end of the loop\n\n"
+                                                             "<b>When disabled</b> looping is done by locating back to the start of the loop when %1 reaches the end "
+                                                             "which will often cause a small click or delay"), PROGRAM_NAME));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "disable-disarm-during-roll",
+                    _("Disable per-track record disarm while rolling"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_disable_disarm_during_roll),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_disable_disarm_during_roll)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("<b>When enabled</b> this will prevent you from accidentally stopping specific tracks recording during a take"));
+       add_option (_("Transport"), tsf);
+
+       tsf = new BoolOption (
+                    "quieten_at_speed",
+                    _("12dB gain reduction during fast-forward and fast-rewind"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_quieten_at_speed),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_quieten_at_speed)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (tsf->tip_widget(), _("This will reduce the unpleasant increase in perceived volume "
+                                                  "that occurs when fast-forwarding or rewinding through some kinds of audio"));
+       add_option (_("Transport"), tsf);
+
+       ComboOption<float>* psc = new ComboOption<float> (
+                    "preroll-seconds",
+                    _("Preroll"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_preroll_seconds),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_preroll_seconds)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip (psc->tip_widget(),
+                                           (_("The amount of preroll (in seconds) to apply when <b>Play with Preroll</b> is initiated.\n\n"
+                                              "If <b>Follow Edits</b> is enabled, the preroll is applied to the playhead position when a region is selected or trimmed.")));
+       psc->add (0.0, _("0 (no pre-roll)"));
+       psc->add (0.1, _("0.1 second"));
+       psc->add (0.25, _("0.25 second"));
+       psc->add (0.5, _("0.5 second"));
+       psc->add (1.0, _("1.0 second"));
+       psc->add (2.0, _("2.0 seconds"));
+       add_option (_("Transport"), psc);
+
+       add_option (_("Sync"), new OptionEditorHeading (S_("Synchronization and Slave Options")));
+
+       _sync_source = new ComboOption<SyncSource> (
+               "sync-source",
+               _("External timecode source"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_sync_source),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_sync_source)
+               );
+
+       add_option (_("Sync"), _sync_source);
+
+       _sync_framerate = new BoolOption (
+                    "timecode-sync-frame-rate",
+                    _("Match session video frame rate to external timecode"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_sync_frame_rate),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_sync_frame_rate)
+                    );
+       Gtkmm2ext::UI::instance()->set_tip
+               (_sync_framerate->tip_widget(),
+                string_compose (_("This option controls the value of the video frame rate <i>while chasing</i> an external timecode source.\n\n"
+                                  "<b>When enabled</b> the session video frame rate will be changed to match that of the selected external timecode source.\n\n"
+                                  "<b>When disabled</b> the session video frame rate will not be changed to match that of the selected external timecode source."
+                                  "Instead the frame rate indication in the main clock will flash red and %1 will convert between the external "
+                                  "timecode standard and the session standard."), PROGRAM_NAME));
 
-       _listen_position = new ComboOption<ListenPosition> (
-               "listen-position",
-               _("Listen Position"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_listen_position),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_listen_position)
+       add_option (_("Sync"), _sync_framerate);
+
+       _sync_genlock = new BoolOption (
+               "timecode-source-is-synced",
+               _("Sync-lock timecode to clock (disable drift compensation)"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_is_synced),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_is_synced)
                );
+       Gtkmm2ext::UI::instance()->set_tip
+               (_sync_genlock->tip_widget(),
+                string_compose (_("<b>When enabled</b> %1 will never varispeed when slaved to external timecode. "
+                                  "Sync Lock indicates that the selected external timecode source shares clock-sync "
+                                  "(Black &amp; Burst, Wordclock, etc) with the audio interface. "
+                                  "This option disables drift compensation. The transport speed is fixed at 1.0. "
+                                  "Vari-speed LTC will be ignored and cause drift."
+                                  "\n\n"
+                                  "<b>When disabled</b> %1 will compensate for potential drift, regardless if the "
+                                  "timecode sources shares clock sync."
+                                 ), PROGRAM_NAME));
 
-       _listen_position->add (AfterFaderListen, _("after-fader (AFL)"));
-       _listen_position->add (PreFaderListen, _("pre-fader (PFL)"));
 
-       add_option (_("Solo & mute"), _listen_position);
+       add_option (_("Sync"), _sync_genlock);
 
-       ComboOption<PFLPosition>* pp = new ComboOption<PFLPosition> (
-               "pfl-position",
-               _("PFL signals come from"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_pfl_position),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_pfl_position)
+       _sync_source_2997 = new BoolOption (
+               "timecode-source-2997",
+               _("Lock to 29.9700 fps instead of 30000/1001"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_timecode_source_2997),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_timecode_source_2997)
                );
+       Gtkmm2ext::UI::instance()->set_tip
+               (_sync_source_2997->tip_widget(),
+                _("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
+                        "SMPTE 12M-1999 specifies 29.97df as 30000/1001. The spec further mentions that "
+                        "drop-frame timecode has an accumulated error of -86ms over a 24-hour period.\n"
+                        "Drop-frame timecode would compensate exactly for a NTSC color frame rate of 30 * 0.9990 (ie 29.970000). "
+                        "That is not the actual rate. However, some vendors use that rate - despite it being against the specs - "
+                        "because the variant of using exactly 29.97 fps has zero timecode drift.\n"
+                        ));
 
-       pp->add (PFLFromBeforeProcessors, _("before pre-fader processors"));
-       pp->add (PFLFromAfterProcessors, _("pre-fader but after pre-fader processors"));
+       add_option (_("Sync"), _sync_source_2997);
 
-       add_option (_("Solo & mute"), pp);
+       add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Reader")));
 
-       ComboOption<AFLPosition>* pa = new ComboOption<AFLPosition> (
-               "afl-position",
-               _("AFL signals come from"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_afl_position),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_afl_position)
+       _ltc_port = new ComboStringOption (
+               "ltc-source-port",
+               _("LTC incoming port"),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_source_port),
+               sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_source_port)
                );
 
-       pa->add (AFLFromBeforeProcessors, _("immediately post-fader"));
-       pa->add (AFLFromAfterProcessors, _("after post-fader processors (before pan)"));
-
-       add_option (_("Solo & mute"), pa);
-
-       add_option (_("Solo & mute"), new OptionEditorHeading (_("Default track / bus muting options")));
+       vector<string> physical_inputs;
+       physical_inputs.push_back (_("None"));
+       AudioEngine::instance()->get_physical_inputs (DataType::AUDIO, physical_inputs);
+       _ltc_port->set_popdown_strings (physical_inputs);
 
-       add_option (_("Solo & mute"),
-            new BoolOption (
-                    "mute-affects-pre-fader",
-                    _("Mute affects pre-fader sends"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_pre_fader),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_pre_fader)
-                    ));
+       populate_sync_options ();
+       AudioEngine::instance()->Running.connect (engine_started_connection, MISSING_INVALIDATOR, boost::bind (&RCOptionEditor::populate_sync_options, this), gui_context());
 
-       add_option (_("Solo & mute"),
-            new BoolOption (
-                    "mute-affects-post-fader",
-                    _("Mute affects post-fader sends"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_post_fader),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_post_fader)
-                    ));
+       add_option (_("Sync/LTC"), _ltc_port);
 
-       add_option (_("Solo & mute"),
-            new BoolOption (
-                    "mute-affects-control-outs",
-                    _("Mute affects control outputs"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_control_outs),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_control_outs)
-                    ));
+       add_option (_("Sync/LTC"), new OptionEditorHeading (S_("LTC Generator")));
 
-       add_option (_("Solo & mute"),
-            new BoolOption (
-                    "mute-affects-main-outs",
-                    _("Mute affects main outputs"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mute_affects_main_outs),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mute_affects_main_outs)
-                    ));
+       add_option (_("Sync/LTC"),
+                   new BoolOption (
+                           "send-ltc",
+                           _("Enable LTC generator"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_ltc),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_ltc)
+                           ));
 
+       _ltc_send_continuously = new BoolOption (
+                           "ltc-send-continuously",
+                           _("Send LTC while stopped"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_send_continuously),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_send_continuously)
+                           );
+       Gtkmm2ext::UI::instance()->set_tip
+               (_ltc_send_continuously->tip_widget(),
+                string_compose (_("<b>When enabled</b> %1 will continue to send LTC information even when the transport (playhead) is not moving"), PROGRAM_NAME));
+       add_option (_("Sync/LTC"), _ltc_send_continuously);
 
-if (!ARDOUR::Profile->get_mixbus()) {
-       add_option (_("Solo & mute"), new OptionEditorHeading (_("Send Routing")));
-       add_option (_("Solo & mute"),
-            new BoolOption (
-                    "link-send-and-route-panner",
-                    _("Link panners of Aux and External Sends with main panner by default"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_link_send_and_route_panner),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_link_send_and_route_panner)
-                    ));
-}
+       _ltc_volume_slider = new HSliderOption("ltcvol", _("LTC generator level"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_ltc_output_volume),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_ltc_output_volume),
+                                       -50, 0, .5, 5,
+                                       .05, true);
 
-       /* Click */
+       Gtkmm2ext::UI::instance()->set_tip
+               (_ltc_volume_slider->tip_widget(),
+                _("Specify the Peak Volume of the generated LTC signal in dBFS. A good value is  0dBu ^= -18dBFS in an EBU calibrated system"));
 
-       add_option (_("Metronom"), new OptionEditorHeading (_("Click")));
-       add_option (_("Metronom"), new ClickOptions (_rc_config));
+       add_option (_("Sync/LTC"), _ltc_volume_slider);
 
-       /* MIDI */
 
-       add_option (_("MIDI"), new OptionEditorHeading (_("MIDI Preferences")));
+       add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Clock Generator")));
 
-       add_option (_("MIDI"),
-                   new SpinOption<float> (
-                           "midi-readahead",
-                           _("MIDI read-ahead time (seconds)"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_readahead),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_readahead),
-                           0.1, 10, 0.05, 1,
-                           "", 1.0, 2
+       add_option (_("Sync/MIDI"),
+                   new BoolOption (
+                           "send-midi-clock",
+                           _("Send MIDI Clock"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_midi_clock),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_midi_clock)
                            ));
 
-       add_option (_("MIDI"),
-            new SpinOption<int32_t> (
-                    "initial-program-change",
-                    _("Initial program change"),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_initial_program_change),
-                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_initial_program_change),
-                    -1, 65536, 1, 10
-                    ));
+       add_option (_("Sync/MIDI"), new OptionEditorHeading (_("MIDI Time Code (MTC) Generator")));
 
-       add_option (_("MIDI"),
+       add_option (_("Sync/MIDI"),
                    new BoolOption (
-                           "display-first-midi-bank-as-zero",
-                           _("Display first MIDI bank/program as 0"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_first_midi_bank_is_zero),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_first_midi_bank_is_zero)
+                           "send-mtc",
+                           _("Send MIDI Time Code"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mtc),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mtc)
                            ));
 
-       add_option (_("MIDI"),
-            new BoolOption (
-                    "never-display-periodic-midi",
-                    _("Never display periodic MIDI messages (MTC, MIDI Clock)"),
-                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_never_display_periodic_midi),
-                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_never_display_periodic_midi)
-                    ));
+       add_option (_("Sync/MIDI"),
+                   new SpinOption<int> (
+                           "mtc-qf-speed-tolerance",
+                           _("Percentage either side of normal transport speed to transmit MTC"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_mtc_qf_speed_tolerance),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_mtc_qf_speed_tolerance),
+                           0, 20, 1, 5
+                           ));
 
-       add_option (_("MIDI"),
-            new BoolOption (
-                    "sound-midi-notes",
-                    _("Sound MIDI notes as they are selected in the editor"),
-                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_sound_midi_notes),
-                    sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_sound_midi_notes)
-                    ));
+       add_option (_("Sync/MIDI"), new OptionEditorHeading (_("Midi Machine Control (MMC)")));
 
-       add_option (_("MIDI"),
+       add_option (_("Sync/MIDI"),
                    new BoolOption (
-                           "midi-feedback",
-                           _("Send MIDI control feedback"),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_feedback),
-                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_feedback)
+                           "mmc-control",
+                           _("Respond to MMC commands"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_control),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_control)
                            ));
 
-       add_option (_("MIDI"), new OptionEditorHeading (_("Midi Audition")));
+       add_option (_("Sync/MIDI"),
+                   new BoolOption (
+                           "send-mmc",
+                           _("Send MMC commands"),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::get_send_mmc),
+                           sigc::mem_fun (*_rc_config, &RCConfiguration::set_send_mmc)
+                           ));
 
-       ComboOption<std::string>* audition_synth = new ComboOption<std::string> (
-               "midi-audition-synth-uri",
-               _("Midi Audition Synth (LV2)"),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::get_midi_audition_synth_uri),
-               sigc::mem_fun (*_rc_config, &RCConfiguration::set_midi_audition_synth_uri)
-               );
+       add_option (_("Sync/MIDI"),
+            new SpinOption<uint8_t> (
+                    "mmc-receive-device-id",
+                    _("Inbound MMC device ID"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_receive_device_id),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_receive_device_id),
+                    0, 128, 1, 10
+                    ));
 
-       audition_synth->add(X_(""), _("None"));
-       PluginInfoList all_plugs;
-       PluginManager& manager (PluginManager::instance());
-#ifdef LV2_SUPPORT
-       all_plugs.insert (all_plugs.end(), manager.lv2_plugin_info().begin(), manager.lv2_plugin_info().end());
+       add_option (_("Sync/MIDI"),
+            new SpinOption<uint8_t> (
+                    "mmc-send-device-id",
+                    _("Outbound MMC device ID"),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::get_mmc_send_device_id),
+                    sigc::mem_fun (*_rc_config, &RCConfiguration::set_mmc_send_device_id),
+                    0, 128, 1, 10
+                    ));
 
-       for (PluginInfoList::const_iterator i = all_plugs.begin(); i != all_plugs.end(); ++i) {
-               if (manager.get_status (*i) == PluginManager::Hidden) continue;
-               if (!(*i)->is_instrument()) continue;
-               if ((*i)->type != ARDOUR::LV2) continue;
-               if ((*i)->name.length() > 46) {
-                       audition_synth->add((*i)->unique_id, (*i)->name.substr (0, 44) + "...");
-               } else {
-                       audition_synth->add((*i)->unique_id, (*i)->name);
-               }
-       }
-#endif
 
-       add_option (_("MIDI"), audition_synth);
+       /* Control Surfaces */
 
+       add_option (_("Control Surfaces"), new OptionEditorHeading (_("Control Surfaces")));
+       add_option (_("Control Surfaces"), new ControlSurfacesOptions ());
 
        /* MIDI PORTs */
        add_option (_("MIDI Ports"), new OptionEditorHeading (_("MIDI Port Options")));
@@ -3031,11 +3037,7 @@ if (!ARDOUR::Profile->get_mixbus()) {
        add_option (_("MIDI Ports"), new MidiPortOptions ());
        add_option (_("MIDI Ports"), new OptionEditorBlank ());
 
-
-       /* Control Surfaces */
-
-       add_option (_("Control Surfaces"), new OptionEditorHeading (_("Control Surfaces")));
-       add_option (_("Control Surfaces"), new ControlSurfacesOptions ());
+       /* PLUGINS */
 
 #if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined MACVST_SUPPORT || defined AUDIOUNIT_SUPPORT)
        add_option (_("Plugins"), new OptionEditorHeading (_("Scan/Discover")));