Commit Graph

29 Commits

Author SHA1 Message Date
Paul Lipscomb 3425ec69de Android tablet remote UI: styling pass, color picker, arrange mode indicator, connection gating
- Button styling standardization with green ring state indicators (Connect, Rescan, Log, Clear Layout, Reset ALL)
- Input field labels with proper DP-based padding and spacing
- Feedback & title widget color picker with 7-color palette and persistence layer
- Font weight selection for text widgets (deferred visual implementation)
- Hide/Show and Reset Size buttons in context menu
- Flashing pink border around entire app when Arrange mode is ON (500ms fade in/out cycle)
- Arrange button disabled until connected to desktop app, with alpha indicator
- WidgetLayoutState now persists color and fontWeight properties
- Arrange mode visual debugging with smooth fade animation instead of harsh strobe

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-30 18:47:07 -05:00
Paul Lipscomb f7ac34141a Check in Claude session memory as CLAUDE_MEMORY.md, imported from CLAUDE.md
Auto-memory is normally stored outside the repo, keyed to the working
directory's absolute path, so it doesn't follow a clone to a new machine.
This snapshot travels with the repo instead, so Claude has the same
project/feedback context when opened from a different machine (e.g. the
Windows VM being set up for the extension-reaper-macos port).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 18:55:42 -04:00
Paul Lipscomb 2173e366ea Reorganize extension-reaper-macos into per-module subfolders, add hello module
Splits socket/tracking into their own subdirectories and pulls the hello
action registration out into its own module, matching the one-module-per-
folder pattern; build.sh now outputs into build/macos instead of the repo root.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-22 18:49:25 -04:00
Paul Lipscomb 7d4f8a4cd2 Extend REAPER extension to read/write automation items, wire desktop app to it over UDP
extension-reaper-macos: split main.cpp into tracking.cpp (polls selected
envelope/automation items, reads/writes D_BASELINE) and socket.cpp (basic
UDP listener, non-blocking, drains all pending packets per tick). Nudging
now applies to every selected automation item across every track in the
project, not just the first one found.

app-desktop-macos: new "Extension" column (mirrors the OSC/Remote columns)
to enable/disable the UDP connection and point it at a host/port, plus a
log window. FocusFaderWidget gets an OSC/Ext output-mode toggle (mirrors
TransportWidget's MIDI/OSC toggle) so a fader can drive the extension
directly instead of/alongside OSC. Also renamed the Remote/Tablet buttons
for clarity and split their status indicator into its own column.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 19:13:34 -04:00
Paul Lipscomb cd5ebd84d6 Add bare-minimum extension-reaper-macos REAPER extension skeleton
C/C++ extension built directly against the vendored Cockos reaper-sdk
headers (no Rust/reaper-rs wrapper layer). Loads, registers a test
action, and confirms via REAPER's console — confirmed working in
REAPER 2026-07-15.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 19:12:33 -04:00
Paul Lipscomb 7ecc718f5d Reorganize top-level directories with clearer naming convention
app -> app-desktop-macos, presets -> app-presets, server -> remote-server,
daw-config-reaper -> osc-config-daw, plugin-reaper-realearn -> plugin-reaper-relearn.
Updated run.py and presets.py path references accordingly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 17:51:05 -04:00
Paul Lipscomb e58f06d9fa Vendor helgoboss/helgobox (ReaLearn) as basis for custom UI fork
Stripped upstream git history; starting point for replacing the native
SWELL/Win32 mapping UI with something more suited to bulk editing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 17:38:29 -04:00
Paul Lipscomb 583ed77a67 Update io_config from live app testing (MIDI ports reset to Not Connected)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 20:38:53 -04:00
Paul Lipscomb 0c7b6b4442 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>
2026-07-06 22:17:37 -04:00
Paul Lipscomb d6201c59b4 Multi-iPad dest_id routing, activity ring, context menu hide, live label/visibility sync
Desktop:
- Replace Remote checkbox with T: dest_spin (0=Off, 1-9=tablet) on all widgets
- dest_id persisted in get_state/set_state, broadcast in tablet snapshot
- dest_spin.valueChanged triggers save + broadcast to iPad
- _on_widget_visibility_from_tablet updates dest_spin from iPad hide event
- _broadcast_preset_update shared helper; ws_server.has_clients guard
- label editingFinished triggers live label sync to iPad

iOS:
- VC-Arrange/VC-Logging/Widgets-Reusable-UI file reorganisation
- ArrangeObjects/ArrangeView rename, 7-bucket Arrange-Functions split
- myTabletId (UserDefaults) + tabletIdField next to port in toolbar
- Preset filter: destId == myTabletId instead of visible bool
- BaseWidget activity ring: long press gesture (touch) + final update() flash
- Context menu long press (arrange mode): hide widget, save layout, send dest_id:0
- Same-UUID preset check skips Preset Switched alert on visibility/label updates
- autoSwitchEnabled, toolbarStatusLabel, presetLabel, statusToken

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-02 21:56:35 -04:00
Paul Lipscomb 7a74cfa75e iOS remote client: native UIKit surface, WS logging, client-side layout persistence
- Add remote-client-ios: full native UIKit app with Objects/View/UILayout/Functions pattern
- Widget hierarchy: BaseWidget → Fader, Toggle, Transport, Title, Feedback, LogWidget
- LoggingVC: child VC embedded in LogWidget for live WS message inspection
- Codable model: ModelPresetLoadToRemoteDevice with snake_case decoder strategy
- Layout persistence: UserDefaults keyed by preset_uuid, fully client-side
- WS logging: dedicated WS In/Out floating panels on desktop app
- Remove HTTP server and JS client (replaced by native iOS app)
- Add Xcode noise to .gitignore (xcuserstate, xcuserdata)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 00:02:10 -04:00
Paul Lipscomb 4db7165797 Initial tablet POC: project restructure + WebSocket/HTTP server + JS client
- Restructured project into /app, /server, /client with run.py entry point
- WSServer (QWebSocketServer) with log_signal, start/stop, client tracking
- HTTP server serves /client on port 8080
- Vanilla JS client: faders, toggles, transport, drag-to-arrange, lock/save layout
- Start Tablet button + floating Tablet log window in app UI
- Preset broadcast on load/switch, DAW state relay, hardware sync via widget_update
- Widget colors synced from app palette, toggle state fixed (sends 0/127 correctly)
- Layout saved per preset UUID back to presets.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 23:44:30 -04:00
Paul Lipscomb 22e4fa770e Multi-select, context menu, section strikethrough, rename/duplicate presets
- Multi-select strips with click, Ctrl+click (toggle), Shift+click (range, same zone)
- Right-click selected strip: context menu with Cascade CC, Assign Channel, Deselect All
- Right-click unselected strip: clears all selections
- Selection status label shows count and type (faders/toggles/transport toggles)
- Rename preset button added to preset row
- Duplicate preset button auto-generates new UUID
- Layout panel section buttons show strikethrough when hidden, normal when visible
- Renamed Preset Browser to Instrument Browser in UI
- Transport strips wired for multi-select and context menu

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 21:53:45 -04:00
Paul Lipscomb 327ca7e00a Layout panel wired, section visibility, preset management improvements
- Wire all 5 Layout panel section toggles (Preset Browser, Big Title, Fader Row, Toggle Row, Transport Row)
- Replace checkboxes with clickable title buttons (highlighted=visible, dimmed=hidden)
- Move Big Title inside fader container, between Hide Params button and fader strips
- Wrap transport/fader/toggle rows in container widgets for setVisible support
- Reposition separator between preset browser and mixer row
- Open Layout panel by default on launch
- Add Duplicate preset button (auto-generates new UUID)
- Add Rename preset button
- Swap preset browser label and show-hide button order
- Persist section visibility state per preset under new 'sections' key

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 21:18:28 -04:00
Paul Lipscomb d8f4cbcdd4 add Mom/Tog to ToggleWidget, Big Title, Layout panel scaffold
- ToggleWidget: add Momentary/Toggle mode selector (mirrors TransportWidget
  minus OSC); HW routing respects trigger_mode; fix invisible button on init
  by removing explicit empty stylesheet; saves/loads trigger_mode per preset
- Big Title: full-width 28px bold QLineEdit above fader row, saves per-preset
  as big_title; green underline on focus; single bottom border, no separator
- Layout panel: floating 220px window to the left of main window, toggled by
  new Layout button next to Messages; shows Sections checkboxes (Preset
  Browser, Big Title, Fader Row, Toggle Row, Transport Row); tracks window
  move/resize; checkboxes not yet wired to functionality

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 18:49:50 -04:00
Paul Lipscomb b68e5e3ac2 major session: transport lasso layout, MIDI learn wiring, note passthrough, log windows, lock preset, CC blocking
- transport widget restructured to two-group lasso layout (grp_learn + grp_cc) matching fader/toggle pattern
- fixed MIDI learn for transport (bind_hw_cc channel param) and preset browser (wired to check_and_start_midi_learn)
- transport HW routing now respects output_mode and trigger_mode; OSC mode fires on any value, MIDI momentary fires on any value
- preset browser on_hw_trigger fires on any value (0 or 127 both send 127 out)
- unbound CCs are dropped, no passthrough; notes (0x80/0x90) pass through freely to midi_out
- four MIDI/OSC log windows: OSC In, OSC Out, MIDI In, MIDI Out with formatted note/CC display
- midi_out_signal now carries message list for logging
- lock preset checkbox: always defaults to True on launch, not persisted
- transport cc_output_lbl always visible, content adapts to MIDI/OSC mode
- preset browser show/hide saves and restores correctly per preset
- CLAUDE.md added with full project architecture, conventions, and planned features

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 17:56:45 -04:00
Paul Lipscomb 23bfc88f13 global note pass through but cc filtering unless assigned 2026-06-29 05:40:02 -04:00
Paul Lipscomb 3861a8f508 more momentary fixes 2026-06-29 04:27:39 -04:00
Paul Lipscomb fc9da58d7c added midi messages log windows 2026-06-29 04:14:09 -04:00
Paul Lipscomb 16fa8395c7 momentary fix 2026-06-29 03:56:16 -04:00
Paul Lipscomb e5e0a9df96 momentary osc 1.0 added - lock preset default on start up 2026-06-29 03:50:35 -04:00
Paul Lipscomb 452a72d3ce learn implemented on preset - transport widget - ui layout transport widget 2026-06-29 03:41:25 -04:00
Paul Lipscomb 6f6637eec8 add requirements.txt 2026-06-29 02:05:19 -04:00
Paul Lipscomb 0aad488db5 preset browser widget / lock preset 2026-06-29 01:49:39 -04:00
Paul Lipscomb 0a5cfa88f1 feat: per-strip CC/CH translation, layout groups, show/hide improvements 2026-06-27 02:26:24 -04:00
Paul Lipscomb 460515ba0d Refactor: Move all UI widget construction to module level
- Extract all QWidget/QLayout instances and property configuration to module level
- Group by element: constructor → properties for each widget
- Keep __init__ assembly-only: addWidget, addLayout, addStretch, signals
- Explicit naming for clarity: separator_vertical_fader_zone_left, etc
- Applies to: IO columns (MIDI IN/OUT, Transport, OSC), Preset Browser, Transport/Fader/Toggle rows, OSC feedback containers
- Pattern: Module = what it is; __init__ = where it goes
2026-06-18 18:57:27 -04:00
Paul Lipscomb a382c521a8 Refactor: Module-level UI construction (MIDI IN column) 2026-06-18 02:17:45 -04:00
Paul Lipscomb a347b7bcb6 refactor before main_maindow tear down 2026-06-17 01:31:09 -04:00
Paul Lipscomb 3e2147fa02 initial commit 2026-06-16 22:37:38 -04:00