JL Cooper MIDI Controller I/O, Focus widget hardware binding, iOS Channel Focus polish

Desktop:
- New dedicated MIDI Controller In port (separate from MIDI In), same CC learn/bind pipeline but never passes notes through; positioned first in the IO column order
- Fixed MIDI In "Not Connected" not persisting across restart (missing save_io_config call)
- Fixed MIDI Out/Transport Out mutual-exclusion incorrectly flagging "Not Connected" as an in-use port
- Renamed "Remote" checkbox to "App" on Fader/Toggle/Transport widgets
- FocusFaderWidget/FocusToggleWidget: new Hardware section (Learn + CC/CH bind) so a physical controller can drive a Channel Focus widget alongside the app/OSC, plus an independent Feedback checkbox that sends translated CC out (for motorized fader / LED sync)
- JL Cooper touch-sense profile ("No Profile" / "MIDI JL Cooper CC Mode") on FaderWidget/FocusFaderWidget: touch channel (value channel - 1, same CC) is filtered out of the value and gates incoming OSC/DAW feedback while touching
- FocusFeedbackWidget: "Custom" checkbox to show a manually-typed static string instead of live OSC feedback, disabling Learn/OSC input and suppressing the iPad broadcast while active
- New daw-config-reaper/ folder with reaper-osc-config-paul-custom.ReaperOSC

iOS:
- New FocusToggleWidget (dedicated Channel Focus toggle, split out of shared ToggleWidget) with colorName-aware darken/border and isMomentary handling — keeps Channel-Focus-only behavior off the regular ToggleWidget
- Arrange mode long-press menu: text alignment (left/center/right) and a 10-color named-palette Text Color picker for TitleWidget/FocusFeedbackWidget, persisted in the saved layout
- FocusFeedbackWidget: Reset Size action, monospaced-digit font fix for timestamp/counter jitter
- New "Cancel Changes" button in Arrange mode — reverts layout/hides/aligns to the state at Arrange-mode entry and restores desktop-side Remote/dest assignments
- Grid line brightness increased for visibility
- Bonjour discovery for desktop auto-connect

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Paul Lipscomb
2026-07-06 22:17:37 -04:00
parent d6201c59b4
commit 0c7b6b4442
34 changed files with 4815 additions and 208 deletions
@@ -0,0 +1,254 @@
# OSC pattern config file for TouchOSC LogicPad layout.
# See extensive comments in Default.ReaperOSC.
DEVICE_TRACK_COUNT 8
DEVICE_SEND_COUNT 5
DEVICE_RECEIVE_COUNT
DEVICE_FX_COUNT 12
DEVICE_FX_PARAM_COUNT 16
DEVICE_FX_INST_PARAM_COUNT 24
DEVICE_MARKER_COUNT
DEVICE_REGION_COUNT
REAPER_TRACK_FOLLOWS DEVICE
#important for osc to follow reaper
DEVICE_TRACK_FOLLOWS LAST_TOUCHED
DEVICE_TRACK_BANK_FOLLOWS DEVICE
DEVICE_FX_FOLLOWS DEVICE
# default
#REAPER_TRACK_FOLLOWS REAPER
#DEVICE_TRACK_FOLLOWS DEVICE
#DEVICE_TRACK_BANK_FOLLOWS DEVICE
#DEVICE_FX_FOLLOWS DEVICE
DEVICE_ROTARY_CENTER 0.0
# ----------------------------------------------------------------
SCROLL_X-
SCROLL_X+
SCROLL_Y-
SCROLL_Y+
ZOOM_X-
ZOOM_X+
ZOOM_Y-
ZOOM_Y+
TIME s/1/time s/2/time s/3/time s/4/time s/5/time
BEAT s/1/bar s/2/bar s/3/bar s/4/bar s/5/bar
SAMPLES
FRAMES
METRONOME t/1/click t/2/click t/3/click t/4/click t/5/click
REPLACE t/1/replace t/2/replace t/3/replace t/4/replace t/5/replace
REPEAT t/1/cycle t/2/cycle t/3/cycle t/4/cycle t/5/cycle
RECORD t/1/record t/2/record t/3/record t/4/record t/5/record
STOP t/1/stop t/2/stop t/3/stop t/4/stop t/5/stop
PLAY t/1/play t/2/play t/3/play t/4/play t/5/play
PAUSE
AUTO_REC_ARM t/1/sel-rec t/2/sel-rec
SOLO_RESET t/1/soloreset t/2/soloreset
ANY_SOLO t/1/ledanysolo t/2/ledanysolo
REWIND b/rewind
FORWARD b/forward
REWIND_FORWARD_BYMARKER t/1/bymarker t/2/bymarker
REWIND_FORWARD_SETLOOP t/1/bycycle t/2/bycycle
GOTO_MARKER
GOTO_REGION
SCRUB
PLAY_RATE
TEMPO
MARKER_NAME
MARKER_NUMBER
REGION_NAME
REGION_NUMBER
LAST_MARKER_NAME
LAST_MARKER_NUMBER
LAST_REGION_NAME
LAST_REGION_NUMBER
MASTER_VOLUME n/1/mastervolume s/1/masterlevel
MASTER_PAN
MASTER_VU
MASTER_VU_L
MASTER_VU_R
MASTER_SEND_NAME s/1/auxname@ s/2/auxname@
MASTER_SEND_VOLUME n/1/auxvolume@ n/2/auxvolume@ s/1/auxlevel@ s/2/auxlevel@
MASTER_SEND_PAN
TRACK_NAME s/1/trackname@ s/2/trackname@ s/3/trackname s/4/trackname s/5/trackname
TRACK_NUMBER s/1/track#@ s/2/track#@ s/3/track# s/4/track# s/5/track#
TRACK_MUTE b/1/mute/1/@ b/2/mute/1/@ t/3/mute
TRACK_SOLO b/1/solo/1/@ b/2/solo/1/@ t/3/solo
TRACK_REC_ARM t/1/recenable/1/@ t/2/recenable/1/@ t/3/recenable
TRACK_MONITOR t/3/input
TRACK_SELECT b/1/select/1/@ b/2/select/1/@
TRACK_VU
TRACK_VU_L
TRACK_VU_R
TRACK_VOLUME n/1/volume@ n/3/volume s/1/level@ s/3/trkvolval
TRACK_PAN n/2/pan@ n/3/pan s/2/panval@ s/3/trkpanval
TRACK_PAN2
TRACK_PAN_MODE
TRACK_SEND_NAME s/2/sendname@@ s/3/sendname@
TRACK_SEND_VOLUME n/2/send@@ n/3/sendlevel@ s/2/sendval@@ s/3/sendval@
TRACK_SEND_PAN
TRACK_RECV_NAME
TRACK_RECV_VOLUME
TRACK_RECV_VOLUME
TRACK_RECV_PAN
TRACK_RECV_PAN
TRACK_AUTO
TRACK_AUTO_TRIM t/3/atmoff
TRACK_AUTO_READ t/3/atmread
TRACK_AUTO_LATCH t/3/atmlatch
TRACK_AUTO_TOUCH t/3/atmtouch
TRACK_AUTO_WRITE t/3/atmwrite
TRACK_VOLUME_TOUCH
TRACK_PAN_TOUCH
FX_NAME s/3/pluginname s/3/insertname@
FX_NUMBER
FX_BYPASS b/3/insertbypass/@/1
FX_OPEN_UI
FX_PRESET
FX_PREV_PRESET
FX_NEXT_PRESET
FX_PARAM_NAME s/3/parname@
FX_WETDRY
FX_PARAM_VALUE n/3/par@ s/3/value@
FX_EQ_BYPASS
FX_EQ_OPEN_UI
FX_EQ_PRESET
FX_EQ_PREV_PRESET
FX_EQ_NEXT_PRESET
FX_EQ_MASTER_GAIN n/4/eqmstgain
FX_EQ_WETDRY
FX_EQ_HIPASS_NAME s/4/label165
FX_EQ_HIPASS_FREQ n/4/hpffrq s/4/hpffrqval
FX_EQ_HIPASS_Q n/4/hpfq s/4/hpfqval
FX_EQ_LOSHELF_NAME s/4/label159
FX_EQ_LOSHELF_FREQ n/4/loslvfrq s/4/loslvfrqval
FX_EQ_LOSHELF_GAIN n/4/gain/1 s/4/loslvgainval
FX_EQ_LOSHELF_Q n/4/loslvq s/4/loslvqval
FX_EQ_BAND_NAME s/4/label160 s/4/label161 s/4/label162
FX_EQ_BAND_FREQ n/4/lomidfrq s/4/lomidfrqval
FX_EQ_BAND_GAIN n/4/gain/3 s/5/lomidgainval
FX_EQ_BAND_Q n/4/lomidq s/5/lomidqval
FX_EQ_NOTCH_NAME s/4/label163
FX_EQ_NOTCH_FREQ n/4/hifrq s/4/hifrqval
FX_EQ_NOTCH_GAIN n/4/gain/5 s/4/higainval
FX_EQ_NOTCH_Q n/4/hiq s/4/hiqval
FX_EQ_HISHELF_NAME s/4/label164
FX_EQ_HISHELF_FREQ n/4/hislvfrq s/4/hislvfrqval
FX_EQ_HISHELF_GAIN n/4/gain/6 s/4/hislvgainval
FX_EQ_HISHELF_Q n/4/hislvq s/4/hislvqval
FX_EQ_LOPASS_NAME s/4/label166
FX_EQ_LOPASS_FREQ n/4/lpffrq s/4/lpffrqval
FX_EQ_LOPASS_Q n/4/lpfq s/4/lpfqval
FX_INST_NAME s/5/pluginname
FX_INST_BYPASS
FX_INST_OPEN_UI
FX_INST_PRESET
FX_INST_PREV_PRESET
FX_INST_NEXT_PRESET
FX_INST_PARAM_NAME s/5/parname@
FX_INST_PARAM_VALUE n/5/par@ s/5/parval@
LAST_TOUCHED_FX_TRACK_NAME
LAST_TOUCHED_FX_TRACK_NUMBER
LAST_TOUCHED_FX_NAME
LAST_TOUCHED_FX_NUMBER
LAST_TOUCHED_FX_PARAM_NAME
LAST_TOUCHED_FX_PARAM_VALUE
ACTION
MIDIACTION
MIDILISTACTION
# ----------------------------------------------------------------
DEVICE_TRACK_COUNT
DEVICE_SEND_COUNT
DEVICE_RECEIVE_COUNT
DEVICE_FX_COUNT
DEVICE_FX_PARAM_COUNT
DEVICE_FX_INST_PARAM_COUNT
DEVICE_MARKER_COUNT
DEVICE_REGION_COUNT
REAPER_TRACK_FOLLOWS
REAPER_TRACK_FOLLOWS_REAPER
REAPER_TRACK_FOLLOWS_DEVICE
DEVICE_TRACK_FOLLOWS
DEVICE_TRACK_FOLLOWS_DEVICE
DEVICE_TRACK_FOLLOWS_LAST_TOUCHED
DEVICE_TRACK_BANK_FOLLOWS
DEVICE_TRACK_BANK_FOLLOWS_DEVICE
DEVICE_TRACK_BANK_FOLLOWS_MIXER
DEVICE_FX_FOLLOWS
DEVICE_FX_FOLLOWS_DEVICE
DEVICE_FX_FOLLOWS_LAST_TOUCHED
DEVICE_FX_FOLLOWS_FOCUSED
DEVICE_TRACK_SELECT
DEVICE_PREV_TRACK t/3/track- t/4/track- t/5/track-
DEVICE_NEXT_TRACK t/3/track+ t/4/track+ t/5/track+
DEVICE_TRACK_BANK_SELECT
DEVICE_PREV_TRACK_BANK t/1/bank- t/2/bank-
DEVICE_NEXT_TRACK_BANK t/1/bank+ t/2/bank+
DEVICE_FX_SELECT b/3/mInsertEdit/@/1
DEVICE_PREV_FX
DEVICE_NEXT_FX
DEVICE_FX_PARAM_BANK_SELECT s/3/page#
DEVICE_PREV_FX_PARAM_BANK t/3/page-
DEVICE_NEXT_FX_PARAM_BANK t/3/page+
DEVICE_FX_INST_PARAM_BANK_SELECT s/5/page#
DEVICE_PREV_FX_INST_PARAM_BANK t/5/page-
DEVICE_NEXT_FX_INST_PARAM_BANK t/5/page+
DEVICE_MARKER_BANK_SELECT
DEVICE_PREV_MARKER_BANK
DEVICE_NEXT_MARKER_BANK
DEVICE_REGION_BANK_SELECT
DEVICE_PREV_REGION_BANK
DEVICE_NEXT_REGION_BANK