package com.frinika.midi; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiUnavailableException; import javax.sound.midi.Receiver; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import com.frinika.project.MidiDeviceDescriptor; import com.frinika.project.ProjectContainer; import com.frinika.sequencer.gui.ListProvider; import com.frinika.sequencer.gui.PopupClient; import com.frinika.sequencer.gui.PopupSelectorButton; import com.frinika.sequencer.gui.pianoroll.VirtualPianoVert; import com.frinika.sequencer.model.MidiLane; public class DrumMapperGUI extends JPanel { DrumMapper dm; ProjectContainer proj; VirtualPianoVert inPiano; VirtualPianoVert outPiano; VirtualPianoVert.Config configIn=null; VirtualPianoVert.Config configOut=null; JButton setMap; MidiLane lane; DrumMapperGUI(final DrumMapper dm,ProjectContainer proj,MidiLane lane) { this.dm=dm; this.lane=lane; this.proj=proj; setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); gc.gridx=0; gc.gridy=0; gc.anchor=GridBagConstraints.WEST; // add(createDeviceSelector(),gc); try { configIn = new VirtualPianoVert.Config(40,8,dm.getReceiver(),lane); } catch (MidiUnavailableException e) { // TODO Auto-generated catch block e.printStackTrace(); } inPiano=new VirtualPianoVert(configIn); try { MidiDevice dev=dm.getDefaultMidiDevice(); Receiver recv=null; if (dev != null ) recv= dev.getReceiver(); configOut = new VirtualPianoVert.Config(50,8,recv,lane); } catch (MidiUnavailableException e) { // TODO Auto-generated catch block e.printStackTrace(); } outPiano=new VirtualPianoVert(configOut); setMap = new JButton(" -- assign key --> "); setMap.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { int in=inPiano.getLastKeytPress(); int out=outPiano.getLastKeytPress(); dm.setMapping(in,out); repaint(); } }); // gc.gridy++; gc.fill=GridBagConstraints.BOTH; add(setMap,gc); JPanel pianoPanel=new DrumMapperPanel(inPiano,outPiano,dm); gc.gridy++; JScrollPane scroll=new JScrollPane(pianoPanel); gc.fill=GridBagConstraints.BOTH; gc.weighty=1; gc.weightx=1; add(scroll,gc); } void init() { MidiDevice dev=dm.getDefaultMidiDevice(); Receiver recv=null; if (dev != null ) try { recv= dev.getReceiver(); } catch (MidiUnavailableException e) { // TODO Auto-generated catch block e.printStackTrace(); } configOut.setReceiver(recv); } PopupSelectorButton createDeviceSelector() { MidiDevice midiDev = dm.getDefaultMidiDevice(); // Device selector // ------------------------------------------------------------------------------------ ListProvider resource = new ListProvider() { public Object[] getList() { return proj.getMidiDeviceDescriptors().toArray();// midiResource.getMidiOutList(); } }; PopupClient client = new PopupClient() { public void fireSelected(PopupSelectorButton but, Object o, int cnt) { dm.setDefaultMidiDevice( ((MidiDeviceDescriptor) o).getMidiDevice()); // if (o != midiDev) init(); } }; String name; if (midiDev != null) name = midiDev.toString(); else name = "null"; return new PopupSelectorButton(resource, client, name); } }