X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooTrackTitle.java;h=f2bed14e37b919130e2c6abda153bdc113aed64c;hp=412fb246f183a521d86246068ca5ec5eb99b8a3f;hb=fed0170e819d14b07d7081a0a314ebabac3b29fe;hpb=31f81450a303d52bf37ec8bcbb12e0f3b3b8b833 diff --git a/MooTrackTitle.java b/MooTrackTitle.java index 412fb24..f2bed14 100644 --- a/MooTrackTitle.java +++ b/MooTrackTitle.java @@ -12,50 +12,44 @@ import javax.sound.midi.*; public class MooTrackTitle extends JPanel { + private Track track; private MetaMessage trackNameMessage; - private String trackName = ""; private ShortMessage programChangeMessage; - private int programChange = 0, channel = 0; + private JTextField title; private MooInstrumentList instruments; private JComboBox channelBox; private JCheckBox mute; private JCheckBox solo; - private Track track; - private int trackNum; + + 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, int aTrackNum) { + public MooTrackTitle (Track aTrack) { setDoubleBuffered(true); track = aTrack; - this.trackNum = aTrackNum; - // Finds track name and program change + // Finds track name, program change and channel. MidiMessage msg; + int status; for (int i = 0; i < track.size(); i++) { msg = track.get(i).getMessage(); - if (msg.getStatus() == 255) { + status = msg.getStatus(); + if (status == MetaMessage.META) { if (((MetaMessage)msg).getType() == 3) { trackNameMessage = (MetaMessage)msg; trackName = new String(trackNameMessage.getData()); } - } else if (msg.getStatus() == 192) { + } else if (status >= 192 && status <= 207) { programChangeMessage = (ShortMessage)msg; - programChange = programChangeMessage.getData1(); + channel = status - 192; } } - MidiEvent event; - for (int i = 0; i < track.size(); i++) { - event = track.get(i); - if (event instanceof MooNote) { - channel = ((MooNote)event).getChannel(); - break; - } - } - // Creates and places components. setLayout(new GridLayout(4,1)); setBorder(BorderFactory.createLineBorder(Color.black)); @@ -66,6 +60,13 @@ public class MooTrackTitle extends JPanel { 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); + channelBox = new JComboBox(); channelBox.setFont(Moosique.getGUI().FONT); for (int i = 1; i <= 16; i++) @@ -73,20 +74,17 @@ public class MooTrackTitle extends JPanel { channelBox.setSelectedIndex(channel); - instruments = new MooInstrumentList(channelBox.getSelectedIndex()); - add(instruments); - channelBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ - int chan = channelBox.getSelectedIndex(); + channel = channelBox.getSelectedIndex(); MidiEvent me; MooNote mn; - instruments.setChannel(channelBox.getSelectedIndex()); + instruments.setChannel(channel); for (int j = 0; j < track.size(); j++) { me = track.get(j); if (me instanceof MooNote){ mn = (MooNote)me; - mn.setChannel(chan); + mn.setChannel(channel); } }}}); add(channelBox); @@ -95,22 +93,24 @@ public class MooTrackTitle extends JPanel { checkboxes.setLayout(new GridLayout(1,3)); mute = new JCheckBox("Mute"); - mute.setSelected(Moosique.getSequencer().getTrackMute(trackNum)); + mute.setSelected(false); + Moosique.setTrackMute(track, false); mute.setFont(Moosique.getGUI().FONT); mute.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ boolean selected = mute.isSelected(); if (selected){ solo.setSelected(false); - Moosique.getSequencer().setTrackSolo(trackNum, false); + Moosique.setTrackSolo(track, false); } - Moosique.getSequencer().setTrackMute(trackNum, selected); + Moosique.setTrackMute(track, selected); }}); checkboxes.add(mute); solo = new JCheckBox("Solo"); - solo.setSelected(Moosique.getSequencer().getTrackSolo(trackNum)); + solo.setSelected(false); + Moosique.setTrackSolo(track, false); solo.setFont(Moosique.getGUI().FONT); solo.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ @@ -118,14 +118,25 @@ public class MooTrackTitle extends JPanel { boolean selected = solo.isSelected(); if (selected){ mute.setSelected(false); - Moosique.getSequencer().setTrackMute(trackNum, false); + Moosique.setTrackMute(track, false); } - Moosique.getSequencer().setTrackSolo(trackNum, selected); + Moosique.setTrackSolo(track, selected); }}); checkboxes.add(solo); 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