oFreqPane.add(new CheckBoxWidget("Portamento", p, new YamahaFS1RPerformanceDriver.BitModel(p, 0x24, aPart, 1, 0), new YamahaFS1RPerformanceDriver.BitSender(p, 0x24, aPart))); oFreqPane.add(new ComboBoxWidget("Porta mode", p, new YamahaFS1RPerformanceDriver.BitModel(p, 0x24, aPart, 2, 1), new YamahaFS1RPerformanceDriver.BitSender(p, 0x24, aPart), new String[] {"Fingered", "Fulltime"})); oFreqPane.add(new KnobWidget("Porta time", p, 0, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x25, aPart), new YamahaFS1RPerformanceDriver.Sender(0x25, aPart))); oFreqPane.add(new SpinnerWidget("Pitch Bend low", p, 0x10, 0x58, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x27, aPart), new YamahaFS1RPerformanceDriver.Sender(0x27, aPart))); oFreqPane.add(new SpinnerWidget("Pitch Bend high", p, 0x10, 0x58, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x26, aPart), new YamahaFS1RPerformanceDriver.Sender(0x26, aPart)));
oFreqPane.add(new CheckBoxWidget("Portamento", p, new YamahaFS1RPerformanceDriver.BitModel((Patch)p, 0x24, aPart, 1, 0), new YamahaFS1RPerformanceDriver.BitSender((Patch)p, 0x24, aPart))); oFreqPane.add(new ComboBoxWidget("Porta mode", p, new YamahaFS1RPerformanceDriver.BitModel((Patch)p, 0x24, aPart, 2, 1), new YamahaFS1RPerformanceDriver.BitSender((Patch)p, 0x24, aPart), new String[] {"Fingered", "Fulltime"})); oFreqPane.add(new KnobWidget("Porta time", p, 0, 127, 0, new YamahaFS1RPerformanceDriver.Model((Patch)p, 0x25, aPart), new YamahaFS1RPerformanceDriver.Sender(0x25, aPart))); oFreqPane.add(new SpinnerWidget("Pitch Bend low", p, 0x10, 0x58, -64, new YamahaFS1RPerformanceDriver.Model((Patch)p, 0x27, aPart), new YamahaFS1RPerformanceDriver.Sender(0x27, aPart))); oFreqPane.add(new SpinnerWidget("Pitch Bend high", p, 0x10, 0x58, -64, new YamahaFS1RPerformanceDriver.Model((Patch)p, 0x26, aPart), new YamahaFS1RPerformanceDriver.Sender(0x26, aPart)));
		PartDetailsWindow(Patch aPatch, int aPart) {			//super("FS1R Part "+aPart+" details",true,true,true,true);			p = aPatch;			//setSize(600, 400);			//Box oPanel = Box.createVerticalBox();			setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));			JPanel oPanel = this;			JPanel oPartPane = new JPanel(new FlowLayout(FlowLayout.LEFT));			oPartPane.add(new ComboBoxWidget("", p, new YamahaFS1RPerformanceDriver.Model(p, 0x05, aPart), new YamahaFS1RPerformanceDriver.Sender(0x05, aPart), new String[] {"Mono", "Poly"}));			oPartPane.add(new ComboBoxWidget("Priority", p, new YamahaFS1RPerformanceDriver.Model(p, 0x06, aPart), new YamahaFS1RPerformanceDriver.Sender(0x06, aPart), new String[] {"Last", "Top", "Bottom", "First"}));			oPartPane.add(new SpinnerWidget("Note res", p, 0, 32, 0, new YamahaFS1RPerformanceDriver.Model(p, 0, aPart), new YamahaFS1RPerformanceDriver.Sender(0, aPart)));			oPartPane.add(new ComboBoxWidget("Note limit low", p, new YamahaFS1RPerformanceDriver.Model(p, 0x0F, aPart), new YamahaFS1RPerformanceDriver.Sender(0x0F, aPart), mNotes));			oPartPane.add(new ComboBoxWidget("Note limit high", p, new YamahaFS1RPerformanceDriver.Model(p, 0x10, aPart), new YamahaFS1RPerformanceDriver.Sender(0x10, aPart), mNotes));			oPanel.add(oPartPane);			JPanel oEffectsPane = new JPanel(new FlowLayout(FlowLayout.LEFT));			oEffectsPane.add(new KnobWidget("Pan scaling", p, 0, 100, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x28, aPart), new YamahaFS1RPerformanceDriver.Sender(0x28, aPart)));			oEffectsPane.add(new KnobWidget("Pan LFO depth", p, 0, 99, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x29, aPart), new YamahaFS1RPerformanceDriver.Sender(0x29, aPart)));			oEffectsPane.add(new KnobWidget("Formant", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x1D, aPart), new YamahaFS1RPerformanceDriver.Sender(0x1D, aPart)));			oEffectsPane.add(new KnobWidget("FM", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x1E, aPart), new YamahaFS1RPerformanceDriver.Sender(0x1E, aPart)));			oEffectsPane.add(new KnobWidget("V/N balance", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x0A, aPart), new YamahaFS1RPerformanceDriver.Sender(0x0A, aPart)));			oPanel.add(oEffectsPane);			JPanel oFreqPane = new JPanel(new FlowLayout(FlowLayout.LEFT));			oFreqPane.add(new CheckBoxWidget("Portamento", p, new YamahaFS1RPerformanceDriver.BitModel(p, 0x24, aPart, 1, 0), new YamahaFS1RPerformanceDriver.BitSender(p, 0x24, aPart)));			oFreqPane.add(new ComboBoxWidget("Porta mode", p, new YamahaFS1RPerformanceDriver.BitModel(p, 0x24, aPart, 2, 1), new YamahaFS1RPerformanceDriver.BitSender(p, 0x24, aPart), new String[] {"Fingered", "Fulltime"}));			oFreqPane.add(new KnobWidget("Porta time", p, 0, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x25, aPart), new YamahaFS1RPerformanceDriver.Sender(0x25, aPart)));			oFreqPane.add(new SpinnerWidget("Pitch Bend low", p, 0x10, 0x58, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x27, aPart), new YamahaFS1RPerformanceDriver.Sender(0x27, aPart)));			oFreqPane.add(new SpinnerWidget("Pitch Bend high", p, 0x10, 0x58, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x26, aPart), new YamahaFS1RPerformanceDriver.Sender(0x26, aPart)));			oPanel.add(oFreqPane);			JPanel oTonePane = new JPanel(new FlowLayout(FlowLayout.LEFT));			oTonePane.add(new KnobWidget("LFO1 speed", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x15, aPart), new YamahaFS1RPerformanceDriver.Sender(0x15, aPart)));			oTonePane.add(new KnobWidget("LFO1 pitch mod", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x16, aPart), new YamahaFS1RPerformanceDriver.Sender(0x16, aPart)));			oTonePane.add(new KnobWidget("LFO1 delay", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x17, aPart), new YamahaFS1RPerformanceDriver.Sender(0x17, aPart)));			oTonePane.add(new KnobWidget("LFO2 speed", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x2E, aPart), new YamahaFS1RPerformanceDriver.Sender(0x2E, aPart)));			oTonePane.add(new KnobWidget("LFO2 Filter mod", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x2F, aPart), new YamahaFS1RPerformanceDriver.Sender(0x2F, aPart)));			oPanel.add(oTonePane);			JPanel oEGPane = new JPanel(new FlowLayout(FlowLayout.LEFT));			oEGPane.add(new KnobWidget("Attack time", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x1A, aPart), new YamahaFS1RPerformanceDriver.Sender(0x1A, aPart)));			oEGPane.add(new KnobWidget("Decay time", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x1B, aPart), new YamahaFS1RPerformanceDriver.Sender(0x1B, aPart)));			oEGPane.add(new KnobWidget("Release time", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x1C, aPart), new YamahaFS1RPerformanceDriver.Sender(0x1C, aPart)));			oEGPane.add(new KnobWidget("PEG init level", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x20, aPart), new YamahaFS1RPerformanceDriver.Sender(0x20, aPart)));			oEGPane.add(new KnobWidget("PEG attack time", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x21, aPart), new YamahaFS1RPerformanceDriver.Sender(0x21, aPart)));			oEGPane.add(new KnobWidget("PEG rel level", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x22, aPart), new YamahaFS1RPerformanceDriver.Sender(0x22, aPart)));			oEGPane.add(new KnobWidget("PEG rel time", p, 0, 127, -64, new YamahaFS1RPerformanceDriver.Model(p, 0x23, aPart), new YamahaFS1RPerformanceDriver.Sender(0x23, aPart)));			oPanel.add(oEGPane);			JPanel oOthersPane = new JPanel(new FlowLayout(FlowLayout.LEFT));			oOthersPane.add(new KnobWidget("Vel Sens depth", p, 0, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x0C, aPart), new YamahaFS1RPerformanceDriver.Sender(0x0C, aPart)));			oOthersPane.add(new KnobWidget("Vel Sens offset", p, 0, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x0D, aPart), new YamahaFS1RPerformanceDriver.Sender(0x0D, aPart)));			oOthersPane.add(new KnobWidget("Vel limit low", p, 1, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x2A, aPart), new YamahaFS1RPerformanceDriver.Sender(0x2A, aPart)));			oOthersPane.add(new KnobWidget("Vel limit high", p, 1, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x2B, aPart), new YamahaFS1RPerformanceDriver.Sender(0x2B, aPart)));			oOthersPane.add(new KnobWidget("Expr low limit", p, 0, 127, 0, new YamahaFS1RPerformanceDriver.Model(p, 0x2C, aPart), new YamahaFS1RPerformanceDriver.Sender(0x2C, aPart)));			oOthersPane.add(new CheckBoxWidget("Sustain", p, new YamahaFS1RPerformanceDriver.Model(p, 0x2D, aPart), new YamahaFS1RPerformanceDriver.Sender(0x2D, aPart)));			oPanel.add(oOthersPane);			//getContentPane().add(oPanel);			//pack();		}