From 9a3a74b1814be55eff7d094c57ffa2ab5817933c Mon Sep 17 00:00:00 2001 From: Roland Andersson Date: Wed, 14 May 2003 11:21:02 +0000 Subject: [PATCH] *** empty log message *** --- MooTrackView.java | 136 ++++++++++++++++++++++++++++++++++++++++++++-- report.txt | 46 +++++++++++++--- 2 files changed, 168 insertions(+), 14 deletions(-) diff --git a/MooTrackView.java b/MooTrackView.java index c058cc5..96b55f0 100644 --- a/MooTrackView.java +++ b/MooTrackView.java @@ -15,6 +15,13 @@ public class MooTrackView extends JPanel { private Track track; private Rectangle box; +<<<<<<< MooTrackView.java + //private Rectangle box2; + /** + * Creates + */ + public MooTrackView () { +======= private JPopupMenu popup; private JMenuItem menuItem; private ArrayList rects; @@ -24,6 +31,33 @@ public class MooTrackView extends JPanel { public MooTrackView (Track track) { super(true); this.track = track; +<<<<<<< MooTrackView.java +>>>>>>> 1.45 + setLayout(new BorderLayout()); +<<<<<<< MooTrackView.java + this.setBorder(BorderFactory.createLineBorder(Color.black)); + add(trackTitle(), BorderLayout.NORTH); + add(noteView(), BorderLayout.CENTER); + } + + private JPanel trackTitle () { + title = new MooTrackTitle(); + title.setPreferredSize(new Dimension(PANEL_WIDTH, TITLE_HEIGHT)); + title.setBorder(BorderFactory.createLineBorder(Color.black)); + return title; + } + + private JPanel noteView () { + notes = new NoteArea(); + notes.setBackground(Color.white); + notes.setBorder(BorderFactory.createLineBorder(Color.black)); + return notes; +======= + + notes = new NoteArea(track); + notes.setBackground(Color.white); + notes.setBorder(BorderFactory.createLineBorder(Color.black)); +======= // Configures panel setBackground(Color.white); @@ -63,6 +97,7 @@ public class MooTrackView extends JPanel { setPreferredSize(new Dimension(VIEW_WIDTH, viewLength + extraHeight)); } validate(); +>>>>>>> 1.46 // Creates pop-up menu. popup = new JPopupMenu(); @@ -77,6 +112,82 @@ public class MooTrackView extends JPanel { return track; } + + /** + * Updates the track view. + */ + public void update(long tickPosition) { + repaint(); +>>>>>>> 1.45 + } + +<<<<<<< MooTrackView.java + class NoteArea extends JPanel { + public static final int NOTE_HEIGHT = 10, NOTE_WIDTH = 40, VIEW_WIDTH = 200; + private ArrayList rects; + + public NoteArea(Track track) { + // Configuring panel + super(true); + setLayout(null); + setPreferredSize(new Dimension(VIEW_WIDTH, 140 * NOTE_HEIGHT)); + + // Creating temporary variables + MidiEvent note; + MooNoteElement elem; + int x, y, height; + int beatsPerSixteenth = Moosique.getSequence().getResolution() / 4; + rects = new ArrayList(track.size() / 2); + + // Placing note elements + Insets insets = getInsets(); + for (int i = 0; i < track.size(); i++) { + note = track.get(i); + if (note instanceof MooNote) { + // Adds the note element to the note area. + MooNote mn = (MooNote)note; + elem = new MooNoteElement(mn); + add(elem); + + // Moves the note element to the appropriate place. + x = insets.left; + y = insets.top + (int)(mn.getTick() / beatsPerSixteenth) * NOTE_HEIGHT; + height = (mn.getDuration() / beatsPerSixteenth) * NOTE_HEIGHT; + if (height == 0) height = 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; + } + setPreferredSize(new Dimension(VIEW_WIDTH, 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); + Graphics2D g2 = (Graphics2D)g; +<<<<<<< MooTrackView.java + for (int c=0;c<1000;c=c+20) { + int r=0; + for (r=0;r<200;r=r+20) { + box = new Rectangle(r,c,20,20); + g2.setColor(Color.gray); + g2.draw(box); + } + } + } + } +======= private boolean isOccupied(Rectangle r) { Iterator it = rects.iterator(); while (it.hasNext()) { @@ -101,12 +212,21 @@ public class MooTrackView extends JPanel { } } } +>>>>>>> 1.46 - /** - * Updates the track view. - */ - public void update(long tickPosition) { - repaint(); + private static final int PANEL_WIDTH = 65; + private static final int TITLE_HEIGHT = 40; + private static final int NOTEVIEW_HEIGHT = 200; +} +======= + for (int c = 0; c < viewLength || c < getHeight(); c += NOTE_HEIGHT) { + for (int r = 0; r < (10 * NOTE_WIDTH); r += NOTE_WIDTH) { + box = new Rectangle(r, c, NOTE_WIDTH, NOTE_HEIGHT); + g2.setColor(Color.gray); + g2.draw(box); + } + } + } } class PopupListener extends MouseAdapter { @@ -116,4 +236,8 @@ public class MooTrackView extends JPanel { } } } -} \ No newline at end of file +<<<<<<< MooTrackView.java +} +>>>>>>> 1.45 +======= +}>>>>>>> 1.46 diff --git a/report.txt b/report.txt index b1d76bc..ad11cc3 100644 --- a/report.txt +++ b/report.txt @@ -1,18 +1,48 @@ Foreword (optional) +OBS! [...] = Hjälp till om ni kan och lägg in text Introduction The main goal with our project was to design and construct a midi-software developing program. Both for arranging and playing already existing midi-files, and for composing and saving midi-files from scratch. -We chose this project for mainly two reasons. First, noone of us had previous experience of working with music in the Java language, so this would be a great challange. Second, we are all quite interested in music. - - - -Main section - - +We chose this project for mainly two reasons. First, noone of us had previous experience of working with music in the Java language, so this would be a great challenge. Second, we are all quite interested in music. + +Analysis +----------------------------- +< Java Soundpackage > +Our first step was to look at the Java Soundpackage, and to try to find out what limits the package had. Noone of us was familiar with the package and wanted to get an overview before we started working with the design document. We also had to look at some software that supported midi to get an idea what features our application might have. +----------------------------- +< Design Document > +We realeased were quickly that most of the classes we had to construct was associated with the interface. We divided the program into two major parts. The main part, the actual program, included four functional classes. Our starting point was to make one class including the 'main method', we gave this class the name Moosique (an combination of moose and music). + +Under the Moosique class we designed three classes that modifies different parts of an midi-file. +MooSequence [...], MooTrack [...] and MooNote [...]. + +The second part of the program includes the graphical classes. The top-class of the interface is a class called MooGUI that [...]. Under the interface top-class MooGUI we designed some graphics classes that constructs a menu, a statusbar and a toolbar. All these classes [...]. + +Beside the strictly graphical classes we decided to make graphical representation of the functional classes, this to get an better overview of our work [...]. MooView (an graphical representation of MooSequence), MooTrackView (MooTrack) and MooNoteElement (MooNote). To support these files some other graphical had to be designed. MooViewCounter represents an ruler that shows the [einar], MooTrackTitle handles the properties of one track and MooNoteElement the properties of one note. + +We constructed this design document very quickly, maybe to quickly. We werent really clear how some of the functions in the Java Soundpackage worked. Later in the project we were forced to change what we earlier had planned, se section [Major Decissions]. +------------------------------ +< Time Schedule > +Before we started to implement the code we made an time-schedule for each class, and divided the classes between us. Later we realeased that for a few classes this time-schedule were very optimistic. The consequences of a misleading time-schedule were that some classes was not implemented before a very long time in the project [mer?]. +------------------------------ +< Implemention > + Functional classes [...] + Strictly graphical classes [...] +------------------------------ +< Major Decissions > +[...] +------------------------------ +< Problems > +[...] +------------------------------ Conclusions -References \ No newline at end of file +References +[einar skriv in de musikprogram som du hade] +Jia +Code complete +och den första java boken \ No newline at end of file -- 2.39.2