00001 package i2bpro.layer;
00002
00003 import i2bpro.Exceptions.LayerException;
00004 import i2bpro.playlist.PlayList;
00005 import i2bpro.player.Player;
00006 import i2bpro.Exceptions.PlayListException;
00007 import i2bpro.layer.Menus.MainMenu;
00008 import i2bpro.layer.Panels.CenterPanel;
00009 import i2bpro.layer.Panels.EastPanel;
00010 import i2bpro.layer.Panels.SouthPanel;
00011 import java.awt.BorderLayout;
00012 import java.awt.Cursor;
00013 import java.awt.Dimension;
00014 import java.awt.Toolkit;
00015 import java.io.FileNotFoundException;
00016 import java.io.IOException;
00017 import java.net.MalformedURLException;
00018 import java.util.HashMap;
00019 import java.util.Random;
00020 import javax.media.NoPlayerException;
00021 import javax.swing.JPanel;
00022 import org.jaudiotagger.audio.exceptions.CannotReadException;
00023 import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
00024 import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
00025 import org.jaudiotagger.tag.TagException;
00026
00027
00028
00056 public final class Layer extends javax.swing.JFrame
00057 {
00058
00059 private static Layer instance = new Layer();
00060
00061
00062 private MainMenu mainmenu = new MainMenu();
00063
00064
00065 private JPanel mainPanel = new JPanel();
00066 private EastPanel eastPanel = new EastPanel();
00067 private SouthPanel southPanel = new SouthPanel();
00068 private CenterPanel centerPanel = new CenterPanel();
00069
00070
00071
00072 private boolean isTableChanged = false;
00073 private boolean PositionUpdate = false;
00074 private boolean isPlayerStarting = false;
00075 private int old_pos = 0;
00076 private int old_id = -1;
00077 private int id = -1;
00078 private boolean isSave = false;
00079 private boolean isRandom = false;
00080 private int random_id = -1;
00081 private int last_id, first_id;
00082
00083
00084
00085 private HashMap<Integer, Integer> vorher = new HashMap<Integer, Integer>();
00086 private HashMap<Integer, Integer> nachher = new HashMap<Integer, Integer>();
00087
00088
00089
00099 private Layer()
00100 {
00101 super("I2BPro");
00102
00103
00104 addWindowListener(new WindowClosingAdapter(true));
00105 setJMenuBar(mainmenu);
00106
00107
00108 add(createMainPanel());
00109 }
00110
00111
00112
00122 private JPanel createMainPanel()
00123 {
00124 mainPanel.setLayout(new BorderLayout(5,5));
00125 mainPanel.add(eastPanel, BorderLayout.EAST);
00126 mainPanel.add(centerPanel, BorderLayout.CENTER);
00127 mainPanel.add(southPanel, BorderLayout.SOUTH);
00128 return mainPanel;
00129 }
00130
00131
00132
00141 public static Layer getInstance() { return instance; }
00142
00143
00144
00155 public void run()
00156 {
00157 Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
00158 int hoehe = (int)(dim.getHeight() * 0.75);
00159 int breite = (int)(dim.getWidth() * 0.75);
00160 int y = (int)((dim.getHeight()/2)-(hoehe/2));
00161 int x = (int)((dim.getWidth()/2)-(breite/2));
00162 setBounds(x, y, breite, hoehe);
00163 setVisible(true);
00164 }
00165
00166
00167
00187 public void run(String filename) throws PlayListException,
00188 FileNotFoundException, IOException, CannotReadException,
00189 TagException, ReadOnlyFileException, InvalidAudioFrameException
00190 {
00191 PlayList.getInstance().setPlayList(filename);
00192 centerPanel.PlayListChange();
00193 run();
00194 }
00195
00196
00197
00205 public void Reset()
00206 {
00207 isTableChanged = false;
00208 PositionUpdate = false;
00209 isPlayerStarting = false;
00210 setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
00211 }
00212
00213
00214
00230 public void play() throws LayerException, MalformedURLException,
00231 IOException, NoPlayerException
00232 {
00233 if (Player.getInstance().getState() != 2)
00234 id = centerPanel.getSelectedRow();
00235 StartPlay();
00236 }
00237
00238
00239
00256 public void play(int new_id) throws LayerException, MalformedURLException,
00257 IOException, NoPlayerException
00258 {
00259 id = new_id;
00260 StartPlay();
00261 }
00262
00263
00264
00299 private void StartPlay() throws LayerException, MalformedURLException,
00300 IOException, NoPlayerException
00301 {
00302 if (isRandom)
00303 {
00304 id = random_id;
00305 } else {
00306 if (PlayList.getInstance().getFileName() == null)
00307 throw new LayerException(100);
00308 if (PlayList.getInstance().getPlayList().isEmpty())
00309 throw new LayerException(101);
00310 if (id < 0) throw new LayerException(102);
00311 }
00312 if (!isPlayerStarting && !isTableChanged)
00313 {
00314 if (Player.getInstance().getState() == 1) stop();
00315 if (Player.getInstance().getState() == 2)
00316 centerPanel.updateUI();
00317 isPlayerStarting = true;
00318 Player.getInstance().play(id);
00319 }
00320 }
00321
00322
00323
00333 public void PlayerStarted()
00334 {
00335 eastPanel.PlayerStarted();
00336 southPanel.PlayerStarted();
00337 mainmenu.PlayerStarted();
00338 centerPanel.updateUI();
00339 old_id = id;
00340 isPlayerStarting = false;
00341 }
00342
00343
00344
00356 public boolean isPositionUpdate() {return PositionUpdate; }
00357
00358
00359
00370 public void setPositionUpdate(boolean val) { PositionUpdate = val; }
00371
00372
00373
00387 public void PositionUpdate()
00388 {
00389 PositionUpdate = true;
00390 southPanel.setPositionLabel(Player.getInstance().getPosition().getString());
00391 southPanel.setPositionValue(Player.getInstance().getPosition().getSeconds());
00392 }
00393
00394
00395
00403 public void pause()
00404 {
00405 if (Player.getInstance().getState() == 1) Player.getInstance().pause();
00406 }
00407
00408
00409
00418 public void PlayerPaused()
00419 {
00420 southPanel.PlayerPaused();
00421 mainmenu.PlayerPause();
00422 }
00423
00424
00425
00433 public void stop()
00434 {
00435 if (Player.getInstance().getState() > 0) Player.getInstance().stop();
00436 }
00437
00438
00439
00448 public void PlayerStopped()
00449 {
00450 southPanel.PlayerStopped();
00451 mainmenu.PlayerStopped();
00452 centerPanel.updateUI();
00453 }
00454
00455
00456
00477 public void PlayerEndOfMedia() throws LayerException, MalformedURLException,
00478 IOException, NoPlayerException
00479 {
00480 if (isRandom)
00481 {
00482 random_id = nachher.get(random_id);
00483 if (random_id != -1) play();
00484 } else {
00485 int new_id = id + 1;
00486 if (new_id < PlayList.getInstance().getPlayList().size())
00487 {
00488 play(new_id);
00489 } else {
00490 id = -1;
00491 centerPanel.updateUI();
00492 }
00493 }
00494 }
00495
00496
00497
00521 public void Prior() throws LayerException, MalformedURLException,
00522 IOException, NoPlayerException
00523 {
00524 if (PlayList.getInstance().getPlayList().size() > 0)
00525 {
00526 if (isRandom)
00527 {
00528 random_id = vorher.get(random_id);
00529 if (random_id == -1) random_id = last_id;
00530 play(random_id);
00531 } else {
00532 int new_id = id - 1;
00533 if (new_id < 0) new_id =
00534 PlayList.getInstance().getPlayList().size() - 1;
00535 play(new_id);
00536 }
00537 }
00538 }
00539
00540
00541
00562 public void Next() throws LayerException, MalformedURLException,
00563 IOException, NoPlayerException
00564 {
00565 if (isRandom)
00566 {
00567 random_id = nachher.get(random_id);
00568 if (random_id == -1) random_id = first_id;
00569 play(random_id);
00570 } else {
00571 int new_id = id + 1;
00572 if (new_id > PlayList.getInstance().getPlayList().size() - 1)
00573 new_id = 0;
00574 play(new_id);
00575 }
00576 }
00577
00578
00579
00586 public void toggleMute()
00587 {
00588 Player.getInstance().toggleMute();
00589 }
00590
00591
00592
00600 public void toggledMute()
00601 {
00602 southPanel.toggledMute();
00603 mainmenu.toggledMute();
00604 }
00605
00606
00607
00620 public void PlayListChange()
00621 {
00622 centerPanel.PlayListChange();
00623 if (PlayList.getInstance().getPlayList().isEmpty() != true)
00624 {
00625 id = -1;
00626 mainmenu.getMenu(0).getMenuComponent(5).setEnabled(true);
00627 } else {
00628 mainmenu.getMenu(0).getMenuComponent(5).setEnabled(false);
00629 }
00630 }
00631
00632
00633
00642 public void setVolume(int volume)
00643 {
00644 eastPanel.setVolumeValue(volume);
00645 }
00646
00647
00648
00662 public void setSave(boolean isSave)
00663 {
00664 this.isSave = isSave;
00665 mainmenu.getMenu(0).getMenuComponent(2).setEnabled(isSave);
00666 }
00667
00668
00669
00678 public boolean isSave() { return isSave; }
00679
00680
00681
00689 public Integer getID() { return id; }
00690
00691
00692
00700 public void DeleteMedia() throws LayerException
00701 {
00702 DeleteMedia(centerPanel.getSelectedRow());
00703 }
00704
00705
00706
00731 public void DeleteMedia(int del_id) throws LayerException
00732 {
00733 if (del_id < 0) throw new LayerException(103);
00734 if ((del_id == id) && (Player.getInstance().getState() > 0)) stop();
00735 PlayList.getInstance().DeleteMedia(del_id);
00736 if ((del_id < id) && (id > -1)) id--;
00737 if (id > -1) centerPanel.setRowSelection(del_id);
00738 }
00739
00740
00741
00756 public boolean toggleRandom() throws LayerException, MalformedURLException,
00757 IOException, NoPlayerException
00758 {
00759 if (isRandom) isRandom = false; else StartRandom();
00760 return isRandom;
00761 }
00762
00763
00764
00782 private void StartRandom() throws LayerException, MalformedURLException,
00783 IOException, NoPlayerException
00784 {
00785 isRandom = true;
00786 vorher.clear();
00787 nachher.clear();
00788 int size = PlayList.getInstance().getPlayList().size();
00789 Random r = new Random();
00790 int num = Math.abs(r.nextInt()) % size;
00791 vorher.put(num, -1);
00792 first_id = num;
00793 int now = num;
00794 for (int i=0; i<size-1; i++)
00795 {
00796 do { num = Math.abs(r.nextInt()) % size; }
00797 while (vorher.get(num) != null);
00798 vorher.put(num, now);
00799 nachher.put(now, num);
00800 now = num;
00801 }
00802 nachher.put(now, -1);
00803 random_id = first_id;
00804 last_id = now;
00805 }
00806 }