summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/layout/sequential_prophet5.lay
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/layout/sequential_prophet5.lay')
-rw-r--r--src/mame/layout/sequential_prophet5.lay1159
1 files changed, 1159 insertions, 0 deletions
diff --git a/src/mame/layout/sequential_prophet5.lay b/src/mame/layout/sequential_prophet5.lay
new file mode 100644
index 00000000000..10ff66121d1
--- /dev/null
+++ b/src/mame/layout/sequential_prophet5.lay
@@ -0,0 +1,1159 @@
+<?xml version="1.0"?>
+<!--
+license:CC0-1.0
+copyright-holders:m1macrophage
+-->
+<mamelayout version="2">
+ <!-- labels -->
+ <element name="transparent"><rect><color red="0" green="0" blue="0" alpha="0"/></rect></element>
+ <repeat count="8">
+ <param name="i" start="1" increment="1"/>
+ <element name="txt_~i~"><text string="~i~"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ </repeat>
+ <element name="txt_polymod">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="POLY - MOD"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_lfo">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="LFO"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_wheelmod">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="WHEEL - MOD"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_oscillator_a">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="OSCILLATOR A"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_oscillator_b">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="OSCILLATOR B"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_mixer">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="MIXER"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_cass">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="CASSETTE"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_filter">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="FILTER"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_amp">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="AMPLIFIER"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_programmer">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="PROGRAMMER"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_source_amount">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="SOURCE AMOUNT"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_destination">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="DESTINATION"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_shape">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="SHAPE"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_prog_sel">
+ <rect><color red="0.16" green="0.16" blue="0.16"/></rect>
+ <text string="PROGRAM SELECT"><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="txt_freq_a"><text string="FREQ A"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_freq_b"><text string="FREQ B"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_pw_a"><text string="PW A"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_pw_b"><text string="PW B"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_filt_env"><text string="FILT ENV" align="1"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_osc_a"><text string="OSC A"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_osc_b"><text string="OSC B"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_osc_b_l"><text string="OSC B" align="1"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_noise"><text string="NOISE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_noise_l"><text string="NOISE" align="1"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_frequency"><text string="FREQUENCY"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_source_mix"><text string="SOURCE MIX"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_lfo_r"><text string="LFO" align="2"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_pulse_width"><text string="PULSE WIDTH"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_sync"><text string="SYNC"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_fine"><text string="FINE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_lo_freq"><text string="LO FREQ"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_attack"><text string="ATTACK"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_decay"><text string="DECAY"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_sustain"><text string="SUSTAIN"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_release"><text string="RELEASE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_cutoff"><text string="CUTOFF"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_resonance"><text string="RESONANCE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_env_amt"><text string="ENVELOPE AMOUNT"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_keyboard"><text string="KEYBOARD"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_pitch"><text string="PITCH"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_mod"><text string="MOD"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_save"><text string="SAVE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_load"><text string="LOAD"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_to_tape"><text string="TO TAPE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_from_tape"><text string="FROM TAPE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_glide"><text string="GLIDE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_master_tune"><text string="MASTER TUNE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_volume"><text string="VOLUME"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_unison"><text string="UNISON"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_tune"><text string="TUNE"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_A440"><text string="A-440"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_preset"><text string="PRESET"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_record"><text string="RECORD"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_bank"><text string="BANK"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_select"><text string="SELECT"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+ <element name="txt_program"><text string="PROGRAM"><color red="0.86" green="0.86" blue="0.86"/></text></element>
+
+ <!-- case elements -->
+ <element name="wood"><rect><color red="0.71" green="0.46" blue="0.28"/></rect></element>
+ <element name="edgewood"><rect><color red="0.50" green="0.30" blue="0.22"/></rect></element>
+ <element name="darkwood"><rect><color red="0.32" green="0.21" blue="0.18"/></rect></element>
+ <element name="panel"><rect><color red="0.16" green="0.16" blue="0.16"/></rect></element>
+ <element name="silverrect">
+ <image><data><![CDATA[
+ <rect fill="#a7a7a7" stroke="none" x="1" y="1" width="166" height="40" rx="10" ry="10"/>
+ ]]></data></image>
+ </element>
+ <element name="script_warning" defstate="1">
+ <text state="1" string="*** to control knobs and wheels with a mouse, enable the layout plugin ***">
+ <color red="0.90" green="0.90" blue="0.90"/>
+ </text>
+ </element>
+
+ <!-- display elements -->
+ <element name="display"><rect><color red="0.15" green="0.08" blue="0.06"/></rect></element>
+ <element name="digit"><led7seg><color red="0.90" green="0.14" blue="0.35"/></led7seg></element>
+ <element name="led">
+ <disk>
+ <color state="0" red="0.25" green="0.07" blue="0.07"/>
+ <color state="1" red="0.85" green="0.15" blue="0.15"/>
+ </disk>
+ </element>
+
+ <!-- panel section elements -->
+ <element name="line"><rect><color red="0.75" green="0.75" blue="0.75"/></rect></element>
+ <element name="section_polymod">
+ <image><data><![CDATA[
+ <svg width="250" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="248" height="70" rx="10" ry="10"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="8" x2="128" y1="63" y2="63"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="154" x2="230" y1="56" y2="56"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_lfo">
+ <image><data><![CDATA[
+ <svg width="186" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="184" height="70" rx="10" ry="10"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="90" x2="166" y1="56" y2="56"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_wheelmod">
+ <image><data><![CDATA[
+ <svg width="250" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="248" height="70" rx="10" ry="10"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="78" x2="230" y1="56" y2="56"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_osc_a">
+ <image><data><![CDATA[
+ <svg width="264" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="262" height="70" rx="10" ry="10"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="90" x2="128" y1="56" y2="56"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_osc_b">
+ <image><data><![CDATA[
+ <svg width="408" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="406" height="70" rx="10" ry="10"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="155" x2="231" y1="56" y2="56"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_mixer">
+ <image><data><![CDATA[
+ <svg width="208" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="206" height="70" rx="10" ry="10"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_filter">
+ <image><data><![CDATA[
+ <svg width="288" height="148">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="286" height="146" rx="10" ry="10"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_cass">
+ <image><data><![CDATA[
+ <svg width="120" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="118" height="70" rx="10" ry="10"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_amp">
+ <image><data><![CDATA[
+ <svg width="264" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="262" height="70" rx="10" ry="10"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="section_programmer">
+ <image><data><![CDATA[
+ <svg width="578" height="72">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="576" height="70" rx="10" ry="10"/>
+ <line stroke="#c0c0c0" stroke-width="1" x1="291" x2="557" y1="56" y2="56"/>
+ </svg>
+ ]]></data></image>
+ </element>
+
+ <!-- button elements -->
+ <element name="wave_ramp">
+ <image><data><![CDATA[
+ <svg width="22" height="10">
+ <polyline fill="none" stroke="#c0c0c0" stroke-width="1" points="6,9 17,0 17,9"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="wave_triangle">
+ <image><data><![CDATA[
+ <svg width="22" height="10">
+ <polyline fill="none" stroke="#c0c0c0" stroke-width="1" points="5,9 11,0 16,9"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="wave_square">
+ <image><data><![CDATA[
+ <svg width="22" height="10">
+ <polyline fill="none" stroke="#c0c0c0" stroke-width="1" points="2,9 6,9 6,0 16,0 16,9 20,9"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="btn_black">
+ <rect>
+ <bounds x="0" y="0" width="22" height="28"/>
+ <color red="0.08" green="0.08" blue="0.08"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="1" width="20" height="10"/>
+ <color state="0" red="0.29" green="0.29" blue="0.29"/>
+ <color state="1" red="0.45" green="0.45" blue="0.45"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="11" width="20" height="17"/>
+ <color red="0.14" green="0.14" blue="0.14"/>
+ </rect>
+ <rect>
+ <bounds x="3" y="13" width="16" height="12"/>
+ <color state="0" red="0.26" green="0.26" blue="0.26"/>
+ <color state="1" red="0.45" green="0.45" blue="0.45"/>
+ </rect>
+ </element>
+ <element name="btn_grey">
+ <rect>
+ <bounds x="0" y="0" width="22" height="28"/>
+ <color red="0.08" green="0.08" blue="0.08"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="1" width="20" height="10"/>
+ <color state="0" red="0.60" green="0.60" blue="0.60"/>
+ <color state="1" red="0.73" green="0.73" blue="0.73"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="11" width="20" height="17"/>
+ <color red="0.49" green="0.49" blue="0.49"/>
+ </rect>
+ <rect>
+ <bounds x="3" y="13" width="16" height="12"/>
+ <color state="0" red="0.57" green="0.57" blue="0.57"/>
+ <color state="1" red="0.73" green="0.73" blue="0.73"/>
+ </rect>
+ </element>
+ <element name="btn_orange">
+ <rect>
+ <bounds x="0" y="0" width="22" height="28"/>
+ <color red="0.08" green="0.08" blue="0.08"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="1" width="20" height="10"/>
+ <color state="0" red="0.82" green="0.42" blue="0.17"/>
+ <color state="1" red="1.0" green="0.50" blue="0.18"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="11" width="20" height="17"/>
+ <color red="0.63" green="0.28" blue="0.12"/>
+ </rect>
+ <rect>
+ <bounds x="3" y="13" width="16" height="12"/>
+ <color state="0" red="0.79" green="0.39" blue="0.14"/>
+ <color state="1" red="1.0" green="0.50" blue="0.18"/>
+ </rect>
+ </element>
+ <group name="button">
+ <bounds x="0" y="0" width="38" height="52"/>
+ <element ref="~btn_label_top~"><bounds x="0" y="2" width="38" height="8"/></element>
+ <element ref="~btn_style~" inputtag="~btn_input~" inputmask="~btn_mask~">
+ <bounds x="8" y="12" width="22" height="28"/>
+ </element>
+ <element ref="led" name="~btn_led~"><bounds x="16" y="15" width="6" height="6"/></element>
+ <element ref="~btn_label_bottom~"><bounds x="0" y="44" width="38" height="8"/></element>
+ </group>
+ <group name="wave_button">
+ <bounds x="0" y="0" width="38" height="40"/>
+ <element ref="~wave~"><bounds x="8" y="0" width="22" height="10"/></element>
+ <element ref="btn_black" inputtag="~btn_input~" inputmask="~btn_mask~">
+ <bounds x="8" y="12" width="22" height="28"/>
+ </element>
+ <element ref="led" name="~btn_led~"><bounds x="16" y="15" width="6" height="6"/></element>
+ </group>
+
+ <!-- knob elements -->
+ <element name="knob_numbers_0_10">
+ <rect><bounds x="0" y="0" width="56" height="56"/><color red="0" green="0" blue="0" alpha="0"/></rect>
+ <text string="0" align="1"><bounds x="13" y="46" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="1" align="1"><bounds x="5" y="36" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="2" align="1"><bounds x="2" y="24" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="3" align="1"><bounds x="5" y="12" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="4" align="1"><bounds x="13" y="3" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="5" align="0"><bounds x="25" y="0" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="6" align="2"><bounds x="35" y="3" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="7" align="2"><bounds x="43" y="12" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="8" align="2"><bounds x="46" y="24" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="9" align="2"><bounds x="43" y="36" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="10" align="2"><bounds x="35" y="46" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="knob_numbers_5_5">
+ <rect><bounds x="0" y="0" width="56" height="56"/><color red="0" green="0" blue="0" alpha="0"/></rect>
+ <text string="5" align="1"><bounds x="13" y="46" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="4" align="1"><bounds x="5" y="36" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="3" align="1"><bounds x="2" y="24" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="2" align="1"><bounds x="5" y="12" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="1" align="1"><bounds x="13" y="3" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="0" align="0"><bounds x="25" y="0" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="1" align="2"><bounds x="35" y="3" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="2" align="2"><bounds x="43" y="12" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="3" align="2"><bounds x="46" y="24" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="4" align="2"><bounds x="43" y="36" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ <text string="5" align="2"><bounds x="35" y="46" width="8" height="7"/><color red="0.86" green="0.86" blue="0.86"/></text>
+ </element>
+ <element name="knob_tickmarks">
+ <image><data><![CDATA[
+ <svg width="42" height="42">
+ <g stroke="#dbdbdb" stroke-width="0.5" transform="translate(20.5, 20.5)>
+ <line x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(30)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(60)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(90)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(120)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(150)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(210)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(240)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(270)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(300)" x1="0" y1="0" x2="0" y2="-21"/>
+ <line transform="rotate(330)" x1="0" y1="0" x2="0" y2="-21"/>
+ </g>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="knob_black">
+ <disk><bounds x="0" y="0" width="28" height="28"/><color red="0.63" green="0.63" blue="0.63"/></disk>
+ <disk><bounds x="2" y="2" width="24" height="24"/><color red="0.13" green="0.13" blue="0.13"/></disk>
+ </element>
+ <element name="knob_silver">
+ <disk><bounds x="0" y="0" width="28" height="28"/><color red="0.50" green="0.50" blue="0.50"/></disk>
+ <disk><bounds x="2" y="2" width="24" height="24"/><color red="0.67" green="0.67" blue="0.67"/></disk>
+ </element>
+ <element name="knob_black_value">
+ <simplecounter digits="1"><color red="0.86" green="0.86" blue="0.86"/></simplecounter>
+ </element>
+ <element name="knob_silver_value">
+ <simplecounter digits="1"><color red="0.0" green="0.0" blue="0.0"/></simplecounter>
+ </element>
+ <group name="knob">
+ <bounds x="0" y="0" width="56" height="62"/>
+ <element ref="~knob_numbers~"><bounds x="0" y="0" width="56" height="56"/></element>
+ <element ref="knob_tickmarks"><bounds x="7" y="7" width="42" height="42"/></element>
+ <element ref="~knob_style~" id="~knob_input~">
+ <bounds x="14" y="14" width="28" height="28"/>
+ </element>
+ <element ref="~knob_style~_value" inputtag="~knob_input~" inputmask="0xffff" inputraw="yes">
+ <bounds x="18" y="23" width="20" height="10"/>
+ </element>
+ <element ref="transparent" clickthrough="no">
+ <bounds x="18" y="23" width="20" height="10"/>
+ </element>
+ <element ref="~knob_label~"><bounds x="0" y="54" width="56" height="8"/></element>
+ </group>
+
+ <!-- wheel elements -->
+ <element name="section_wheel">
+ <image><data><![CDATA[
+ <svg width="112" height="194">
+ <rect fill="none" stroke="#c0c0c0" stroke-width="2" x="1" y="1" width="110" height="192" rx="10" ry="10"/>
+ </svg>
+ ]]></data></image>
+ </element>
+ <element name="wheel_well"><rect><color red="0.08" green="0.08" blue="0.08"/></rect></element>
+ <element name="wheel_area"><rect><color red="0.14" green="0.14" blue="0.14"/></rect></element>
+ <element name="wheel_dent">
+ <rect><color red="0.25" green="0.25" blue="0.25"/><bounds x="0" y="0" width="14" height="14"/></rect>
+ <rect><color red="0.60" green="0.60" blue="0.60"/><bounds x="0" y="6" width="14" height="2"/></rect>
+ </element>
+ <group name="wheel">
+ <bounds x="0" y="0" width="18" height="98"/>
+ <element ref="wheel_well"><bounds x="0" y="0" width="18" height="98"/></element>
+ <element ref="wheel_area" id="~wheel_input~"><bounds x="2" y="6" width="14" height="86"/></element>
+ <element ref="wheel_dent" id="~wheel_input~_dent">
+ <animate inputtag="~wheel_input~" inputmask="0xffff"/>
+ <bounds state="100" x="2" y="6" width="14" height="14"/>
+ <bounds state="0" x="2" y="78" width="14" height="14"/>
+ </element>
+ </group>
+
+ <!-- keyboard elements -->
+ <element name="whitekey">
+ <rect>
+ <color state="0" red="0.94" green="0.94" blue="0.94"/>
+ <color state="1" red="0.50" green="0.50" blue="0.50"/>
+ </rect>
+ </element>
+ <element name="blackkey">
+ <rect>
+ <bounds x="0" y="0" width="18" height="130"/>
+ <color red="0.08" green="0.08" blue="0.08"/>
+ </rect>
+ <rect>
+ <bounds x="1" y="0" width="16" height="128"/>
+ <color state="0" red="0.18" green="0.18" blue="0.18"/>
+ <color state="1" red="0.50" green="0.50" blue="0.50"/>
+ </rect>
+ </element>
+ <group name="octave_var1">
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x01"><!-- C -->
+ <bounds x="0" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x04"><!-- D -->
+ <bounds x="34" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x10"><!-- E -->
+ <bounds x="68" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x20"><!-- F -->
+ <bounds x="102" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x80"><!-- G -->
+ <bounds x="136" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x02"><!-- A -->
+ <bounds x="170" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x08"><!-- B -->
+ <bounds x="204" y="0" width="32" height="202"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_1~" inputmask="0x02"><!-- C# -->
+ <bounds x="21" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_1~" inputmask="0x08"><!-- D# -->
+ <bounds x="61" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_1~" inputmask="0x40"><!-- F# -->
+ <bounds x="123" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_2~" inputmask="0x01"><!-- G# -->
+ <bounds x="159" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_2~" inputmask="0x04"><!-- A# -->
+ <bounds x="197" y="0" width="18" height="130"/>
+ </element>
+ </group>
+ <group name="octave_var2">
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x10"><!-- C -->
+ <bounds x="0" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_1~" inputmask="0x40"><!-- D -->
+ <bounds x="34" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x01"><!-- E -->
+ <bounds x="68" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x02"><!-- F -->
+ <bounds x="102" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x08"><!-- G -->
+ <bounds x="136" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x20"><!-- A -->
+ <bounds x="170" y="0" width="32" height="202"/>
+ </element>
+ <element ref="whitekey" inputtag="~kbd_input_2~" inputmask="0x80"><!-- B -->
+ <bounds x="204" y="0" width="32" height="202"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_1~" inputmask="0x20"><!-- C# -->
+ <bounds x="21" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_1~" inputmask="0x80"><!-- D# -->
+ <bounds x="61" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_2~" inputmask="0x04"><!-- F# -->
+ <bounds x="123" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_2~" inputmask="0x10"><!-- G# -->
+ <bounds x="159" y="0" width="18" height="130"/>
+ </element>
+ <element ref="blackkey" inputtag="~kbd_input_2~" inputmask="0x40"><!-- A# -->
+ <bounds x="197" y="0" width="18" height="130"/>
+ </element>
+ </group>
+
+
+ <view name="Default Layout">
+ <bounds x="0" y="0" width="1400" height="600"/>
+
+ <!-- case -->
+
+ <element ref="wood"><bounds x="14" y="282" width="1372" height="102"/></element>
+ <element ref="wood"><bounds x="22" y="586" width="1356" height="14"/></element>
+ <element ref="silverrect"><bounds x="1158" y="314" width="166" height="40"/></element>
+ <element ref="edgewood"><bounds x="14" y="0" width="1372" height="14"/></element>
+ <element ref="edgewood"><bounds x="0" y="0" width="14" height="600"/></element>
+ <element ref="darkwood"><bounds x="14" y="384" width="12" height="216"/></element>
+ <element ref="edgewood"><bounds x="1386" y="0" width="14" height="600"/></element>
+ <element ref="darkwood"><bounds x="1374" y="384" width="12" height="216"/></element>
+ <element ref="panel"><bounds x="14" y="14" width="1372" height="268"/></element>
+ <element ref="line"><bounds x="283" y="42" width="2" height="224"/></element>
+
+ <collection name="script warning">
+ <element ref="script_warning" id="warning"><bounds x="300" y="324" width="800" height="18"/></element>
+ </collection>
+
+ <!-- wheels -->
+
+ <element ref="panel"><bounds x="26" y="384" width="118" height="202"/></element>
+ <element ref="section_wheel"><bounds x="28" y="390" width="112" height="194"/></element>
+
+ <element ref="txt_pitch"><bounds x="53" y="534" width="28" height="10"/></element>
+ <param name="wheel_input" value="wheel_pitch"/>
+ <group ref="wheel"><bounds x="58" y="434" width="18" height="98"/></group>
+
+ <element ref="txt_mod"><bounds x="102" y="534" width="28" height="10"/></element>
+ <param name="wheel_input" value="wheel_mod"/>
+ <group ref="wheel"><bounds x="107" y="434" width="18" height="98"/></group>
+
+ <!-- Most knobs are black and the tickmarks are numbered from 0 to 10. -->
+ <param name="knob_style" value="knob_black"/>
+ <param name="knob_numbers" value="knob_numbers_0_10"/>
+
+ <!-- poly mod -->
+
+ <param name="btn_style" value="btn_black"/>
+ <param name="btn_label_bottom" value="transparent"/>
+ <param name="btn_input" value="switch_row_1"/>
+
+ <element ref="section_polymod"><bounds x="24" y="42" width="250" height="72"/></element>
+ <element ref="txt_polymod"><bounds x="118" y="38" width="62" height="10"/></element>
+
+ <param name="knob_label" value="transparent"/>
+ <param name="knob_input" value="pot_4"/>
+ <group ref="knob"><bounds x="32" y="47" width="56" height="62"/></group>
+ <element ref="txt_filt_env"><bounds x="78" y="94" width="40" height="7"/></element>
+
+ <param name="knob_input" value="pot_3"/>
+ <group ref="knob"><bounds x="96" y="47" width="56" height="62"/></group>
+ <element ref="txt_osc_b_l"><bounds x="142" y="94" width="40" height="7"/></element>
+
+ <param name="btn_label_top" value="txt_freq_a"/>
+ <param name="btn_led" value="led_pmod_freq_a"/>
+ <param name="btn_mask" value="0x01"/>
+ <group ref="button"><bounds x="159" y="50" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_pw_a"/>
+ <param name="btn_led" value="led_pmod_pw_a"/>
+ <param name="btn_mask" value="0x02"/>
+ <group ref="button"><bounds x="197" y="50" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_filter"/>
+ <param name="btn_led" value="led_pmod_filt"/>
+ <param name="btn_mask" value="0x04"/>
+ <group ref="button"><bounds x="235" y="50" width="38" height="52"/></group>
+
+ <element ref="txt_destination"><bounds x="189" y="94" width="54" height="8"/></element>
+ <element ref="txt_source_amount"><bounds x="57" y="101" width="68" height="8"/></element>
+
+ <!-- lfo -->
+
+ <param name="btn_input" value="switch_row_1"/>
+ <element ref="section_lfo"><bounds x="88" y="118" width="186" height="72"/></element>
+ <element ref="txt_lfo"><bounds x="167" y="114" width="28" height="10"/></element>
+
+ <param name="knob_label" value="txt_frequency"/>
+ <param name="knob_input" value="pot_1"/>
+ <group ref="knob"><bounds x="96" y="123" width="56" height="62"/></group>
+
+ <param name="wave" value="wave_ramp"/>
+ <param name="btn_led" value="led_lfo_saw"/>
+ <param name="btn_mask" value="0x08"/>
+ <group ref="wave_button"><bounds x="159" y="126" width="38" height="40"/></group>
+
+ <param name="wave" value="wave_triangle"/>
+ <param name="btn_led" value="led_lfo_tri"/>
+ <param name="btn_mask" value="0x10"/>
+ <group ref="wave_button"><bounds x="197" y="126" width="38" height="40"/></group>
+
+ <param name="wave" value="wave_square"/>
+ <param name="btn_led" value="led_lfo_sqr"/>
+ <param name="btn_mask" value="0x20"/>
+ <group ref="wave_button"><bounds x="235" y="126" width="38" height="40"/></group>
+
+ <element ref="txt_shape"><bounds x="201" y="170" width="30" height="8"/></element>
+
+ <!-- wheel mod -->
+
+ <param name="btn_style" value="btn_black"/>
+ <param name="btn_label_bottom" value="transparent"/>
+ <param name="btn_input" value="switch_row_2"/>
+
+ <element ref="section_wheelmod"><bounds x="24" y="194" width="250" height="72"/></element>
+ <element ref="txt_wheelmod"><bounds x="115" y="190" width="68" height="10"/></element>
+
+ <param name="knob_numbers" value="knob_numbers_5_5"/>
+ <param name="knob_label" value="txt_source_mix"/>
+ <param name="knob_input" value="pot_2"/>
+ <group ref="knob"><bounds x="32" y="199" width="56" height="62"/></group>
+ <param name="knob_numbers" value="knob_numbers_0_10"/>
+ <element ref="txt_lfo_r"><bounds x="32" y="246" width="10" height="7"/></element>
+ <element ref="txt_noise_l"><bounds x="78" y="246" width="20" height="7"/></element>
+
+ <param name="btn_label_top" value="txt_freq_a"/>
+ <param name="btn_led" value="led_wmod_freq_a"/>
+ <param name="btn_mask" value="0x01"/>
+ <group ref="button"><bounds x="83" y="202" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_freq_b"/>
+ <param name="btn_led" value="led_wmod_freq_b"/>
+ <param name="btn_mask" value="0x02"/>
+ <group ref="button"><bounds x="121" y="202" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_pw_a"/>
+ <param name="btn_led" value="led_wmod_pw_a"/>
+ <param name="btn_mask" value="0x04"/>
+ <group ref="button"><bounds x="159" y="202" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_pw_b"/>
+ <param name="btn_led" value="led_wmod_pw_b"/>
+ <param name="btn_mask" value="0x08"/>
+ <group ref="button"><bounds x="197" y="202" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_filter"/>
+ <param name="btn_led" value="led_wmod_filt"/>
+ <param name="btn_mask" value="0x10"/>
+ <group ref="button"><bounds x="235" y="202" width="38" height="52"/></group>
+
+ <element ref="txt_destination"><bounds x="151" y="246" width="54" height="8"/></element>
+
+ <!-- oscillator A -->
+
+ <param name="btn_style" value="btn_black"/>
+ <param name="btn_label_top" value="transparent"/>
+ <param name="btn_input" value="switch_row_0"/>
+
+ <element ref="section_osc_a"><bounds x="294" y="42" width="264" height="72"/></element>
+ <element ref="txt_oscillator_a"><bounds x="389" y="38" width="74" height="10"/></element>
+
+ <param name="knob_label" value="txt_frequency"/>
+ <param name="knob_input" value="pot_5"/>
+ <group ref="knob"><bounds x="302" y="47" width="56" height="62"/></group>
+
+ <param name="wave" value="wave_ramp"/>
+ <param name="btn_led" value="led_osc_a_saw"/>
+ <param name="btn_mask" value="0x02"/>
+ <group ref="wave_button"><bounds x="365" y="50" width="38" height="40"/></group>
+
+ <param name="wave" value="wave_square"/>
+ <param name="btn_led" value="led_osc_a_sqr"/>
+ <param name="btn_mask" value="0x01"/>
+ <group ref="wave_button"><bounds x="403" y="50" width="38" height="40"/></group>
+
+ <param name="knob_label" value="txt_pulse_width"/>
+ <param name="knob_input" value="pot_13"/>
+ <group ref="knob"><bounds x="453" y="47" width="56" height="62"/></group>
+
+ <param name="btn_label_bottom" value="txt_sync"/>
+ <param name="btn_led" value="led_osc_a_sync"/>
+ <param name="btn_mask" value="0x04"/>
+ <group ref="button"><bounds x="519" y="50" width="38" height="52"/></group>
+
+ <element ref="txt_shape"><bounds x="388" y="94" width="30" height="8"/></element>
+
+ <!-- oscillator B -->
+
+ <param name="btn_style" value="btn_black"/>
+ <param name="btn_label_top" value="transparent"/>
+ <param name="btn_input" value="switch_row_0"/>
+
+ <element ref="section_osc_b"><bounds x="294" y="118" width="408" height="72"/></element>
+ <element ref="txt_oscillator_b"><bounds x="462" y="114" width="74" height="10"/></element>
+
+ <param name="knob_label" value="txt_frequency"/>
+ <param name="knob_input" value="pot_6"/>
+ <group ref="knob"><bounds x="302" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_fine"/>
+ <param name="knob_input" value="pot_7"/>
+ <group ref="knob"><bounds x="366" y="123" width="56" height="62"/></group>
+
+ <param name="wave" value="wave_ramp"/>
+ <param name="btn_led" value="led_osc_b_saw"/>
+ <param name="btn_mask" value="0x08"/>
+ <group ref="wave_button"><bounds x="430" y="126" width="38" height="40"/></group>
+
+ <param name="wave" value="wave_triangle"/>
+ <param name="btn_led" value="led_osc_b_tri"/>
+ <param name="btn_mask" value="0x10"/>
+ <group ref="wave_button"><bounds x="468" y="126" width="38" height="40"/></group>
+
+ <param name="wave" value="wave_square"/>
+ <param name="btn_led" value="led_osc_b_sqr"/>
+ <param name="btn_mask" value="0x20"/>
+ <group ref="wave_button"><bounds x="506" y="126" width="38" height="40"/></group>
+
+ <element ref="txt_shape"><bounds x="468" y="170" width="30" height="8"/></element>
+
+ <param name="knob_label" value="txt_pulse_width"/>
+ <param name="knob_input" value="pot_11"/>
+ <group ref="knob"><bounds x="554" y="123" width="56" height="62"/></group>
+
+ <param name="btn_label_bottom" value="txt_keyboard"/>
+ <param name="btn_led" value="led_osc_b_kbd"/>
+ <param name="btn_mask" value="0x40"/>
+ <group ref="button"><bounds x="656" y="126" width="38" height="52"/></group>
+
+ <param name="btn_label_bottom" value="txt_lo_freq"/>
+ <param name="btn_led" value="led_osc_b_lo"/>
+ <param name="btn_input" value="switch_row_2"/>
+ <param name="btn_mask" value="0x20"/>
+ <group ref="button"><bounds x="618" y="126" width="38" height="52"/></group>
+
+ <!-- mixer -->
+
+ <element ref="section_mixer"><bounds x="578" y="42" width="208" height="72"/></element>
+ <element ref="txt_mixer"><bounds x="664" y="38" width="36" height="10"/></element>
+
+ <param name="knob_label" value="txt_osc_a"/>
+ <param name="knob_input" value="pot_12"/>
+ <group ref="knob"><bounds x="586" y="47" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_osc_b"/>
+ <param name="knob_input" value="pot_10"/>
+ <group ref="knob"><bounds x="654" y="47" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_noise"/>
+ <param name="knob_input" value="pot_14"/>
+ <group ref="knob"><bounds x="722" y="47" width="56" height="62"/></group>
+
+ <!-- filter-->
+
+ <element ref="section_filter"><bounds x="806" y="42" width="288" height="148"/></element>
+ <element ref="txt_filter"><bounds x="930" y="38" width="40" height="10"/></element>
+
+ <param name="knob_label" value="txt_cutoff"/>
+ <param name="knob_input" value="pot_8"/>
+ <group ref="knob"><bounds x="826" y="47" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_resonance"/>
+ <param name="knob_input" value="pot_15"/>
+ <group ref="knob"><bounds x="890" y="47" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_env_amt"/>
+ <param name="knob_input" value="pot_9"/>
+ <group ref="knob"><bounds x="954" y="47" width="56" height="62"/></group>
+
+ <param name="btn_label_top" value="transparent"/>
+ <param name="btn_label_bottom" value="txt_keyboard"/>
+ <param name="btn_led" value="led_filt_kbd"/>
+ <param name="btn_input" value="switch_row_1"/>
+ <param name="btn_mask" value="0x40"/>
+ <group ref="button"><bounds x="1027" y="50" width="38" height="52"/></group>
+
+ <param name="knob_label" value="txt_attack"/>
+ <param name="knob_input" value="pot_16"/>
+ <group ref="knob"><bounds x="826" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_decay"/>
+ <param name="knob_input" value="pot_17"/>
+ <group ref="knob"><bounds x="890" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_sustain"/>
+ <param name="knob_input" value="pot_18"/>
+ <group ref="knob"><bounds x="954" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_release"/>
+ <param name="knob_input" value="pot_19"/>
+ <group ref="knob"><bounds x="1018" y="123" width="56" height="62"/></group>
+
+ <!-- amplifier -->
+
+ <element ref="section_amp"><bounds x="1108" y="118" width="264" height="72"/></element>
+ <element ref="txt_amp"><bounds x="1211" y="114" width="56" height="10"/></element>
+
+ <param name="knob_label" value="txt_attack"/>
+ <param name="knob_input" value="pot_20"/>
+ <group ref="knob"><bounds x="1116" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_decay"/>
+ <param name="knob_input" value="pot_21"/>
+ <group ref="knob"><bounds x="1180" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_sustain"/>
+ <param name="knob_input" value="pot_22"/>
+ <group ref="knob"><bounds x="1244" y="123" width="56" height="62"/></group>
+
+ <param name="knob_label" value="txt_release"/>
+ <param name="knob_input" value="pot_23"/>
+ <group ref="knob"><bounds x="1308" y="123" width="56" height="62"/></group>
+
+ <!-- cassette -->
+
+ <param name="btn_style" value="btn_grey"/>
+ <param name="btn_input" value="switch_row_4"/>
+
+ <element ref="section_cass"><bounds x="1250" y="42" width="122" height="72"/></element>
+ <element ref="txt_cass"><bounds x="1283" y="38" width="56" height="10"/></element>
+
+ <param name="btn_label_top" value="txt_save"/>
+ <param name="btn_label_bottom" value="txt_to_tape"/>
+ <param name="btn_led" value="led_to_cass"/>
+ <param name="btn_mask" value="0x10"/>
+ <group ref="button"><bounds x="1253" y="50" width="38" height="52"/></group>
+
+ <param name="btn_label_top" value="txt_load"/>
+ <param name="btn_label_bottom" value="txt_from_tape"/>
+ <param name="btn_led" value="led_from_cass"/>
+ <param name="btn_mask" value="0x20"/>
+ <group ref="button"><bounds x="1317" y="50" width="38" height="52"/></group>
+
+ <!-- programmer -->
+
+ <element ref="section_programmer"><bounds x="516" y="194" width="578" height="72"/></element>
+ <element ref="txt_programmer"><bounds x="767" y="190" width="76" height="10"/></element>
+
+ <param name="btn_style" value="btn_grey"/>
+ <param name="btn_label_top" value="transparent"/>
+ <param name="btn_label_bottom" value="txt_preset"/>
+ <param name="btn_led" value="led_preset"/>
+ <param name="btn_input" value="switch_row_4"/>
+ <param name="btn_mask" value="0x80"/>
+ <group ref="button"><bounds x="518" y="202" width="38" height="52"/></group>
+
+ <param name="btn_style" value="btn_orange"/>
+ <param name="btn_label_bottom" value="txt_record"/>
+ <param name="btn_led" value="led_record"/>
+ <param name="btn_mask" value="0x01"/>
+ <group ref="button"><bounds x="595" y="202" width="38" height="52"/></group>
+
+ <element ref="btn_grey" inputtag="switch_row_4" inputmask="0x02">
+ <bounds x="680" y="214" width="22" height="28"/>
+ </element>
+ <element ref="txt_bank"><bounds x="672" y="246" width="38" height="8"/></element>
+ <element ref="txt_select"><bounds x="672" y="254" width="38" height="8"/></element>
+
+ <element ref="display"><bounds x="730" y="214" width="40" height="30"/></element>
+ <element ref="digit" name="digit0"><bounds x="731" y="215" width="18" height="28"/></element>
+ <element ref="digit" name="digit1"><bounds x="751" y="215" width="18" height="28"/></element>
+ <element ref="txt_bank"><bounds x="724" y="246" width="24" height="8"/></element>
+ <element ref="txt_program"><bounds x="753" y="246" width="36" height="8"/></element>
+
+ <param name="btn_style" value="btn_grey"/>
+ <param name="btn_label_bottom" value="transparent"/>
+ <param name="btn_input" value="switch_row_3"/>
+ <repeat count="8">
+ <param name="i" start="1" increment="1"/>
+ <param name="x" start="788" increment="38"/>
+ <param name="btn_led" value="led_ps~i~"/>
+ <param name="btn_mask" start="0x01" lshift="1"/>
+ <param name="btn_label_top" value="txt_~i~"/>
+ <group ref="button"><bounds x="~x~" y="202" width="38" height="52"/></group>
+ </repeat>
+
+ <element ref="txt_prog_sel"><bounds x="903" y="246" width="74" height="8"/></element>
+
+ <!-- knobs and buttons outside of any sections -->
+
+ <param name="knob_label" value="txt_glide"/>
+ <param name="knob_input" value="pot_0"/>
+ <group ref="knob"><bounds x="302" y="199" width="56" height="62"/></group>
+
+ <param name="btn_style" value="btn_black"/>
+ <param name="btn_label_top" value="transparent"/>
+ <param name="btn_label_bottom" value="txt_unison"/>
+ <param name="btn_led" value="led_unison"/>
+ <param name="btn_input" value="switch_row_0"/>
+ <param name="btn_mask" value="0x80"/>
+ <group ref="button"><bounds x="404" y="202" width="38" height="52"/></group>
+
+ <param name="knob_style" value="knob_silver"/>
+ <param name="knob_label" value="txt_master_tune"/>
+ <param name="knob_input" value="pot_tune"/>
+ <param name="knob_numbers" value="knob_numbers_5_5"/>
+ <group ref="knob"><bounds x="1116" y="47" width="56" height="62"/></group>
+
+ <param name="btn_style" value="btn_grey"/>
+ <param name="btn_label_bottom" value="txt_A440"/>
+ <param name="btn_led" value="led_a_440"/>
+ <param name="btn_input" value="switch_row_4"/>
+ <param name="btn_mask" value="0x04"/>
+ <group ref="button"><bounds x="1189" y="50" width="38" height="52"/></group>
+
+ <param name="btn_style" value="btn_black"/>
+ <param name="btn_label_bottom" value="txt_release"/>
+ <param name="btn_led" value="led_release"/>
+ <param name="btn_input" value="switch_row_1"/>
+ <param name="btn_mask" value="0x80"/>
+ <group ref="button"><bounds x="1125" y="202" width="38" height="52"/></group>
+
+ <param name="knob_label" value="txt_volume"/>
+ <param name="knob_input" value="pot_volume"/>
+ <param name="knob_numbers" value="knob_numbers_0_10"/>
+ <group ref="knob"><bounds x="1212" y="199" width="56" height="62"/></group>
+
+ <param name="btn_style" value="btn_grey"/>
+ <param name="btn_label_bottom" value="txt_tune"/>
+ <param name="btn_led" value="led_tune"/>
+ <param name="btn_input" value="switch_row_4"/>
+ <param name="btn_mask" value="0x08"/>
+ <group ref="button"><bounds x="1317" y="202" width="38" height="52"/></group>
+
+ <!-- keyboard -->
+
+ <param name="kbd_input_1" value="switch_row_8"/>
+ <param name="kbd_input_2" value="switch_row_9"/>
+ <group ref="octave_var1"><bounds x="148" y="384" width="236" height="202"/></group>
+
+ <param name="kbd_input_1" value="switch_row_9"/>
+ <param name="kbd_input_2" value="switch_row_10"/>
+ <group ref="octave_var2"><bounds x="386" y="384" width="236" height="202"/></group>
+
+ <param name="kbd_input_1" value="switch_row_11"/>
+ <param name="kbd_input_2" value="switch_row_12"/>
+ <group ref="octave_var1"><bounds x="624" y="384" width="236" height="202"/></group>
+
+ <param name="kbd_input_1" value="switch_row_12"/>
+ <param name="kbd_input_2" value="switch_row_13"/>
+ <group ref="octave_var2"><bounds x="862" y="384" width="236" height="202"/></group>
+
+ <param name="kbd_input_1" value="switch_row_14"/>
+ <param name="kbd_input_2" value="switch_row_15"/>
+ <group ref="octave_var1"><bounds x="1100" y="384" width="236" height="202"/></group>
+
+ <element ref="whitekey" inputtag="switch_row_15" inputmask="0x10">
+ <bounds x="1338" y="384" width="32" height="202"/>
+ </element>
+ </view>
+
+ <script><![CDATA[
+ file:set_resolve_tags_callback(
+ function()
+ local view = file.views["Default Layout"]
+ install_slider_callbacks(view)
+
+ add_slider(view, "wheel_pitch", "wheel_pitch_dent", "wheel_pitch")
+ add_slider(view, "wheel_mod", "wheel_mod_dent", "wheel_mod")
+
+ local knob_scale = 1.6
+ add_knob(view, "pot_tune", "pot_tune", knob_scale, VERTICAL)
+ add_knob(view, "pot_volume", "pot_volume", knob_scale, VERTICAL)
+
+ for i = 0, 23 do
+ local knob = "pot_" .. i
+ add_knob(view, knob, knob, knob_scale, VERTICAL)
+ end
+
+ view.items["warning"]:set_state(0)
+ end)
+
+ -----------------------------------------------------------------------
+ -- Slider and knob library starts.
+ -- Can be copied as-is to other layouts.
+ -----------------------------------------------------------------------
+ VERTICAL = 0
+ HORIZONTAL = 1
+
+ local widgets = {} -- Stores slider and knob information.
+ local pointers = {} -- Tracks pointer state.
+
+ -- The knob's Y position must be animated using <animate inputtag="{port_name}">.
+ -- The click area's vertical size must exactly span the range of the
+ -- knob's movement.
+ function add_slider(view, clickarea_id, knob_id, port_name)
+ table.insert(widgets, {
+ clickarea = get_layout_item(view, clickarea_id),
+ slider_knob = get_layout_item(view, knob_id),
+ field = get_port_field(port_name),
+ is_knob = false })
+ end
+
+ -- A sweep between the attached field's min and max values requires
+ -- moving the pointer by `scale * clickarea.height` pixes.
+ function add_knob(view, clickarea_id, port_name, scale, drag_direction)
+ table.insert(widgets, {
+ clickarea = get_layout_item(view, clickarea_id),
+ field = get_port_field(port_name),
+ is_knob = true,
+ scale = scale,
+ is_horizontal = (drag_direction == HORIZONTAL) })
+ end
+
+ function get_layout_item(view, item_id)
+ local item = view.items[item_id]
+ if item == nil then
+ emu.print_error("Layout element: '" .. item_id .. "' not found.")
+ end
+ return item
+ end
+
+ function get_port_field(port_name)
+ local port = file.device:ioport(port_name)
+ if port == nil then
+ emu.print_error("Port: '" .. port_name .. "' not found.")
+ return nil
+ end
+ local field = nil
+ for k, val in pairs(port.fields) do
+ field = val
+ break
+ end
+ local field_msg = "Needs to either be an IPT_ADJUSTER, or an analog port with auto-center."
+ if field == nil then
+ emu.print_error("Port '" .. port_name .."' " .. field_msg)
+ return nil
+ end
+ if field.is_analog and (not field.centerdelta or field.centerdelta == 0) then
+ emu.print_error("Port '" .. port_name .."' " .. field_msg)
+ return nil
+ end
+ return field
+ end
+
+ local function release_pointer(pointer_id)
+ if pointers[pointer_id] then
+ local field = widgets[pointers[pointer_id].selected_widget].field
+ if field.is_analog then
+ field:clear_value()
+ end
+ end
+ pointers[pointer_id] = nil
+ end
+
+ local function pointer_updated(type, id, dev, x, y, btn, dn, up, cnt)
+ -- If a button is not pressed, reset the state of the current pointer.
+ if btn & 1 == 0 then
+ release_pointer(id)
+ return
+ end
+
+ -- If a button was just pressed, find the affected widget, if any.
+ if dn & 1 ~= 0 then
+ for i = 1, #widgets do
+ local found, relative
+ if widgets[i].slider_knob and widgets[i].slider_knob.bounds:includes(x, y) then
+ found = true
+ relative = true
+ elseif widgets[i].clickarea.bounds:includes(x, y) then
+ found = true
+ relative = false
+ end
+ if found then
+ pointers[id] = {
+ selected_widget = i,
+ relative = relative,
+ start_x = x,
+ start_y = y,
+ start_value = widgets[i].field.port:read() }
+ break
+ end
+ end
+ end
+
+ -- If there is no widget selected by the current pointer, we are done.
+ if pointers[id] == nil then
+ return
+ end
+
+ -- A widget is selected. Update its state based on the pointer's position.
+
+ local pointer = pointers[id]
+ local widget = widgets[pointer.selected_widget]
+
+ local min_value = widget.field.minvalue
+ local max_value = widget.field.maxvalue
+ local value_range = max_value - min_value
+
+ local new_value
+ if widget.is_knob then
+ if widget.is_horizontal then
+ local step_x = value_range / (widget.scale * widget.clickarea.bounds.width)
+ new_value = pointer.start_value + (x - pointer.start_x) * step_x
+ else
+ local step_y = value_range / (widget.scale * widget.clickarea.bounds.height)
+ new_value = pointer.start_value + (pointer.start_y - y) * step_y
+ end
+ else
+ local knob_half_height = widget.slider_knob.bounds.height / 2
+ local min_y = widget.clickarea.bounds.y0 + knob_half_height
+ local max_y = widget.clickarea.bounds.y1 - knob_half_height
+
+ if pointer.relative then
+ -- User clicked on the knob. The new value will depend on how
+ -- much the knob was dragged.
+ new_value = pointer.start_value - value_range * (y - pointer.start_y) / (max_y - min_y)
+ else
+ -- User clicked elsewhere on the slider. The new value will depend on
+ -- the absolute position of the click.
+ new_value = max_value - value_range * (y - min_y) / (max_y - min_y)
+ end
+ end
+
+ new_value = math.floor(new_value + 0.5)
+ if new_value < min_value then new_value = min_value end
+ if new_value > max_value then new_value = max_value end
+
+ if widget.field.is_analog then
+ widget.field:set_value(new_value)
+ else
+ widget.field.user_value = new_value
+ end
+ end
+
+ local function pointer_left(type, id, dev, x, y, up, cnt)
+ release_pointer(id)
+ end
+
+ local function pointer_aborted(type, id, dev, x, y, up, cnt)
+ release_pointer(id)
+ end
+
+ local function forget_pointers()
+ for id, pointer in pairs(pointers) do
+ release_pointer(id)
+ end
+ pointers = {}
+ end
+
+ function install_slider_callbacks(view)
+ view:set_pointer_updated_callback(pointer_updated)
+ view:set_pointer_left_callback(pointer_left)
+ view:set_pointer_aborted_callback(pointer_aborted)
+ view:set_forget_pointers_callback(forget_pointers)
+ end
+ -----------------------------------------------------------------------
+ -- Slider and knob library ends.
+ -----------------------------------------------------------------------
+ ]]></script>
+</mamelayout>