X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooInstrumentList.java;h=91f8eea239733139899db97a5401ed8b585f978b;hp=8f1afcb4728b25a92ec6103a41eb84405c0999d4;hb=HEAD;hpb=ae45edfc5dff1e0a098df4afe747a2dec6c90362 diff --git a/MooInstrumentList.java b/MooInstrumentList.java index 8f1afcb..91f8eea 100644 --- a/MooInstrumentList.java +++ b/MooInstrumentList.java @@ -6,32 +6,53 @@ import java.awt.event.*; /** * A Combo Box where the instrument of the currently active channel can be selected. * - * @author Einar Pehrson + * @author Einar Pehrson, Michael Andreen */ public class MooInstrumentList extends JComboBox implements ActionListener { - protected int channel; - - public MooInstrumentList(int instrument) { - super(instruments); - setSelectedIndex(instrument); - setFont(new Font("Helvetica", Font.PLAIN, 10)); + 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(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; - setSelectedIndex(Moosique.getChannel(chan).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", @@ -160,5 +181,11 @@ public class MooInstrumentList extends JComboBox implements ActionListener { " 125 Helicopter", " 126 Applause", " 127 Gunshot" - }; + }, new String[128]}; + + static { + for (int i = 0; i < 128; i++) { + instruments[1][i] = " Program Change " + i; + } + } }