]> ruin.nu Git - moosique.git/blob - MooTrackTitle.java
inte helt klar
[moosique.git] / MooTrackTitle.java
1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 import javax.sound.midi.*;
5
6 /**
7  * The title bar for each track with track name, channelBox, instrument etc.
8  * 
9  * @author  Andersson, Andreen, Lanneskog, Pehrson
10  * @version 1
11  */
12  
13 public class MooTrackTitle extends JPanel {
14
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;
24         private Track track;
25         private int trackNum;
26
27         /** 
28          * Creates the title bar.
29          */
30         public MooTrackTitle (Track aTrack, int aTrackNum) {
31                 setDoubleBuffered(true);
32                 track = aTrack;
33                 this.trackNum = aTrackNum;
34
35                 // Finds track name, program change and channel.
36                 MidiMessage msg;
37                 int status;
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());
45                                 }
46                         } else if (status >= 192 && status <= 207) {
47                                 programChangeMessage = (ShortMessage)msg;
48                                 channel = status - 192;
49                         }
50                 }
51
52                 // Creates and places components.
53                 setLayout(new GridLayout(4,1));
54                 setBorder(BorderFactory.createLineBorder(Color.black));
55
56                 setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70));
57                 title = new JTextField(trackName);
58                 title.setFont(Moosique.getGUI().FONT);
59                 title.addFocusListener(new TitleFocusListener());
60                 add(title);
61
62                 instruments = new MooInstrumentList(channel);
63                 // instruments = new MooInstrumentList(channel, programChangeMessage);
64                 add(instruments);
65
66                 channelBox = new JComboBox();
67                 channelBox.setFont(Moosique.getGUI().FONT);
68                 for (int i = 1; i <= 16; i++)
69                         channelBox.addItem(new Integer(i));
70
71                 channelBox.setSelectedIndex(channel);
72
73                 channelBox.addActionListener(new ActionListener(){
74                                 public void actionPerformed(ActionEvent e){
75                                         int chan = channelBox.getSelectedIndex();
76                                         MidiEvent me;
77                                         MooNote mn;
78                                         instruments.setChannel(channelBox.getSelectedIndex());
79                                         for (int j = 0; j < track.size(); j++) {
80                                                 me = track.get(j);
81                                             if (me instanceof MooNote){
82                                                         mn = (MooNote)me;
83                                                         mn.setChannel(chan);
84                                                 }
85                                 }}});
86                 add(channelBox);
87
88                 JPanel checkboxes = new JPanel();
89                 checkboxes.setLayout(new GridLayout(1,3));
90
91                 mute = new JCheckBox("Mute");
92                 mute.setSelected(Moosique.getSequencer().getTrackMute(trackNum));
93                 mute.setFont(Moosique.getGUI().FONT);
94                 mute.addActionListener(new ActionListener(){
95                                 public void actionPerformed(ActionEvent event){
96                                         boolean selected = mute.isSelected();
97                                         if (selected){
98                                                 solo.setSelected(false);
99                                                 Moosique.getSequencer().setTrackSolo(trackNum, false);
100                                         }
101                                         Moosique.getSequencer().setTrackMute(trackNum, selected);
102
103                                 }});
104                 checkboxes.add(mute);
105
106                 solo = new JCheckBox("Solo");
107                 solo.setSelected(Moosique.getSequencer().getTrackSolo(trackNum));
108                 solo.setFont(Moosique.getGUI().FONT);
109                 solo.addActionListener(new ActionListener(){
110                                 public void actionPerformed(ActionEvent event){
111                                         //setSolo
112                                         boolean selected = solo.isSelected();
113                                         if (selected){
114                                                 mute.setSelected(false);
115                                                 Moosique.getSequencer().setTrackMute(trackNum, false);
116                                         }
117                                         Moosique.getSequencer().setTrackSolo(trackNum, selected);
118                                 }});
119                 checkboxes.add(solo);
120                 add(checkboxes);
121         }
122
123         class TitleFocusListener extends FocusAdapter {
124                 public void focusLost(FocusEvent e) {
125                         // Update the MidiEvent containing the title of this track
126                 }
127         }
128 }