From: Robin Gareus Date: Fri, 30 Dec 2016 00:50:40 +0000 (+0100) Subject: re-group preferences part five of 27 (probably) X-Git-Tag: 5.6~431 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=42255603603c2854bab9e9a0818f0be371f54649;p=ardour.git re-group preferences part five of 27 (probably) --- diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index 31f5d611ff..efae728796 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -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(), - (_("When enabled the loop button does not start playback but forces playback to always play the loop\n\n" - "When disabled 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 (_("When enabled %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 (_("When enabled if %1 is not recording, it will stop the transport " - "when it reaches the current session end marker\n\n" - "When disabled %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 (_("When enabled 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" - "When disabled 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(), _("When enabled 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* psc = new ComboOption ( - "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 Play with Preroll is initiated.\n\n" - "If Follow Edits 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 ( - "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 while chasing an external timecode source.\n\n" - "When enabled the session video frame rate will be changed to match that of the selected external timecode source.\n\n" - "When disabled 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 (_("When enabled %1 will never varispeed when slaved to external timecode. " - "Sync Lock indicates that the selected external timecode source shares clock-sync " - "(Black & 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" - "When disabled %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(), - _("When enabled 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 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 (_("When enabled %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 ( - "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 ( - "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 ( - "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* lm = new ComboOption ( "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 *rsas = new ComboOption ( + "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 ( + "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* pp = new ComboOption ( + "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* pa = new ComboOption ( + "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 *rsas = new ComboOption ( - "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 ( + "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 ( + "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* audition_synth = new ComboOption ( + "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(), + (_("When enabled the loop button does not start playback but forces playback to always play the loop\n\n" + "When disabled 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 (_("When enabled %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 (_("When enabled if %1 is not recording, it will stop the transport " + "when it reaches the current session end marker\n\n" + "When disabled %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 (_("When enabled 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" + "When disabled 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(), _("When enabled 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* psc = new ComboOption ( + "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 Play with Preroll is initiated.\n\n" + "If Follow Edits 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 ( + "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 while chasing an external timecode source.\n\n" + "When enabled the session video frame rate will be changed to match that of the selected external timecode source.\n\n" + "When disabled 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 ( - "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 (_("When enabled %1 will never varispeed when slaved to external timecode. " + "Sync Lock indicates that the selected external timecode source shares clock-sync " + "(Black & 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" + "When disabled %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* pp = new ComboOption ( - "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(), + _("When enabled 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* pa = new ComboOption ( - "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 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 (_("When enabled %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 ( - "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 ( - "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 ( + "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* audition_synth = new ComboOption ( - "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 ( + "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 ( + "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")));