import java.awt.*;
import java.awt.event.*;
import javax.sound.midi.*;
+import java.util.*;
/**
* Graphical representation of a MIDI track.
public static final int NOTE_HEIGHT = 10;
public static final int NOTE_WIDTH = 40;
private int trackLength;
+ private ArrayList rects;
public NoteArea(Track track) {
// Configuring panel
trackLength = 140;
setPreferredSize(new Dimension(200, 140 * NOTE_HEIGHT));
- // Temporary variables
+ // Creating temporary variables
MidiEvent note;
MooNoteElement elem;
int x, y, height;
+ rects = new ArrayList(track.size() / 2);
// Placing note elements
Insets insets = getInsets();
// Moves the note element to the appropriate place.
x = insets.left;
y = insets.top + (int)(mn.getTick() / 24) * NOTE_HEIGHT;
- height = (mn.getDuration() / 24) * NOTE_HEIGHT;
- if (height == 0) height = NOTE_HEIGHT;
- while(findComponentAt(x, y) instanceof MooNoteElement ||
- findComponentAt(x, y + height - 1) instanceof MooNoteElement) x += NOTE_WIDTH;
- elem.setBounds(x, y, NOTE_WIDTH, height);
+ height = NOTE_HEIGHT;
+ // height = (mn.getDuration() / 24) * NOTE_HEIGHT;
+ Rectangle r = new Rectangle(x, y, NOTE_WIDTH, height);
+ while(isOccupied(r)) r.translate(NOTE_WIDTH, 0);
+ elem.setBounds(r);
+ rects.add(r);
if (viewLength < (y + height)) viewLength = y + height;
+
+ // while(findComponentAt(x, y) instanceof MooNoteElement ||
+ // findComponentAt(x, y + height - 1) instanceof MooNoteElement) x += NOTE_WIDTH;
}
- setPreferredSize(new Dimension(200,viewLength));
+ setPreferredSize(new Dimension(200, viewLength));
}
validate();
}
+
+ private boolean isOccupied(Rectangle r) {
+ Iterator it = rects.iterator();
+ while (it.hasNext()) {
+ if(r.intersects((Rectangle)it.next())) return true;
+ }
+ return false;
+ }
public void paintComponent(Graphics g) {
super.paintComponent(g);
}
}
}
-}
+}
\ No newline at end of file
titlePanel.add(new MooTrackTitle(tracks[0]));
} else {
// Creates dialog for progress bar.
- JDialog progressDialog = new JDialog(Moosique.getGUI(), "Visualizing MIDI file...", false);
+ JDialog progressDialog = new JDialog(Moosique.getGUI(), "Visualizing...", false);
JProgressBar progressBar = new JProgressBar(0, tracks.length);
progressBar.setValue(0);
progressBar.setStringPainted(true);
progressDialog.dispose();
}
trackPanel.validate();
+ trackViews.setViewportView(trackPanel);
}
/**