3 import java.awt.event.*;
4 import javax.sound.midi.*;
7 * The title bar for each track with track name, channelBox, instrument etc.
9 * @author Andersson, Andreen, Lanneskog, Pehrson
13 public class MooTrackTitle extends JPanel {
15 private MetaMessage trackNameMessage;
16 private String trackName = "";
17 private ShortMessage programChangeMessage;
18 private int channel = 0;
19 private JTextField title;
20 private MooInstrumentList instruments;
21 private JComboBox channelBox;
22 private JCheckBox mute;
23 private JCheckBox solo;
28 * Creates the title bar.
30 public MooTrackTitle (Track aTrack, int aTrackNum) {
31 setDoubleBuffered(true);
33 this.trackNum = aTrackNum;
35 // Finds track name, program change and channel.
38 for (int i = 0; i < track.size(); i++) {
39 msg = track.get(i).getMessage();
40 status = msg.getStatus();
41 if (status == MetaMessage.META) {
42 if (((MetaMessage)msg).getType() == 3) {
43 trackNameMessage = (MetaMessage)msg;
44 trackName = new String(trackNameMessage.getData());
46 } else if (status >= 192 && status <= 207) {
47 programChangeMessage = (ShortMessage)msg;
48 channel = status - 192;
52 /* // Finds channel number.
54 for (int i = 0; i < track.size(); i++) {
56 if (event instanceof MooNote) {
57 channel = ((MooNote)event).getChannel();
62 // Creates and places components.
63 setLayout(new GridLayout(4,1));
64 setBorder(BorderFactory.createLineBorder(Color.black));
66 setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70));
67 title = new JTextField(trackName);
68 title.setFont(Moosique.getGUI().FONT);
69 title.addFocusListener(new TitleFocusListener());
72 instruments = new MooInstrumentList(channel);
73 // instruments = new MooInstrumentList(channel, programChangeMessage);
76 channelBox = new JComboBox();
77 channelBox.setFont(Moosique.getGUI().FONT);
78 for (int i = 1; i <= 16; i++)
79 channelBox.addItem(new Integer(i));
81 channelBox.setSelectedIndex(channel);
83 channelBox.addActionListener(new ActionListener(){
84 public void actionPerformed(ActionEvent e){
85 int chan = channelBox.getSelectedIndex();
88 instruments.setChannel(channelBox.getSelectedIndex());
89 for (int j = 0; j < track.size(); j++) {
91 if (me instanceof MooNote){
98 JPanel checkboxes = new JPanel();
99 checkboxes.setLayout(new GridLayout(1,3));
101 mute = new JCheckBox("Mute");
102 mute.setSelected(Moosique.getSequencer().getTrackMute(trackNum));
103 mute.setFont(Moosique.getGUI().FONT);
104 mute.addActionListener(new ActionListener(){
105 public void actionPerformed(ActionEvent event){
106 boolean selected = mute.isSelected();
108 solo.setSelected(false);
109 Moosique.getSequencer().setTrackSolo(trackNum, false);
111 Moosique.getSequencer().setTrackMute(trackNum, selected);
114 checkboxes.add(mute);
116 solo = new JCheckBox("Solo");
117 solo.setSelected(Moosique.getSequencer().getTrackSolo(trackNum));
118 solo.setFont(Moosique.getGUI().FONT);
119 solo.addActionListener(new ActionListener(){
120 public void actionPerformed(ActionEvent event){
122 boolean selected = solo.isSelected();
124 mute.setSelected(false);
125 Moosique.getSequencer().setTrackMute(trackNum, false);
127 Moosique.getSequencer().setTrackSolo(trackNum, selected);
129 checkboxes.add(solo);
133 class TitleFocusListener extends FocusAdapter {
134 public void focusLost(FocusEvent e) {
135 // Update the MidiEvent containing the title of this track