]> ruin.nu Git - moosique.git/commitdiff
Fixed the FileFilter, implemented some menu options, tweaked the GUI and organized...
authorEinar Pehrson <einarp@itstud.chalmers.se>
Thu, 8 May 2003 00:34:13 +0000 (00:34 +0000)
committerEinar Pehrson <einarp@itstud.chalmers.se>
Thu, 8 May 2003 00:34:13 +0000 (00:34 +0000)
MooGUI.java
MooMenu.java
MooNote.java
MooTrackView.java
Moosique.java
To Do.txt

index 63250d3124b764c427defaa604f9b551b0a2c6f4..17a69c3b10035ee71cd3e0dcbd4f2d621a279794 100644 (file)
@@ -36,20 +36,17 @@ public class MooGUI extends JFrame implements WindowListener {
                // view = new MooView();
 
                // Adds status bar.
-               //statusBar = new JLabel("Welcome to Moosique!", Label.CENTER);
+               statusBar = new JLabel("Welcome to Moosique!", JLabel.CENTER);
+               getContentPane().add(statusBar, BorderLayout.SOUTH);
 
-               //MooInstrumentList m = new MooInstrumentList();
-               //getContentPane().add(m, BorderLayout.CENTER);
-               //m.addKeyListener(new MooKeyboard());
-               //pack();
-
-               // Dimension bounds = new Dimension(300,70);
-               // setSize(bounds.width,bounds.height);
-               // setLocation((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (bounds.width / 2), (Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (bounds.height / 2));
+               pack();
+               Dimension bounds = new Dimension(400,300);
+               setSize(bounds.width,bounds.height);
+               setLocation((Toolkit.getDefaultToolkit().getScreenSize().width / 2) - (bounds.width / 2), (Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (bounds.height / 2));
                // setResizable(false);
                // setBackground(Color.white);
-               pack();
                setVisible(true);
+               show();
        }
        
        /** 
index a1ce4bdc7d8cfb68a6f164d1971ba227bbb8544f..ca367b30cde88a4cdae3484f3a71c719c7d5859a 100644 (file)
@@ -37,36 +37,37 @@ Kanske ocks
                file = makeMenu("File", KeyEvent.VK_F);
                add(file);
                                
-               file.add(makeAccItem(file, "New", KeyEvent.VK_N));
-               file.add(makeAccItem(file, "Open...", KeyEvent.VK_O));
-               file.add(makeAccItem(file, "Save", KeyEvent.VK_S));
+               file.add(makeItem(file, "New", KeyEvent.VK_N));
+               file.add(makeItem(file, "Open...", KeyEvent.VK_O));
+               file.add(makeItem(file, "Save", KeyEvent.VK_S));
                file.add(makeItem(file, "Save as..."));
-               file.add(makeAccItem(file, "Exit", KeyEvent.VK_Q));
+               file.add(makeItem(file, "Exit", KeyEvent.VK_Q));
                
                edit = makeMenu("Edit", KeyEvent.VK_E);
                add(edit);
                
-               edit.add(makeAccItem(edit, "Copy", KeyEvent.VK_C));
-               edit.add(makeAccItem(edit, "Cut", KeyEvent.VK_X));
-               edit.add(makeAccItem(edit, "Paste", KeyEvent.VK_V));
-               edit.add(makeAccItem(edit, "Select all", KeyEvent.VK_E));
-               edit.add(makeAccItem(edit, "Invert selection", KeyEvent.VK_I));
+               edit.add(makeItem(edit, "Copy", KeyEvent.VK_C));
+               edit.add(makeItem(edit, "Cut", KeyEvent.VK_X));
+               edit.add(makeItem(edit, "Paste", KeyEvent.VK_V));
+               edit.add(makeItem(edit, "Select all", KeyEvent.VK_E));
+               edit.add(makeItem(edit, "Invert selection", KeyEvent.VK_I));
+               edit.add(makeItem(edit, "Preferences", KeyEvent.VK_P));
                
                playback = makeMenu("Playback", KeyEvent.VK_P);
                add(playback);
                
-               playback.add(makeAccItem(playback, "Play", KeyEvent.VK_SPACE));
-               playback.add(makeAccItem(playback, "Pause", KeyEvent.VK_SPACE));
+               playback.add(makeItem(playback, "Play", KeyEvent.VK_SPACE));
+               playback.add(makeItem(playback, "Pause", KeyEvent.VK_SPACE));
                playback.add(makeItem(playback, "Stop"));
                playback.add(makeItem(playback, "Jump..."));
                
                track = makeMenu("Track", KeyEvent.VK_T);
                add(track);
                
-               track.add(makeAccItem(track, "Add", KeyEvent.VK_A));
-               track.add(makeAccItem(track, "Delete", KeyEvent.VK_D));
-               track.add(makeAccItem(track, "Copy track", KeyEvent.VK_Y));
-               track.add(makeAccItem(track, "Move", KeyEvent.VK_M));
+               track.add(makeItem(track, "Add", KeyEvent.VK_A));
+               track.add(makeItem(track, "Delete", KeyEvent.VK_D));
+               track.add(makeItem(track, "Copy track", KeyEvent.VK_Y));
+               track.add(makeItem(track, "Move", KeyEvent.VK_M));
                
                music = makeMenu("Music", KeyEvent.VK_M);
                add(music);
@@ -78,7 +79,7 @@ Kanske ocks
                music.add(makeItem(track, "Scale velocity..."));
                music.add(makeItem(track, "Transpose..."));
                
-               help = makeMenu("Help", KeyEvent.VK_P);
+               help = makeMenu("Help", KeyEvent.VK_L);
                add(help);
                
                help.add(makeItem(help, "Contents"));
@@ -99,7 +100,7 @@ Kanske ocks
                return item;
        }
 
-       private JMenuItem makeAccItem(JMenu menu, String name, int key) {
+       private JMenuItem makeItem(JMenu menu, String name, int key) {
                JMenuItem item = new JMenuItem(name);
                item.setAccelerator(KeyStroke.getKeyStroke(key, ActionEvent.CTRL_MASK));
                item.addActionListener(this);
@@ -107,35 +108,38 @@ Kanske ocks
                return item;
        }
        
+       private boolean isMidiFile(File f) {
+               if(f != null) {
+                       String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase().trim();
+                       if (extension.equals("mid")) return true;
+               }
+               return false;
+       }
+
        public void actionPerformed(ActionEvent e) {
                String command = e.getActionCommand();
                
                if(command == "New") {
-                       
+                       Moosique.clearSequence();
                } else if (command == "Open...") {
-               
                        JFileChooser chooser = new JFileChooser();
                        chooser.addChoosableFileFilter(new MidiFileFilter());
                        int returnVal = chooser.showOpenDialog(this);
-                       if(returnVal == JFileChooser.APPROVE_OPTION) {
-                               System.out.println("You chose to open this file: " +
-                       chooser.getSelectedFile().getName());
-               }
-               
+                       if(returnVal == JFileChooser.APPROVE_OPTION && isMidiFile(chooser.getSelectedFile())) {
+                               Moosique.load(chooser.getSelectedFile().getAbsolutePath());
+                       }
                } else if (command == "Save") {
-               
+                       Moosique.save();
                } else if (command == "Save as...") {
-               
                        JFileChooser chooser = new JFileChooser();
                        chooser.addChoosableFileFilter(new MidiFileFilter());
                        int returnVal = chooser.showSaveDialog(this);
-                       if(returnVal == JFileChooser.APPROVE_OPTION) {
-                               System.out.println("You chose to open this file: " +
-                       chooser.getSelectedFile().getName());
+                       if(returnVal == JFileChooser.APPROVE_OPTION && isMidiFile(chooser.getSelectedFile())) {
+                               Moosique.saveAs(chooser.getSelectedFile().getAbsolutePath());
                        }
                
                } else if (command == "Exit") {
-               
+                       Moosique.quit();
                } else if (command == "Copy") {
                
                } else if (command == "Cut") {
@@ -146,13 +150,15 @@ Kanske ocks
                
                } else if (command == "Invert selection") {
                
+               } else if (command == "Preferences") {
+
                } else if (command == "Play") {
-                       JOptionPane.showMessageDialog(null, "playing");
-               
+                       Moosique.play();
                } else if (command == "Pause") {
-               
+                       // Koda för resume också
+                       Moosique.pause();
                } else if (command == "Stop") {
-               
+                       Moosique.stop();
                } else if (command == "Jump...") {
                
                } else if (command == "Add") {
@@ -186,15 +192,13 @@ Kanske ocks
                } else if (command == "About") {
                        // about to be filled in
                        JOptionPane.showMessageDialog(null, "här kommer about att komma");
-               
                }
        }
 
        class MidiFileFilter extends javax.swing.filechooser.FileFilter {
                public boolean accept(File f) {
                        if(f != null) {
-                               String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase();
-                               if (f.isDirectory() || extension == "mid") return true;
+                               if (f.isDirectory() || isMidiFile(f)) return true;
                        }
                        return false;
                }
@@ -203,4 +207,4 @@ Kanske ocks
                        return "MIDI files";
                }
        }
-}
+}
\ No newline at end of file
index 6ea6c39b6b6bfb369d6feca755dc194846dc5f06..0449e86defed1375c30627c8e4db06dfdface6ea 100644 (file)
@@ -29,7 +29,7 @@ public class MooNote extends MidiEvent {
         */
        public MooNote (MidiEvent noteOnEvent, MidiEvent noteOffEvent) {
                super(noteOnEvent.getMessage(), noteOnEvent.getTick());
-               noteOffEvent = new MidiEvent(noteOffEvent.getMessage(), noteOffEvent.getTick());
+               this.noteOffEvent = noteOffEvent;
                noteOnMsg = (ShortMessage)getMessage();
                noteOffMsg = (ShortMessage)noteOffEvent.getMessage();
        }
index e337eb1e21ac292c4d201ff4267895ec15f5ea82..71018d1ea765a2a4b8305bc0986be9e9791c12ce 100644 (file)
@@ -1,38 +1,36 @@
 import javax.swing.*;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseMotionAdapter;
-import java.awt.event.MouseMotionListener;
-import java.awt.Dimension;
+import java.awt.event.*;
 import java.awt.*;
-//import java.awt.Graphics;
-//import java.awt.Graphics2D;
-//import java.awt.Rectangle;
 
 /**
- * 
+ * Graphical representation of a MIDI track.
  * 
  * @author  Andersson, Andreen, Lanneskog, Pehrson
  * @version 1
  */
  
-public class MooTrackView extends JPanel{
+public class MooTrackView extends JPanel {
 
        private MooTrackTitle title;
        private NoteArea notes;
        private Rectangle box;
        private Rectangle box2;
        //private JPanel notes;
+
+       private static final int PANEL_WIDTH = 65;
+       private static final int TITLE_HEIGHT = 40;
+       private static final int NOTEVIEW_HEIGHT = 200;
        
        /** 
         * Creates 
         */
        public MooTrackView () {
-       this.addMouseMotionListener(doScrollRectToVisible);
-       setLayout(new BorderLayout());
-       this.setBorder(BorderFactory.createLineBorder(Color.black));
-       add(trackTitle(), BorderLayout.NORTH);
-       add(noteView(), BorderLayout.CENTER);
+               addMouseMotionListener(doScrollRectToVisible);
+               addKeyListener(new MooKeyboard());
+               setLayout(new BorderLayout());
+               setBorder(BorderFactory.createLineBorder(Color.black));
+               add(trackTitle(), BorderLayout.NORTH);
+               add(noteView(), BorderLayout.CENTER);
        }
        
        MouseMotionListener doScrollRectToVisible = new MouseMotionAdapter() {
@@ -71,9 +69,4 @@ public class MooTrackView extends JPanel{
                        g2.draw(box2);
                }
        }
-       
-       private static final int PANEL_WIDTH = 65;
-       private static final int TITLE_HEIGHT = 40;
-       private static final int NOTEVIEW_HEIGHT = 200;
-
-}
+}
\ No newline at end of file
index c2006faff375c1c093596acc32fe5c2e5f988e2e..bb90b765b69492f5d2da3a6334e507de62f46825 100644 (file)
@@ -244,16 +244,19 @@ public class Moosique {
 
        /** 
         * Saves the current sequence to the given filename
-        * @param filename      the filename to use
+        * @param file  the filename to use
         */
-       public static void saveAs(String filename) throws IOException {
-               MidiSystem.write(seq, 1, new File(filename));
+       public static void saveAs(String file) {
+               try {
+                       MidiSystem.write(seq, 1, new File(filename));
+               } catch (IOException e) {}
+               filename = file;
        }
 
        /** 
         * Saves the current sequence to the previously given filename.
         */
-       public static void save() throws IOException {
+       public static void save() {
                saveAs(filename);
        }
 
index 960d6aab54cb87dccdf7b82abf29c09d0e0def62..e2cac93e68bcfdeb126288f62f3b269fa1be5284 100644 (file)
--- a/To Do.txt
+++ b/To Do.txt
@@ -1,58 +1,80 @@
+
+\f
 FÖRDELNING
 
-Einar: Moosique(4), MooSequence(4), MooTrack(4), MooNote(4)
+Einar: Moosique(4), MooNote(4)
 Micke: MooGUI(4), MooTrackTitle(2), MooNoteElement(6), MooNoteProp(4)
-Björn: MooMenu(8), MooToolbar(3), MooStatus(1), MooView(2), MooViewCounter(1)
+Björn: MooMenu(8), MooToolbar(3), MooView(2), MooViewCounter(1)
 Rolle: MooTrackView(16)
 
-* Inställningar
-       - MIDI-enhet     Öppna en dialogruta med innehållet i getMidiDeviceInfo() och låt användaren välja.
-
-* Referenser eller objekt?!?
-       tracks.get(tracks.indexOf(noteOffEvent) ???
-
-* Hur lägga till MooNote och NoteOff?
-       Internt vid skapandet - Då behövs track
-       Externt         new MooNote(...);
-                       ...add(MooNote);
-                       ...add(MooNote.getNoteOffEvent());
-
-* Kanalinställning
-       Hur sparas i spår?
-
-* Global KeyListener
-       Görs uppenbarligen så här:
-
-               JFrame someFrame = new JFrame();
-               
-               JComponent rootPane = someFrame.getRootPane();
-               ActionMap am = rootPane.getActionMap();
-               
-               Action helpAction = new AbstractAction() {
-                    public void actionPerformed(ActionEvent ae) {
-                        showHelpWindow();
-                    }};
-               am.put("help", helpAction);
-               
-               InputMap im = rootPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
-               KeyStroke helpKey = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0);
-               im.put(helpKey, "help");
-
-* Oktavförändring i MooKeyboard
-       Mappa F9-F12 till MooKeyboard.setOctave(n) där n = {2, 4, 6, 8}
-
-* Funktioner för att sätta (och läsa?) channel? mute? solo?
-       För mute och solo gäller följande metoder (ligger utklistrade i Methods of Key Classes.txt):
-
-       boolean getTrackMute(int track)                 Obtains the current mute state for a track. 
-       boolean getTrackSolo(int track)                 Obtains the current solo state for a track. 
-       void setTrackMute(int track, boolean mute)      Sets the mute state for a track. 
-       void setTrackSolo(int track, boolean solo)      Sets the solo state for a track. 
-
-       När det gäller kanalerna velar jag lite. Antingen gör jag en mappningsmatris i Moosique som
-       man får läsa och skriva ifrån (vilket blir FULT!), eller så tar man allt direkt genom
-       MooNote. Metoden getChannel ska då leta upp den första MooNoten i det aktuella spåret och
-       ta getChannel på den. setChannel ska loopa igenom alla MooNotes (egentligen alla Events)
-       och ta setChannel på dem. Kan vara bra att fråga först eftersom det kan ta nån sekund.
-
-* getPosition och setPosition - kvar?
\ No newline at end of file
+\f
+MooMenu
+
+       * Inställningar
+               - MIDI-enhet     Öppna en dialogruta med innehållet i getMidiDeviceInfo() och låt användaren välja.
+
+\f
+MooNote / MootrackView / MooNoteElement
+
+       * Hur lägga till MooNote och NoteOff?
+               Internt vid skapandet - Då behövs track
+               Externt         new MooNote(...);
+                               ...add(MooNote);
+                               ...add(MooNote.getNoteOffEvent());
+
+\f
+MooTrackTitle
+
+       * Kanalinställning
+               Hämta från det första Event i ett spår.
+
+       * Funktioner för att sätta (och läsa?) channel? mute? solo?
+               För mute och solo gäller följande metoder (ligger utklistrade i Methods of Key Classes.txt):
+       
+               boolean getTrackMute(int track)                 Obtains the current mute state for a track. 
+               boolean getTrackSolo(int track)                 Obtains the current solo state for a track. 
+               void setTrackMute(int track, boolean mute)      Sets the mute state for a track. 
+               void setTrackSolo(int track, boolean solo)      Sets the solo state for a track. 
+       
+               När det gäller kanalerna velar jag lite. Antingen gör jag en mappningsmatris i Moosique som
+               man får läsa och skriva ifrån (vilket blir FULT!), eller så tar man allt direkt genom
+               MooNote. Metoden getChannel ska då leta upp den första MooNoten i det aktuella spåret och
+               ta getChannel på den. setChannel ska loopa igenom alla MooNotes (egentligen alla Events)
+               och ta setChannel på dem. Kan vara bra att fråga först eftersom det kan ta nån sekund.
+
+
+\f
+MooGUI
+
+       * Global KeyListener
+               Görs uppenbarligen så här:
+       
+                       JFrame someFrame = new JFrame();
+                       
+                       JComponent rootPane = someFrame.getRootPane();
+                       ActionMap am = rootPane.getActionMap();
+                       
+                       Action helpAction = new AbstractAction() {
+                            public void actionPerformed(ActionEvent ae) {
+                                showHelpWindow();
+                            }};
+                       am.put("help", helpAction);
+                       
+                       InputMap im = rootPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+                       KeyStroke helpKey = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0);
+                       im.put(helpKey, "help");
+       
+       * Globala kommandon
+       
+               * Oktavförändring i MooKeyboard
+                       Mappa F9-F12 till MooKeyboard.setOctave(n) där n = {2, 4, 6, 8}
+       
+               * Play / Stop
+                       Mappa till blanksteg.
+
+\f
+Moosique
+
+       * getPosition och setPosition - kvar?
+
+\f
\ No newline at end of file