X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooView.java;h=ee2880ba01cd1df96b7749445ab7c5f32fbdd7c2;hb=6f345a1ba4d0a66dcc4c10558fe28ba50c8d33e5;hp=3f088bd5930f801d27e5adfafb3efa4b1ed0f256;hpb=ffc69c8cc2cc9cdfe3841c77c1e680dee2225c63;p=moosique.git diff --git a/MooView.java b/MooView.java index 3f088bd..ee2880b 100644 --- a/MooView.java +++ b/MooView.java @@ -2,6 +2,7 @@ import javax.sound.midi.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; +import java.beans.*; /** * The main view, the container of the track views. @@ -12,17 +13,30 @@ import java.awt.event.*; public class MooView extends JScrollPane { private JPanel trackPanel; + private JPanel titlePanel; + private MooViewCounter viewCounter; private int numberOfTracks; /** * Creates the main view */ public MooView(Track[] tracks) { - super(VERTICAL_SCROLLBAR_ALWAYS, HORIZONTAL_SCROLLBAR_AS_NEEDED); - numberOfTracks = tracks.length; + super(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); trackPanel = new JPanel(new GridLayout(1,3), true); - setTracks(tracks); setViewportView(trackPanel); + getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE); + + titlePanel = new JPanel(new GridLayout(1,3),true); + JViewport columnHeader = new JViewport(); + columnHeader.setView(titlePanel); + setColumnHeaderView(columnHeader); + + viewCounter = new MooViewCounter(null); + JViewport rowHeader = new JViewport(); + rowHeader.setView(viewCounter); + setRowHeaderView(rowHeader); + + setTracks(tracks); } /** @@ -30,12 +44,19 @@ public class MooView extends JScrollPane { * @param tracks the tracks for which to add views */ public void setTracks(Track[] tracks) { - if (tracks.length == 1) { + setDoubleBuffered(true); + numberOfTracks = tracks.length; + trackPanel.removeAll(); + titlePanel.removeAll(); + if (numberOfTracks == 1) { // If MIDI file is of type 0, creates a view for the track. - trackPanel.add(new MooTrackView(tracks[0])); + trackPanel.setLayout(new FlowLayout()); + MooTrackTitle title = new MooTrackTitle(tracks[0]); + titlePanel.add(title); + trackPanel.add(new MooTrackView(tracks[0], title)); } 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); @@ -45,24 +66,45 @@ public class MooView extends JScrollPane { progressDialog.setVisible(true); // Starts filling the track panel with track views, while updating the progress bar. - trackPanel.removeAll(); - trackPanel.setLayout(new GridLayout(1,tracks.length)); + GridLayout gL = new GridLayout(1,numberOfTracks); + trackPanel.setLayout(gL); for (int i = 1; i < tracks.length; i++) { - trackPanel.add(new MooTrackView(tracks[i])); - progressBar.setValue(i+1); + if (Moosique.shouldBeDrawn(tracks[i])) { + System.out.println("Draws track " + i); + MooTrackTitle title = new MooTrackTitle(tracks[i]); + titlePanel.add(title); + trackPanel.add(new MooTrackView(tracks[i], title)); + progressBar.setValue(i); + } else { + System.out.println("Doesn't draw track " + i); + gL.setColumns(--numberOfTracks); + trackPanel.setLayout(gL); + } } progressDialog.dispose(); } +/* JPanel filler = new JPanel(); + int totalViewLength = trackPanel.getComponents().length * MooTrackView.VIEW_WIDTH; + if (totalViewLength < getWidth()) { + System.out.println("Adding filler since width = " + getWidth() + " and tracks = " + totalViewLength); + ((GridLayout)trackPanel.getLayout()).setColumns(numberOfTracks + 1); + filler.setPreferredSize(new Dimension(getWidth() - totalViewLength, 140 * MooTrackView.NOTE_HEIGHT)); + trackPanel.add(filler); + setPreferredSize(new Dimension(getWidth(), getHeight())); + } +*/ trackPanel.validate(); + setViewportView(trackPanel); } /** * Calls on each track view to update itself. */ - public void update() { + public void update(long tickPosition) { + getViewport().setViewPosition(new Point((int)getViewport().getViewPosition().getX(), (int)(tickPosition / (Moosique.getSequence().getResolution() / 4)) * MooTrackView.NOTE_HEIGHT)); Component[] comps = getComponents(); for (int i = 0; i < comps.length; i++) { - if(comps[i] instanceof MooTrackView) ((MooTrackView)comps[i]).update(); + if(comps[i] instanceof MooTrackView) ((MooTrackView)comps[i]).update(tickPosition); } } @@ -73,7 +115,10 @@ public class MooView extends JScrollPane { */ public void addTrackView(Track track, int index) { ((GridLayout)trackPanel.getLayout()).setColumns(++numberOfTracks); - trackPanel.add(new MooTrackView(track), index); + ((GridLayout)titlePanel.getLayout()).setColumns(++numberOfTracks); + MooTrackTitle title = new MooTrackTitle(track); + titlePanel.add(title, index); + trackPanel.add(new MooTrackView(track, title), index); validate(); } @@ -86,4 +131,4 @@ public class MooView extends JScrollPane { ((GridLayout)trackPanel.getLayout()).setColumns(--numberOfTracks); validate(); } -} \ No newline at end of file +}