From 9eb9e1999100495c46f645fcdac65f8a3d5b336b Mon Sep 17 00:00:00 2001 From: Greg Sheldon Date: Sun, 10 May 2026 19:29:25 +0100 Subject: [PATCH 1/5] Fixed with assistance Claude and tested on x64 : modifiers were not being discriminated in the FX mapping process. For instance, Shift+Fader1 could not be mapped after Fader1 had been already mapped. Enhancement: added Paged vs Standard output. In Paged output, navigation between FX paged can be made using Left/Right or BankLeft/BankRight. One can switch Standard -> Paged or vice versa using the dialog new radio buttons. --- Reference/LUA script to paginate v1.txt | 160 +++ .../VST3i__Analog_Lab_V__Arturia__-1.zon | 55 + Reference/VST3i__Analog_Lab_V__Arturia__.zon | 67 ++ .../VST3i__Analog_Lab_V__Arturia___zon.old | 992 ++++++++++++++++++ .../control_surface_integrator.h | 4 +- .../control_surface_integrator_ui.cpp | 683 ++++++++++-- reaper_csurf_integrator/res.rc | 3 + reaper_csurf_integrator/resource.h | 2 + 8 files changed, 1863 insertions(+), 103 deletions(-) create mode 100644 Reference/LUA script to paginate v1.txt create mode 100644 Reference/VST3i__Analog_Lab_V__Arturia__-1.zon create mode 100644 Reference/VST3i__Analog_Lab_V__Arturia__.zon create mode 100644 Reference/VST3i__Analog_Lab_V__Arturia___zon.old diff --git a/Reference/LUA script to paginate v1.txt b/Reference/LUA script to paginate v1.txt new file mode 100644 index 0000000..9aa92c3 --- /dev/null +++ b/Reference/LUA script to paginate v1.txt @@ -0,0 +1,160 @@ +-- ============================================================================== +-- CSI v7 Multi-File AutoZone Paginator (v2.0) +-- Reads an auto-generated file and outputs MULTIPLE correctly linked SubZone files! +-- Features: Ghost-fader clearing, Color-retention, and .old Backups +-- ============================================================================== + +local retval, input_path = reaper.GetUserFileNameForRead("", "Select Auto-Generated CSI .zon file", ".zon") +if not retval then return end + +local file = io.open(input_path, "r") +if not file then + reaper.ShowMessageBox("Could not open file.", "Error", 0) + return +end + +-- Storage variables +local header = {} +local active_mappings = {} +local inside_auto_gen = false +local zone_full_string = "" +local zone_name = "UnknownZone" +local zone_alias = "Plugin" + +-- 1. Parse the original file +for line in file:lines() do + if line:match("^Zone%s") then + zone_full_string = line + -- Extract the exact Zone Name and Alias inside the quotes + local ext_name, ext_alias = line:match('Zone%s+"([^"]+)"%s+"([^"]+)"') + if ext_name then zone_name = ext_name end + if ext_alias then zone_alias = ext_alias end + end + + if not inside_auto_gen and not line:match("^Zone ") and not line:match("ZoneEnd") and not line:match("#Begin auto generated section") then + table.insert(header, line) + end + + if line:match("#Begin auto generated section") then inside_auto_gen = true end + if line:match("#End auto generated section") then inside_auto_gen = false end + + if inside_auto_gen and line:match("%S") and not line:match("NoAction") then + local clean_line = line:gsub("Shift%+", ""):gsub("Option%+", ""):gsub("Control%+", ""):gsub("Alt%+", "") + table.insert(active_mappings, clean_line) + end +end +file:close() + +-- 2. Create the Backup File (.old) +local backup_path = input_path:gsub("%.zon$", "_zon.old") +os.rename(input_path, backup_path) + +-- 3. Calculate Pages +local lines_per_fader = 3 +local items_per_page = 8 * lines_per_fader +local num_pages = math.ceil(#active_mappings / items_per_page) +local base_filename = input_path:gsub("%.zon$", "") + +-- 4. File Generation Loop +local current_mapping_idx = 1 + +for page = 1, num_pages do + local out_lines = {} + + -- Zone declaration + local current_zone_name = zone_name + local current_alias = zone_alias -- Page 1 keeps original alias for the FX Menu + + if page > 1 then + current_zone_name = zone_name .. "-" .. (page - 1) + current_alias = "Page " .. page + end + + table.insert(out_lines, 'Zone "' .. current_zone_name .. '" "' .. current_alias .. '"') + + -- Header logic: ONLY Page 1 handles colors and FX slot clearing to prevent bugs! + if page == 1 then + for _, h_line in ipairs(header) do table.insert(out_lines, h_line) end + end + + table.insert(out_lines, " // Escape route") + table.insert(out_lines, " Cancel GoZone SelectedTrackFXMenu\n") + + -- ONLY Page 1 gets the SubZones bridge block + if page == 1 and num_pages > 1 then + table.insert(out_lines, " // --- The Bridge to other files ---") + table.insert(out_lines, " SubZones") + for sub_p = 2, num_pages do + table.insert(out_lines, ' "' .. zone_name .. '-' .. (sub_p - 1) .. '"') + end + table.insert(out_lines, " SubZonesEnd\n") + end + + -- Explicit Routing logic + table.insert(out_lines, " // --- Absolute Navigation ---") + + if page > 1 then + local prev_zone_name = zone_name + local prev_alias = zone_alias + if page > 2 then + prev_zone_name = zone_name .. "-" .. (page - 2) + prev_alias = "Page " .. (page - 1) + end + table.insert(out_lines, ' BankLeft GoSubZone "' .. prev_zone_name .. '" "' .. prev_alias .. '"') + table.insert(out_lines, ' Left GoSubZone "' .. prev_zone_name .. '" "' .. prev_alias .. '"') + end + + if page < num_pages then + local next_zone_name = zone_name .. "-" .. page + local next_alias = "Page " .. (page + 1) + table.insert(out_lines, ' BankRight GoSubZone "' .. next_zone_name .. '" "' .. next_alias .. '"') + table.insert(out_lines, ' Right GoSubZone "' .. next_zone_name .. '" "' .. next_alias .. '"') + end + table.insert(out_lines, "") + + -- Mappings + local fader_count = 1 + for item = 1, items_per_page do + if current_mapping_idx <= #active_mappings then + local map_line = active_mappings[current_mapping_idx] + + map_line = map_line:gsub("Fader%d+", "Fader" .. fader_count) + map_line = map_line:gsub("DisplayUpper%d+", "DisplayUpper" .. fader_count) + map_line = map_line:gsub("DisplayLower%d+", "DisplayLower" .. fader_count) + + table.insert(out_lines, " " .. map_line) + + if item % lines_per_fader == 0 then + fader_count = fader_count + 1 + table.insert(out_lines, "") + end + current_mapping_idx = current_mapping_idx + 1 + end + end + + -- GHOST FADER FIX: Blank out any unused strips on this page + if fader_count <= 8 then + table.insert(out_lines, " // --- Blanking Unused Strips ---") + for c = fader_count, 8 do + table.insert(out_lines, " Fader" .. c .. " NoAction") + table.insert(out_lines, " DisplayUpper" .. c .. " NoAction") + table.insert(out_lines, " DisplayLower" .. c .. " NoAction") + end + end + + table.insert(out_lines, "ZoneEnd") + + -- Write file + local out_filepath = base_filename .. ".zon" + if page > 1 then + out_filepath = base_filename .. "-" .. (page - 1) .. ".zon" + end + + local out_file = io.open(out_filepath, "w") + if out_file then + for _, line in ipairs(out_lines) do out_file:write(line .. "\n") end + out_file:close() + end +end + +reaper.ShowMessageBox("Success! Your original file was renamed to .old\n\n" .. num_pages .. " fresh files were generated.", "CSI Multi-File Builder", 0) \ No newline at end of file diff --git a/Reference/VST3i__Analog_Lab_V__Arturia__-1.zon b/Reference/VST3i__Analog_Lab_V__Arturia__-1.zon new file mode 100644 index 0000000..272b752 --- /dev/null +++ b/Reference/VST3i__Analog_Lab_V__Arturia__-1.zon @@ -0,0 +1,55 @@ +Zone "VST3i: Analog Lab V (Arturia)-1" "Page 2" + // --- Navigation --- + Cancel GoZone SelectedTrackFXMenu + BankLeft GoSubZone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" + Left GoSubZone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" + + Fader1 FXParam 12 [ 0.00>1.00 (0.0) (0) ] + RotaryPush1 NoAction + Rotary1 NoAction + DisplayUpper1 FixedTextDisplay "P1 Env 2 Attack" 12 + DisplayLower1 FXParamValueDisplay 12 + + Fader2 FXParam 13 [ 0.00>1.00 (0.0) (0) ] + RotaryPush2 NoAction + Rotary2 NoAction + DisplayUpper2 FixedTextDisplay "P1 Env 2 Decay" 13 + DisplayLower2 FXParamValueDisplay 13 + + Fader3 FXParam 14 [ 0.00>1.00 (0.0) (0) ] + RotaryPush3 NoAction + Rotary3 NoAction + DisplayUpper3 FixedTextDisplay "P1 Synth 1 VCA Attack" 14 + DisplayLower3 FXParamValueDisplay 14 + + Fader4 FXParam 15 [ 0.00>1.00 (0.0) (0) ] + RotaryPush4 NoAction + Rotary4 NoAction + DisplayUpper4 FixedTextDisplay "P1 Synth 1 VCA Release" 15 + DisplayLower4 FXParamValueDisplay 15 + + Fader5 FXParam 16 [ 0.00>1.00 (0.0) (0) ] + RotaryPush5 NoAction + Rotary5 NoAction + DisplayUpper5 FixedTextDisplay "P1 Sampler 2 Attack" 16 + DisplayLower5 FXParamValueDisplay 16 + + Fader6 FXParam 17 [ 0.00>1.00 (0.0) (0) ] + RotaryPush6 NoAction + Rotary6 NoAction + DisplayUpper6 FixedTextDisplay "P1 Sampler 2 Release" 17 + DisplayLower6 FXParamValueDisplay 17 + + Fader7 FXParam 18 [ 0.00>1.00 (0.0) (0) ] + RotaryPush7 NoAction + Rotary7 NoAction + DisplayUpper7 FixedTextDisplay "P1 Synth 2 VCA Attack" 18 + DisplayLower7 FXParamValueDisplay 18 + + Fader8 FXParam 19 [ 0.00>1.00 (0.0) (0) ] + RotaryPush8 NoAction + Rotary8 NoAction + DisplayUpper8 FixedTextDisplay "P1 Synth 2 VCA Release" 19 + DisplayLower8 FXParamValueDisplay 19 + +ZoneEnd diff --git a/Reference/VST3i__Analog_Lab_V__Arturia__.zon b/Reference/VST3i__Analog_Lab_V__Arturia__.zon new file mode 100644 index 0000000..2ccb2b1 --- /dev/null +++ b/Reference/VST3i__Analog_Lab_V__Arturia__.zon @@ -0,0 +1,67 @@ +Zone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" + OnZoneActivation SetXTouchDisplayColors Cyan + OnZoneDeactivation RestoreXTouchDisplayColors + Plugin ClearFXSlot + + // --- SubZone Bridge --- + SubZones + "VST3i: Analog Lab V (Arturia)-1" + SubZonesEnd + + // --- Navigation --- + Cancel GoZone SelectedTrackFXMenu + BankRight GoSubZone "VST3i: Analog Lab V (Arturia)-1" "Page 2" + Right GoSubZone "VST3i: Analog Lab V (Arturia)-1" "Page 2" + + Fader1 FXParam 2 [ 0.00>1.00 (0.0) (0) ] + RotaryPush1 NoAction + Rotary1 NoAction + DisplayUpper1 FixedTextDisplay "P1 Timbre" 2 + DisplayLower1 FXParamValueDisplay 2 + + Fader2 FXParam 4 [ 0.00>1.00 (0.0) (0) ] + RotaryPush2 NoAction + Rotary2 NoAction + DisplayUpper2 FixedTextDisplay "P1 WT Mod" 4 + DisplayLower2 FXParamValueDisplay 4 + + Fader3 FXParam 6 [ 0.00>1.00 (0.0) (0) ] + RotaryPush3 NoAction + Rotary3 NoAction + DisplayUpper3 FixedTextDisplay "P1 Time" 6 + DisplayLower3 FXParamValueDisplay 6 + + Fader4 FXParam 8 [ 0.00>1.00 (0.0) (0) ] + RotaryPush4 NoAction + Rotary4 NoAction + DisplayUpper4 FixedTextDisplay "P1 FX" 8 + DisplayLower4 FXParamValueDisplay 8 + + Fader5 FXParam 102 [ 0.00>1.00 (0.0) (0) ] + RotaryPush5 NoAction + Rotary5 NoAction + DisplayUpper5 FixedTextDisplay "FXA Dry/Wet" 102 + DisplayLower5 FXParamValueDisplay 102 + + Fader6 FXParam 163 [ 0.00>1.00 (0.0) (0) ] + RotaryPush6 NoAction + Rotary6 NoAction + DisplayUpper6 FixedTextDisplay "FXB Dry/Wet" 163 + DisplayLower6 FXParamValueDisplay 163 + + Fader7 FXParam 224 [ 0.00>1.00 (0.0) (0) ] + RotaryPush7 NoAction + Rotary7 NoAction + DisplayUpper7 FixedTextDisplay "Delay Volume" 224 + DisplayLower7 FXParamValueDisplay 224 + + Fader8 FXParam 233 [ 0.00>1.00 (0.0) (0) ] + RotaryPush8 NoAction + Rotary8 NoAction + DisplayUpper8 FixedTextDisplay "Reverb Volume" 233 + DisplayLower8 FXParamValueDisplay 233 + + + OnZoneDeactivation HideFXSlot + +ZoneEnd diff --git a/Reference/VST3i__Analog_Lab_V__Arturia___zon.old b/Reference/VST3i__Analog_Lab_V__Arturia___zon.old new file mode 100644 index 0000000..fafc55c --- /dev/null +++ b/Reference/VST3i__Analog_Lab_V__Arturia___zon.old @@ -0,0 +1,992 @@ +Zone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" + OnZoneActivation SetXTouchDisplayColors Cyan + OnZoneDeactivation RestoreXTouchDisplayColors + Plugin ClearFXSlot + +#Begin auto generated section + + Fader1 FXParam 2 [ 0.00>1.00 (0.0) (0) ] + RotaryPush1 NoAction + Rotary1 NoAction + DisplayUpper1 FixedTextDisplay "P1 Timbre" 2 + DisplayLower1 FXParamValueDisplay 2 + + + Fader2 FXParam 4 [ 0.00>1.00 (0.0) (0) ] + RotaryPush2 NoAction + Rotary2 NoAction + DisplayUpper2 FixedTextDisplay "P1 WT Mod" 4 + DisplayLower2 FXParamValueDisplay 4 + + + Fader3 FXParam 6 [ 0.00>1.00 (0.0) (0) ] + RotaryPush3 NoAction + Rotary3 NoAction + DisplayUpper3 FixedTextDisplay "P1 Time" 6 + DisplayLower3 FXParamValueDisplay 6 + + + Fader4 FXParam 8 [ 0.00>1.00 (0.0) (0) ] + RotaryPush4 NoAction + Rotary4 NoAction + DisplayUpper4 FixedTextDisplay "P1 FX" 8 + DisplayLower4 FXParamValueDisplay 8 + + + Fader5 FXParam 102 [ 0.00>1.00 (0.0) (0) ] + RotaryPush5 NoAction + Rotary5 NoAction + DisplayUpper5 FixedTextDisplay "FXA Dry/Wet" 102 + DisplayLower5 FXParamValueDisplay 102 + + + Fader6 FXParam 163 [ 0.00>1.00 (0.0) (0) ] + RotaryPush6 NoAction + Rotary6 NoAction + DisplayUpper6 FixedTextDisplay "FXB Dry/Wet" 163 + DisplayLower6 FXParamValueDisplay 163 + + + Fader7 FXParam 224 [ 0.00>1.00 (0.0) (0) ] + RotaryPush7 NoAction + Rotary7 NoAction + DisplayUpper7 FixedTextDisplay "Delay Volume" 224 + DisplayLower7 FXParamValueDisplay 224 + + + Fader8 FXParam 233 [ 0.00>1.00 (0.0) (0) ] + RotaryPush8 NoAction + Rotary8 NoAction + DisplayUpper8 FixedTextDisplay "Reverb Volume" 233 + DisplayLower8 FXParamValueDisplay 233 + + + Fader1 FXParam 12 [ 0.00>1.00 (0.0) (0) ] + RotaryPush1 NoAction + Rotary1 NoAction + DisplayUpper1 FixedTextDisplay "P1 Env 2 Attack" 12 + DisplayLower1 FXParamValueDisplay 12 + + + Fader2 FXParam 13 [ 0.00>1.00 (0.0) (0) ] + RotaryPush2 NoAction + Rotary2 NoAction + DisplayUpper2 FixedTextDisplay "P1 Env 2 Decay" 13 + DisplayLower2 FXParamValueDisplay 13 + + + Fader3 FXParam 14 [ 0.00>1.00 (0.0) (0) ] + RotaryPush3 NoAction + Rotary3 NoAction + DisplayUpper3 FixedTextDisplay "P1 Synth 1 VCA Attack" 14 + DisplayLower3 FXParamValueDisplay 14 + + + Fader4 FXParam 15 [ 0.00>1.00 (0.0) (0) ] + RotaryPush4 NoAction + Rotary4 NoAction + DisplayUpper4 FixedTextDisplay "P1 Synth 1 VCA Release" 15 + DisplayLower4 FXParamValueDisplay 15 + + + Fader5 FXParam 16 [ 0.00>1.00 (0.0) (0) ] + RotaryPush5 NoAction + Rotary5 NoAction + DisplayUpper5 FixedTextDisplay "P1 Sampler 2 Attack" 16 + DisplayLower5 FXParamValueDisplay 16 + + + Fader6 FXParam 17 [ 0.00>1.00 (0.0) (0) ] + RotaryPush6 NoAction + Rotary6 NoAction + DisplayUpper6 FixedTextDisplay "P1 Sampler 2 Release" 17 + DisplayLower6 FXParamValueDisplay 17 + + + Fader7 FXParam 18 [ 0.00>1.00 (0.0) (0) ] + RotaryPush7 NoAction + Rotary7 NoAction + DisplayUpper7 FixedTextDisplay "P1 Synth 2 VCA Attack" 18 + DisplayLower7 FXParamValueDisplay 18 + + + Fader8 FXParam 19 [ 0.00>1.00 (0.0) (0) ] + RotaryPush8 NoAction + Rotary8 NoAction + DisplayUpper8 FixedTextDisplay "P1 Synth 2 VCA Release" 19 + DisplayLower8 FXParamValueDisplay 19 + + + Shift+Fader1 NoAction + Shift+RotaryPush1 NoAction + Shift+Rotary1 NoAction + Shift+DisplayUpper1 NoAction + Shift+DisplayLower1 NoAction + + + Shift+Fader2 NoAction + Shift+RotaryPush2 NoAction + Shift+Rotary2 NoAction + Shift+DisplayUpper2 NoAction + Shift+DisplayLower2 NoAction + + + Shift+Fader3 NoAction + Shift+RotaryPush3 NoAction + Shift+Rotary3 NoAction + Shift+DisplayUpper3 NoAction + Shift+DisplayLower3 NoAction + + + Shift+Fader4 NoAction + Shift+RotaryPush4 NoAction + Shift+Rotary4 NoAction + Shift+DisplayUpper4 NoAction + Shift+DisplayLower4 NoAction + + + Shift+Fader5 NoAction + Shift+RotaryPush5 NoAction + Shift+Rotary5 NoAction + Shift+DisplayUpper5 NoAction + Shift+DisplayLower5 NoAction + + + Shift+Fader6 NoAction + Shift+RotaryPush6 NoAction + Shift+Rotary6 NoAction + Shift+DisplayUpper6 NoAction + Shift+DisplayLower6 NoAction + + + Shift+Fader7 NoAction + Shift+RotaryPush7 NoAction + Shift+Rotary7 NoAction + Shift+DisplayUpper7 NoAction + Shift+DisplayLower7 NoAction + + + Shift+Fader8 NoAction + Shift+RotaryPush8 NoAction + Shift+Rotary8 NoAction + Shift+DisplayUpper8 NoAction + Shift+DisplayLower8 NoAction + + + + + Option+Fader1 NoAction + Option+RotaryPush1 NoAction + Option+Rotary1 NoAction + Option+DisplayUpper1 NoAction + Option+DisplayLower1 NoAction + + + Option+Fader2 NoAction + Option+RotaryPush2 NoAction + Option+Rotary2 NoAction + Option+DisplayUpper2 NoAction + Option+DisplayLower2 NoAction + + + Option+Fader3 NoAction + Option+RotaryPush3 NoAction + Option+Rotary3 NoAction + Option+DisplayUpper3 NoAction + Option+DisplayLower3 NoAction + + + Option+Fader4 NoAction + Option+RotaryPush4 NoAction + Option+Rotary4 NoAction + Option+DisplayUpper4 NoAction + Option+DisplayLower4 NoAction + + + Option+Fader5 NoAction + Option+RotaryPush5 NoAction + Option+Rotary5 NoAction + Option+DisplayUpper5 NoAction + Option+DisplayLower5 NoAction + + + Option+Fader6 NoAction + Option+RotaryPush6 NoAction + Option+Rotary6 NoAction + Option+DisplayUpper6 NoAction + Option+DisplayLower6 NoAction + + + Option+Fader7 NoAction + Option+RotaryPush7 NoAction + Option+Rotary7 NoAction + Option+DisplayUpper7 NoAction + Option+DisplayLower7 NoAction + + + Option+Fader8 NoAction + Option+RotaryPush8 NoAction + Option+Rotary8 NoAction + Option+DisplayUpper8 NoAction + Option+DisplayLower8 NoAction + + + + + Control+Fader1 NoAction + Control+RotaryPush1 NoAction + Control+Rotary1 NoAction + Control+DisplayUpper1 NoAction + Control+DisplayLower1 NoAction + + + Control+Fader2 NoAction + Control+RotaryPush2 NoAction + Control+Rotary2 NoAction + Control+DisplayUpper2 NoAction + Control+DisplayLower2 NoAction + + + Control+Fader3 NoAction + Control+RotaryPush3 NoAction + Control+Rotary3 NoAction + Control+DisplayUpper3 NoAction + Control+DisplayLower3 NoAction + + + Control+Fader4 NoAction + Control+RotaryPush4 NoAction + Control+Rotary4 NoAction + Control+DisplayUpper4 NoAction + Control+DisplayLower4 NoAction + + + Control+Fader5 NoAction + Control+RotaryPush5 NoAction + Control+Rotary5 NoAction + Control+DisplayUpper5 NoAction + Control+DisplayLower5 NoAction + + + Control+Fader6 NoAction + Control+RotaryPush6 NoAction + Control+Rotary6 NoAction + Control+DisplayUpper6 NoAction + Control+DisplayLower6 NoAction + + + Control+Fader7 NoAction + Control+RotaryPush7 NoAction + Control+Rotary7 NoAction + Control+DisplayUpper7 NoAction + Control+DisplayLower7 NoAction + + + Control+Fader8 NoAction + Control+RotaryPush8 NoAction + Control+Rotary8 NoAction + Control+DisplayUpper8 NoAction + Control+DisplayLower8 NoAction + + + + + Alt+Fader1 NoAction + Alt+RotaryPush1 NoAction + Alt+Rotary1 NoAction + Alt+DisplayUpper1 NoAction + Alt+DisplayLower1 NoAction + + + Alt+Fader2 NoAction + Alt+RotaryPush2 NoAction + Alt+Rotary2 NoAction + Alt+DisplayUpper2 NoAction + Alt+DisplayLower2 NoAction + + + Alt+Fader3 NoAction + Alt+RotaryPush3 NoAction + Alt+Rotary3 NoAction + Alt+DisplayUpper3 NoAction + Alt+DisplayLower3 NoAction + + + Alt+Fader4 NoAction + Alt+RotaryPush4 NoAction + Alt+Rotary4 NoAction + Alt+DisplayUpper4 NoAction + Alt+DisplayLower4 NoAction + + + Alt+Fader5 NoAction + Alt+RotaryPush5 NoAction + Alt+Rotary5 NoAction + Alt+DisplayUpper5 NoAction + Alt+DisplayLower5 NoAction + + + Alt+Fader6 NoAction + Alt+RotaryPush6 NoAction + Alt+Rotary6 NoAction + Alt+DisplayUpper6 NoAction + Alt+DisplayLower6 NoAction + + + Alt+Fader7 NoAction + Alt+RotaryPush7 NoAction + Alt+Rotary7 NoAction + Alt+DisplayUpper7 NoAction + Alt+DisplayLower7 NoAction + + + Alt+Fader8 NoAction + Alt+RotaryPush8 NoAction + Alt+Rotary8 NoAction + Alt+DisplayUpper8 NoAction + Alt+DisplayLower8 NoAction + + + + + Shift+Option+Fader1 NoAction + Shift+Option+RotaryPush1 NoAction + Shift+Option+Rotary1 NoAction + Shift+Option+DisplayUpper1 NoAction + Shift+Option+DisplayLower1 NoAction + + + Shift+Option+Fader2 NoAction + Shift+Option+RotaryPush2 NoAction + Shift+Option+Rotary2 NoAction + Shift+Option+DisplayUpper2 NoAction + Shift+Option+DisplayLower2 NoAction + + + Shift+Option+Fader3 NoAction + Shift+Option+RotaryPush3 NoAction + Shift+Option+Rotary3 NoAction + Shift+Option+DisplayUpper3 NoAction + Shift+Option+DisplayLower3 NoAction + + + Shift+Option+Fader4 NoAction + Shift+Option+RotaryPush4 NoAction + Shift+Option+Rotary4 NoAction + Shift+Option+DisplayUpper4 NoAction + Shift+Option+DisplayLower4 NoAction + + + Shift+Option+Fader5 NoAction + Shift+Option+RotaryPush5 NoAction + Shift+Option+Rotary5 NoAction + Shift+Option+DisplayUpper5 NoAction + Shift+Option+DisplayLower5 NoAction + + + Shift+Option+Fader6 NoAction + Shift+Option+RotaryPush6 NoAction + Shift+Option+Rotary6 NoAction + Shift+Option+DisplayUpper6 NoAction + Shift+Option+DisplayLower6 NoAction + + + Shift+Option+Fader7 NoAction + Shift+Option+RotaryPush7 NoAction + Shift+Option+Rotary7 NoAction + Shift+Option+DisplayUpper7 NoAction + Shift+Option+DisplayLower7 NoAction + + + Shift+Option+Fader8 NoAction + Shift+Option+RotaryPush8 NoAction + Shift+Option+Rotary8 NoAction + Shift+Option+DisplayUpper8 NoAction + Shift+Option+DisplayLower8 NoAction + + + + + Shift+Control+Fader1 NoAction + Shift+Control+RotaryPush1 NoAction + Shift+Control+Rotary1 NoAction + Shift+Control+DisplayUpper1 NoAction + Shift+Control+DisplayLower1 NoAction + + + Shift+Control+Fader2 NoAction + Shift+Control+RotaryPush2 NoAction + Shift+Control+Rotary2 NoAction + Shift+Control+DisplayUpper2 NoAction + Shift+Control+DisplayLower2 NoAction + + + Shift+Control+Fader3 NoAction + Shift+Control+RotaryPush3 NoAction + Shift+Control+Rotary3 NoAction + Shift+Control+DisplayUpper3 NoAction + Shift+Control+DisplayLower3 NoAction + + + Shift+Control+Fader4 NoAction + Shift+Control+RotaryPush4 NoAction + Shift+Control+Rotary4 NoAction + Shift+Control+DisplayUpper4 NoAction + Shift+Control+DisplayLower4 NoAction + + + Shift+Control+Fader5 NoAction + Shift+Control+RotaryPush5 NoAction + Shift+Control+Rotary5 NoAction + Shift+Control+DisplayUpper5 NoAction + Shift+Control+DisplayLower5 NoAction + + + Shift+Control+Fader6 NoAction + Shift+Control+RotaryPush6 NoAction + Shift+Control+Rotary6 NoAction + Shift+Control+DisplayUpper6 NoAction + Shift+Control+DisplayLower6 NoAction + + + Shift+Control+Fader7 NoAction + Shift+Control+RotaryPush7 NoAction + Shift+Control+Rotary7 NoAction + Shift+Control+DisplayUpper7 NoAction + Shift+Control+DisplayLower7 NoAction + + + Shift+Control+Fader8 NoAction + Shift+Control+RotaryPush8 NoAction + Shift+Control+Rotary8 NoAction + Shift+Control+DisplayUpper8 NoAction + Shift+Control+DisplayLower8 NoAction + + + + + Shift+Alt+Fader1 NoAction + Shift+Alt+RotaryPush1 NoAction + Shift+Alt+Rotary1 NoAction + Shift+Alt+DisplayUpper1 NoAction + Shift+Alt+DisplayLower1 NoAction + + + Shift+Alt+Fader2 NoAction + Shift+Alt+RotaryPush2 NoAction + Shift+Alt+Rotary2 NoAction + Shift+Alt+DisplayUpper2 NoAction + Shift+Alt+DisplayLower2 NoAction + + + Shift+Alt+Fader3 NoAction + Shift+Alt+RotaryPush3 NoAction + Shift+Alt+Rotary3 NoAction + Shift+Alt+DisplayUpper3 NoAction + Shift+Alt+DisplayLower3 NoAction + + + Shift+Alt+Fader4 NoAction + Shift+Alt+RotaryPush4 NoAction + Shift+Alt+Rotary4 NoAction + Shift+Alt+DisplayUpper4 NoAction + Shift+Alt+DisplayLower4 NoAction + + + Shift+Alt+Fader5 NoAction + Shift+Alt+RotaryPush5 NoAction + Shift+Alt+Rotary5 NoAction + Shift+Alt+DisplayUpper5 NoAction + Shift+Alt+DisplayLower5 NoAction + + + Shift+Alt+Fader6 NoAction + Shift+Alt+RotaryPush6 NoAction + Shift+Alt+Rotary6 NoAction + Shift+Alt+DisplayUpper6 NoAction + Shift+Alt+DisplayLower6 NoAction + + + Shift+Alt+Fader7 NoAction + Shift+Alt+RotaryPush7 NoAction + Shift+Alt+Rotary7 NoAction + Shift+Alt+DisplayUpper7 NoAction + Shift+Alt+DisplayLower7 NoAction + + + Shift+Alt+Fader8 NoAction + Shift+Alt+RotaryPush8 NoAction + Shift+Alt+Rotary8 NoAction + Shift+Alt+DisplayUpper8 NoAction + Shift+Alt+DisplayLower8 NoAction + + + + + Shift+Option+Control+Fader1 NoAction + Shift+Option+Control+RotaryPush1 NoAction + Shift+Option+Control+Rotary1 NoAction + Shift+Option+Control+DisplayUpper1 NoAction + Shift+Option+Control+DisplayLower1 NoAction + + + Shift+Option+Control+Fader2 NoAction + Shift+Option+Control+RotaryPush2 NoAction + Shift+Option+Control+Rotary2 NoAction + Shift+Option+Control+DisplayUpper2 NoAction + Shift+Option+Control+DisplayLower2 NoAction + + + Shift+Option+Control+Fader3 NoAction + Shift+Option+Control+RotaryPush3 NoAction + Shift+Option+Control+Rotary3 NoAction + Shift+Option+Control+DisplayUpper3 NoAction + Shift+Option+Control+DisplayLower3 NoAction + + + Shift+Option+Control+Fader4 NoAction + Shift+Option+Control+RotaryPush4 NoAction + Shift+Option+Control+Rotary4 NoAction + Shift+Option+Control+DisplayUpper4 NoAction + Shift+Option+Control+DisplayLower4 NoAction + + + Shift+Option+Control+Fader5 NoAction + Shift+Option+Control+RotaryPush5 NoAction + Shift+Option+Control+Rotary5 NoAction + Shift+Option+Control+DisplayUpper5 NoAction + Shift+Option+Control+DisplayLower5 NoAction + + + Shift+Option+Control+Fader6 NoAction + Shift+Option+Control+RotaryPush6 NoAction + Shift+Option+Control+Rotary6 NoAction + Shift+Option+Control+DisplayUpper6 NoAction + Shift+Option+Control+DisplayLower6 NoAction + + + Shift+Option+Control+Fader7 NoAction + Shift+Option+Control+RotaryPush7 NoAction + Shift+Option+Control+Rotary7 NoAction + Shift+Option+Control+DisplayUpper7 NoAction + Shift+Option+Control+DisplayLower7 NoAction + + + Shift+Option+Control+Fader8 NoAction + Shift+Option+Control+RotaryPush8 NoAction + Shift+Option+Control+Rotary8 NoAction + Shift+Option+Control+DisplayUpper8 NoAction + Shift+Option+Control+DisplayLower8 NoAction + + + + + Option+Control+Alt+Fader1 NoAction + Option+Control+Alt+RotaryPush1 NoAction + Option+Control+Alt+Rotary1 NoAction + Option+Control+Alt+DisplayUpper1 NoAction + Option+Control+Alt+DisplayLower1 NoAction + + + Option+Control+Alt+Fader2 NoAction + Option+Control+Alt+RotaryPush2 NoAction + Option+Control+Alt+Rotary2 NoAction + Option+Control+Alt+DisplayUpper2 NoAction + Option+Control+Alt+DisplayLower2 NoAction + + + Option+Control+Alt+Fader3 NoAction + Option+Control+Alt+RotaryPush3 NoAction + Option+Control+Alt+Rotary3 NoAction + Option+Control+Alt+DisplayUpper3 NoAction + Option+Control+Alt+DisplayLower3 NoAction + + + Option+Control+Alt+Fader4 NoAction + Option+Control+Alt+RotaryPush4 NoAction + Option+Control+Alt+Rotary4 NoAction + Option+Control+Alt+DisplayUpper4 NoAction + Option+Control+Alt+DisplayLower4 NoAction + + + Option+Control+Alt+Fader5 NoAction + Option+Control+Alt+RotaryPush5 NoAction + Option+Control+Alt+Rotary5 NoAction + Option+Control+Alt+DisplayUpper5 NoAction + Option+Control+Alt+DisplayLower5 NoAction + + + Option+Control+Alt+Fader6 NoAction + Option+Control+Alt+RotaryPush6 NoAction + Option+Control+Alt+Rotary6 NoAction + Option+Control+Alt+DisplayUpper6 NoAction + Option+Control+Alt+DisplayLower6 NoAction + + + Option+Control+Alt+Fader7 NoAction + Option+Control+Alt+RotaryPush7 NoAction + Option+Control+Alt+Rotary7 NoAction + Option+Control+Alt+DisplayUpper7 NoAction + Option+Control+Alt+DisplayLower7 NoAction + + + Option+Control+Alt+Fader8 NoAction + Option+Control+Alt+RotaryPush8 NoAction + Option+Control+Alt+Rotary8 NoAction + Option+Control+Alt+DisplayUpper8 NoAction + Option+Control+Alt+DisplayLower8 NoAction + + + + + Shift+Control+Alt+Fader1 NoAction + Shift+Control+Alt+RotaryPush1 NoAction + Shift+Control+Alt+Rotary1 NoAction + Shift+Control+Alt+DisplayUpper1 NoAction + Shift+Control+Alt+DisplayLower1 NoAction + + + Shift+Control+Alt+Fader2 NoAction + Shift+Control+Alt+RotaryPush2 NoAction + Shift+Control+Alt+Rotary2 NoAction + Shift+Control+Alt+DisplayUpper2 NoAction + Shift+Control+Alt+DisplayLower2 NoAction + + + Shift+Control+Alt+Fader3 NoAction + Shift+Control+Alt+RotaryPush3 NoAction + Shift+Control+Alt+Rotary3 NoAction + Shift+Control+Alt+DisplayUpper3 NoAction + Shift+Control+Alt+DisplayLower3 NoAction + + + Shift+Control+Alt+Fader4 NoAction + Shift+Control+Alt+RotaryPush4 NoAction + Shift+Control+Alt+Rotary4 NoAction + Shift+Control+Alt+DisplayUpper4 NoAction + Shift+Control+Alt+DisplayLower4 NoAction + + + Shift+Control+Alt+Fader5 NoAction + Shift+Control+Alt+RotaryPush5 NoAction + Shift+Control+Alt+Rotary5 NoAction + Shift+Control+Alt+DisplayUpper5 NoAction + Shift+Control+Alt+DisplayLower5 NoAction + + + Shift+Control+Alt+Fader6 NoAction + Shift+Control+Alt+RotaryPush6 NoAction + Shift+Control+Alt+Rotary6 NoAction + Shift+Control+Alt+DisplayUpper6 NoAction + Shift+Control+Alt+DisplayLower6 NoAction + + + Shift+Control+Alt+Fader7 NoAction + Shift+Control+Alt+RotaryPush7 NoAction + Shift+Control+Alt+Rotary7 NoAction + Shift+Control+Alt+DisplayUpper7 NoAction + Shift+Control+Alt+DisplayLower7 NoAction + + + Shift+Control+Alt+Fader8 NoAction + Shift+Control+Alt+RotaryPush8 NoAction + Shift+Control+Alt+Rotary8 NoAction + Shift+Control+Alt+DisplayUpper8 NoAction + Shift+Control+Alt+DisplayLower8 NoAction + + + + + Shift+Option+Alt+Fader1 NoAction + Shift+Option+Alt+RotaryPush1 NoAction + Shift+Option+Alt+Rotary1 NoAction + Shift+Option+Alt+DisplayUpper1 NoAction + Shift+Option+Alt+DisplayLower1 NoAction + + + Shift+Option+Alt+Fader2 NoAction + Shift+Option+Alt+RotaryPush2 NoAction + Shift+Option+Alt+Rotary2 NoAction + Shift+Option+Alt+DisplayUpper2 NoAction + Shift+Option+Alt+DisplayLower2 NoAction + + + Shift+Option+Alt+Fader3 NoAction + Shift+Option+Alt+RotaryPush3 NoAction + Shift+Option+Alt+Rotary3 NoAction + Shift+Option+Alt+DisplayUpper3 NoAction + Shift+Option+Alt+DisplayLower3 NoAction + + + Shift+Option+Alt+Fader4 NoAction + Shift+Option+Alt+RotaryPush4 NoAction + Shift+Option+Alt+Rotary4 NoAction + Shift+Option+Alt+DisplayUpper4 NoAction + Shift+Option+Alt+DisplayLower4 NoAction + + + Shift+Option+Alt+Fader5 NoAction + Shift+Option+Alt+RotaryPush5 NoAction + Shift+Option+Alt+Rotary5 NoAction + Shift+Option+Alt+DisplayUpper5 NoAction + Shift+Option+Alt+DisplayLower5 NoAction + + + Shift+Option+Alt+Fader6 NoAction + Shift+Option+Alt+RotaryPush6 NoAction + Shift+Option+Alt+Rotary6 NoAction + Shift+Option+Alt+DisplayUpper6 NoAction + Shift+Option+Alt+DisplayLower6 NoAction + + + Shift+Option+Alt+Fader7 NoAction + Shift+Option+Alt+RotaryPush7 NoAction + Shift+Option+Alt+Rotary7 NoAction + Shift+Option+Alt+DisplayUpper7 NoAction + Shift+Option+Alt+DisplayLower7 NoAction + + + Shift+Option+Alt+Fader8 NoAction + Shift+Option+Alt+RotaryPush8 NoAction + Shift+Option+Alt+Rotary8 NoAction + Shift+Option+Alt+DisplayUpper8 NoAction + Shift+Option+Alt+DisplayLower8 NoAction + + + + + Option+Control+Fader1 NoAction + Option+Control+RotaryPush1 NoAction + Option+Control+Rotary1 NoAction + Option+Control+DisplayUpper1 NoAction + Option+Control+DisplayLower1 NoAction + + + Option+Control+Fader2 NoAction + Option+Control+RotaryPush2 NoAction + Option+Control+Rotary2 NoAction + Option+Control+DisplayUpper2 NoAction + Option+Control+DisplayLower2 NoAction + + + Option+Control+Fader3 NoAction + Option+Control+RotaryPush3 NoAction + Option+Control+Rotary3 NoAction + Option+Control+DisplayUpper3 NoAction + Option+Control+DisplayLower3 NoAction + + + Option+Control+Fader4 NoAction + Option+Control+RotaryPush4 NoAction + Option+Control+Rotary4 NoAction + Option+Control+DisplayUpper4 NoAction + Option+Control+DisplayLower4 NoAction + + + Option+Control+Fader5 NoAction + Option+Control+RotaryPush5 NoAction + Option+Control+Rotary5 NoAction + Option+Control+DisplayUpper5 NoAction + Option+Control+DisplayLower5 NoAction + + + Option+Control+Fader6 NoAction + Option+Control+RotaryPush6 NoAction + Option+Control+Rotary6 NoAction + Option+Control+DisplayUpper6 NoAction + Option+Control+DisplayLower6 NoAction + + + Option+Control+Fader7 NoAction + Option+Control+RotaryPush7 NoAction + Option+Control+Rotary7 NoAction + Option+Control+DisplayUpper7 NoAction + Option+Control+DisplayLower7 NoAction + + + Option+Control+Fader8 NoAction + Option+Control+RotaryPush8 NoAction + Option+Control+Rotary8 NoAction + Option+Control+DisplayUpper8 NoAction + Option+Control+DisplayLower8 NoAction + + + + + Option+Alt+Fader1 NoAction + Option+Alt+RotaryPush1 NoAction + Option+Alt+Rotary1 NoAction + Option+Alt+DisplayUpper1 NoAction + Option+Alt+DisplayLower1 NoAction + + + Option+Alt+Fader2 NoAction + Option+Alt+RotaryPush2 NoAction + Option+Alt+Rotary2 NoAction + Option+Alt+DisplayUpper2 NoAction + Option+Alt+DisplayLower2 NoAction + + + Option+Alt+Fader3 NoAction + Option+Alt+RotaryPush3 NoAction + Option+Alt+Rotary3 NoAction + Option+Alt+DisplayUpper3 NoAction + Option+Alt+DisplayLower3 NoAction + + + Option+Alt+Fader4 NoAction + Option+Alt+RotaryPush4 NoAction + Option+Alt+Rotary4 NoAction + Option+Alt+DisplayUpper4 NoAction + Option+Alt+DisplayLower4 NoAction + + + Option+Alt+Fader5 NoAction + Option+Alt+RotaryPush5 NoAction + Option+Alt+Rotary5 NoAction + Option+Alt+DisplayUpper5 NoAction + Option+Alt+DisplayLower5 NoAction + + + Option+Alt+Fader6 NoAction + Option+Alt+RotaryPush6 NoAction + Option+Alt+Rotary6 NoAction + Option+Alt+DisplayUpper6 NoAction + Option+Alt+DisplayLower6 NoAction + + + Option+Alt+Fader7 NoAction + Option+Alt+RotaryPush7 NoAction + Option+Alt+Rotary7 NoAction + Option+Alt+DisplayUpper7 NoAction + Option+Alt+DisplayLower7 NoAction + + + Option+Alt+Fader8 NoAction + Option+Alt+RotaryPush8 NoAction + Option+Alt+Rotary8 NoAction + Option+Alt+DisplayUpper8 NoAction + Option+Alt+DisplayLower8 NoAction + + + + + Option+Control+Alt+Fader1 NoAction + Option+Control+Alt+RotaryPush1 NoAction + Option+Control+Alt+Rotary1 NoAction + Option+Control+Alt+DisplayUpper1 NoAction + Option+Control+Alt+DisplayLower1 NoAction + + + Option+Control+Alt+Fader2 NoAction + Option+Control+Alt+RotaryPush2 NoAction + Option+Control+Alt+Rotary2 NoAction + Option+Control+Alt+DisplayUpper2 NoAction + Option+Control+Alt+DisplayLower2 NoAction + + + Option+Control+Alt+Fader3 NoAction + Option+Control+Alt+RotaryPush3 NoAction + Option+Control+Alt+Rotary3 NoAction + Option+Control+Alt+DisplayUpper3 NoAction + Option+Control+Alt+DisplayLower3 NoAction + + + Option+Control+Alt+Fader4 NoAction + Option+Control+Alt+RotaryPush4 NoAction + Option+Control+Alt+Rotary4 NoAction + Option+Control+Alt+DisplayUpper4 NoAction + Option+Control+Alt+DisplayLower4 NoAction + + + Option+Control+Alt+Fader5 NoAction + Option+Control+Alt+RotaryPush5 NoAction + Option+Control+Alt+Rotary5 NoAction + Option+Control+Alt+DisplayUpper5 NoAction + Option+Control+Alt+DisplayLower5 NoAction + + + Option+Control+Alt+Fader6 NoAction + Option+Control+Alt+RotaryPush6 NoAction + Option+Control+Alt+Rotary6 NoAction + Option+Control+Alt+DisplayUpper6 NoAction + Option+Control+Alt+DisplayLower6 NoAction + + + Option+Control+Alt+Fader7 NoAction + Option+Control+Alt+RotaryPush7 NoAction + Option+Control+Alt+Rotary7 NoAction + Option+Control+Alt+DisplayUpper7 NoAction + Option+Control+Alt+DisplayLower7 NoAction + + + Option+Control+Alt+Fader8 NoAction + Option+Control+Alt+RotaryPush8 NoAction + Option+Control+Alt+Rotary8 NoAction + Option+Control+Alt+DisplayUpper8 NoAction + Option+Control+Alt+DisplayLower8 NoAction + + + + + Control+Alt+Fader1 NoAction + Control+Alt+RotaryPush1 NoAction + Control+Alt+Rotary1 NoAction + Control+Alt+DisplayUpper1 NoAction + Control+Alt+DisplayLower1 NoAction + + + Control+Alt+Fader2 NoAction + Control+Alt+RotaryPush2 NoAction + Control+Alt+Rotary2 NoAction + Control+Alt+DisplayUpper2 NoAction + Control+Alt+DisplayLower2 NoAction + + + Control+Alt+Fader3 NoAction + Control+Alt+RotaryPush3 NoAction + Control+Alt+Rotary3 NoAction + Control+Alt+DisplayUpper3 NoAction + Control+Alt+DisplayLower3 NoAction + + + Control+Alt+Fader4 NoAction + Control+Alt+RotaryPush4 NoAction + Control+Alt+Rotary4 NoAction + Control+Alt+DisplayUpper4 NoAction + Control+Alt+DisplayLower4 NoAction + + + Control+Alt+Fader5 NoAction + Control+Alt+RotaryPush5 NoAction + Control+Alt+Rotary5 NoAction + Control+Alt+DisplayUpper5 NoAction + Control+Alt+DisplayLower5 NoAction + + + Control+Alt+Fader6 NoAction + Control+Alt+RotaryPush6 NoAction + Control+Alt+Rotary6 NoAction + Control+Alt+DisplayUpper6 NoAction + Control+Alt+DisplayLower6 NoAction + + + Control+Alt+Fader7 NoAction + Control+Alt+RotaryPush7 NoAction + Control+Alt+Rotary7 NoAction + Control+Alt+DisplayUpper7 NoAction + Control+Alt+DisplayLower7 NoAction + + + Control+Alt+Fader8 NoAction + Control+Alt+RotaryPush8 NoAction + Control+Alt+Rotary8 NoAction + Control+Alt+DisplayUpper8 NoAction + Control+Alt+DisplayLower8 NoAction + + + +#End auto generated section + + OnZoneDeactivation HideFXSlot +ZoneEnd diff --git a/reaper_csurf_integrator/control_surface_integrator.h b/reaper_csurf_integrator/control_surface_integrator.h index 064066e..3a6822d 100644 --- a/reaper_csurf_integrator/control_surface_integrator.h +++ b/reaper_csurf_integrator/control_surface_integrator.h @@ -97,6 +97,7 @@ extern void RequestFocusedFXDialog(ZoneManager *zoneManager); extern void CloseFocusedFXDialog(); extern void UpdateLearnWindow(ZoneManager *zoneManager); extern void InitBlankLearnFocusedFXZone(ZoneManager *zoneManager, Zone *fxZone, MediaTrack *track, int fxSlot); +extern void FillMissingFXZoneContexts(ZoneManager *zoneManager, Zone *fxZone); extern void ShutdownLearn(); extern int g_debugLevel; @@ -1484,7 +1485,8 @@ class ZoneManager { learnFocusedFXZone_ = make_shared(csi_, this, GetNavigatorForTrack(track), fxIndex, fxName, zoneInfo_[fxName].alias, zoneInfo_[fxName].filePath); LoadZoneFile(learnFocusedFXZone_.get(), ""); - + FillMissingFXZoneContexts(this, learnFocusedFXZone_.get()); + learnFocusedFXZone_->Activate(); } else diff --git a/reaper_csurf_integrator/control_surface_integrator_ui.cpp b/reaper_csurf_integrator/control_surface_integrator_ui.cpp index c7c88bb..8c2cd86 100644 --- a/reaper_csurf_integrator/control_surface_integrator_ui.cpp +++ b/reaper_csurf_integrator/control_surface_integrator_ui.cpp @@ -17,6 +17,7 @@ extern int g_maxNumParamSteps; static int s_dlgResult = IDCANCEL; static bool s_isUpdatingParameters = false; +static bool s_outputPaged = false; static HWND s_hwndLearnFXDlg = NULL; static Widget *s_currentWidget = NULL; static int s_currentModifier = 0; @@ -642,6 +643,31 @@ static void WriteBoilerPlate(FILE *fxFile, string &fxBoilerplatePath) } } +static void CleanupPagedFiles(const char *path, const char *trimmedName) +{ + // Remove standard backup (name.zon_inact) now that standard is active again + char inactStdPath[BUFSIZ]; + snprintf(inactStdPath, sizeof(inactStdPath), "%s/%s.zon_inact", path, trimmedName); + remove(inactStdPath); + + // Rename paged page files (name-1.zon, name-2.zon, ...) to .zon_inact + for (int i = 1; ; i++) + { + char pagedPath[BUFSIZ]; + snprintf(pagedPath, sizeof(pagedPath), "%s/%s-%d.zon", path, trimmedName, i); + + FILE *f = fopenUTF8(pagedPath, "rb"); + if (!f) + break; + fclose(f); + + char inactPath[BUFSIZ]; + snprintf(inactPath, sizeof(inactPath), "%s/%s-%d.zon_inact", path, trimmedName, i); + remove(inactPath); + rename(pagedPath, inactPath); + } +} + static void SaveZone(SurfaceFXTemplate *t) { if (s_focusedTrack == NULL || s_fxName[0] == 0 || t == NULL) @@ -666,73 +692,473 @@ static void SaveZone(SurfaceFXTemplate *t) snprintf(filePath, sizeof(filePath), "%s/%s.zon", path, trimmedFXName.c_str()); + // Before writing, scan for paged page files (name-1.zon, name-2.zon, ...) and + // extract their fader content, keyed by the modifier stamp embedded in each file. + // This allows a Paged->Standard conversion to recover all modifier row mappings. + map> pagedSupplement; + + for (int pageNum = 1; ; pageNum++) + { + char pagedPath[BUFSIZ]; + snprintf(pagedPath, sizeof(pagedPath), "%s/%s-%d.zon", path, trimmedFXName.c_str(), pageNum); + + FILE *testFile = fopenUTF8(pagedPath, "rb"); + if (!testFile) + break; + fclose(testFile); + + ifstream pageStream(pagedPath); + int pageModifier = -1; + vector contentLines; + bool contentStarted = false; + + for (string line; getline(pageStream, line); ) + { + if (line.find("Zone ") == 0 || line == "ZoneEnd") + continue; + + if (line.find("// CSI:paged-modifier=") == 0) + { + pageModifier = atoi(line.c_str() + (int)strlen("// CSI:paged-modifier=")); + continue; + } + + // Skip navigation lines + if (line.find("GoZone") != string::npos || line.find("GoSubZone") != string::npos) + continue; + if (line.find("// ---") != string::npos) + continue; + + // Wait for the first tab-indented widget line to start collecting content + if (!contentStarted) + { + if (!line.empty() && line[0] == '\t' && line.size() > 1 && isalpha((unsigned char)line[1])) + contentStarted = true; + else + continue; + } + + contentLines.push_back(line); + } + + if (pageModifier >= 0 && !contentLines.empty()) + pagedSupplement[pageModifier] = move(contentLines); + } + FILE *fxFile = fopenUTF8(filePath,"wb"); - + if (fxFile) { fprintf(fxFile, "Zone \"%s\" \"%s\"\n", s_fxName, s_fxAlias); - + map &zoneInfo = zoneManager->GetZoneInfo(); - + if (zoneInfo.find("FXPrologue") != zoneInfo.end()) { ifstream file(zoneInfo["FXPrologue"].filePath); - + for (string line; getline(file, line) ; ) if (line.find("Zone") != 0) fprintf(fxFile, "%s\n", line.c_str()); } - + + fprintf(fxFile, "\n\tCancel GoZone SelectedTrackFXMenu\n"); fprintf(fxFile, "\n%s\n\n", s_BeginAutoSection); - - int previousChannel = 1; - + + // Build ordered modifier groups from t->cells + vector modifierOrder; + map> cellsByMod; for (auto &cell : t->cells) { + if (cellsByMod.find(cell->modifier) == cellsByMod.end()) + modifierOrder.push_back(cell->modifier); + cellsByMod[cell->modifier].push_back(cell.get()); + } + + bool firstGroup = true; + for (int modifier : modifierOrder) + { + if (!firstGroup) + fprintf(fxFile, "\n\n"); + firstGroup = false; + char modifierBuf[SMLBUF]; - - if (previousChannel > cell->channel) + zoneManager->GetSurface()->GetModifierManager()->GetModifierString(modifier, modifierBuf, sizeof(modifierBuf)); + + auto &groupCells = cellsByMod[modifier]; + + // Check if this modifier group has any real (non-NoAction) mapping in memory + bool hasRealMapping = false; + for (auto *cell : groupCells) { - fprintf(fxFile, "\n\n"); - previousChannel = 1; + for (auto widget : cell->controlWidgets) + { + ActionContext *ctx = GetFirstContext(zoneManager, widget, modifier); + if (ctx && strcmp(ctx->GetAction()->GetName(), "NoAction") != 0) + { + hasRealMapping = true; + break; + } + } + if (hasRealMapping) break; + } + + if (!hasRealMapping && pagedSupplement.count(modifier) > 0) + { + // Supplement from paged page file: re-add modifier prefix to each widget line + for (auto &supLine : pagedSupplement.at(modifier)) + { + if (!supLine.empty() && supLine[0] == '\t') + fprintf(fxFile, "\t%s%s\n", modifierBuf, supLine.c_str() + 1); + else + fprintf(fxFile, "%s\n", supLine.c_str()); + } } else - previousChannel++; + { + // Write from t->cells (standard path) + for (auto *cell : groupCells) + { + for (auto widget : cell->controlWidgets) + { + fprintf(fxFile, "\t%s%s ", modifierBuf, widget->GetName()); - int modifier = cell->modifier; - zoneManager->GetSurface()->GetModifierManager()->GetModifierString(modifier, modifierBuf, sizeof(modifierBuf)); - + if (ActionContext *context = GetFirstContext(zoneManager, widget, modifier)) + { + char actionName[SMLBUF]; + snprintf(actionName, sizeof(actionName), "%s", context->GetAction()->GetName()); + + fprintf(fxFile, "%s ", actionName); + + if (strcmp(actionName, "NoAction")) + { + fprintf(fxFile, "%d ", context->GetParamIndex()); + + context->GetWidgetProperties().save_list(fxFile); + + fprintf(fxFile, "[ %0.2f>%0.2f ", context->GetRangeMinimum(), context->GetRangeMaximum()); + + fprintf(fxFile, "("); + + char numBuf[MEDBUF]; + + if (context->GetAcceleratedDeltaValues().size() > 0) + { + for (int i = 0; i < (int)context->GetAcceleratedDeltaValues().size(); ++i) + { + format_number(context->GetAcceleratedDeltaValues()[i], numBuf, sizeof(numBuf)); + + if (i < (int)context->GetAcceleratedDeltaValues().size() - 1) + fprintf(fxFile, "%s,", numBuf); + else + fprintf(fxFile, "%s", numBuf); + } + } + else + { + format_number(context->GetDeltaValue(), numBuf, sizeof(numBuf)); + fprintf(fxFile, "%s", numBuf); + } + + fprintf(fxFile, ") "); + + fprintf(fxFile, "("); + + if (context->GetAcceleratedTickCounts().size() > 0) + { + for (int i = 0; i < (int)context->GetAcceleratedTickCounts().size(); ++i) + { + if (i < (int)context->GetAcceleratedTickCounts().size() - 1) + fprintf(fxFile, "%d,", context->GetAcceleratedTickCounts()[i]); + else + fprintf(fxFile, "%d", context->GetAcceleratedTickCounts()[i]); + } + } + + fprintf(fxFile, ") "); + + if (context->GetSteppedValues().size() > 0) + { + for (int i = 0; i < (int)context->GetSteppedValues().size(); ++i) + fprintf(fxFile, "%0.2f ", context->GetSteppedValues()[i]); + } + + fprintf(fxFile, " ]"); + + { + const char* freeText = context->GetFreeFormText(); + if (freeText && freeText[0] != '\0') + fprintf(fxFile, " %s", freeText); + } + } + } + + fprintf(fxFile, "\n"); + } + + for (auto displayWidget : cell->displayWidgets) + { + Widget *widget = displayWidget; + + if ( ! strcmp (zoneManager->GetSurface()->GetName(), "SCE24")) + { + if (strstr(widget->GetName(), t->paramWidget) || strstr(widget->GetName(), t->nameWidget) || strstr(widget->GetName(), t->valueWidget)) + fprintf(fxFile, "\t%s%s ", modifierBuf, widget->GetName()); + } + else + fprintf(fxFile, "\t%s%s ", modifierBuf, widget->GetName()); + + if (ActionContext *context = GetFirstContext(zoneManager, widget, modifier)) + { + char actionName[SMLBUF]; + snprintf(actionName, sizeof(actionName), "%s", context->GetAction()->GetName()); + + if ( ! strcmp (zoneManager->GetSurface()->GetName(), "SCE24")) + { + if (strstr(widget->GetName(), t->paramWidget) || strstr(widget->GetName(), t->nameWidget) || strstr(widget->GetName(), t->valueWidget)) + fprintf(fxFile, "%s ", actionName); + } + else + fprintf(fxFile, "%s ", actionName); + + if (strcmp(actionName, "NoAction")) + { + if ( ! strcmp(actionName, "FixedTextDisplay")) + fprintf(fxFile, "\"%s\" %d ", context->GetStringParam(), context->GetParamIndex()); + else if ( ! strcmp(actionName, "FXParamValueDisplay")) + fprintf(fxFile, "%d ", context->GetParamIndex()); + + context->GetWidgetProperties().save_list(fxFile); + } + + if ( ! strcmp (zoneManager->GetSurface()->GetName(), "SCE24")) + { + if (strstr(widget->GetName(), t->paramWidget) || strstr(widget->GetName(), t->nameWidget) || strstr(widget->GetName(), t->valueWidget)) + fprintf(fxFile, "\n"); + } + else + fprintf(fxFile, "\n"); + } + } + + fprintf(fxFile, "\n\n"); + } + } + } + + fprintf(fxFile, "\n%s\n\n", s_EndAutoSection); + + if (zoneInfo.find("FXEpilogue") != zoneInfo.end()) + { + ifstream file(zoneInfo["FXEpilogue"].filePath); + + for (string line; getline(file, line) ; ) + if (line.find("Zone") != 0) + fprintf(fxFile, "%s\n", line.c_str()); + } + + fprintf(fxFile, "%s\n", "ZoneEnd"); + + fclose(fxFile); + } + + CSIZoneInfo info; + info.filePath = filePath; + info.alias = s_fxAlias; + + zoneManager->AddZoneFilePath(s_fxName, info); + + CleanupPagedFiles(path, trimmedFXName.c_str()); + } + catch (const std::exception& e) + { + LogToConsole(256, "[ERROR] FAILED to SaveZone %s\n", path); + LogToConsole(2048, "Exception: %s\n", e.what()); + } +} + +static void SaveZonePaged(SurfaceFXTemplate *t) +{ + if (s_focusedTrack == NULL || s_fxName[0] == 0 || t == NULL) + return; + + ZoneManager *zoneManager = t->zoneManager; + + char path[BUFSIZ]; + snprintf(path, sizeof(path), "%s/AutoGeneratedFXZones", zoneManager->GetFXZoneFolder()); + + try + { + RecursiveCreateDirectory(path, 0); + + string trimmedFXName = s_fxName; + ReplaceAllWith(trimmedFXName, s_BadFileChars, "_"); + + // Group cells by modifier in definition order + vector modifierOrder; + map> cellsByModifier; + + for (auto &cell : t->cells) + { + if (cellsByModifier.find(cell->modifier) == cellsByModifier.end()) + modifierOrder.push_back(cell->modifier); + cellsByModifier[cell->modifier].push_back(cell.get()); + } + + // Each modifier group with at least one non-NoAction mapping becomes a page + vector>> pages; + + for (int mod : modifierOrder) + { + auto &cells = cellsByModifier[mod]; + bool hasMapping = false; + for (auto *cell : cells) + { for (auto widget : cell->controlWidgets) { - fprintf(fxFile, "\t%s%s ", modifierBuf, widget->GetName()); - + ActionContext *ctx = GetFirstContext(zoneManager, widget, mod); + if (ctx && strcmp(ctx->GetAction()->GetName(), "NoAction") != 0) + { + hasMapping = true; + break; + } + } + if (hasMapping) break; + } + if (hasMapping) + pages.push_back(make_pair(mod, cells)); + } + + if (pages.empty()) + return; + + int numPages = (int)pages.size(); + map &zoneInfo = zoneManager->GetZoneInfo(); + + // Build zone name/alias for each page index + // Page 1: s_fxName / s_fxAlias + // Page N (N>1): "{s_fxName}-{N-1}" / "Page N" + auto getZoneName = [&](int idx) -> string { + if (idx == 0) + return string(s_fxName); + char suffix[32]; + snprintf(suffix, sizeof(suffix), "-%d", idx); + return string(s_fxName) + suffix; + }; + auto getZoneAlias = [&](int idx) -> string { + if (idx == 0) + return string(s_fxAlias); + char buf[32]; + snprintf(buf, sizeof(buf), "Page %d", idx + 1); + return string(buf); + }; + + // Backup existing name.zon (standard) → name.zon_inact + char standardPath[BUFSIZ]; + snprintf(standardPath, sizeof(standardPath), "%s/%s.zon", path, trimmedFXName.c_str()); + char standardInactPath[BUFSIZ]; + snprintf(standardInactPath, sizeof(standardInactPath), "%s/%s.zon_inact", path, trimmedFXName.c_str()); + remove(standardInactPath); + rename(standardPath, standardInactPath); + + // Write each page file + for (int pageIdx = 0; pageIdx < numPages; pageIdx++) + { + char filePath[BUFSIZ]; + if (pageIdx == 0) + snprintf(filePath, sizeof(filePath), "%s/%s.zon", path, trimmedFXName.c_str()); + else + snprintf(filePath, sizeof(filePath), "%s/%s-%d.zon", path, trimmedFXName.c_str(), pageIdx); + + FILE *fxFile = fopenUTF8(filePath, "wb"); + if (!fxFile) + continue; + + string zoneName = getZoneName(pageIdx); + string zoneAlias = getZoneAlias(pageIdx); + int modifier = pages[pageIdx].first; + auto &pageCells = pages[pageIdx].second; + + fprintf(fxFile, "Zone \"%s\" \"%s\"\n", zoneName.c_str(), zoneAlias.c_str()); + fprintf(fxFile, "// CSI:paged-modifier=%d\n", modifier); + + // FXPrologue (page 1 only) + if (pageIdx == 0 && zoneInfo.find("FXPrologue") != zoneInfo.end()) + { + ifstream prologueFile(zoneInfo["FXPrologue"].filePath); + for (string line; getline(prologueFile, line); ) + if (line.find("Zone") != 0) + fprintf(fxFile, "%s\n", line.c_str()); + } + + fprintf(fxFile, "\n"); + + // SubZones bridge (page 1 only, when there are multiple pages) + if (pageIdx == 0 && numPages > 1) + { + fprintf(fxFile, "\t// --- SubZone Bridge ---\n"); + fprintf(fxFile, "\tSubZones\n"); + for (int i = 1; i < numPages; i++) + fprintf(fxFile, "\t\t\"%s\"\n", getZoneName(i).c_str()); + fprintf(fxFile, "\tSubZonesEnd\n"); + fprintf(fxFile, "\n"); + } + + // Navigation + fprintf(fxFile, "\t// --- Navigation ---\n"); + fprintf(fxFile, "\tCancel GoZone SelectedTrackFXMenu\n"); + + if (pageIdx > 0) + { + string prevName = getZoneName(pageIdx - 1); + string prevAlias = getZoneAlias(pageIdx - 1); + fprintf(fxFile, "\tBankLeft GoSubZone \"%s\" \"%s\"\n", prevName.c_str(), prevAlias.c_str()); + fprintf(fxFile, "\tLeft GoSubZone \"%s\" \"%s\"\n", prevName.c_str(), prevAlias.c_str()); + } + + if (pageIdx < numPages - 1) + { + string nextName = getZoneName(pageIdx + 1); + string nextAlias = getZoneAlias(pageIdx + 1); + fprintf(fxFile, "\tBankRight GoSubZone \"%s\" \"%s\"\n", nextName.c_str(), nextAlias.c_str()); + fprintf(fxFile, "\tRight GoSubZone \"%s\" \"%s\"\n", nextName.c_str(), nextAlias.c_str()); + } + else + { + fprintf(fxFile, "\tBankRight NoAction\n"); + fprintf(fxFile, "\tRight NoAction\n"); + } + + fprintf(fxFile, "\n"); + + // Cell mappings (no modifier prefix) + for (auto *cell : pageCells) + { + for (auto widget : cell->controlWidgets) + { + fprintf(fxFile, "\t%s ", widget->GetName()); + if (ActionContext *context = GetFirstContext(zoneManager, widget, modifier)) { char actionName[SMLBUF]; snprintf(actionName, sizeof(actionName), "%s", context->GetAction()->GetName()); - + fprintf(fxFile, "%s ", actionName); if (strcmp(actionName, "NoAction")) { fprintf(fxFile, "%d ", context->GetParamIndex()); - context->GetWidgetProperties().save_list(fxFile); - fprintf(fxFile, "[ %0.2f>%0.2f ", context->GetRangeMinimum(), context->GetRangeMaximum()); - fprintf(fxFile, "("); - - char numBuf[MEDBUF]; + char numBuf[MEDBUF]; if (context->GetAcceleratedDeltaValues().size() > 0) { - - for (int i = 0; i < context->GetAcceleratedDeltaValues().size(); ++i) + for (int i = 0; i < (int)context->GetAcceleratedDeltaValues().size(); ++i) { format_number(context->GetAcceleratedDeltaValues()[i], numBuf, sizeof(numBuf)); - - if ( i < context->GetAcceleratedDeltaValues().size() - 1) + if (i < (int)context->GetAcceleratedDeltaValues().size() - 1) fprintf(fxFile, "%s,", numBuf); else fprintf(fxFile, "%s", numBuf); @@ -743,82 +1169,73 @@ static void SaveZone(SurfaceFXTemplate *t) format_number(context->GetDeltaValue(), numBuf, sizeof(numBuf)); fprintf(fxFile, "%s", numBuf); } - - fprintf(fxFile, ") "); - fprintf(fxFile, "("); - + fprintf(fxFile, ") ("); + if (context->GetAcceleratedTickCounts().size() > 0) { - for (int i = 0; i < context->GetAcceleratedTickCounts().size(); ++i) + for (int i = 0; i < (int)context->GetAcceleratedTickCounts().size(); ++i) { - if ( i < context->GetAcceleratedTickCounts().size() - 1) + if (i < (int)context->GetAcceleratedTickCounts().size() - 1) fprintf(fxFile, "%d,", context->GetAcceleratedTickCounts()[i]); else fprintf(fxFile, "%d", context->GetAcceleratedTickCounts()[i]); } } - + fprintf(fxFile, ") "); - + if (context->GetSteppedValues().size() > 0) - { - for (int i = 0; i < context->GetSteppedValues().size(); ++i) + for (int i = 0; i < (int)context->GetSteppedValues().size(); ++i) fprintf(fxFile, "%0.2f ", context->GetSteppedValues()[i]); - } - + fprintf(fxFile, " ]"); - // ***** NEW: Append free-form text for this assignment ***** - { - const char* freeText = context->GetFreeFormText(); - if (freeText && freeText[0] != '\0') - { - fprintf(fxFile, " %s", freeText); - } - } + const char *freeText = context->GetFreeFormText(); + if (freeText && freeText[0] != '\0') + fprintf(fxFile, " %s", freeText); } } - + fprintf(fxFile, "\n"); } - + for (auto displayWidget : cell->displayWidgets) { Widget *widget = displayWidget; - - if ( ! strcmp (zoneManager->GetSurface()->GetName(), "SCE24")) + + if ( ! strcmp(zoneManager->GetSurface()->GetName(), "SCE24")) { if (strstr(widget->GetName(), t->paramWidget) || strstr(widget->GetName(), t->nameWidget) || strstr(widget->GetName(), t->valueWidget)) - fprintf(fxFile, "\t%s%s ", modifierBuf, widget->GetName()); + fprintf(fxFile, "\t%s ", widget->GetName()); } else - fprintf(fxFile, "\t%s%s ", modifierBuf, widget->GetName()); - + fprintf(fxFile, "\t%s ", widget->GetName()); + if (ActionContext *context = GetFirstContext(zoneManager, widget, modifier)) { char actionName[SMLBUF]; snprintf(actionName, sizeof(actionName), "%s", context->GetAction()->GetName()); - - if ( ! strcmp (zoneManager->GetSurface()->GetName(), "SCE24")) + + if ( ! strcmp(zoneManager->GetSurface()->GetName(), "SCE24")) { if (strstr(widget->GetName(), t->paramWidget) || strstr(widget->GetName(), t->nameWidget) || strstr(widget->GetName(), t->valueWidget)) fprintf(fxFile, "%s ", actionName); } else fprintf(fxFile, "%s ", actionName); - + if (strcmp(actionName, "NoAction")) { if ( ! strcmp(actionName, "FixedTextDisplay")) fprintf(fxFile, "\"%s\" %d ", context->GetStringParam(), context->GetParamIndex()); else if ( ! strcmp(actionName, "FXParamValueDisplay")) fprintf(fxFile, "%d ", context->GetParamIndex()); - + context->GetWidgetProperties().save_list(fxFile); } - - if ( ! strcmp (zoneManager->GetSurface()->GetName(), "SCE24")) + + if ( ! strcmp(zoneManager->GetSurface()->GetName(), "SCE24")) { if (strstr(widget->GetName(), t->paramWidget) || strstr(widget->GetName(), t->nameWidget) || strstr(widget->GetName(), t->valueWidget)) fprintf(fxFile, "\n"); @@ -828,34 +1245,43 @@ static void SaveZone(SurfaceFXTemplate *t) } } - fprintf(fxFile, "\n\n"); + fprintf(fxFile, "\n"); } - - fprintf(fxFile, "\n%s\n\n", s_EndAutoSection); - if (zoneInfo.find("FXEpilogue") != zoneInfo.end()) + // FXEpilogue (page 1 only) + if (pageIdx == 0 && zoneInfo.find("FXEpilogue") != zoneInfo.end()) { - ifstream file(zoneInfo["FXEpilogue"].filePath); - - for (string line; getline(file, line) ; ) + ifstream epilogueFile(zoneInfo["FXEpilogue"].filePath); + for (string line; getline(epilogueFile, line); ) if (line.find("Zone") != 0) fprintf(fxFile, "%s\n", line.c_str()); } - fprintf(fxFile, "%s\n", "ZoneEnd"); - + fprintf(fxFile, "ZoneEnd\n"); fclose(fxFile); } - + + // Remove stale page files beyond the current count (from a prior paged save with more pages) + for (int i = numPages; ; i++) + { + char oldPagePath[BUFSIZ]; + snprintf(oldPagePath, sizeof(oldPagePath), "%s/%s-%d.zon", path, trimmedFXName.c_str(), i); + if (remove(oldPagePath) != 0) + break; + } + + // Register page 1 as the active zone file + char page1Path[BUFSIZ]; + snprintf(page1Path, sizeof(page1Path), "%s/%s.zon", path, trimmedFXName.c_str()); + CSIZoneInfo info; - info.filePath = filePath; + info.filePath = page1Path; info.alias = s_fxAlias; - zoneManager->AddZoneFilePath(s_fxName, info); } catch (const std::exception& e) { - LogToConsole(256, "[ERROR] FAILED to SaveZone %s\n", path); + LogToConsole(256, "[ERROR] FAILED to SaveZonePaged %s\n", path); LogToConsole(2048, "Exception: %s\n", e.what()); } } @@ -1640,24 +2066,17 @@ static WDL_DLGRET dlgProcLearnFXDeepEdit(HWND hwndDlg, UINT uMsg, WPARAM wParam, ActionContext *nameContext = NULL; ActionContext *valueContext = NULL; - int modifier = 0; - + int modifier = s_currentModifier; + if (zoneManager) - { - const vector &modifiers = zoneManager->GetSurface()->GetModifiers(); - - if (modifiers.size() > 0) - modifier = modifiers[0]; - paramContext = GetFirstContext(zoneManager, widget, modifier); - } - + FXCell *cell = NULL; - + if (t) { cell = GetCell(t, widget, modifier); - + if (cell) { nameContext = cell->GetNameContext(widget); @@ -2028,12 +2447,15 @@ static WDL_DLGRET dlgProcLearnFX(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM } EnableWindow(GetDlgItem(hwndDlg, IDC_DeepEdit), false); - + ShowWindow(GetDlgItem(hwndDlg, IDC_Unassign), false); ShowWindow(GetDlgItem(hwndDlg, IDC_Assign), false); + + CheckDlgButton(hwndDlg, IDC_OutputStandard, s_outputPaged ? BST_UNCHECKED : BST_CHECKED); + CheckDlgButton(hwndDlg, IDC_OutputPaged, s_outputPaged ? BST_CHECKED : BST_UNCHECKED); } break; - + case WM_CLOSE: { s_surfaceFXTemplates.clear(); @@ -2076,31 +2498,24 @@ static WDL_DLGRET dlgProcLearnFX(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM ActionContext *nameContext = NULL; ActionContext *valueContext = NULL; - int modifier = 0; - + int modifier = s_currentModifier; + if (zoneManager) - { - const vector &modifiers = zoneManager->GetSurface()->GetModifiers(); - - if (modifiers.size() > 0) - modifier = modifiers[0]; - paramContext = GetFirstContext(zoneManager, widget, modifier); - } - + FXCell *cell = NULL; - + if (t) { cell = GetCell(t, widget, modifier); - + if (cell) { nameContext = cell->GetNameContext(widget); valueContext = cell->GetValueContext(widget); } } - + switch(LOWORD(wParam)) { case IDC_Assign: @@ -2153,12 +2568,25 @@ static WDL_DLGRET dlgProcLearnFX(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM } break ; + case IDC_OutputStandard: + if (HIWORD(wParam) == BN_CLICKED) + s_outputPaged = false; + break; + + case IDC_OutputPaged: + if (HIWORD(wParam) == BN_CLICKED) + s_outputPaged = true; + break; + case IDC_Save: if (HIWORD(wParam) == BN_CLICKED) { if (zoneManager) { - SaveZone(t); + if (s_outputPaged) + SaveZonePaged(t); + else + SaveZone(t); SendMessage(hwndDlg, WM_CLOSE, 0, 0); } } @@ -2235,7 +2663,13 @@ void WidgetMoved(ZoneManager *zoneManager, Widget *widget, int modifier) } } else + { SetDlgItemText(t->hwnd, IDC_AssignFXParamDisplay, ""); + EnableWindow(GetDlgItem(t->hwnd, IDC_DeepEdit), false); + ShowWindow(GetDlgItem(t->hwnd, IDC_Unassign), false); + ShowWindow(GetDlgItem(t->hwnd, IDC_Assign), GetCell(t, widget, modifier) != NULL); + EnableWindow(GetDlgItem(t->hwnd, IDC_Assign), false); + } } static void InitLearnFocusedFXDialog(ZoneManager *zoneManager) @@ -2371,6 +2805,51 @@ void UpdateLearnWindow(ZoneManager *zoneManager) } } +void FillMissingFXZoneContexts(ZoneManager *zoneManager, Zone *fxZone) +{ + SurfaceFXTemplate *t = GetSurfaceFXTemplate(zoneManager); + + if ( ! t) + return; + + char widgetName[MEDBUF]; + vector blankParams; + + for (int rowLayoutIdx = 0; rowLayoutIdx < t->fxRowLayouts.size(); ++rowLayoutIdx) + { + int modifier = t->fxRowLayouts[rowLayoutIdx].modifier; + + for (int channel = 1; channel <= zoneManager->GetSurface()->GetNumChannels(); ++channel) + { + for (int widgetTypesIdx = 0; widgetTypesIdx < t->paramWidgets.size(); ++widgetTypesIdx) + { + snprintf(widgetName, sizeof(widgetName), "%s%s%d", t->paramWidgets[widgetTypesIdx].c_str(), t->fxRowLayouts[rowLayoutIdx].suffix, channel); + if (Widget *widget = zoneManager->GetSurface()->GetWidgetByName(widgetName)) + { + if (zoneManager->GetLearnFocusedFXActionContexts(widget, modifier).empty()) + { + fxZone->AddWidget(widget); + fxZone->AddActionContext(widget, modifier, fxZone, "NoAction", blankParams); + } + } + } + + for (int widgetTypesIdx = 0; widgetTypesIdx < t->displayRows.size(); ++widgetTypesIdx) + { + snprintf(widgetName, sizeof(widgetName), "%s%s%d", t->displayRows[widgetTypesIdx].c_str(), t->fxRowLayouts[rowLayoutIdx].suffix, channel); + if (Widget *widget = zoneManager->GetSurface()->GetWidgetByName(widgetName)) + { + if (zoneManager->GetLearnFocusedFXActionContexts(widget, modifier).empty()) + { + fxZone->AddWidget(widget); + fxZone->AddActionContext(widget, modifier, fxZone, "NoAction", blankParams); + } + } + } + } + } +} + void InitBlankLearnFocusedFXZone(ZoneManager *zoneManager, Zone *fxZone, MediaTrack *track, int fxSlot) { SurfaceFXTemplate *t = NULL; diff --git a/reaper_csurf_integrator/res.rc b/reaper_csurf_integrator/res.rc index 09dc1a3..0f7d801 100644 --- a/reaper_csurf_integrator/res.rc +++ b/reaper_csurf_integrator/res.rc @@ -229,6 +229,9 @@ BEGIN PUSHBUTTON "Unlink",IDC_Unassign,122,44,36,14 PUSHBUTTON "Link",IDC_Assign,122,44,36,14 PUSHBUTTON "Alias",IDC_Alias,15,76,36,14 + LTEXT "Save as:",IDC_STATIC,60,80,34,8 + AUTORADIOBUTTON "Standard",IDC_OutputStandard,97,78,44,10,WS_GROUP + AUTORADIOBUTTON "Paged",IDC_OutputPaged,143,78,36,10 PUSHBUTTON "Edit",IDC_DeepEdit,185,76,36,14 PUSHBUTTON "Save",IDC_Save,229,76,36,14 CTEXT "Surface Name",IDC_SurfaceName,14,14,251,10 diff --git a/reaper_csurf_integrator/resource.h b/reaper_csurf_integrator/resource.h index 2e88283..af3a85b 100644 --- a/reaper_csurf_integrator/resource.h +++ b/reaper_csurf_integrator/resource.h @@ -127,6 +127,8 @@ #define IDC_ApplyFontsAndMarginsToAll 1307 #define IDC_GroupApplyToAll 1308 #define IDC_EDIT_FREE_FORM 1309 +#define IDC_OutputStandard 1310 +#define IDC_OutputPaged 1311 // Next default values for new objects // From 2fce9bb2f2b2320b2a0ed2afb57ac49a1c61bf11 Mon Sep 17 00:00:00 2001 From: greg15apr-alt Date: Sun, 10 May 2026 22:06:48 +0100 Subject: [PATCH 2/5] Delete Reference/LUA script to paginate v1.txt Added in error --- Reference/LUA script to paginate v1.txt | 160 ------------------------ 1 file changed, 160 deletions(-) delete mode 100644 Reference/LUA script to paginate v1.txt diff --git a/Reference/LUA script to paginate v1.txt b/Reference/LUA script to paginate v1.txt deleted file mode 100644 index 9aa92c3..0000000 --- a/Reference/LUA script to paginate v1.txt +++ /dev/null @@ -1,160 +0,0 @@ --- ============================================================================== --- CSI v7 Multi-File AutoZone Paginator (v2.0) --- Reads an auto-generated file and outputs MULTIPLE correctly linked SubZone files! --- Features: Ghost-fader clearing, Color-retention, and .old Backups --- ============================================================================== - -local retval, input_path = reaper.GetUserFileNameForRead("", "Select Auto-Generated CSI .zon file", ".zon") -if not retval then return end - -local file = io.open(input_path, "r") -if not file then - reaper.ShowMessageBox("Could not open file.", "Error", 0) - return -end - --- Storage variables -local header = {} -local active_mappings = {} -local inside_auto_gen = false -local zone_full_string = "" -local zone_name = "UnknownZone" -local zone_alias = "Plugin" - --- 1. Parse the original file -for line in file:lines() do - if line:match("^Zone%s") then - zone_full_string = line - -- Extract the exact Zone Name and Alias inside the quotes - local ext_name, ext_alias = line:match('Zone%s+"([^"]+)"%s+"([^"]+)"') - if ext_name then zone_name = ext_name end - if ext_alias then zone_alias = ext_alias end - end - - if not inside_auto_gen and not line:match("^Zone ") and not line:match("ZoneEnd") and not line:match("#Begin auto generated section") then - table.insert(header, line) - end - - if line:match("#Begin auto generated section") then inside_auto_gen = true end - if line:match("#End auto generated section") then inside_auto_gen = false end - - if inside_auto_gen and line:match("%S") and not line:match("NoAction") then - local clean_line = line:gsub("Shift%+", ""):gsub("Option%+", ""):gsub("Control%+", ""):gsub("Alt%+", "") - table.insert(active_mappings, clean_line) - end -end -file:close() - --- 2. Create the Backup File (.old) -local backup_path = input_path:gsub("%.zon$", "_zon.old") -os.rename(input_path, backup_path) - --- 3. Calculate Pages -local lines_per_fader = 3 -local items_per_page = 8 * lines_per_fader -local num_pages = math.ceil(#active_mappings / items_per_page) -local base_filename = input_path:gsub("%.zon$", "") - --- 4. File Generation Loop -local current_mapping_idx = 1 - -for page = 1, num_pages do - local out_lines = {} - - -- Zone declaration - local current_zone_name = zone_name - local current_alias = zone_alias -- Page 1 keeps original alias for the FX Menu - - if page > 1 then - current_zone_name = zone_name .. "-" .. (page - 1) - current_alias = "Page " .. page - end - - table.insert(out_lines, 'Zone "' .. current_zone_name .. '" "' .. current_alias .. '"') - - -- Header logic: ONLY Page 1 handles colors and FX slot clearing to prevent bugs! - if page == 1 then - for _, h_line in ipairs(header) do table.insert(out_lines, h_line) end - end - - table.insert(out_lines, " // Escape route") - table.insert(out_lines, " Cancel GoZone SelectedTrackFXMenu\n") - - -- ONLY Page 1 gets the SubZones bridge block - if page == 1 and num_pages > 1 then - table.insert(out_lines, " // --- The Bridge to other files ---") - table.insert(out_lines, " SubZones") - for sub_p = 2, num_pages do - table.insert(out_lines, ' "' .. zone_name .. '-' .. (sub_p - 1) .. '"') - end - table.insert(out_lines, " SubZonesEnd\n") - end - - -- Explicit Routing logic - table.insert(out_lines, " // --- Absolute Navigation ---") - - if page > 1 then - local prev_zone_name = zone_name - local prev_alias = zone_alias - if page > 2 then - prev_zone_name = zone_name .. "-" .. (page - 2) - prev_alias = "Page " .. (page - 1) - end - table.insert(out_lines, ' BankLeft GoSubZone "' .. prev_zone_name .. '" "' .. prev_alias .. '"') - table.insert(out_lines, ' Left GoSubZone "' .. prev_zone_name .. '" "' .. prev_alias .. '"') - end - - if page < num_pages then - local next_zone_name = zone_name .. "-" .. page - local next_alias = "Page " .. (page + 1) - table.insert(out_lines, ' BankRight GoSubZone "' .. next_zone_name .. '" "' .. next_alias .. '"') - table.insert(out_lines, ' Right GoSubZone "' .. next_zone_name .. '" "' .. next_alias .. '"') - end - table.insert(out_lines, "") - - -- Mappings - local fader_count = 1 - for item = 1, items_per_page do - if current_mapping_idx <= #active_mappings then - local map_line = active_mappings[current_mapping_idx] - - map_line = map_line:gsub("Fader%d+", "Fader" .. fader_count) - map_line = map_line:gsub("DisplayUpper%d+", "DisplayUpper" .. fader_count) - map_line = map_line:gsub("DisplayLower%d+", "DisplayLower" .. fader_count) - - table.insert(out_lines, " " .. map_line) - - if item % lines_per_fader == 0 then - fader_count = fader_count + 1 - table.insert(out_lines, "") - end - current_mapping_idx = current_mapping_idx + 1 - end - end - - -- GHOST FADER FIX: Blank out any unused strips on this page - if fader_count <= 8 then - table.insert(out_lines, " // --- Blanking Unused Strips ---") - for c = fader_count, 8 do - table.insert(out_lines, " Fader" .. c .. " NoAction") - table.insert(out_lines, " DisplayUpper" .. c .. " NoAction") - table.insert(out_lines, " DisplayLower" .. c .. " NoAction") - end - end - - table.insert(out_lines, "ZoneEnd") - - -- Write file - local out_filepath = base_filename .. ".zon" - if page > 1 then - out_filepath = base_filename .. "-" .. (page - 1) .. ".zon" - end - - local out_file = io.open(out_filepath, "w") - if out_file then - for _, line in ipairs(out_lines) do out_file:write(line .. "\n") end - out_file:close() - end -end - -reaper.ShowMessageBox("Success! Your original file was renamed to .old\n\n" .. num_pages .. " fresh files were generated.", "CSI Multi-File Builder", 0) \ No newline at end of file From c8aea8d500a55d4519bacbbef70dcc5bdd3309c1 Mon Sep 17 00:00:00 2001 From: greg15apr-alt Date: Sun, 10 May 2026 22:07:57 +0100 Subject: [PATCH 3/5] Delete Reference/VST3i__Analog_Lab_V__Arturia__-1.zon Added in error --- .../VST3i__Analog_Lab_V__Arturia__-1.zon | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 Reference/VST3i__Analog_Lab_V__Arturia__-1.zon diff --git a/Reference/VST3i__Analog_Lab_V__Arturia__-1.zon b/Reference/VST3i__Analog_Lab_V__Arturia__-1.zon deleted file mode 100644 index 272b752..0000000 --- a/Reference/VST3i__Analog_Lab_V__Arturia__-1.zon +++ /dev/null @@ -1,55 +0,0 @@ -Zone "VST3i: Analog Lab V (Arturia)-1" "Page 2" - // --- Navigation --- - Cancel GoZone SelectedTrackFXMenu - BankLeft GoSubZone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" - Left GoSubZone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" - - Fader1 FXParam 12 [ 0.00>1.00 (0.0) (0) ] - RotaryPush1 NoAction - Rotary1 NoAction - DisplayUpper1 FixedTextDisplay "P1 Env 2 Attack" 12 - DisplayLower1 FXParamValueDisplay 12 - - Fader2 FXParam 13 [ 0.00>1.00 (0.0) (0) ] - RotaryPush2 NoAction - Rotary2 NoAction - DisplayUpper2 FixedTextDisplay "P1 Env 2 Decay" 13 - DisplayLower2 FXParamValueDisplay 13 - - Fader3 FXParam 14 [ 0.00>1.00 (0.0) (0) ] - RotaryPush3 NoAction - Rotary3 NoAction - DisplayUpper3 FixedTextDisplay "P1 Synth 1 VCA Attack" 14 - DisplayLower3 FXParamValueDisplay 14 - - Fader4 FXParam 15 [ 0.00>1.00 (0.0) (0) ] - RotaryPush4 NoAction - Rotary4 NoAction - DisplayUpper4 FixedTextDisplay "P1 Synth 1 VCA Release" 15 - DisplayLower4 FXParamValueDisplay 15 - - Fader5 FXParam 16 [ 0.00>1.00 (0.0) (0) ] - RotaryPush5 NoAction - Rotary5 NoAction - DisplayUpper5 FixedTextDisplay "P1 Sampler 2 Attack" 16 - DisplayLower5 FXParamValueDisplay 16 - - Fader6 FXParam 17 [ 0.00>1.00 (0.0) (0) ] - RotaryPush6 NoAction - Rotary6 NoAction - DisplayUpper6 FixedTextDisplay "P1 Sampler 2 Release" 17 - DisplayLower6 FXParamValueDisplay 17 - - Fader7 FXParam 18 [ 0.00>1.00 (0.0) (0) ] - RotaryPush7 NoAction - Rotary7 NoAction - DisplayUpper7 FixedTextDisplay "P1 Synth 2 VCA Attack" 18 - DisplayLower7 FXParamValueDisplay 18 - - Fader8 FXParam 19 [ 0.00>1.00 (0.0) (0) ] - RotaryPush8 NoAction - Rotary8 NoAction - DisplayUpper8 FixedTextDisplay "P1 Synth 2 VCA Release" 19 - DisplayLower8 FXParamValueDisplay 19 - -ZoneEnd From 6fac2041335b26e9169769bd255129af64e59f03 Mon Sep 17 00:00:00 2001 From: greg15apr-alt Date: Sun, 10 May 2026 22:08:21 +0100 Subject: [PATCH 4/5] Delete Reference/VST3i__Analog_Lab_V__Arturia__.zon Added in error --- Reference/VST3i__Analog_Lab_V__Arturia__.zon | 67 -------------------- 1 file changed, 67 deletions(-) delete mode 100644 Reference/VST3i__Analog_Lab_V__Arturia__.zon diff --git a/Reference/VST3i__Analog_Lab_V__Arturia__.zon b/Reference/VST3i__Analog_Lab_V__Arturia__.zon deleted file mode 100644 index 2ccb2b1..0000000 --- a/Reference/VST3i__Analog_Lab_V__Arturia__.zon +++ /dev/null @@ -1,67 +0,0 @@ -Zone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" - OnZoneActivation SetXTouchDisplayColors Cyan - OnZoneDeactivation RestoreXTouchDisplayColors - Plugin ClearFXSlot - - // --- SubZone Bridge --- - SubZones - "VST3i: Analog Lab V (Arturia)-1" - SubZonesEnd - - // --- Navigation --- - Cancel GoZone SelectedTrackFXMenu - BankRight GoSubZone "VST3i: Analog Lab V (Arturia)-1" "Page 2" - Right GoSubZone "VST3i: Analog Lab V (Arturia)-1" "Page 2" - - Fader1 FXParam 2 [ 0.00>1.00 (0.0) (0) ] - RotaryPush1 NoAction - Rotary1 NoAction - DisplayUpper1 FixedTextDisplay "P1 Timbre" 2 - DisplayLower1 FXParamValueDisplay 2 - - Fader2 FXParam 4 [ 0.00>1.00 (0.0) (0) ] - RotaryPush2 NoAction - Rotary2 NoAction - DisplayUpper2 FixedTextDisplay "P1 WT Mod" 4 - DisplayLower2 FXParamValueDisplay 4 - - Fader3 FXParam 6 [ 0.00>1.00 (0.0) (0) ] - RotaryPush3 NoAction - Rotary3 NoAction - DisplayUpper3 FixedTextDisplay "P1 Time" 6 - DisplayLower3 FXParamValueDisplay 6 - - Fader4 FXParam 8 [ 0.00>1.00 (0.0) (0) ] - RotaryPush4 NoAction - Rotary4 NoAction - DisplayUpper4 FixedTextDisplay "P1 FX" 8 - DisplayLower4 FXParamValueDisplay 8 - - Fader5 FXParam 102 [ 0.00>1.00 (0.0) (0) ] - RotaryPush5 NoAction - Rotary5 NoAction - DisplayUpper5 FixedTextDisplay "FXA Dry/Wet" 102 - DisplayLower5 FXParamValueDisplay 102 - - Fader6 FXParam 163 [ 0.00>1.00 (0.0) (0) ] - RotaryPush6 NoAction - Rotary6 NoAction - DisplayUpper6 FixedTextDisplay "FXB Dry/Wet" 163 - DisplayLower6 FXParamValueDisplay 163 - - Fader7 FXParam 224 [ 0.00>1.00 (0.0) (0) ] - RotaryPush7 NoAction - Rotary7 NoAction - DisplayUpper7 FixedTextDisplay "Delay Volume" 224 - DisplayLower7 FXParamValueDisplay 224 - - Fader8 FXParam 233 [ 0.00>1.00 (0.0) (0) ] - RotaryPush8 NoAction - Rotary8 NoAction - DisplayUpper8 FixedTextDisplay "Reverb Volume" 233 - DisplayLower8 FXParamValueDisplay 233 - - - OnZoneDeactivation HideFXSlot - -ZoneEnd From bb0eba9cdab31a704cab25f69cbde1d2d2495e1f Mon Sep 17 00:00:00 2001 From: greg15apr-alt Date: Sun, 10 May 2026 22:09:26 +0100 Subject: [PATCH 5/5] Delete Reference/VST3i__Analog_Lab_V__Arturia___zon.old Added in error --- .../VST3i__Analog_Lab_V__Arturia___zon.old | 992 ------------------ 1 file changed, 992 deletions(-) delete mode 100644 Reference/VST3i__Analog_Lab_V__Arturia___zon.old diff --git a/Reference/VST3i__Analog_Lab_V__Arturia___zon.old b/Reference/VST3i__Analog_Lab_V__Arturia___zon.old deleted file mode 100644 index fafc55c..0000000 --- a/Reference/VST3i__Analog_Lab_V__Arturia___zon.old +++ /dev/null @@ -1,992 +0,0 @@ -Zone "VST3i: Analog Lab V (Arturia)" "Analog Lab V" - OnZoneActivation SetXTouchDisplayColors Cyan - OnZoneDeactivation RestoreXTouchDisplayColors - Plugin ClearFXSlot - -#Begin auto generated section - - Fader1 FXParam 2 [ 0.00>1.00 (0.0) (0) ] - RotaryPush1 NoAction - Rotary1 NoAction - DisplayUpper1 FixedTextDisplay "P1 Timbre" 2 - DisplayLower1 FXParamValueDisplay 2 - - - Fader2 FXParam 4 [ 0.00>1.00 (0.0) (0) ] - RotaryPush2 NoAction - Rotary2 NoAction - DisplayUpper2 FixedTextDisplay "P1 WT Mod" 4 - DisplayLower2 FXParamValueDisplay 4 - - - Fader3 FXParam 6 [ 0.00>1.00 (0.0) (0) ] - RotaryPush3 NoAction - Rotary3 NoAction - DisplayUpper3 FixedTextDisplay "P1 Time" 6 - DisplayLower3 FXParamValueDisplay 6 - - - Fader4 FXParam 8 [ 0.00>1.00 (0.0) (0) ] - RotaryPush4 NoAction - Rotary4 NoAction - DisplayUpper4 FixedTextDisplay "P1 FX" 8 - DisplayLower4 FXParamValueDisplay 8 - - - Fader5 FXParam 102 [ 0.00>1.00 (0.0) (0) ] - RotaryPush5 NoAction - Rotary5 NoAction - DisplayUpper5 FixedTextDisplay "FXA Dry/Wet" 102 - DisplayLower5 FXParamValueDisplay 102 - - - Fader6 FXParam 163 [ 0.00>1.00 (0.0) (0) ] - RotaryPush6 NoAction - Rotary6 NoAction - DisplayUpper6 FixedTextDisplay "FXB Dry/Wet" 163 - DisplayLower6 FXParamValueDisplay 163 - - - Fader7 FXParam 224 [ 0.00>1.00 (0.0) (0) ] - RotaryPush7 NoAction - Rotary7 NoAction - DisplayUpper7 FixedTextDisplay "Delay Volume" 224 - DisplayLower7 FXParamValueDisplay 224 - - - Fader8 FXParam 233 [ 0.00>1.00 (0.0) (0) ] - RotaryPush8 NoAction - Rotary8 NoAction - DisplayUpper8 FixedTextDisplay "Reverb Volume" 233 - DisplayLower8 FXParamValueDisplay 233 - - - Fader1 FXParam 12 [ 0.00>1.00 (0.0) (0) ] - RotaryPush1 NoAction - Rotary1 NoAction - DisplayUpper1 FixedTextDisplay "P1 Env 2 Attack" 12 - DisplayLower1 FXParamValueDisplay 12 - - - Fader2 FXParam 13 [ 0.00>1.00 (0.0) (0) ] - RotaryPush2 NoAction - Rotary2 NoAction - DisplayUpper2 FixedTextDisplay "P1 Env 2 Decay" 13 - DisplayLower2 FXParamValueDisplay 13 - - - Fader3 FXParam 14 [ 0.00>1.00 (0.0) (0) ] - RotaryPush3 NoAction - Rotary3 NoAction - DisplayUpper3 FixedTextDisplay "P1 Synth 1 VCA Attack" 14 - DisplayLower3 FXParamValueDisplay 14 - - - Fader4 FXParam 15 [ 0.00>1.00 (0.0) (0) ] - RotaryPush4 NoAction - Rotary4 NoAction - DisplayUpper4 FixedTextDisplay "P1 Synth 1 VCA Release" 15 - DisplayLower4 FXParamValueDisplay 15 - - - Fader5 FXParam 16 [ 0.00>1.00 (0.0) (0) ] - RotaryPush5 NoAction - Rotary5 NoAction - DisplayUpper5 FixedTextDisplay "P1 Sampler 2 Attack" 16 - DisplayLower5 FXParamValueDisplay 16 - - - Fader6 FXParam 17 [ 0.00>1.00 (0.0) (0) ] - RotaryPush6 NoAction - Rotary6 NoAction - DisplayUpper6 FixedTextDisplay "P1 Sampler 2 Release" 17 - DisplayLower6 FXParamValueDisplay 17 - - - Fader7 FXParam 18 [ 0.00>1.00 (0.0) (0) ] - RotaryPush7 NoAction - Rotary7 NoAction - DisplayUpper7 FixedTextDisplay "P1 Synth 2 VCA Attack" 18 - DisplayLower7 FXParamValueDisplay 18 - - - Fader8 FXParam 19 [ 0.00>1.00 (0.0) (0) ] - RotaryPush8 NoAction - Rotary8 NoAction - DisplayUpper8 FixedTextDisplay "P1 Synth 2 VCA Release" 19 - DisplayLower8 FXParamValueDisplay 19 - - - Shift+Fader1 NoAction - Shift+RotaryPush1 NoAction - Shift+Rotary1 NoAction - Shift+DisplayUpper1 NoAction - Shift+DisplayLower1 NoAction - - - Shift+Fader2 NoAction - Shift+RotaryPush2 NoAction - Shift+Rotary2 NoAction - Shift+DisplayUpper2 NoAction - Shift+DisplayLower2 NoAction - - - Shift+Fader3 NoAction - Shift+RotaryPush3 NoAction - Shift+Rotary3 NoAction - Shift+DisplayUpper3 NoAction - Shift+DisplayLower3 NoAction - - - Shift+Fader4 NoAction - Shift+RotaryPush4 NoAction - Shift+Rotary4 NoAction - Shift+DisplayUpper4 NoAction - Shift+DisplayLower4 NoAction - - - Shift+Fader5 NoAction - Shift+RotaryPush5 NoAction - Shift+Rotary5 NoAction - Shift+DisplayUpper5 NoAction - Shift+DisplayLower5 NoAction - - - Shift+Fader6 NoAction - Shift+RotaryPush6 NoAction - Shift+Rotary6 NoAction - Shift+DisplayUpper6 NoAction - Shift+DisplayLower6 NoAction - - - Shift+Fader7 NoAction - Shift+RotaryPush7 NoAction - Shift+Rotary7 NoAction - Shift+DisplayUpper7 NoAction - Shift+DisplayLower7 NoAction - - - Shift+Fader8 NoAction - Shift+RotaryPush8 NoAction - Shift+Rotary8 NoAction - Shift+DisplayUpper8 NoAction - Shift+DisplayLower8 NoAction - - - - - Option+Fader1 NoAction - Option+RotaryPush1 NoAction - Option+Rotary1 NoAction - Option+DisplayUpper1 NoAction - Option+DisplayLower1 NoAction - - - Option+Fader2 NoAction - Option+RotaryPush2 NoAction - Option+Rotary2 NoAction - Option+DisplayUpper2 NoAction - Option+DisplayLower2 NoAction - - - Option+Fader3 NoAction - Option+RotaryPush3 NoAction - Option+Rotary3 NoAction - Option+DisplayUpper3 NoAction - Option+DisplayLower3 NoAction - - - Option+Fader4 NoAction - Option+RotaryPush4 NoAction - Option+Rotary4 NoAction - Option+DisplayUpper4 NoAction - Option+DisplayLower4 NoAction - - - Option+Fader5 NoAction - Option+RotaryPush5 NoAction - Option+Rotary5 NoAction - Option+DisplayUpper5 NoAction - Option+DisplayLower5 NoAction - - - Option+Fader6 NoAction - Option+RotaryPush6 NoAction - Option+Rotary6 NoAction - Option+DisplayUpper6 NoAction - Option+DisplayLower6 NoAction - - - Option+Fader7 NoAction - Option+RotaryPush7 NoAction - Option+Rotary7 NoAction - Option+DisplayUpper7 NoAction - Option+DisplayLower7 NoAction - - - Option+Fader8 NoAction - Option+RotaryPush8 NoAction - Option+Rotary8 NoAction - Option+DisplayUpper8 NoAction - Option+DisplayLower8 NoAction - - - - - Control+Fader1 NoAction - Control+RotaryPush1 NoAction - Control+Rotary1 NoAction - Control+DisplayUpper1 NoAction - Control+DisplayLower1 NoAction - - - Control+Fader2 NoAction - Control+RotaryPush2 NoAction - Control+Rotary2 NoAction - Control+DisplayUpper2 NoAction - Control+DisplayLower2 NoAction - - - Control+Fader3 NoAction - Control+RotaryPush3 NoAction - Control+Rotary3 NoAction - Control+DisplayUpper3 NoAction - Control+DisplayLower3 NoAction - - - Control+Fader4 NoAction - Control+RotaryPush4 NoAction - Control+Rotary4 NoAction - Control+DisplayUpper4 NoAction - Control+DisplayLower4 NoAction - - - Control+Fader5 NoAction - Control+RotaryPush5 NoAction - Control+Rotary5 NoAction - Control+DisplayUpper5 NoAction - Control+DisplayLower5 NoAction - - - Control+Fader6 NoAction - Control+RotaryPush6 NoAction - Control+Rotary6 NoAction - Control+DisplayUpper6 NoAction - Control+DisplayLower6 NoAction - - - Control+Fader7 NoAction - Control+RotaryPush7 NoAction - Control+Rotary7 NoAction - Control+DisplayUpper7 NoAction - Control+DisplayLower7 NoAction - - - Control+Fader8 NoAction - Control+RotaryPush8 NoAction - Control+Rotary8 NoAction - Control+DisplayUpper8 NoAction - Control+DisplayLower8 NoAction - - - - - Alt+Fader1 NoAction - Alt+RotaryPush1 NoAction - Alt+Rotary1 NoAction - Alt+DisplayUpper1 NoAction - Alt+DisplayLower1 NoAction - - - Alt+Fader2 NoAction - Alt+RotaryPush2 NoAction - Alt+Rotary2 NoAction - Alt+DisplayUpper2 NoAction - Alt+DisplayLower2 NoAction - - - Alt+Fader3 NoAction - Alt+RotaryPush3 NoAction - Alt+Rotary3 NoAction - Alt+DisplayUpper3 NoAction - Alt+DisplayLower3 NoAction - - - Alt+Fader4 NoAction - Alt+RotaryPush4 NoAction - Alt+Rotary4 NoAction - Alt+DisplayUpper4 NoAction - Alt+DisplayLower4 NoAction - - - Alt+Fader5 NoAction - Alt+RotaryPush5 NoAction - Alt+Rotary5 NoAction - Alt+DisplayUpper5 NoAction - Alt+DisplayLower5 NoAction - - - Alt+Fader6 NoAction - Alt+RotaryPush6 NoAction - Alt+Rotary6 NoAction - Alt+DisplayUpper6 NoAction - Alt+DisplayLower6 NoAction - - - Alt+Fader7 NoAction - Alt+RotaryPush7 NoAction - Alt+Rotary7 NoAction - Alt+DisplayUpper7 NoAction - Alt+DisplayLower7 NoAction - - - Alt+Fader8 NoAction - Alt+RotaryPush8 NoAction - Alt+Rotary8 NoAction - Alt+DisplayUpper8 NoAction - Alt+DisplayLower8 NoAction - - - - - Shift+Option+Fader1 NoAction - Shift+Option+RotaryPush1 NoAction - Shift+Option+Rotary1 NoAction - Shift+Option+DisplayUpper1 NoAction - Shift+Option+DisplayLower1 NoAction - - - Shift+Option+Fader2 NoAction - Shift+Option+RotaryPush2 NoAction - Shift+Option+Rotary2 NoAction - Shift+Option+DisplayUpper2 NoAction - Shift+Option+DisplayLower2 NoAction - - - Shift+Option+Fader3 NoAction - Shift+Option+RotaryPush3 NoAction - Shift+Option+Rotary3 NoAction - Shift+Option+DisplayUpper3 NoAction - Shift+Option+DisplayLower3 NoAction - - - Shift+Option+Fader4 NoAction - Shift+Option+RotaryPush4 NoAction - Shift+Option+Rotary4 NoAction - Shift+Option+DisplayUpper4 NoAction - Shift+Option+DisplayLower4 NoAction - - - Shift+Option+Fader5 NoAction - Shift+Option+RotaryPush5 NoAction - Shift+Option+Rotary5 NoAction - Shift+Option+DisplayUpper5 NoAction - Shift+Option+DisplayLower5 NoAction - - - Shift+Option+Fader6 NoAction - Shift+Option+RotaryPush6 NoAction - Shift+Option+Rotary6 NoAction - Shift+Option+DisplayUpper6 NoAction - Shift+Option+DisplayLower6 NoAction - - - Shift+Option+Fader7 NoAction - Shift+Option+RotaryPush7 NoAction - Shift+Option+Rotary7 NoAction - Shift+Option+DisplayUpper7 NoAction - Shift+Option+DisplayLower7 NoAction - - - Shift+Option+Fader8 NoAction - Shift+Option+RotaryPush8 NoAction - Shift+Option+Rotary8 NoAction - Shift+Option+DisplayUpper8 NoAction - Shift+Option+DisplayLower8 NoAction - - - - - Shift+Control+Fader1 NoAction - Shift+Control+RotaryPush1 NoAction - Shift+Control+Rotary1 NoAction - Shift+Control+DisplayUpper1 NoAction - Shift+Control+DisplayLower1 NoAction - - - Shift+Control+Fader2 NoAction - Shift+Control+RotaryPush2 NoAction - Shift+Control+Rotary2 NoAction - Shift+Control+DisplayUpper2 NoAction - Shift+Control+DisplayLower2 NoAction - - - Shift+Control+Fader3 NoAction - Shift+Control+RotaryPush3 NoAction - Shift+Control+Rotary3 NoAction - Shift+Control+DisplayUpper3 NoAction - Shift+Control+DisplayLower3 NoAction - - - Shift+Control+Fader4 NoAction - Shift+Control+RotaryPush4 NoAction - Shift+Control+Rotary4 NoAction - Shift+Control+DisplayUpper4 NoAction - Shift+Control+DisplayLower4 NoAction - - - Shift+Control+Fader5 NoAction - Shift+Control+RotaryPush5 NoAction - Shift+Control+Rotary5 NoAction - Shift+Control+DisplayUpper5 NoAction - Shift+Control+DisplayLower5 NoAction - - - Shift+Control+Fader6 NoAction - Shift+Control+RotaryPush6 NoAction - Shift+Control+Rotary6 NoAction - Shift+Control+DisplayUpper6 NoAction - Shift+Control+DisplayLower6 NoAction - - - Shift+Control+Fader7 NoAction - Shift+Control+RotaryPush7 NoAction - Shift+Control+Rotary7 NoAction - Shift+Control+DisplayUpper7 NoAction - Shift+Control+DisplayLower7 NoAction - - - Shift+Control+Fader8 NoAction - Shift+Control+RotaryPush8 NoAction - Shift+Control+Rotary8 NoAction - Shift+Control+DisplayUpper8 NoAction - Shift+Control+DisplayLower8 NoAction - - - - - Shift+Alt+Fader1 NoAction - Shift+Alt+RotaryPush1 NoAction - Shift+Alt+Rotary1 NoAction - Shift+Alt+DisplayUpper1 NoAction - Shift+Alt+DisplayLower1 NoAction - - - Shift+Alt+Fader2 NoAction - Shift+Alt+RotaryPush2 NoAction - Shift+Alt+Rotary2 NoAction - Shift+Alt+DisplayUpper2 NoAction - Shift+Alt+DisplayLower2 NoAction - - - Shift+Alt+Fader3 NoAction - Shift+Alt+RotaryPush3 NoAction - Shift+Alt+Rotary3 NoAction - Shift+Alt+DisplayUpper3 NoAction - Shift+Alt+DisplayLower3 NoAction - - - Shift+Alt+Fader4 NoAction - Shift+Alt+RotaryPush4 NoAction - Shift+Alt+Rotary4 NoAction - Shift+Alt+DisplayUpper4 NoAction - Shift+Alt+DisplayLower4 NoAction - - - Shift+Alt+Fader5 NoAction - Shift+Alt+RotaryPush5 NoAction - Shift+Alt+Rotary5 NoAction - Shift+Alt+DisplayUpper5 NoAction - Shift+Alt+DisplayLower5 NoAction - - - Shift+Alt+Fader6 NoAction - Shift+Alt+RotaryPush6 NoAction - Shift+Alt+Rotary6 NoAction - Shift+Alt+DisplayUpper6 NoAction - Shift+Alt+DisplayLower6 NoAction - - - Shift+Alt+Fader7 NoAction - Shift+Alt+RotaryPush7 NoAction - Shift+Alt+Rotary7 NoAction - Shift+Alt+DisplayUpper7 NoAction - Shift+Alt+DisplayLower7 NoAction - - - Shift+Alt+Fader8 NoAction - Shift+Alt+RotaryPush8 NoAction - Shift+Alt+Rotary8 NoAction - Shift+Alt+DisplayUpper8 NoAction - Shift+Alt+DisplayLower8 NoAction - - - - - Shift+Option+Control+Fader1 NoAction - Shift+Option+Control+RotaryPush1 NoAction - Shift+Option+Control+Rotary1 NoAction - Shift+Option+Control+DisplayUpper1 NoAction - Shift+Option+Control+DisplayLower1 NoAction - - - Shift+Option+Control+Fader2 NoAction - Shift+Option+Control+RotaryPush2 NoAction - Shift+Option+Control+Rotary2 NoAction - Shift+Option+Control+DisplayUpper2 NoAction - Shift+Option+Control+DisplayLower2 NoAction - - - Shift+Option+Control+Fader3 NoAction - Shift+Option+Control+RotaryPush3 NoAction - Shift+Option+Control+Rotary3 NoAction - Shift+Option+Control+DisplayUpper3 NoAction - Shift+Option+Control+DisplayLower3 NoAction - - - Shift+Option+Control+Fader4 NoAction - Shift+Option+Control+RotaryPush4 NoAction - Shift+Option+Control+Rotary4 NoAction - Shift+Option+Control+DisplayUpper4 NoAction - Shift+Option+Control+DisplayLower4 NoAction - - - Shift+Option+Control+Fader5 NoAction - Shift+Option+Control+RotaryPush5 NoAction - Shift+Option+Control+Rotary5 NoAction - Shift+Option+Control+DisplayUpper5 NoAction - Shift+Option+Control+DisplayLower5 NoAction - - - Shift+Option+Control+Fader6 NoAction - Shift+Option+Control+RotaryPush6 NoAction - Shift+Option+Control+Rotary6 NoAction - Shift+Option+Control+DisplayUpper6 NoAction - Shift+Option+Control+DisplayLower6 NoAction - - - Shift+Option+Control+Fader7 NoAction - Shift+Option+Control+RotaryPush7 NoAction - Shift+Option+Control+Rotary7 NoAction - Shift+Option+Control+DisplayUpper7 NoAction - Shift+Option+Control+DisplayLower7 NoAction - - - Shift+Option+Control+Fader8 NoAction - Shift+Option+Control+RotaryPush8 NoAction - Shift+Option+Control+Rotary8 NoAction - Shift+Option+Control+DisplayUpper8 NoAction - Shift+Option+Control+DisplayLower8 NoAction - - - - - Option+Control+Alt+Fader1 NoAction - Option+Control+Alt+RotaryPush1 NoAction - Option+Control+Alt+Rotary1 NoAction - Option+Control+Alt+DisplayUpper1 NoAction - Option+Control+Alt+DisplayLower1 NoAction - - - Option+Control+Alt+Fader2 NoAction - Option+Control+Alt+RotaryPush2 NoAction - Option+Control+Alt+Rotary2 NoAction - Option+Control+Alt+DisplayUpper2 NoAction - Option+Control+Alt+DisplayLower2 NoAction - - - Option+Control+Alt+Fader3 NoAction - Option+Control+Alt+RotaryPush3 NoAction - Option+Control+Alt+Rotary3 NoAction - Option+Control+Alt+DisplayUpper3 NoAction - Option+Control+Alt+DisplayLower3 NoAction - - - Option+Control+Alt+Fader4 NoAction - Option+Control+Alt+RotaryPush4 NoAction - Option+Control+Alt+Rotary4 NoAction - Option+Control+Alt+DisplayUpper4 NoAction - Option+Control+Alt+DisplayLower4 NoAction - - - Option+Control+Alt+Fader5 NoAction - Option+Control+Alt+RotaryPush5 NoAction - Option+Control+Alt+Rotary5 NoAction - Option+Control+Alt+DisplayUpper5 NoAction - Option+Control+Alt+DisplayLower5 NoAction - - - Option+Control+Alt+Fader6 NoAction - Option+Control+Alt+RotaryPush6 NoAction - Option+Control+Alt+Rotary6 NoAction - Option+Control+Alt+DisplayUpper6 NoAction - Option+Control+Alt+DisplayLower6 NoAction - - - Option+Control+Alt+Fader7 NoAction - Option+Control+Alt+RotaryPush7 NoAction - Option+Control+Alt+Rotary7 NoAction - Option+Control+Alt+DisplayUpper7 NoAction - Option+Control+Alt+DisplayLower7 NoAction - - - Option+Control+Alt+Fader8 NoAction - Option+Control+Alt+RotaryPush8 NoAction - Option+Control+Alt+Rotary8 NoAction - Option+Control+Alt+DisplayUpper8 NoAction - Option+Control+Alt+DisplayLower8 NoAction - - - - - Shift+Control+Alt+Fader1 NoAction - Shift+Control+Alt+RotaryPush1 NoAction - Shift+Control+Alt+Rotary1 NoAction - Shift+Control+Alt+DisplayUpper1 NoAction - Shift+Control+Alt+DisplayLower1 NoAction - - - Shift+Control+Alt+Fader2 NoAction - Shift+Control+Alt+RotaryPush2 NoAction - Shift+Control+Alt+Rotary2 NoAction - Shift+Control+Alt+DisplayUpper2 NoAction - Shift+Control+Alt+DisplayLower2 NoAction - - - Shift+Control+Alt+Fader3 NoAction - Shift+Control+Alt+RotaryPush3 NoAction - Shift+Control+Alt+Rotary3 NoAction - Shift+Control+Alt+DisplayUpper3 NoAction - Shift+Control+Alt+DisplayLower3 NoAction - - - Shift+Control+Alt+Fader4 NoAction - Shift+Control+Alt+RotaryPush4 NoAction - Shift+Control+Alt+Rotary4 NoAction - Shift+Control+Alt+DisplayUpper4 NoAction - Shift+Control+Alt+DisplayLower4 NoAction - - - Shift+Control+Alt+Fader5 NoAction - Shift+Control+Alt+RotaryPush5 NoAction - Shift+Control+Alt+Rotary5 NoAction - Shift+Control+Alt+DisplayUpper5 NoAction - Shift+Control+Alt+DisplayLower5 NoAction - - - Shift+Control+Alt+Fader6 NoAction - Shift+Control+Alt+RotaryPush6 NoAction - Shift+Control+Alt+Rotary6 NoAction - Shift+Control+Alt+DisplayUpper6 NoAction - Shift+Control+Alt+DisplayLower6 NoAction - - - Shift+Control+Alt+Fader7 NoAction - Shift+Control+Alt+RotaryPush7 NoAction - Shift+Control+Alt+Rotary7 NoAction - Shift+Control+Alt+DisplayUpper7 NoAction - Shift+Control+Alt+DisplayLower7 NoAction - - - Shift+Control+Alt+Fader8 NoAction - Shift+Control+Alt+RotaryPush8 NoAction - Shift+Control+Alt+Rotary8 NoAction - Shift+Control+Alt+DisplayUpper8 NoAction - Shift+Control+Alt+DisplayLower8 NoAction - - - - - Shift+Option+Alt+Fader1 NoAction - Shift+Option+Alt+RotaryPush1 NoAction - Shift+Option+Alt+Rotary1 NoAction - Shift+Option+Alt+DisplayUpper1 NoAction - Shift+Option+Alt+DisplayLower1 NoAction - - - Shift+Option+Alt+Fader2 NoAction - Shift+Option+Alt+RotaryPush2 NoAction - Shift+Option+Alt+Rotary2 NoAction - Shift+Option+Alt+DisplayUpper2 NoAction - Shift+Option+Alt+DisplayLower2 NoAction - - - Shift+Option+Alt+Fader3 NoAction - Shift+Option+Alt+RotaryPush3 NoAction - Shift+Option+Alt+Rotary3 NoAction - Shift+Option+Alt+DisplayUpper3 NoAction - Shift+Option+Alt+DisplayLower3 NoAction - - - Shift+Option+Alt+Fader4 NoAction - Shift+Option+Alt+RotaryPush4 NoAction - Shift+Option+Alt+Rotary4 NoAction - Shift+Option+Alt+DisplayUpper4 NoAction - Shift+Option+Alt+DisplayLower4 NoAction - - - Shift+Option+Alt+Fader5 NoAction - Shift+Option+Alt+RotaryPush5 NoAction - Shift+Option+Alt+Rotary5 NoAction - Shift+Option+Alt+DisplayUpper5 NoAction - Shift+Option+Alt+DisplayLower5 NoAction - - - Shift+Option+Alt+Fader6 NoAction - Shift+Option+Alt+RotaryPush6 NoAction - Shift+Option+Alt+Rotary6 NoAction - Shift+Option+Alt+DisplayUpper6 NoAction - Shift+Option+Alt+DisplayLower6 NoAction - - - Shift+Option+Alt+Fader7 NoAction - Shift+Option+Alt+RotaryPush7 NoAction - Shift+Option+Alt+Rotary7 NoAction - Shift+Option+Alt+DisplayUpper7 NoAction - Shift+Option+Alt+DisplayLower7 NoAction - - - Shift+Option+Alt+Fader8 NoAction - Shift+Option+Alt+RotaryPush8 NoAction - Shift+Option+Alt+Rotary8 NoAction - Shift+Option+Alt+DisplayUpper8 NoAction - Shift+Option+Alt+DisplayLower8 NoAction - - - - - Option+Control+Fader1 NoAction - Option+Control+RotaryPush1 NoAction - Option+Control+Rotary1 NoAction - Option+Control+DisplayUpper1 NoAction - Option+Control+DisplayLower1 NoAction - - - Option+Control+Fader2 NoAction - Option+Control+RotaryPush2 NoAction - Option+Control+Rotary2 NoAction - Option+Control+DisplayUpper2 NoAction - Option+Control+DisplayLower2 NoAction - - - Option+Control+Fader3 NoAction - Option+Control+RotaryPush3 NoAction - Option+Control+Rotary3 NoAction - Option+Control+DisplayUpper3 NoAction - Option+Control+DisplayLower3 NoAction - - - Option+Control+Fader4 NoAction - Option+Control+RotaryPush4 NoAction - Option+Control+Rotary4 NoAction - Option+Control+DisplayUpper4 NoAction - Option+Control+DisplayLower4 NoAction - - - Option+Control+Fader5 NoAction - Option+Control+RotaryPush5 NoAction - Option+Control+Rotary5 NoAction - Option+Control+DisplayUpper5 NoAction - Option+Control+DisplayLower5 NoAction - - - Option+Control+Fader6 NoAction - Option+Control+RotaryPush6 NoAction - Option+Control+Rotary6 NoAction - Option+Control+DisplayUpper6 NoAction - Option+Control+DisplayLower6 NoAction - - - Option+Control+Fader7 NoAction - Option+Control+RotaryPush7 NoAction - Option+Control+Rotary7 NoAction - Option+Control+DisplayUpper7 NoAction - Option+Control+DisplayLower7 NoAction - - - Option+Control+Fader8 NoAction - Option+Control+RotaryPush8 NoAction - Option+Control+Rotary8 NoAction - Option+Control+DisplayUpper8 NoAction - Option+Control+DisplayLower8 NoAction - - - - - Option+Alt+Fader1 NoAction - Option+Alt+RotaryPush1 NoAction - Option+Alt+Rotary1 NoAction - Option+Alt+DisplayUpper1 NoAction - Option+Alt+DisplayLower1 NoAction - - - Option+Alt+Fader2 NoAction - Option+Alt+RotaryPush2 NoAction - Option+Alt+Rotary2 NoAction - Option+Alt+DisplayUpper2 NoAction - Option+Alt+DisplayLower2 NoAction - - - Option+Alt+Fader3 NoAction - Option+Alt+RotaryPush3 NoAction - Option+Alt+Rotary3 NoAction - Option+Alt+DisplayUpper3 NoAction - Option+Alt+DisplayLower3 NoAction - - - Option+Alt+Fader4 NoAction - Option+Alt+RotaryPush4 NoAction - Option+Alt+Rotary4 NoAction - Option+Alt+DisplayUpper4 NoAction - Option+Alt+DisplayLower4 NoAction - - - Option+Alt+Fader5 NoAction - Option+Alt+RotaryPush5 NoAction - Option+Alt+Rotary5 NoAction - Option+Alt+DisplayUpper5 NoAction - Option+Alt+DisplayLower5 NoAction - - - Option+Alt+Fader6 NoAction - Option+Alt+RotaryPush6 NoAction - Option+Alt+Rotary6 NoAction - Option+Alt+DisplayUpper6 NoAction - Option+Alt+DisplayLower6 NoAction - - - Option+Alt+Fader7 NoAction - Option+Alt+RotaryPush7 NoAction - Option+Alt+Rotary7 NoAction - Option+Alt+DisplayUpper7 NoAction - Option+Alt+DisplayLower7 NoAction - - - Option+Alt+Fader8 NoAction - Option+Alt+RotaryPush8 NoAction - Option+Alt+Rotary8 NoAction - Option+Alt+DisplayUpper8 NoAction - Option+Alt+DisplayLower8 NoAction - - - - - Option+Control+Alt+Fader1 NoAction - Option+Control+Alt+RotaryPush1 NoAction - Option+Control+Alt+Rotary1 NoAction - Option+Control+Alt+DisplayUpper1 NoAction - Option+Control+Alt+DisplayLower1 NoAction - - - Option+Control+Alt+Fader2 NoAction - Option+Control+Alt+RotaryPush2 NoAction - Option+Control+Alt+Rotary2 NoAction - Option+Control+Alt+DisplayUpper2 NoAction - Option+Control+Alt+DisplayLower2 NoAction - - - Option+Control+Alt+Fader3 NoAction - Option+Control+Alt+RotaryPush3 NoAction - Option+Control+Alt+Rotary3 NoAction - Option+Control+Alt+DisplayUpper3 NoAction - Option+Control+Alt+DisplayLower3 NoAction - - - Option+Control+Alt+Fader4 NoAction - Option+Control+Alt+RotaryPush4 NoAction - Option+Control+Alt+Rotary4 NoAction - Option+Control+Alt+DisplayUpper4 NoAction - Option+Control+Alt+DisplayLower4 NoAction - - - Option+Control+Alt+Fader5 NoAction - Option+Control+Alt+RotaryPush5 NoAction - Option+Control+Alt+Rotary5 NoAction - Option+Control+Alt+DisplayUpper5 NoAction - Option+Control+Alt+DisplayLower5 NoAction - - - Option+Control+Alt+Fader6 NoAction - Option+Control+Alt+RotaryPush6 NoAction - Option+Control+Alt+Rotary6 NoAction - Option+Control+Alt+DisplayUpper6 NoAction - Option+Control+Alt+DisplayLower6 NoAction - - - Option+Control+Alt+Fader7 NoAction - Option+Control+Alt+RotaryPush7 NoAction - Option+Control+Alt+Rotary7 NoAction - Option+Control+Alt+DisplayUpper7 NoAction - Option+Control+Alt+DisplayLower7 NoAction - - - Option+Control+Alt+Fader8 NoAction - Option+Control+Alt+RotaryPush8 NoAction - Option+Control+Alt+Rotary8 NoAction - Option+Control+Alt+DisplayUpper8 NoAction - Option+Control+Alt+DisplayLower8 NoAction - - - - - Control+Alt+Fader1 NoAction - Control+Alt+RotaryPush1 NoAction - Control+Alt+Rotary1 NoAction - Control+Alt+DisplayUpper1 NoAction - Control+Alt+DisplayLower1 NoAction - - - Control+Alt+Fader2 NoAction - Control+Alt+RotaryPush2 NoAction - Control+Alt+Rotary2 NoAction - Control+Alt+DisplayUpper2 NoAction - Control+Alt+DisplayLower2 NoAction - - - Control+Alt+Fader3 NoAction - Control+Alt+RotaryPush3 NoAction - Control+Alt+Rotary3 NoAction - Control+Alt+DisplayUpper3 NoAction - Control+Alt+DisplayLower3 NoAction - - - Control+Alt+Fader4 NoAction - Control+Alt+RotaryPush4 NoAction - Control+Alt+Rotary4 NoAction - Control+Alt+DisplayUpper4 NoAction - Control+Alt+DisplayLower4 NoAction - - - Control+Alt+Fader5 NoAction - Control+Alt+RotaryPush5 NoAction - Control+Alt+Rotary5 NoAction - Control+Alt+DisplayUpper5 NoAction - Control+Alt+DisplayLower5 NoAction - - - Control+Alt+Fader6 NoAction - Control+Alt+RotaryPush6 NoAction - Control+Alt+Rotary6 NoAction - Control+Alt+DisplayUpper6 NoAction - Control+Alt+DisplayLower6 NoAction - - - Control+Alt+Fader7 NoAction - Control+Alt+RotaryPush7 NoAction - Control+Alt+Rotary7 NoAction - Control+Alt+DisplayUpper7 NoAction - Control+Alt+DisplayLower7 NoAction - - - Control+Alt+Fader8 NoAction - Control+Alt+RotaryPush8 NoAction - Control+Alt+Rotary8 NoAction - Control+Alt+DisplayUpper8 NoAction - Control+Alt+DisplayLower8 NoAction - - - -#End auto generated section - - OnZoneDeactivation HideFXSlot -ZoneEnd