From: Einar Pehrson Date: Thu, 8 May 2003 00:34:13 +0000 (+0000) Subject: Fixed the FileFilter, implemented some menu options, tweaked the GUI and organized... X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=commitdiff_plain;h=c1e5f1aeab138bb0c9f8adaa6d5c78e25067db7c Fixed the FileFilter, implemented some menu options, tweaked the GUI and organized the ToDo list --- diff --git a/MooGUI.java b/MooGUI.java index 63250d3..17a69c3 100644 --- a/MooGUI.java +++ b/MooGUI.java @@ -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(); } /** diff --git a/MooMenu.java b/MooMenu.java index a1ce4bd..ca367b3 100644 --- a/MooMenu.java +++ b/MooMenu.java @@ -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 diff --git a/MooNote.java b/MooNote.java index 6ea6c39..0449e86 100644 --- a/MooNote.java +++ b/MooNote.java @@ -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(); } diff --git a/MooTrackView.java b/MooTrackView.java index e337eb1..71018d1 100644 --- a/MooTrackView.java +++ b/MooTrackView.java @@ -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 diff --git a/Moosique.java b/Moosique.java index c2006fa..bb90b76 100644 --- a/Moosique.java +++ b/Moosique.java @@ -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); } diff --git a/To Do.txt b/To Do.txt index 960d6aa..e2cac93 100644 --- a/To Do.txt +++ b/To Do.txt @@ -1,58 +1,80 @@ + + 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 + +MooMenu + + * Inställningar + - MIDI-enhet Öppna en dialogruta med innehållet i getMidiDeviceInfo() och låt användaren välja. + + +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()); + + +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. + + + +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. + + +Moosique + + * getPosition och setPosition - kvar? + + \ No newline at end of file