]> ruin.nu Git - moosique.git/blobdiff - MooTrackView.java
no message
[moosique.git] / MooTrackView.java
index f7e8335bf365748478972feff97c7ce4fb879f53..126ee6306d22d7ae672502c35ce4cd30977da12d 100644 (file)
@@ -29,6 +29,7 @@ public class MooTrackView extends JPanel {
        private Rectangle box;
        private int ticksPerSixteenth, popupY = 0;
        private boolean leftMouseButtonPressed = false;
+       private static boolean snapToSixteenths = true;
        protected static int viewLength = 0;
        protected static int extraHeight = 0;
        public static final int NOTE_HEIGHT = 10, NOTE_WIDTH = 40, VIEW_WIDTH = 200;
@@ -45,6 +46,8 @@ public class MooTrackView extends JPanel {
                this.track = track;
                this.title = title;
                insets = getInsets();
+               coords = new ArrayList(track.size() / 2);
+               selection = new TreeSet();
 
                // Configures panel
                setBackground(Color.white);
@@ -52,7 +55,23 @@ public class MooTrackView extends JPanel {
                setLayout(null);
                setPreferredSize(new Dimension(VIEW_WIDTH, 140 * NOTE_HEIGHT));
 
-               placeNoteElements();
+               // Creates temporary variables
+               MidiEvent note;
+               MooNoteElement elem;
+               extraHeight = Toolkit.getDefaultToolkit().getScreenSize().height - 150;
+
+               // Places note elements
+               for (int i = 0; i < track.size(); i++) {
+                       note = track.get(i);
+                       if (note instanceof MooNote) {
+                               // Adds the note element to the note area and moves it to the appropriate place.
+                               MooNote mn = (MooNote)note;
+                               elem = new MooNoteElement(this, mn);
+                               add(elem);
+                               layoutElement(elem, false);
+                       }
+               }
+               setPreferredSize(new Dimension(VIEW_WIDTH, viewLength + extraHeight));
 
                // Creates panel pop-up menu.
                popup = new JPopupMenu();
@@ -76,25 +95,17 @@ public class MooTrackView extends JPanel {
        }
 
        /**
-        * Creates note elements for all MooNotes in the track, and places them in the appropriate place.
+        * Creates note elements for all MooNotes in the given list, and places them in the appropriate place.
         */
-       public void placeNoteElements() {
-               // Converts the track.
-               Moosique.convertTrack(track);
-
-               // Empties the container
-               removeAll();
-               coords = new ArrayList(track.size() / 2);
-               selection = new TreeSet();
-
+       public void placeNewNotes(java.util.List notes) {
                // Creates temporary variables
                MidiEvent note;
                MooNoteElement elem;
                extraHeight = Toolkit.getDefaultToolkit().getScreenSize().height - 150;
 
                // Places note elements
-               for (int i = 0; i < track.size(); i++) {
-                       note = track.get(i);
+               for (int i = 0; i < notes.size(); i++) {
+                       note = (MidiEvent)notes.get(i);
                        if (note instanceof MooNote) {
                                // Adds the note element to the note area and moves it to the appropriate place.
                                MooNote mn = (MooNote)note;
@@ -102,8 +113,8 @@ public class MooTrackView extends JPanel {
                                add(elem);
                                layoutElement(elem, false);
                        }
-                       setPreferredSize(new Dimension(VIEW_WIDTH, viewLength + extraHeight));
                }
+               setPreferredSize(new Dimension(VIEW_WIDTH, viewLength + extraHeight));
        }       
 
        /**
@@ -132,9 +143,10 @@ public class MooTrackView extends JPanel {
 
                // Calculates coordinates.
                x = insets.left;
-               y = insets.top + Math.round(mn.getTick() / ticksPerSixteenth) * NOTE_HEIGHT;
-               height = (mn.getDuration() / ticksPerSixteenth) * NOTE_HEIGHT;
+               y = insets.top + (int)((mn.getTick() * NOTE_HEIGHT) / ticksPerSixteenth);
+               height = (mn.getDuration() * NOTE_HEIGHT) / ticksPerSixteenth;
                if (height == 0) height = NOTE_HEIGHT;
+               if (snapToSixteenths && height < NOTE_HEIGHT) height = NOTE_HEIGHT;
                r = new Rectangle(x, y, NOTE_WIDTH, height);
 
                // Places the element in the appropriate place.