private Track track;
private MetaMessage trackNameMessage;
private ShortMessage programChangeMessage;
+ private MooTrackView mtv;
private JTextField title;
private MooInstrumentList instruments;
private int channel = 0;
/**
- * Creates the title bar.
+ * Creates the title bar for an empty track, and therefore an initial channel is required.
* @param aTrack the track that this tracktitle is operating on.
+ * @param chan the initial channel
+ */
+ public MooTrackTitle (Track aTrack, int chan) {
+ this(aTrack);
+ channel = chan;
+ }
+
+ /**
+ * Creates the title bar.
+ * @param aTrack the track that this track title is operating on.
*/
public MooTrackTitle (Track aTrack) {
setDoubleBuffered(true);
trackNameMessage = (MetaMessage)msg;
trackName = new String(trackNameMessage.getData());
}
- } else if (status >= 192 && status <= 207) {
+ } else if (status >= 192 && status < 208) {
programChangeMessage = (ShortMessage)msg;
- channel = status - 192;
+ channel = programChangeMessage.getChannel();
}
}
// Creates and places components.
setLayout(new GridLayout(4,1));
setBorder(BorderFactory.createLineBorder(Color.black));
+ TitleListener tl = new TitleListener();
setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70));
title = new JTextField(trackName);
int type;
if (channel == 9) type = MooInstrumentList.DRUMS;
else type = MooInstrumentList.INSTRUMENTS;
- instruments = new MooInstrumentList(channel, type);
- // instruments = new MooInstrumentList(channel, type, programChangeMessage);
+ instruments = new MooInstrumentList(channel, type, programChangeMessage);
add(instruments);
channelBox = new JComboBox();
channelBox.setSelectedIndex(channel);
- channelBox.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- channel = channelBox.getSelectedIndex();
- MidiEvent me;
- MooNote mn;
- instruments.setChannel(channel);
- for (int j = 0; j < track.size(); j++) {
- me = track.get(j);
- if (me instanceof MooNote){
- mn = (MooNote)me;
- mn.setChannel(channel);
- }
- }}});
+ channelBox.addActionListener(tl);
add(channelBox);
JPanel checkboxes = new JPanel();
mute.setSelected(false);
Moosique.setTrackMute(track, false);
mute.setFont(Moosique.getGUI().FONT);
- mute.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event){
- boolean selected = mute.isSelected();
- if (selected){
- solo.setSelected(false);
- Moosique.setTrackSolo(track, false);
- }
- Moosique.setTrackMute(track, selected);
-
- }});
+ mute.addActionListener(tl);
checkboxes.add(mute);
solo = new JCheckBox("Solo");
solo.setSelected(false);
Moosique.setTrackSolo(track, false);
solo.setFont(Moosique.getGUI().FONT);
- solo.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent event){
- //setSolo
- boolean selected = solo.isSelected();
- if (selected){
- mute.setSelected(false);
- Moosique.setTrackMute(track, false);
- }
- Moosique.setTrackSolo(track, selected);
- }});
+ solo.addActionListener(tl);
checkboxes.add(solo);
+
add(checkboxes);
}
return channel;
}
+ /**
+ * Sets the track view this title should update after recording.
+ * @param the track view
+ */
+ public void setTrackView(MooTrackView tv) {
+ mtv = tv;
+ }
+
/**
- * Checks if the focus is lost.
+ * When the title field loses focus, updates the corresponding MidiEvent.
*/
class TitleFocusListener extends FocusAdapter {
public void focusLost(FocusEvent e) {
- // Update the MidiEvent containing the title of this track
+ try {
+ trackNameMessage.setMessage(3, title.getText().getBytes(), title.getText().length());
+ } catch (InvalidMidiDataException ex) {}
+ }
+ }
+
+ /**
+ * Takes the appropriate action when a user selects an item on the popup menu.
+ */
+ class TitleListener implements ActionListener {
+ public void actionPerformed(ActionEvent e) {
+ Object source = e.getSource();
+ if (source == channelBox) {
+ channel = channelBox.getSelectedIndex();
+ MidiEvent me;
+ MooNote mn;
+ instruments.setChannel(channel);
+ // Prompt the user before rechannelling???
+ for (int j = 0; j < track.size(); j++) {
+ me = track.get(j);
+ if (me instanceof MooNote){
+ mn = (MooNote)me;
+ mn.setChannel(channel);
+ }
+ }
+ } else if (source == solo) {
+ boolean selected = mute.isSelected();
+ if (selected){
+ solo.setSelected(false);
+ Moosique.setTrackSolo(track, false);
+ }
+ Moosique.setTrackMute(track, selected);
+ } else if (source == mute) {
+ boolean selected = solo.isSelected();
+ if (selected){
+ mute.setSelected(false);
+ Moosique.setTrackMute(track, false);
+ }
+ Moosique.setTrackSolo(track, selected);
+ }
}
}
}