]> ruin.nu Git - moosique.git/blob - MooMenu.java
har fixat den där jävla jump-dialogen!!!
[moosique.git] / MooMenu.java
1 import javax.sound.midi.*;
2 import javax.swing.*;
3 import javax.swing.filechooser.*;
4 import java.awt.event.*;
5 import java.io.*;
6 import java.awt.*;
7
8 /**
9  * Moosiques GUI representing a menubar, menus and menuitems
10  *
11  * @author Björn Lanneskog
12  */
13 public class MooMenu extends JMenuBar implements ActionListener {
14         
15         private JMenu file, edit, playback, music, help;
16         private JFileChooser chooser;
17         private File directory;
18
19         /**
20          * Creates the menu bar.
21          */
22         public MooMenu() {
23                 file = createMenu("File", KeyEvent.VK_F);
24                 add(file);
25                                 
26                 addItem(file, "New", KeyEvent.VK_N, ActionEvent.CTRL_MASK);
27                 addItem(file, "Open...", KeyEvent.VK_O, ActionEvent.CTRL_MASK);
28                 addItem(file, "Save", KeyEvent.VK_S, ActionEvent.CTRL_MASK);
29                 addItem(file, "Save as...");
30                 addItem(file, "Exit", KeyEvent.VK_Q, ActionEvent.CTRL_MASK);
31                 
32                 edit = createMenu("Edit", KeyEvent.VK_E);
33                 add(edit);
34                 
35                 addItem(edit, "Copy", KeyEvent.VK_C, ActionEvent.CTRL_MASK);
36                 addItem(edit, "Cut", KeyEvent.VK_X, ActionEvent.CTRL_MASK);
37                 addItem(edit, "Paste", KeyEvent.VK_V, ActionEvent.CTRL_MASK);
38                 addItem(edit, "Select all", KeyEvent.VK_E, ActionEvent.CTRL_MASK);
39                 addItem(edit, "Invert selection", KeyEvent.VK_I, ActionEvent.CTRL_MASK);
40                 addItem(edit, "Preferences...", KeyEvent.VK_P, ActionEvent.CTRL_MASK);
41                 
42                 playback = createMenu("Playback", KeyEvent.VK_P);
43                 add(playback);
44                 
45                 addItem(playback, "Play", "F5");
46                 addItem(playback, "Pause", "F7");
47                 addItem(playback, "Stop", "F6");
48                 addItem(playback, "Jump...");
49                 
50                 music = createMenu("Music", KeyEvent.VK_M);
51                 add(music);
52                 
53                 addItem(music, "Add track...", KeyEvent.VK_A, ActionEvent.CTRL_MASK);
54                 addItem(music, "Delete track...", KeyEvent.VK_D, ActionEvent.CTRL_MASK);
55                 addItem(music, "Copy track...", KeyEvent.VK_Y, ActionEvent.CTRL_MASK);
56                 addItem(music, "Move track...", KeyEvent.VK_M, ActionEvent.CTRL_MASK);
57                 addItem(music, "Insert measure...");
58                 addItem(music, "Delete measure...");
59                 addItem(music, "Set time signature...");
60                 addItem(music, "Set tempo...");
61                 addItem(music, "Scale velocity...");
62                 addItem(music, "Transpose...");
63                 
64                 help = createMenu("Help", KeyEvent.VK_L);
65                 add(help);
66                 
67                 addItem(help, "Contents", "F1");
68                 addItem(help, "Getting started");
69                 addItem(help, "About");
70         }
71
72         private JMenu createMenu(String name, int mnemonic) {
73                 JMenu menu = new JMenu(name);
74                 menu.setMnemonic(mnemonic);
75                 return menu;
76         }
77         
78         private JMenuItem addItem(JMenu menu, String name) {
79                 JMenuItem item = new JMenuItem(name);
80                 item.addActionListener(this);
81                 menu.add(item);
82                 return item;
83         }
84         
85         private JMenuItem addItem(JMenu menu, String name, String key) {
86                 JMenuItem item = new JMenuItem(name);
87                 item.setAccelerator(KeyStroke.getKeyStroke(key));
88                 item.addActionListener(this);
89                 menu.add(item);
90                 return item;
91         }
92         
93         private JMenuItem addItem(JMenu menu, String name, int key, int mask) {
94                 JMenuItem item = new JMenuItem(name);
95                 item.setAccelerator(KeyStroke.getKeyStroke(key, mask));
96                 item.addActionListener(this);
97                 menu.add(item);
98                 return item;
99         }
100         
101         private boolean isMidiFile(File f) {
102                 if(f != null) {
103                         String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase().trim();
104                         if (extension.equals("mid")) return true;
105                 }
106                 return false;
107         }
108
109         public void actionPerformed(ActionEvent e) {
110                 String command = e.getActionCommand();
111                 Sequence seq;
112                 
113                 if(command == "New") {
114                         Moosique.clearSequence();
115                 } else if (command == "Open...") {
116                         // Shows a file chooser. If shown previously, starts in the current directory.
117                         if (directory != null) {
118                                 chooser = new JFileChooser(directory);
119                         } else {
120                                 chooser = new JFileChooser();
121                         }
122                         chooser.addChoosableFileFilter(new MidiFileFilter());
123                         int returnVal = chooser.showOpenDialog(this);
124
125                         // Stores the current directory and loads the selected file.
126                         File file = chooser.getSelectedFile();
127                         if(returnVal == JFileChooser.APPROVE_OPTION && isMidiFile(file)) {
128                                 directory = chooser.getSelectedFile().getParentFile();
129                                 Moosique.load(chooser.getSelectedFile().getAbsolutePath());
130                         }
131                 } else if (command == "Save") {
132                         Moosique.save();
133                 } else if (command == "Save as...") {
134                         // Shows a file chooser. If shown previously, starts in the current directory.
135                         if (directory != null) {
136                                 chooser = new JFileChooser(directory);
137                         } else {
138                                 chooser = new JFileChooser();
139                         }
140                         chooser.addChoosableFileFilter(new MidiFileFilter());
141                         int returnVal = chooser.showSaveDialog(this);
142
143                         // Stores the current directory and loads the selected file.
144                         File file = chooser.getSelectedFile();
145                         if(returnVal == JFileChooser.APPROVE_OPTION && isMidiFile(file)) {
146                                 directory = file.getParentFile();
147                                 Moosique.saveAs(file.getAbsolutePath());
148                         }
149                 } else if (command == "Exit") {
150                         Moosique.quit();
151                 } else if (command == "Copy") {
152                 
153                 } else if (command == "Cut") {
154                 
155                 } else if (command == "Paste") {
156                 
157                 } else if (command == "Select all") {
158                 
159                 } else if (command == "Invert selection") {
160                 
161                 } else if (command == "Preferences...") {
162
163                 } else if (command == "Play") {
164                         if (!Moosique.getSequencer().isRunning()) Moosique.play();
165                 } else if (command == "Pause") {
166                         if (Moosique.getSequencer().isRunning()) Moosique.pause();
167                 } else if (command == "Stop") {
168                         Moosique.stop();
169                 } else if (command == "Jump...") {
170                         MooDialog what = new MooDialog(MooDialog.JUMP);
171                         // Moosique.setPosition(???); Räkna ut från msr, beats, ticks, time sig.
172                 } else if (command == "Add track...") {
173                         MooDialog what = new MooDialog(MooDialog.ADD_TRACK);
174                         Moosique.getSequence().createTrack();
175                 } else if (command == "Delete track...") {
176                 
177                         MooDialog what = new MooDialog(MooDialog.DELETE_TRACK);
178                         
179                         /* Let the user select a track from a list.
180                         seq = Moosique.getSequence();
181                         seq.deleteTrack(seq.getTracks()[NUMBER]);
182                         */
183                 } else if (command == "Copy track...") {
184                 
185                         MooDialog what = new MooDialog(MooDialog.COPY_TRACK);
186                         
187                 } else if (command == "Move track...") {
188                 
189                         MooDialog what = new MooDialog(MooDialog.MOVE_TRACK);
190
191                 } else if (command == "Insert measure...") {
192                 
193                 } else if (command == "Delete measure...") {
194                 
195                 } else if (command == "Set time signature...") {
196                 
197                 } else if (command == "Set tempo...") {
198                 
199                 } else if (command == "Scale velocity...") {
200                 
201                 } else if (command == "Transpose...") {
202                 
203                 } else if (command == "Contents") {
204                         // contents to be filled in
205                         JOptionPane.showMessageDialog(this, "här kommer contents komma");
206                 
207                 } else if (command == "Getting started") {
208                         // getting started to be filled in
209                         JOptionPane.showMessageDialog(null, "här kommer getting started komma");
210                 
211                 } else if (command == "About") {
212                         // about to be filled in
213                         JOptionPane.showMessageDialog(null, "här kommer about att komma");
214                 }
215         }
216
217         class MidiFileFilter extends javax.swing.filechooser.FileFilter {
218                 public boolean accept(File f) {
219                         if(f != null) {
220                                 if (f.isDirectory() || isMidiFile(f)) return true;
221                         }
222                         return false;
223                 }
224                 
225                 /*
226                  * gets the description of the filetype
227                  * @return "Midifiles   the only filetyp compatibel with the program
228                  */
229                 public String getDescription() {
230                         return "MIDI files";
231                 }
232         }
233         
234         
235 }