]> ruin.nu Git - moosique.git/blob - MooTrackTitle.java
stuff
[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 programChange = 0, 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 and program change
36                 MidiMessage msg;
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());
43                                 }
44                         } else if (msg.getStatus() == 192) {
45                                 programChangeMessage = (ShortMessage)msg;
46                                 programChange = programChangeMessage.getData1();
47                         }
48                 }
49
50                 MidiEvent event;
51                 for (int i = 0; i < track.size(); i++) {
52                         event = track.get(i);
53                         if (event instanceof MooNote) channel = ((MooNote)event).getChannel();
54                 }
55                 
56                 // Creates and places components.
57                 setLayout(new GridLayout(4,1));
58                 setBorder(BorderFactory.createLineBorder(Color.black));
59
60                 setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70));
61                 title = new JTextField(trackName); // JTextField(String text, int columns) 
62                 title.setFont(Moosique.getGUI().FONT);
63                 title.addFocusListener(new TitleFocusListener());
64                 add(title);
65
66                 instruments = new MooInstrumentList(programChange);
67                 add(instruments);
68
69                 JPanel checkboxes = new JPanel();
70                 checkboxes.setLayout(new GridLayout(1,3));
71
72                 channelBox = new JComboBox();
73                 channelBox.setFont(Moosique.getGUI().FONT);
74                 for (int i = 1; i <= 16; i++)
75                         channelBox.addItem(new Integer(i));
76
77                 for (int j = 0; j < track.size(); j++) {
78                         MidiEvent me = track.get(j);
79                 if (me instanceof MooNote){
80                                 MooNote mn = (MooNote)me;
81                                 channelBox.setSelectedIndex(mn.getChannel());
82                                 break;
83                         }
84         }
85
86                 instruments = new MooInstrumentList(channelBox.getSelectedIndex());
87
88                 channelBox.addActionListener(new ActionListener(){
89                                 public void actionPerformed(ActionEvent e){
90                                         int chan = channelBox.getSelectedIndex();
91                                         MidiEvent me;
92                                         MooNote mn;
93                                         instruments.setChannel(channelBox.getSelectedIndex());
94                                         for (int j = 0; j < track.size(); j++) {
95                                                 me = track.get(j);
96                                             if (me instanceof MooNote){
97                                                         mn = (MooNote)me;
98                                                         mn.setChannel(chan);
99                                                 }
100                                 }}});
101                 channelBox.setSelectedIndex(channel);
102                 add(channelBox);
103
104                 mute = new JCheckBox("Mute");
105                 mute.setSelected(Moosique.getSequencer().getTrackMute(trackNum));
106                 mute.setFont(Moosique.getGUI().FONT);
107                 mute.addActionListener(new ActionListener(){
108                                 public void actionPerformed(ActionEvent event){
109                                         boolean selected = mute.isSelected();
110                                         if (selected){
111                                                 solo.setSelected(false);
112                                                 Moosique.getSequencer().setTrackSolo(trackNum, false);
113                                         }
114                                         Moosique.getSequencer().setTrackMute(trackNum, selected);
115
116                                 }});
117                 checkboxes.add(mute);
118
119                 solo = new JCheckBox("Solo");
120                 solo.setSelected(Moosique.getSequencer().getTrackSolo(trackNum));
121                 solo.setFont(Moosique.getGUI().FONT);
122                 solo.addActionListener(new ActionListener(){
123                                 public void actionPerformed(ActionEvent event){
124                                         //setSolo
125                                         boolean selected = solo.isSelected();
126                                         if (selected){
127                                                 mute.setSelected(false);
128                                                 Moosique.getSequencer().setTrackMute(trackNum, false);
129                                         }
130                                         Moosique.getSequencer().setTrackSolo(trackNum, selected);
131                                 }});
132                 checkboxes.add(solo);
133                 add(checkboxes);
134         }
135
136         class TitleFocusListener extends FocusAdapter {
137                 public void focusLost(FocusEvent e) {
138                         // Update the MidiEvent containing the title of this track
139                 }
140         }
141 }