private String notePitch;
private String noteVelocity;
private JPopupMenu popup;
- private JMenuItem popupRemove, popupProp;
+ private JMenuItem popupRemove, popupProp, popupTransposeOctUp, popupTransposeOctDown;
/**
* Creates a new note element.
popupProp = new JMenuItem("Preferences...");
popupProp.addActionListener(pList);
popup.add(popupProp);
-
popupRemove = new JMenuItem("Remove");
popupRemove.addActionListener(pList);
popup.add(popupRemove);
+ popupTransposeOctUp = new JMenuItem("Transpose one octave up");
+ popupTransposeOctUp.addActionListener(pList);
+ popup.add(popupTransposeOctUp);
+ popupTransposeOctDown = new JMenuItem("Transpose one octave down");
+ popupTransposeOctDown.addActionListener(pList);
+ popup.add(popupTransposeOctDown);
}
class MAdapter extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
-
+ // Play the note
}
/**
* Checks if the mouse is pressed.
- * Pops up the menu if right mousebutton is used.
* Increases the pitch or velocity if the right mousebutton is pressed while holding ctrl down.
* Decreases the pitch or velocity if the left mousebutton is pressed while holding ctrl down.
- * @param e The events recieved.
+ * @param e the event recieved.
*/
public void mousePressed(MouseEvent e) {
if (e.isControlDown()) {
note.setPitch(note.getPitch() - 1);
}
calculateString();
+ repaint();
} else if (veloRect.contains(e.getPoint())) {
if (SwingUtilities.isRightMouseButton(e)) {
note.setVelocity(note.getVelocity() + 1);
note.setVelocity(note.getVelocity() - 1);
}
calculateString();
+ repaint();
}
- e.getComponent().repaint();
- } else if (e.isPopupTrigger()) {
- popup.show(e.getComponent(), e.getX(), e.getY());
- }
+ } else maybeShowPopup(e);
+ }
+
+ public void mouseReleased(MouseEvent e) {
+ maybeShowPopup(e);
+ }
+
+ /**
+ * 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());
}
}
class PopupListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
- if (source == popupProp) {
+ if (source == popupProp) {
new MooDialog(note);
- } else if (source == popupRemove) {
+ } else if (source == popupRemove) {
remove();
+ } else if (source == popupTransposeOctUp) {
+ note.setPitch(note.getPitch() + 12);
+ update();
+ } else if (source == popupTransposeOctDown) {
+ note.setPitch(note.getPitch() - 12);
+ update();
}
}
+
+ private void update() {
+ calculateString();
+ repaint();
+ }
}
/**
- * Asks the MooTrackView that it's painted on to remove this element and the note.
+ * Asks the MooTrackView that the note element is painted on to remove this element and the note.
*/
protected void remove(){
mtv.removeNote(this);
}
-
}