X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooTrackTitle.java;h=412fb246f183a521d86246068ca5ec5eb99b8a3f;hb=ca56fc1424e8887b09375a52e8e02605d5dff175;hp=e229c6dfbc3da8165bb9e9a4d50b800f6a71ead3;hpb=48b314acf130d347f3c0e01ca7d8e9e90b5eb3b5;p=moosique.git diff --git a/MooTrackTitle.java b/MooTrackTitle.java index e229c6d..412fb24 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,83 +12,115 @@ import javax.sound.midi.*; public class MooTrackTitle extends JPanel { + private MetaMessage trackNameMessage; + private String trackName = ""; + private ShortMessage programChangeMessage; + private int programChange = 0, channel = 0; private JTextField title; private MooInstrumentList instruments; - private JComboBox channel; + private JComboBox channelBox; private JCheckBox mute; private JCheckBox solo; private Track track; + private int trackNum; + /** * Creates the title bar. */ - public MooTrackTitle (Track aTrack) { + public MooTrackTitle (Track aTrack, int aTrackNum) { + setDoubleBuffered(true); track = aTrack; + this.trackNum = aTrackNum; + + // Finds track name and program change + MidiMessage msg; + for (int i = 0; i < track.size(); i++) { + msg = track.get(i).getMessage(); + if (msg.getStatus() == 255) { + if (((MetaMessage)msg).getType() == 3) { + trackNameMessage = (MetaMessage)msg; + trackName = new String(trackNameMessage.getData()); + } + } else if (msg.getStatus() == 192) { + programChangeMessage = (ShortMessage)msg; + programChange = programChangeMessage.getData1(); + } + } + + 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)); 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); - instruments = new MooInstrumentList(); - 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)); + channelBox.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.setSelectedIndex(channel); - channel.addItemListener(new ItemListener(){ - public void itemStateChanged(ItemEvent e){ - Object ob = channel.getSelectedItem(); - if (ob instanceof Integer){ - int chan = ((Integer)ob).intValue(); - //set channel - MidiEvent me; - MooNote mn; - for (int j = 0; j < track.size(); j++) { - me = track.get(j); - if (me instanceof MooNote){ - mn = (MooNote)me; - mn.setChannel(chan); - System.out.println(ob); - } - } - } - }}); + instruments = new MooInstrumentList(channelBox.getSelectedIndex()); + add(instruments); - add(channel); - + channelBox.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + int chan = channelBox.getSelectedIndex(); + MidiEvent me; + MooNote mn; + 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.getSequencer().getTrackMute(trackNum)); 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.getSequencer().setTrackSolo(trackNum, false); + } + Moosique.getSequencer().setTrackMute(trackNum, selected); + }}); checkboxes.add(mute); solo = new JCheckBox("Solo"); + solo.setSelected(Moosique.getSequencer().getTrackSolo(trackNum)); 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.getSequencer().setTrackMute(trackNum, false); + } + Moosique.getSequencer().setTrackSolo(trackNum, selected); }}); checkboxes.add(solo); add(checkboxes);