]> ruin.nu Git - moosique.git/blobdiff - MooNoteElement.java
play hangs when changing duration on a note.
[moosique.git] / MooNoteElement.java
index 43b7b27ff6153bad1673dc63df67066222df46f2..f6bda05e3b447642af0acffa007f5083e6eaf915 100644 (file)
@@ -13,13 +13,14 @@ public class MooNoteElement extends JPanel {
 
        private MooTrackView mtv;
        private MooNote note;
+       private JPopupMenu popup;
+       private JMenuItem popupRemove, popupProp, popupTransposeOctUp, popupTransposeOctDown;
        private Rectangle pitchRect, veloRect;
+       private String notePitch, noteVelocity;
+       private boolean selected = false;
        public Color textColor;
        public static final Color bgColor = new Color(160, 218, 255);
        public static final Color invBgColor = new Color(96, 38, 0);
-       private String notePitch, noteVelocity;
-       private JPopupMenu popup;
-       private JMenuItem popupRemove, popupProp, popupTransposeOctUp, popupTransposeOctDown;
 
        /** 
         * Creates a new note element.
@@ -68,6 +69,7 @@ public class MooNoteElement extends JPanel {
         * Selects the current NoteElement.
         */
        public void select() {
+               selected = true;
                mtv.addSelected(this);
                setBackground(invBgColor);
                textColor = Color.white;
@@ -78,6 +80,7 @@ public class MooNoteElement extends JPanel {
         * Deselects the current NoteElement.
         */
        public void deselect() {
+               selected = false;
                // mtv.removeSelected(this);
                setBackground(bgColor);
                textColor = Color.black;
@@ -135,14 +138,33 @@ public class MooNoteElement extends JPanel {
                noteVelocity = ""+note.getVelocity();
        }
 
+
+       /**
+        * Asks the MooTrackView that the note element is painted on to remove this element and the note.
+        */
+       protected void remove(){
+               mtv.removeNote(this);
+       }
+
+       /**
+        * layout this changed elemnt
+        */
+       protected void newLayout(){
+               mtv.layoutElement(this,true);
+       }
        /**
         * Listener that checks the mouse actions on this element.
         */
        class MAdapter extends MouseAdapter {
        
+               /**
+                * If left mouse button is clicked, selects the note and plays it.
+                */
                public void mouseClicked(MouseEvent e) {
-                       select();
-                       // Play the note
+                       if (SwingUtilities.isLeftMouseButton(e) && !e.isControlDown()) {
+                               select();
+                               // Play the note
+                       }
                }
 
                /**
@@ -159,6 +181,7 @@ public class MooNoteElement extends JPanel {
                                        } else if (SwingUtilities.isLeftMouseButton(e)) {
                                                note.setPitch(note.getPitch() - 1);
                                        }
+                                       Moosique.setEdited();
                                        calculateString();
                                        repaint();
                                } else if (veloRect.contains(e.getPoint())) {
@@ -167,6 +190,7 @@ public class MooNoteElement extends JPanel {
                                        } else if (SwingUtilities.isLeftMouseButton(e)) {
                                                note.setVelocity(note.getVelocity() - 1);
                                        }
+                                       Moosique.setEdited();
                                        calculateString();
                                        repaint();
                                }
@@ -181,7 +205,10 @@ public class MooNoteElement extends JPanel {
                 * Shows the menu if an OS-specific popup-trigger was activated.
                 */
                private void maybeShowPopup(MouseEvent e) {
-                       if (e.isPopupTrigger() && !e.isControlDown()) popup.show(e.getComponent(), e.getX(), e.getY());
+                       if (e.isPopupTrigger() && !e.isControlDown()) {
+                               if (!selected || mtv.isTheOnlySelected((MooNoteElement)e.getComponent())) popup.show(e.getComponent(), e.getX(), e.getY());
+                               else mtv.showSelectionPopup(e.getComponent(), e.getX(), e.getY());
+                       }
                }
        }
 
@@ -193,6 +220,7 @@ public class MooNoteElement extends JPanel {
                        Object source = e.getSource();
                        if (source == popupProp) {
                                new MooDialog(note);
+                               newLayout();
                        } else if (source == popupRemove) {
                                remove();
                        } else if (source == popupTransposeOctUp) {
@@ -208,12 +236,6 @@ public class MooNoteElement extends JPanel {
                        calculateString();
                        repaint();
                }
-       }
 
-       /**
-        * Asks the MooTrackView that the note element is painted on to remove this element and the note.
-        */
-       protected void remove(){
-               mtv.removeNote(this);
        }
 }