2 import javax.swing.filechooser.*;
3 import java.awt.event.*;
6 public class MooMenu extends JMenuBar implements ActionListener {
10 Musikrelaterade menyer i Midisoft Recording Session:
12 Track Insert New... Har vi
18 Split by Pitch... Onödig
20 Music Insert Measure... Lagt till
21 Delete Measure... Lagt till
23 Time Signature... Lagt till
24 Key Signature... Onödig
26 Scale Velocity... Lagt till
27 Transpose... Lagt till
30 Kanske också: Reset Solo / Mute
34 private JMenu file, edit, playback, track, help, music;
37 file = makeMenu("File", KeyEvent.VK_F);
40 file.add(makeItem(file, "New", KeyEvent.VK_N));
41 file.add(makeItem(file, "Open...", KeyEvent.VK_O));
42 file.add(makeItem(file, "Save", KeyEvent.VK_S));
43 file.add(makeItem(file, "Save as..."));
44 file.add(makeItem(file, "Exit", KeyEvent.VK_Q));
46 edit = makeMenu("Edit", KeyEvent.VK_E);
49 edit.add(makeItem(edit, "Copy", KeyEvent.VK_C));
50 edit.add(makeItem(edit, "Cut", KeyEvent.VK_X));
51 edit.add(makeItem(edit, "Paste", KeyEvent.VK_V));
52 edit.add(makeItem(edit, "Select all", KeyEvent.VK_E));
53 edit.add(makeItem(edit, "Invert selection", KeyEvent.VK_I));
54 edit.add(makeItem(edit, "Preferences", KeyEvent.VK_P));
56 playback = makeMenu("Playback", KeyEvent.VK_P);
59 playback.add(makeItem(playback, "Play", KeyEvent.VK_SPACE));
60 playback.add(makeItem(playback, "Pause", KeyEvent.VK_SPACE));
61 playback.add(makeItem(playback, "Stop"));
62 playback.add(makeItem(playback, "Jump..."));
64 track = makeMenu("Track", KeyEvent.VK_T);
67 track.add(makeItem(track, "Add", KeyEvent.VK_A));
68 track.add(makeItem(track, "Delete", KeyEvent.VK_D));
69 track.add(makeItem(track, "Copy track", KeyEvent.VK_Y));
70 track.add(makeItem(track, "Move", KeyEvent.VK_M));
72 music = makeMenu("Music", KeyEvent.VK_M);
75 music.add(makeItem(track, "Insert measure..."));
76 music.add(makeItem(track, "Delete measure..."));
77 music.add(makeItem(track, "Time signature..."));
78 music.add(makeItem(track, "Tempo..."));
79 music.add(makeItem(track, "Scale velocity..."));
80 music.add(makeItem(track, "Transpose..."));
82 help = makeMenu("Help", KeyEvent.VK_L);
85 help.add(makeItem(help, "Contents"));
86 help.add(makeItem(help, "Getting started"));
87 help.add(makeItem(help, "About"));
90 private JMenu makeMenu(String name, int mnemonic) {
91 JMenu menu = new JMenu(name);
92 menu.setMnemonic(mnemonic);
96 private JMenuItem makeItem(JMenu menu, String name) {
97 JMenuItem item = new JMenuItem(name);
98 item.addActionListener(this);
103 private JMenuItem makeItem(JMenu menu, String name, int key) {
104 JMenuItem item = new JMenuItem(name);
105 item.setAccelerator(KeyStroke.getKeyStroke(key, ActionEvent.CTRL_MASK));
106 item.addActionListener(this);
111 private boolean isMidiFile(File f) {
113 String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase().trim();
114 if (extension.equals("mid")) return true;
119 public void actionPerformed(ActionEvent e) {
120 String command = e.getActionCommand();
122 if(command == "New") {
123 Moosique.clearSequence();
124 } else if (command == "Open...") {
125 JFileChooser chooser = new JFileChooser();
126 chooser.addChoosableFileFilter(new MidiFileFilter());
127 int returnVal = chooser.showOpenDialog(this);
128 if(returnVal == JFileChooser.APPROVE_OPTION && isMidiFile(chooser.getSelectedFile())) {
129 Moosique.load(chooser.getSelectedFile().getAbsolutePath());
131 } else if (command == "Save") {
133 } else if (command == "Save as...") {
134 JFileChooser chooser = new JFileChooser();
135 chooser.addChoosableFileFilter(new MidiFileFilter());
136 int returnVal = chooser.showSaveDialog(this);
137 if(returnVal == JFileChooser.APPROVE_OPTION && isMidiFile(chooser.getSelectedFile())) {
138 Moosique.saveAs(chooser.getSelectedFile().getAbsolutePath());
141 } else if (command == "Exit") {
143 } else if (command == "Copy") {
145 } else if (command == "Cut") {
147 } else if (command == "Paste") {
149 } else if (command == "Select all") {
151 } else if (command == "Invert selection") {
153 } else if (command == "Preferences") {
155 } else if (command == "Play") {
157 } else if (command == "Pause") {
158 // Koda för resume också
160 } else if (command == "Stop") {
162 } else if (command == "Jump...") {
164 } else if (command == "Add") {
166 } else if (command == "Delete") {
168 } else if (command == "Copy track") {
170 } else if (command == "Move") {
172 } else if (command == "Insert Measure...") {
174 } else if (command == "Delete Measure...") {
176 } else if (command == "Time Signature...") {
178 } else if (command == "Tempo...") {
180 } else if (command == "Scale Velocity...") {
182 } else if (command == "Transpose...") {
184 } else if (command == "Contents") {
185 // contents to be filled in
186 JOptionPane.showMessageDialog(this, "här kommer contents komma");
188 } else if (command == "Getting started") {
189 // getting started to be filled in
190 JOptionPane.showMessageDialog(null, "här kommer getting started komma");
192 } else if (command == "About") {
193 // about to be filled in
194 JOptionPane.showMessageDialog(null, "här kommer about att komma");
198 class MidiFileFilter extends javax.swing.filechooser.FileFilter {
199 public boolean accept(File f) {
201 if (f.isDirectory() || isMidiFile(f)) return true;
206 public String getDescription() {