]> ruin.nu Git - moosique.git/blobdiff - MooTrackTitle.java
Fixed recording!!!
[moosique.git] / MooTrackTitle.java
index 979aed2139208e234f4124871b34b955fe536aef..6c629d90522651f4743fa765e1fb114b9083dc98 100644 (file)
@@ -15,12 +15,14 @@ public class MooTrackTitle extends JPanel {
        private Track track;
        private MetaMessage trackNameMessage;
        private ShortMessage programChangeMessage;
+       private MooTrackView mtv;
 
        private JTextField title;
        private MooInstrumentList instruments;
        private JComboBox channelBox;
        private JCheckBox mute;
        private JCheckBox solo;
+       private JButton record;
 
        private String trackName = "";
        private int channel = 0;
@@ -63,6 +65,7 @@ public class MooTrackTitle extends JPanel {
                // Creates and places components.
                setLayout(new GridLayout(4,1));
                setBorder(BorderFactory.createLineBorder(Color.black));
+               TitleListener tl = new TitleListener();
 
                setPreferredSize(new Dimension(MooTrackView.VIEW_WIDTH,70));
                title = new JTextField(trackName);
@@ -84,19 +87,7 @@ public class MooTrackTitle extends JPanel {
 
                channelBox.setSelectedIndex(channel);
 
-               channelBox.addActionListener(new ActionListener(){
-                               public void actionPerformed(ActionEvent e){
-                                       channel = channelBox.getSelectedIndex();
-                                       MidiEvent me;
-                                       MooNote mn;
-                                       instruments.setChannel(channel);
-                                       for (int j = 0; j < track.size(); j++) {
-                                               me = track.get(j);
-                                           if (me instanceof MooNote){
-                                                       mn = (MooNote)me;
-                                                       mn.setChannel(channel);
-                                               }
-                               }}});
+               channelBox.addActionListener(tl);
                add(channelBox);
 
                JPanel checkboxes = new JPanel();
@@ -106,33 +97,21 @@ public class MooTrackTitle extends JPanel {
                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.setTrackSolo(track, false);
-                                       }
-                                       Moosique.setTrackMute(track, selected);
-
-                               }});
+               mute.addActionListener(tl);
                checkboxes.add(mute);
 
                solo = new JCheckBox("Solo");
                solo.setSelected(false);
                Moosique.setTrackSolo(track, false);
                solo.setFont(Moosique.getGUI().FONT);
-               solo.addActionListener(new ActionListener(){
-                               public void actionPerformed(ActionEvent event){
-                                       //setSolo
-                                       boolean selected = solo.isSelected();
-                                       if (selected){
-                                               mute.setSelected(false);
-                                               Moosique.setTrackMute(track, false);
-                                       }
-                                       Moosique.setTrackSolo(track, selected);
-                               }});
+               solo.addActionListener(tl);
                checkboxes.add(solo);
+               
+               record = new JButton("Record");
+               record.setFont(Moosique.getGUI().FONT);
+               record.addActionListener(tl);
+               checkboxes.add(record);
+
                add(checkboxes);
        }
        
@@ -144,6 +123,14 @@ public class MooTrackTitle extends JPanel {
                return channel;
        }
 
+       /** 
+        * Sets the track view this title should update after recording.
+        * @param the track view
+        */
+       public void setTrackView(MooTrackView tv) {
+               mtv = tv;
+       }
+
        /**
         * Checks if the focus is lost.
         */
@@ -152,4 +139,55 @@ public class MooTrackTitle extends JPanel {
                        // Update the MidiEvent containing the title of this track
                }
        }
+
+       /**
+        * Takes the appropriate action when a user selects an item on the popup menu.
+        */
+       class TitleListener implements ActionListener {
+               public void actionPerformed(ActionEvent e) {
+                       Object source = e.getSource();
+                       if (source == channelBox) {
+                               channel = channelBox.getSelectedIndex();
+                               MidiEvent me;
+                               MooNote mn;
+                               instruments.setChannel(channel);
+                               // Query the user before rechannelling???
+                               for (int j = 0; j < track.size(); j++) {
+                                       me = track.get(j);
+                                       if (me instanceof MooNote){
+                                               mn = (MooNote)me;
+                                               mn.setChannel(channel);
+                                       }
+                               }
+                       } else if (source == solo) {
+                               boolean selected = mute.isSelected();
+                               if (selected){
+                                       solo.setSelected(false);
+                                       Moosique.setTrackSolo(track, false);
+                               }
+                               Moosique.setTrackMute(track, selected);
+                       } else if (source == mute) {
+                               boolean selected = solo.isSelected();
+                               if (selected){
+                                       mute.setSelected(false);
+                                       Moosique.setTrackMute(track, false);
+                               }
+                               Moosique.setTrackSolo(track, selected);
+                       } else if (source == record) {
+                               Sequencer sequencer = Moosique.getSequencer();
+                               if (record.getText() == "Record") {
+                                       record.setText("Stop");
+                                       mtv.enableKeyboardRecording();
+                                       sequencer.recordEnable(track, channel);
+                                       sequencer.startRecording();
+                               } else {
+                                       record.setText("Record");
+                                       mtv.disableKeyboardRecording();
+                                       sequencer.stopRecording();
+                                       sequencer.recordDisable(track);
+                                       mtv.placeNoteElements();
+                               }
+                       }
+               }
+       }
 }