X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooTrackTitle.java;h=c2f1c0fa20097364e509b16493e548ec7916f250;hp=1d9171a84c2083909c24f8acd66ddc5e7e9ec63f;hb=c3a31c2aa833e2197f0929655c69a2090e8bbecc;hpb=f7c0dc0b216c60d93f722b040878a51399679fc2 diff --git a/MooTrackTitle.java b/MooTrackTitle.java index 1d9171a..c2f1c0f 100644 --- a/MooTrackTitle.java +++ b/MooTrackTitle.java @@ -4,7 +4,7 @@ import java.awt.event.*; import javax.sound.midi.*; /** - * The title bar for each track with track name, channel, instrument etc. + * The title bar for each track with track name, channelBox, instrument etc. * * @author Andersson, Andreen, Lanneskog, Pehrson * @version 1 @@ -12,86 +12,129 @@ import javax.sound.midi.*; public class MooTrackTitle extends JPanel { + private Track track; + private MetaMessage trackNameMessage; + private ShortMessage programChangeMessage; + private JTextField title; private MooInstrumentList instruments; - private JComboBox channel; + private JComboBox channelBox; private JCheckBox mute; private JCheckBox solo; - private Track track; + + private String trackName = ""; + private int channel = 0; + /** * Creates the title bar. + * @param aTrack the track that this tracktitle is operating on. */ public MooTrackTitle (Track aTrack) { + setDoubleBuffered(true); track = aTrack; + + // Finds track name, program change and channel. + MidiMessage msg; + int status; + for (int i = 0; i < track.size(); i++) { + msg = track.get(i).getMessage(); + status = msg.getStatus(); + if (status == MetaMessage.META) { + if (((MetaMessage)msg).getType() == 3) { + trackNameMessage = (MetaMessage)msg; + trackName = new String(trackNameMessage.getData()); + } + } else if (status >= 192 && status <= 207) { + programChangeMessage = (ShortMessage)msg; + channel = status - 192; + } + } + + // Creates and places components. setLayout(new GridLayout(4,1)); setBorder(BorderFactory.createLineBorder(Color.black)); setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70)); - title = new JTextField(); // JTextField(String text, int columns) + title = new JTextField(trackName); title.setFont(Moosique.getGUI().FONT); title.addFocusListener(new TitleFocusListener()); add(title); + int type; + if (channel == 9) type = MooInstrumentList.DRUMS; + else type = MooInstrumentList.INSTRUMENTS; + instruments = new MooInstrumentList(channel, type); + // instruments = new MooInstrumentList(channel, type, programChangeMessage); + add(instruments); - JPanel checkboxes = new JPanel(); - checkboxes.setLayout(new GridLayout(1,3)); - - channel = new JComboBox(); - channel.setFont(Moosique.getGUI().FONT); + channelBox = new JComboBox(); + channelBox.setFont(Moosique.getGUI().FONT); for (int i = 1; i <= 16; i++) - channel.addItem(new Integer(i)); - - for (int j = 0; j < track.size(); j++) { - MidiEvent me = track.get(j); - if (me instanceof MooNote){ - MooNote mn = (MooNote)me; - channel.setSelectedIndex(mn.getChannel()); - break; - } - } + channelBox.addItem(new Integer(i)); - instruments = new MooInstrumentList(channel.getSelectedIndex()); + channelBox.setSelectedIndex(channel); - channel.addActionListener(new ActionListener(){ + channelBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ - int chan = channel.getSelectedIndex(); + int chan = channelBox.getSelectedIndex(); MidiEvent me; MooNote mn; - instruments.setChannel(channel.getSelectedIndex()); + instruments.setChannel(channelBox.getSelectedIndex()); for (int j = 0; j < track.size(); j++) { me = track.get(j); if (me instanceof MooNote){ mn = (MooNote)me; mn.setChannel(chan); } - } - }}); + }}}); + add(channelBox); - + JPanel checkboxes = new JPanel(); + checkboxes.setLayout(new GridLayout(1,3)); mute = new JCheckBox("Mute"); + mute.setSelected(Moosique.getChannel(channel).getMute()); mute.setFont(Moosique.getGUI().FONT); mute.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ - //setMute - solo.setSelected(false); + boolean selected = mute.isSelected(); + if (selected){ + solo.setSelected(false); + Moosique.getChannel(channel).setSolo(false); + } + Moosique.getChannel(channel).setMute(selected); + }}); checkboxes.add(mute); solo = new JCheckBox("Solo"); + solo.setSelected(Moosique.getChannel(channel).getSolo()); solo.setFont(Moosique.getGUI().FONT); solo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ //setSolo - mute.setSelected(false); + boolean selected = solo.isSelected(); + if (selected){ + mute.setSelected(false); + Moosique.getChannel(channel).setMute(false); + } + Moosique.getChannel(channel).setSolo(selected); }}); checkboxes.add(solo); - - add(instruments); - add(channel); add(checkboxes); } + + /** + * Returns the channel of the track that the view is visualising. + * @return the chanel of the visualised track + */ + public int getChannel() { + return channel; + } + /** + * Checks if the focus is lost. + */ class TitleFocusListener extends FocusAdapter { public void focusLost(FocusEvent e) { // Update the MidiEvent containing the title of this track