X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooTrackTitle.java;h=d5876c1485718a34f6ae3ef940152182d5f2974c;hp=2dfd67f63e2266c015cb7fd86be1902803ed6bea;hb=ce9a16d679f2058454af367e972888ba8e2c34c0;hpb=ae45edfc5dff1e0a098df4afe747a2dec6c90362 diff --git a/MooTrackTitle.java b/MooTrackTitle.java index 2dfd67f..d5876c1 100644 --- a/MooTrackTitle.java +++ b/MooTrackTitle.java @@ -12,75 +12,63 @@ 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 String trackName = ""; + private int channel = 0; /** * Creates the title bar. */ public MooTrackTitle (Track aTrack) { + setDoubleBuffered(true); track = aTrack; - // 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(); - } - // Creates and places components. setLayout(new GridLayout(4,1)); setBorder(BorderFactory.createLineBorder(Color.black)); setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70)); - title = new JTextField(trackName); // JTextField(String text, int columns) + title = new JTextField(trackName); title.setFont(Moosique.getGUI().FONT); title.addFocusListener(new TitleFocusListener()); add(title); - instruments = new MooInstrumentList(programChange); + instruments = new MooInstrumentList(channel); + // instruments = new MooInstrumentList(channel, programChangeMessage); add(instruments); - JPanel checkboxes = new JPanel(); - checkboxes.setLayout(new GridLayout(1,3)); - channelBox = new JComboBox(); channelBox.setFont(Moosique.getGUI().FONT); for (int i = 1; i <= 16; 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; - channelBox.setSelectedIndex(mn.getChannel()); - break; - } - } - - instruments = new MooInstrumentList(channelBox.getSelectedIndex()); + channelBox.setSelectedIndex(channel); channelBox.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ @@ -95,24 +83,38 @@ public class MooTrackTitle extends JPanel { mn.setChannel(chan); } }}}); - channelBox.setSelectedIndex(channel); 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(checkboxes);