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 programChange = 0, 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 and program change
37 for (int i = 0; i < track.size(); i++) {
38 msg = track.get(i).getMessage();
39 if (msg.getStatus() == 255) {
40 if (((MetaMessage)msg).getType() == 3) {
41 trackNameMessage = (MetaMessage)msg;
42 trackName = new String(trackNameMessage.getData());
44 } else if (msg.getStatus() == 192) {
45 programChangeMessage = (ShortMessage)msg;
46 programChange = programChangeMessage.getData1();
51 for (int i = 0; i < track.size(); i++) {
53 if (event instanceof MooNote) {
54 channel = ((MooNote)event).getChannel();
59 // Creates and places components.
60 setLayout(new GridLayout(4,1));
61 setBorder(BorderFactory.createLineBorder(Color.black));
63 setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70));
64 title = new JTextField(trackName); // JTextField(String text, int columns)
65 title.setFont(Moosique.getGUI().FONT);
66 title.addFocusListener(new TitleFocusListener());
70 JPanel checkboxes = new JPanel();
71 checkboxes.setLayout(new GridLayout(1,3));
73 channelBox = new JComboBox();
74 channelBox.setFont(Moosique.getGUI().FONT);
75 for (int i = 1; i <= 16; i++)
76 channelBox.addItem(new Integer(i));
78 channelBox.setSelectedIndex(channel);
80 instruments = new MooInstrumentList(channelBox.getSelectedIndex());
82 instruments = new MooInstrumentList(channelBox.getSelectedIndex());
84 channelBox.addActionListener(new ActionListener(){
85 public void actionPerformed(ActionEvent e){
86 int chan = channelBox.getSelectedIndex();
89 instruments.setChannel(channelBox.getSelectedIndex());
90 for (int j = 0; j < track.size(); j++) {
92 if (me instanceof MooNote){
97 channelBox.setSelectedIndex(channel);
102 mute = new JCheckBox("Mute");
103 mute.setSelected(Moosique.getSequencer().getTrackMute(trackNum));
104 mute.setFont(Moosique.getGUI().FONT);
105 mute.addActionListener(new ActionListener(){
106 public void actionPerformed(ActionEvent event){
107 boolean selected = mute.isSelected();
109 solo.setSelected(false);
110 Moosique.getSequencer().setTrackSolo(trackNum, false);
112 Moosique.getSequencer().setTrackMute(trackNum, selected);
115 checkboxes.add(mute);
117 solo = new JCheckBox("Solo");
118 solo.setSelected(Moosique.getSequencer().getTrackSolo(trackNum));
119 solo.setFont(Moosique.getGUI().FONT);
120 solo.addActionListener(new ActionListener(){
121 public void actionPerformed(ActionEvent event){
123 boolean selected = solo.isSelected();
125 mute.setSelected(false);
126 Moosique.getSequencer().setTrackMute(trackNum, false);
128 Moosique.getSequencer().setTrackSolo(trackNum, selected);
130 checkboxes.add(solo);
134 class TitleFocusListener extends FocusAdapter {
135 public void focusLost(FocusEvent e) {
136 // Update the MidiEvent containing the title of this track