X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooNoteElement.java;h=8b15596e9df44a24e13cac96859861a11689eebd;hp=459bf5bde05334adfd19919c7632c15289289831;hb=HEAD;hpb=2987fea4ec5854c2431e042f17daf5a923c438a1 diff --git a/MooNoteElement.java b/MooNoteElement.java index 459bf5b..8b15596 100644 --- a/MooNoteElement.java +++ b/MooNoteElement.java @@ -9,12 +9,10 @@ import java.awt.event.*; * @version 1 */ -public class MooNoteElement extends JPanel { +public class MooNoteElement extends JPanel implements Comparable { private MooTrackView mtv; private MooNote note; - private JPopupMenu popup; - private JMenuItem popupRemove, popupProp, popupTranspOctUp, popupTranspOctDown; private Rectangle pitchRect, veloRect; private String notePitch, noteVelocity; private boolean selected = false, leftMouseButtonPressed = false, mouseIn = false; @@ -39,22 +37,6 @@ public class MooNoteElement extends JPanel { // Defines coordinates. pitchRect = new Rectangle(0, 0, 15, 10); veloRect = new Rectangle(20, 0, 40, 10); - - // Creates pop-up menu. - popup = new JPopupMenu(); - PopupListener pList = new PopupListener(); - popupProp = new JMenuItem("Preferences..."); - popupProp.addActionListener(pList); - popup.add(popupProp); - popupRemove = new JMenuItem("Remove"); - popupRemove.addActionListener(pList); - popup.add(popupRemove); - popupTranspOctUp = new JMenuItem("Transpose one octave up"); - popupTranspOctUp.addActionListener(pList); - popup.add(popupTranspOctUp); - popupTranspOctDown = new JMenuItem("Transpose one octave down"); - popupTranspOctDown.addActionListener(pList); - popup.add(popupTranspOctDown); } /** @@ -65,12 +47,20 @@ public class MooNoteElement extends JPanel { return note; } + /** + * Compares the note of this element to that of another element. + * @return a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object + */ + public int compareTo(Object o) { + return note.compareTo(((MooNoteElement)o).getNote()); + } + /** * Selects the current NoteElement. */ public void select() { selected = true; - mtv.selectNote(this); + Moosique.selectNote(this); setBackground(invBgColor); textColor = Color.white; repaint(); @@ -175,6 +165,14 @@ public class MooNoteElement extends JPanel { */ class MAdapter extends MouseAdapter { + /** + * Plays the note on double-click. + */ + public void mouseClicked(MouseEvent e) { + if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) + Moosique.getReceiver().send(note.getMessage(), -1); + } + /** * Selects the note if mouse entered with the left mouse button pressed. */ @@ -190,6 +188,7 @@ public class MooNoteElement extends JPanel { */ public void mouseExited(MouseEvent e) { mouseIn = false; + Moosique.getReceiver().send(note.getNoteOffEvent().getMessage(), -1); } /** @@ -221,13 +220,16 @@ public class MooNoteElement extends JPanel { } } else { select(); - // Play the note maybeShowPopup(e); } } public void mouseReleased(MouseEvent e) { - if (!maybeShowPopup(e) && !mouseIn) mtv.maybeMoveSelectedNotes(getY(), getY() + e.getY()); + if (!maybeShowPopup(e) && !mouseIn) { + int y = e.getY(); + if (y < 0) mtv.moveSelectedNotes((Moosique.getSequence().getResolution() / 4)* (int)Math.floor((double)y / MooTrackView.NOTE_HEIGHT)); + if (y > getHeight()) mtv.moveSelectedNotes((Moosique.getSequence().getResolution() / 4) * (int)Math.ceil(((double)y - getHeight()) / MooTrackView.NOTE_HEIGHT)); + } } /** @@ -235,30 +237,8 @@ public class MooNoteElement extends JPanel { */ private boolean maybeShowPopup(MouseEvent e) { if (!e.isPopupTrigger()) return false; - if (!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()); - } + if (!e.isControlDown()) mtv.showSelectionPopup(e.getComponent(), e.getX(), e.getY()); return true; } } - - /** - * Listens on the actions made to the popupmenu. - */ - class PopupListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - if (source == popupProp) { - new MooDialog(note); - newLayout(); - } else if (source == popupRemove) { - remove(); - } else if (source == popupTranspOctUp) { - transpose(12); - } else if (source == popupTranspOctDown) { - transpose(-12); - } - } - } }