public class MooInstrumentList extends JComboBox implements ActionListener {
- protected int channel;
- public MooInstrumentList(int chan) {
- super(instruments);
+ private int channel;
+ private ShortMessage programChangeMessage;
+ public static final int INSTRUMENTS = 0, DRUMS = 1;
+
+ /**
+ * Creates the instrument list.
+ * @param chan the channel it will operate on.
+ * @param type one of the constants: INSTRUMENTS and DRUMS
+ * @param chan the MIDI message assigning the initial program change
+ */
+ public MooInstrumentList(int chan, int listType, ShortMessage programMsg) {
+ super(instruments[listType]);
+ programChangeMessage = programMsg;
+ if (programChangeMessage != null) setSelectedIndex(programChangeMessage.getData1());
setChannel(chan);
- setFont(new Font("Helvetica", Font.PLAIN, 10));
+ setFont(Moosique.getGUI().FONT);
addActionListener(this);
}
- public void setChannel(int chan){
+ /**
+ * Sets the channel that it will operate on.
+ */
+ public void setChannel(int chan) {
channel = chan;
- System.out.println(chan);
- setSelectedIndex(Moosique.getChannel(channel).getProgram());
- System.out.println(Moosique.getChannel(channel).getProgram());
+ try {programChangeMessage.setMessage(programChangeMessage.getCommand(), chan, programChangeMessage.getData1(), 0);}
+ catch (Exception e) {}
}
+ /**
+ * Sets the instrument on a channel when it's changed in the combobox.
+ */
public void actionPerformed(ActionEvent e) {
- JComboBox box = (JComboBox)e.getSource();
- int instrument = box.getSelectedIndex();
+ int instrument = ((JComboBox)e.getSource()).getSelectedIndex();
Moosique.getChannel(channel).programChange(instrument);
+ try {programChangeMessage.setMessage(programChangeMessage.getCommand(), programChangeMessage.getChannel(), instrument, 0);}
+ catch (InvalidMidiDataException ex) {}
}
- public static final String[] instruments = {
+ /**
+ * The list with standard MIDI instruments.
+ */
+ public static final String[][] instruments = {{
" 0 Acoustic Grand Piano",
" 1 Bright Acoustic Piano",
" 2 Electric Grand Piano",
" 125 Helicopter",
" 126 Applause",
" 127 Gunshot"
- };
+ }, new String[128]};
+
+ static {
+ for (int i = 0; i < 128; i++) {
+ instruments[1][i] = " Program Change " + i;
+ }
+ }
}