00001 package i2bpro.layer.Menus;
00002
00003 import i2bpro.Exceptions.ErrorMsg;
00004 import i2bpro.Exceptions.LayerException;
00005 import i2bpro.Exceptions.PlayListException;
00006 import i2bpro.layer.Dialogs.InsertMediaDlg;
00007 import i2bpro.layer.Dialogs.PlayListNewDlg;
00008 import i2bpro.layer.Dialogs.PlayListOpenDlg;
00009 import i2bpro.layer.InfoMsg;
00010 import i2bpro.layer.Layer;
00011 import i2bpro.layer.Panels.ButtonPanel;
00012 import i2bpro.player.Player;
00013 import i2bpro.playlist.PlayList;
00014 import java.awt.Cursor;
00015 import java.awt.Event;
00016 import java.awt.event.ActionEvent;
00017 import java.awt.event.ActionListener;
00018 import java.awt.event.KeyEvent;
00019 import java.io.IOException;
00020 import java.net.MalformedURLException;
00021 import javax.media.NoPlayerException;
00022 import javax.swing.Icon;
00023 import javax.swing.ImageIcon;
00024 import javax.swing.JMenu;
00025 import javax.swing.JMenuBar;
00026 import javax.swing.JMenuItem;
00027 import javax.swing.JOptionPane;
00028 import javax.swing.KeyStroke;
00029 import org.jaudiotagger.audio.exceptions.CannotReadException;
00030 import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
00031 import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
00032 import org.jaudiotagger.tag.TagException;
00033
00034
00035
00036
00051 public final class MainMenu extends JMenuBar implements ActionListener
00052 {
00053
00054 final Icon speaker_on = new ImageIcon(ButtonPanel.class.getResource(
00055 "/pics/speaker_on.png"));
00056 final Icon speaker_off = new ImageIcon(ButtonPanel.class.getResource(
00057 "/pics/speaker_off.png"));
00058 private JMenuItem muteMenuItem = new JMenuItem("Mute", speaker_on);
00059
00060
00061
00069 public MainMenu()
00070 {
00071
00072 add(createPlayListMenu());
00073 add(createPlayMenu());
00074 }
00075
00076
00077
00084 private JMenu createPlayListMenu()
00085 {
00086 JMenu m;
00087 JMenuItem mi;
00088
00089 m = new JMenu("Wiedergabeliste");
00090 m.setMnemonic('l');
00091
00092
00093 mi = new JMenuItem("Neu", 'N');
00094 mi.setAccelerator(KeyStroke.getKeyStroke('N', KeyEvent.CTRL_MASK));
00095 mi.setToolTipText("Neue Playlist anlegen");
00096 mi.addActionListener(this);
00097 m.add(mi);
00098
00099
00100 mi = new JMenuItem("Öffnen", 'f');
00101 mi.setAccelerator(KeyStroke.getKeyStroke('F', KeyEvent.CTRL_MASK));
00102 mi.setToolTipText("Playlist öffnen");
00103 mi.addActionListener(this);
00104 m.add(mi);
00105
00106
00107 mi = new JMenuItem("Speichern", 'S');
00108 mi.setAccelerator(KeyStroke.getKeyStroke('S', KeyEvent.CTRL_MASK));
00109 mi.setToolTipText("aktuelle Playlist speichern");
00110 mi.setEnabled(false);
00111 mi.addActionListener(this);
00112 m.add(mi);
00113
00114 m.addSeparator();
00115
00116
00117 mi = new JMenuItem("Audiotitel hinzufügen", 'h');
00118 mi.setToolTipText("Fügt der Wiedergabeliste eine Audiodatei hinzu.");
00119 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, KeyEvent.CTRL_MASK));
00120 mi.addActionListener(this);
00121 m.add(mi);
00122
00123
00124 mi = new JMenuItem("Audiotitel löschen", 'l');
00125 mi.setToolTipText("Entfernt einen Audiotrack aus der Playlist");
00126 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, Event.CTRL_MASK));
00127 mi.addActionListener(this);
00128 m.add(mi);
00129
00130 m.addSeparator();
00131
00132
00133 mi = new JMenuItem("Albuminformationen laden", 'i');
00134 mi.setToolTipText("Albuminformationen von freedb.org laden");
00135 mi.setAccelerator(KeyStroke.getKeyStroke('I', Event.CTRL_MASK));
00136 mi.addActionListener(this);
00137 m.add(mi);
00138
00139 m.addSeparator();
00140
00141
00142 mi = new JMenuItem("Beenden", 'B');
00143 mi.setToolTipText("Player beenden");
00144 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.ALT_MASK));
00145 mi.addActionListener(this);
00146 m.add(mi);
00147
00148 return m;
00149 }
00150
00151
00152
00159 public JMenu createPlayMenu()
00160 {
00161 JMenu m;
00162 JMenuItem mi;
00163
00164 m = new JMenu("Wiedergabe");
00165 m.setMnemonic('W');
00166
00167
00168 mi = new JMenuItem("Play", 'P');
00169 mi.setToolTipText("Abspielen des Audiotracks starten");
00170 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/play.png")));
00171 mi.setAccelerator(KeyStroke.getKeyStroke('P', KeyEvent.CTRL_MASK));
00172 mi.setEnabled(true);
00173 mi.addActionListener(this);
00174 m.add(mi);
00175
00176
00177 mi = new JMenuItem("Pause", 'a');
00178 mi.setToolTipText("Audiotrack pausieren lassen");
00179 mi.setAccelerator(KeyStroke.getKeyStroke('A', KeyEvent.CTRL_MASK));
00180 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/pause.png")));
00181 mi.setEnabled(false);
00182 mi.addActionListener(this);
00183 m.add(mi);
00184
00185
00186 mi = new JMenuItem("Stop", 'S');
00187 mi.setAccelerator(KeyStroke.getKeyStroke('T', KeyEvent.CTRL_MASK));
00188 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/stop.png")));
00189 mi.setToolTipText("Abspielen des Audiotracks stoppen");
00190 mi.setEnabled(false);
00191 mi.addActionListener(this);
00192 m.add(mi);
00193
00194
00195 mi = new JMenuItem("Vorheriger Titel", 'V');
00196 mi.setToolTipText("zum vorherigen Titel springen");
00197 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.CTRL_MASK));
00198 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/prior.png")));
00199 mi.setEnabled(false);
00200 mi.addActionListener(this);
00201 m.add(mi);
00202
00203
00204 mi = new JMenuItem("Nächster Titel", 'N');
00205 mi.setToolTipText("zum nächsten Titel springen");
00206 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.CTRL_MASK));
00207 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/next.png")));
00208 mi.setEnabled(false);
00209 mi.addActionListener(this);
00210 m.add(mi);
00211
00212 m.addSeparator();
00213
00214
00215 mi = new JMenuItem("Lautstärke erhöhen", 'e');
00216 mi.setToolTipText("Lautstärke um 5 Punkte erhöhen");
00217 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, KeyEvent.CTRL_MASK));
00218 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/speaker_plus.png")));
00219 mi.addActionListener(this);
00220 m.add(mi);
00221
00222
00223 mi = new JMenuItem("Lautstärke verringern", 'r');
00224 mi.setToolTipText("Lautstärke um 5 Punkte verringern");
00225 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, KeyEvent.CTRL_MASK));
00226 mi.setIcon(new ImageIcon(ButtonPanel.class.getResource("/pics/speaker_minus.png")));
00227 mi.addActionListener(this);
00228 m.add(mi);
00229
00230
00231 muteMenuItem.setToolTipText("Mute einschalten");
00232 muteMenuItem.setAccelerator(KeyStroke.getKeyStroke('M', KeyEvent.CTRL_MASK));
00233 muteMenuItem.setSelected(false);
00234 muteMenuItem.addActionListener(this);
00235 m.add(muteMenuItem);
00236
00237 return m;
00238 }
00239
00240
00241
00249 public void actionPerformed(ActionEvent e)
00250 {
00251 String event = e.getActionCommand();
00252 if (event.equals("Neu"))
00253 {
00254 PlayListNewDlg.getInstance().run();
00255 }
00256 else if(event.equals("Öffnen"))
00257 {
00258 PlayListOpenDlg.getInstance().run();
00259 }
00260 else if (event.equals("Speichern"))
00261 {
00262 try
00263 {
00264 Cursor old_cursor = getCursor();
00265 setCursor(new Cursor(Cursor.WAIT_CURSOR));
00266 PlayList.getInstance().PlayListSave(
00267 PlayList.getInstance().getFileName());
00268 setCursor(old_cursor);
00269 }
00270 catch (PlayListException ex) { ErrorMsg.show(ex.getMessage()); }
00271 catch (IOException ex) { ErrorMsg.show(ex.getMessage()); }
00272 }
00273 else if (event.equals("Audiotitel hinzufügen"))
00274 {
00275 if (PlayList.getInstance().getFileName() == null)
00276 {
00277 try
00278 {
00279 throw new LayerException(104);
00280 }
00281 catch (LayerException ex)
00282 {
00283 ErrorMsg.show(ex.getMessage());
00284 }
00285 } else {
00286 InsertMediaDlg.getInstance().run();
00287 }
00288 }
00289 else if (event.equals("Audiotitel löschen"))
00290 {
00291 try { Layer.getInstance().DeleteMedia(); }
00292 catch (LayerException ex) { ErrorMsg.show(ex.getMessage()); }
00293 }
00294 else if (event.equals("Albuminformationen laden"))
00295 {
00296 try { PlayList.getInstance().getAlbumInfo(); }
00297 catch (CannotReadException ex) { ErrorMsg.show(ex.getMessage()); }
00298 catch (IOException ex) { ErrorMsg.show(ex.getMessage()); }
00299 catch (TagException ex) { ErrorMsg.show(ex.getMessage()); }
00300 catch (ReadOnlyFileException ex) { ErrorMsg.show(ex.getMessage()); }
00301 catch (InvalidAudioFrameException ex) { ErrorMsg.show(ex.getMessage()); }
00302 catch (PlayListException ex) { ErrorMsg.show(ex.getMessage()); }
00303 catch (NoPlayerException ex) { ErrorMsg.show(ex.getMessage()); }
00304 catch (InterruptedException ex) { ErrorMsg.show(ex.getMessage()); }
00305 }
00306 else if (event.equals("Beenden"))
00307 {
00308 if (Layer.getInstance().isSave())
00309 {
00310 JOptionPane pane = new JOptionPane();
00311 if (pane.showConfirmDialog(null,
00312 "Möchten Sie die an der Playlist vorgenommenen "
00313 + "Änderungen speichern?", null,
00314 JOptionPane.YES_NO_OPTION,
00315 JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
00316 {
00317 try
00318 {
00319 PlayList.getInstance().PlayListSave(
00320 PlayList.getInstance().getFileName());
00321 }
00322 catch (PlayListException ex){ErrorMsg.show(ex.getMessage());}
00323 catch (IOException ex) { ErrorMsg.show(ex.getMessage()); }
00324 }
00325 }
00326 Layer.getInstance().setVisible(false);
00327 Layer.getInstance().dispose();
00328 System.exit(0);
00329 }
00330 else if (event.equals("Play"))
00331 {
00332 try { Layer.getInstance().play(); }
00333 catch (LayerException ex) { ErrorMsg.show(ex.getMessage()); }
00334 catch (MalformedURLException ex) { ErrorMsg.show(ex.getMessage()); }
00335 catch (IOException ex) { ErrorMsg.show(ex.getMessage()); }
00336 catch (NoPlayerException ex) { ErrorMsg.show(ex.getMessage()); }
00337 }
00338 else if (event.equals("Pause"))
00339 {
00340 Layer.getInstance().pause();
00341 }
00342 else if (event.equals("Stop"))
00343 {
00344 Layer.getInstance().stop();
00345 }
00346 else if (event.equals("Vorheriger Titel"))
00347 {
00348 try
00349 {
00350 Layer.getInstance().Prior();
00351 }
00352 catch (LayerException ex) { ErrorMsg.show(ex.getMessage()); }
00353 catch (MalformedURLException ex) { ErrorMsg.show(ex.getMessage()); }
00354 catch (IOException ex) { ErrorMsg.show(ex.getMessage()); }
00355 catch (NoPlayerException ex) { ErrorMsg.show(ex.getMessage()); }
00356 }
00357 else if (event.equals("Nächster Titel"))
00358 {
00359 try
00360 {
00361 Layer.getInstance().Next();
00362 }
00363 catch (LayerException ex) { ErrorMsg.show(ex.getMessage()); }
00364 catch (MalformedURLException ex) { ErrorMsg.show(ex.getMessage()); }
00365 catch (IOException ex) { ErrorMsg.show(ex.getMessage()); }
00366 catch (NoPlayerException ex) { ErrorMsg.show(ex.getMessage()); }
00367 }
00368 else if (event.equals("Lautstärke erhöhen"))
00369 {
00370 int vol = Player.getInstance().getVolume() + 5;
00371 Layer.getInstance().setVolume( vol > 100 ? 100 : vol);
00372 }
00373 else if (event.equals("Lautstärke verringern"))
00374 {
00375 int vol = Player.getInstance().getVolume() - 5;
00376 Layer.getInstance().setVolume( vol < 0 ? 0 : vol );
00377 }
00378 else if (event.equals("Mute"))
00379 {
00380 Layer.getInstance().toggleMute();
00381 } else {
00382 InfoMsg.show(2);
00383 }
00384 }
00385
00386
00387
00395 public void PlayerStarted()
00396 {
00397 this.getMenu(1).getMenuComponent(0).setEnabled(false);
00398 this.getMenu(1).getMenuComponent(1).setEnabled(true);
00399 this.getMenu(1).getMenuComponent(2).setEnabled(true);
00400 this.getMenu(1).getMenuComponent(3).setEnabled(true);
00401 this.getMenu(1).getMenuComponent(4).setEnabled(true);
00402 }
00403
00404
00405
00413 public void PlayerPause()
00414 {
00415 this.getMenu(1).getMenuComponent(0).setEnabled(true);
00416 this.getMenu(1).getMenuComponent(1).setEnabled(false);
00417 this.getMenu(1).getMenuComponent(2).setEnabled(true);
00418 this.getMenu(1).getMenuComponent(3).setEnabled(true);
00419 this.getMenu(1).getMenuComponent(4).setEnabled(true);
00420 }
00421
00422
00423
00431 public void PlayerStopped()
00432 {
00433 this.getMenu(1).getMenuComponent(0).setEnabled(true);
00434 this.getMenu(1).getMenuComponent(1).setEnabled(false);
00435 this.getMenu(1).getMenuComponent(2).setEnabled(false);
00436 this.getMenu(1).getMenuComponent(3).setEnabled(false);
00437 this.getMenu(1).getMenuComponent(4).setEnabled(false);
00438 }
00439
00440
00441
00450 public void toggledMute()
00451 {
00452 if (Player.getInstance().isMute())
00453 {
00454 muteMenuItem.setIcon(speaker_off);
00455 muteMenuItem.setToolTipText("Mute ausschalten");
00456 } else {
00457 muteMenuItem.setIcon(speaker_on);
00458 muteMenuItem.setToolTipText("Mute einchalten");
00459 }
00460 }
00461 }