private MooTrackView mtv;
private MooNote note;
private JPopupMenu popup;
- private JMenuItem popupRemove, popupProp, popupTranspOctUp, popupTranspOctDown;
+ private JMenu popupTranspUp, popupTranspDown;
+ private JMenuItem popupRemove, popupProp;
+ private JMenuItem[] popupTranspUpItems, popupTranspDownItems;
private Rectangle pitchRect, veloRect;
private String notePitch, noteVelocity;
private boolean selected = false, leftMouseButtonPressed = false, mouseIn = false;
// 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);
+ popupProp = addMenuItem(popup, "Preferences...");
+ popupRemove = addMenuItem(popup, "Remove");
+ popupTranspUpItems = new JMenuItem[12];
+ popupTranspDownItems = new JMenuItem[12];
+ popupTranspUp = createTransposeMenu(popup, popupTranspUpItems, "note up");
+ popupTranspDown = createTransposeMenu(popup, popupTranspDownItems, "note down");
}
/**
mtv.layoutElement(this,true);
}
+ /**
+ * Adds a menu item with the given command to the given popup menu.
+ */
+ private JMenuItem addMenuItem(JPopupMenu menu, String command) {
+ JMenuItem item = new JMenuItem(command);
+ item.addActionListener(new PopupListener());
+ menu.add(item);
+ return item;
+ }
+
+ /**
+ * Adds a menu item with the given command to the given menu.
+ */
+ private JMenuItem addMenuItem(JMenu menu, String command) {
+ JMenuItem item = new JMenuItem(command);
+ item.addActionListener(new PopupListener());
+ menu.add(item);
+ return item;
+ }
+
+ /**
+ * Creates a transpose sub menu with the given title in the given popup menu,
+ * inserting the items into the given array.
+ */
+ private JMenu createTransposeMenu(JPopupMenu menu, JMenuItem[] items, String title) {
+ JMenu trans = new JMenu("Transpose " + title);
+ menu.add(trans);
+ items[0] = addMenuItem(trans, "One octave");
+ for (int i = 1; i < 12; i++) {
+ items[i] = addMenuItem(trans, (i) + " halftones");
+ }
+ return trans;
+ }
+
/**
* Listener that checks the mouse actions on this element.
*/
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.
*/
*/
public void mouseExited(MouseEvent e) {
mouseIn = false;
+ Moosique.getReceiver().send(note.getNoteOffEvent().getMessage(), -1);
}
/**
}
} else {
select();
- // Play the note
maybeShowPopup(e);
}
}
}
/**
- * Listens on the actions made to the popupmenu.
+ * Takes the appropriate action when a user selects an item on the popup menu.
*/
class PopupListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
new MooDialog(note);
System.out.println("Duration: " + note.getDuration());
newLayout();
- repaint();
+ update();
} else if (source == popupRemove) {
remove();
- } else if (source == popupTranspOctUp) {
+ } else if (source == popupTranspUpItems[0]) {
transpose(12);
- } else if (source == popupTranspOctDown) {
+ } else if (source == popupTranspDownItems[0]) {
transpose(-12);
+ } else {
+ for (int i = 1; i < 12; i++) {
+ if (source == popupTranspUpItems[i]) transpose(i);
+ else if (source == popupTranspDownItems[i]) transpose(-i);
+ }
}
}
}