]> ruin.nu Git - moosique.git/blob - MooMenu.java
Fixed the FileFilter, implemented some menu options, tweaked the GUI and organized...
[moosique.git] / MooMenu.java
1 import javax.swing.*;
2 import javax.swing.filechooser.*;
3 import java.awt.event.*;
4 import java.io.*;
5
6 public class MooMenu extends JMenuBar implements ActionListener {
7         
8 /*
9
10 Musikrelaterade menyer i Midisoft Recording Session:
11
12 Track           Insert New...           Har vi
13                 Delete...               Har vi
14                 Move...                 Har vi
15                 Copy...                 Har vi
16                 Combine...              Onödig
17                 Rechannel...            Kanske
18                 Split by Pitch...       Onödig
19                 
20 Music           Insert Measure...       Lagt till
21                 Delete Measure...       Lagt till
22                 Clef...                 Onödig
23                 Time Signature...       Lagt till
24                 Key Signature...        Onödig
25                 Tempo...                Lagt till
26                 Scale Velocity...       Lagt till
27                 Transpose...            Lagt till
28                 Quantize...             Onödig
29
30 Kanske också:   Reset Solo / Mute
31
32 */
33
34         private JMenu file, edit, playback, track, help, music;
35
36         public MooMenu() {
37                 file = makeMenu("File", KeyEvent.VK_F);
38                 add(file);
39                                 
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));
45                 
46                 edit = makeMenu("Edit", KeyEvent.VK_E);
47                 add(edit);
48                 
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));
55                 
56                 playback = makeMenu("Playback", KeyEvent.VK_P);
57                 add(playback);
58                 
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..."));
63                 
64                 track = makeMenu("Track", KeyEvent.VK_T);
65                 add(track);
66                 
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));
71                 
72                 music = makeMenu("Music", KeyEvent.VK_M);
73                 add(music);
74                 
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..."));
81                 
82                 help = makeMenu("Help", KeyEvent.VK_L);
83                 add(help);
84                 
85                 help.add(makeItem(help, "Contents"));
86                 help.add(makeItem(help, "Getting started"));
87                 help.add(makeItem(help, "About"));
88         }
89
90         private JMenu makeMenu(String name, int mnemonic) {
91                 JMenu menu = new JMenu(name);
92                 menu.setMnemonic(mnemonic);
93                 return menu;
94         }
95
96         private JMenuItem makeItem(JMenu menu, String name) {
97                 JMenuItem item = new JMenuItem(name);
98                 item.addActionListener(this);
99                 menu.add(item);
100                 return item;
101         }
102
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);
107                 menu.add(item);
108                 return item;
109         }
110         
111         private boolean isMidiFile(File f) {
112                 if(f != null) {
113                         String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase().trim();
114                         if (extension.equals("mid")) return true;
115                 }
116                 return false;
117         }
118
119         public void actionPerformed(ActionEvent e) {
120                 String command = e.getActionCommand();
121                 
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());
130                         }
131                 } else if (command == "Save") {
132                         Moosique.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());
139                         }
140                 
141                 } else if (command == "Exit") {
142                         Moosique.quit();
143                 } else if (command == "Copy") {
144                 
145                 } else if (command == "Cut") {
146                 
147                 } else if (command == "Paste") {
148                 
149                 } else if (command == "Select all") {
150                 
151                 } else if (command == "Invert selection") {
152                 
153                 } else if (command == "Preferences") {
154
155                 } else if (command == "Play") {
156                         Moosique.play();
157                 } else if (command == "Pause") {
158                         // Koda för resume också
159                         Moosique.pause();
160                 } else if (command == "Stop") {
161                         Moosique.stop();
162                 } else if (command == "Jump...") {
163                 
164                 } else if (command == "Add") {
165                 
166                 } else if (command == "Delete") {
167                 
168                 } else if (command == "Copy track") {
169                 
170                 } else if (command == "Move") {
171                 
172                 } else if (command == "Insert Measure...") {
173                 
174                 } else if (command == "Delete Measure...") {
175                 
176                 } else if (command == "Time Signature...") {
177                 
178                 } else if (command == "Tempo...") {
179                 
180                 } else if (command == "Scale Velocity...") {
181                 
182                 } else if (command == "Transpose...") {
183                 
184                 } else if (command == "Contents") {
185                         // contents to be filled in
186                         JOptionPane.showMessageDialog(this, "här kommer contents komma");
187                 
188                 } else if (command == "Getting started") {
189                         // getting started to be filled in
190                         JOptionPane.showMessageDialog(null, "här kommer getting started komma");
191                 
192                 } else if (command == "About") {
193                         // about to be filled in
194                         JOptionPane.showMessageDialog(null, "här kommer about att komma");
195                 }
196         }
197
198         class MidiFileFilter extends javax.swing.filechooser.FileFilter {
199                 public boolean accept(File f) {
200                         if(f != null) {
201                                 if (f.isDirectory() || isMidiFile(f)) return true;
202                         }
203                         return false;
204                 }
205                 
206                 public String getDescription() {
207                         return "MIDI files";
208                 }
209         }
210 }