X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooTrackView.java;h=4f5c4f34fc2f8db9c2d965e399ec8d15c8250e49;hb=fbafab9c4127f793cfe955003860dcde0d6a0588;hp=6f1dca5e4be1b241dd734a9e461d91fdf321021f;hpb=6db25ccdfe57a846eacef59ee20fc60e5954f24e;p=moosique.git diff --git a/MooTrackView.java b/MooTrackView.java index 6f1dca5..4f5c4f3 100644 --- a/MooTrackView.java +++ b/MooTrackView.java @@ -20,6 +20,7 @@ public class MooTrackView extends JPanel { private JPopupMenu popup; private JMenuItem popupAdd; private ArrayList rects; + private ArrayList selected; private Insets insets; private int ticksPerSixteenth, popupY = 0; protected static int viewLength = 0; @@ -36,6 +37,7 @@ public class MooTrackView extends JPanel { this.track = track; this.title = title; insets = getInsets(); + selected = new ArrayList(); // Configures panel setBackground(Color.white); @@ -154,6 +156,7 @@ public class MooTrackView extends JPanel { add(elem); layoutElement(elem, false); setPreferredSize(new Dimension(VIEW_WIDTH, viewLength + extraHeight)); + Moosique.setEdited(); repaint(); } @@ -165,6 +168,7 @@ public class MooTrackView extends JPanel { elem.getNote().removeFrom(track); remove(elem); elem.getNote().removeFrom(track); + Moosique.setEdited(); repaint(); } @@ -172,11 +176,58 @@ public class MooTrackView extends JPanel { * Adds a standard note to this track. */ private void addStandardNote() { - long timestamp = (long)(ticksPerSixteenth * (popupY - insets.top) / NOTE_HEIGHT); - System.out.println(ticksPerSixteenth + ", " + popupY + ", " + insets.top + ", " + timestamp); + int row = (popupY - insets.top) / NOTE_HEIGHT; + long timestamp = (long)(ticksPerSixteenth * row); addNote(new MooNote(title.getChannel(), 60, 100, timestamp, Moosique.getSequence().getResolution() / 4)); } + /** + * Deselects all notes. + */ + public void addSelected(MooNoteElement elem) { + selected.add(elem); + } + + /** + * Deselects all notes. + */ + public void removeSelected(MooNoteElement elem) { + selected.remove(selected.indexOf(elem)); + } + + /** + * Deselects all notes. + */ + public void deselectAll() { + Iterator it = selected.iterator(); + while(it.hasNext()) { + ((MooNoteElement)it.next()).deselect(); + } + selected.clear(); + } + + /** + * Determines if the given MooNoteElement is the only one in the track view that is selected. + * @return if the given element is the only selected one + */ + public boolean isTheOnlySelected(MooNoteElement elem) { + Iterator it = selected.iterator(); + while(it.hasNext()) { + if (!it.next().equals(elem)) return false; + } + return true; + } + + /** + * Shows a popup-menu with options for the current selection of note elements. + * @param c the component over which to display the menu + * @param x the x-coordinate in which to display the menu + * @param y the y-coordinate in which to display the menu + */ + public void showSelectionPopup(Component c, int x, int y) { + + } + /** * Draws the grid that is on the background. * @param g The Graphics object used to draw the grid. @@ -197,20 +248,37 @@ public class MooTrackView extends JPanel { * The adapter used to listen on mouse actions */ class MAdapter extends MouseAdapter { + /** - * Adds a standard note if doubleclicked. + * Deselects all note on click, adds a standard note on double click. */ public void mouseClicked(MouseEvent e) { + deselectAll(); if (e.getClickCount() == 2) { popupY = e.getY(); addStandardNote(); } } + public void mousePressed(MouseEvent e) { + maybeShowPopup(e); + } + + public void mouseReleased(MouseEvent e) { + maybeShowPopup(e); + } + /** - * Shows the menu if on standard poptriggers. + * Selects the notes within the area that was selected. */ - public void mousePressed(MouseEvent e) { + public void mouseDragged(MouseEvent e) { + + } + + /** + * Shows the menu if an OS-specific popup-trigger was activated. + */ + private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { popupY = e.getY(); popup.show(e.getComponent(), e.getX(), e.getY());