package jbp12;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Vector;
/**
* interface pour jouer des fichier MPEG-3
*/

class JukeBox extends JFrame {
/**
*   r&eacute;pertoire contenant les fichiers MPEG-3
*/
  static String MP3_DIR=new String("/home/sov/Java/Programmes/mp3");
/**
*  collection de morceaux  
*/
  Vector<Morceau> morceaux;
/**
* numero du morceau affich&eacute;  
*/
  int noMorceauCourant;
/**
*  nombre de morceaux enregistr&eacute;s dans le juke-box 
*/
  JTextField nbMorceauxTF;
/**
*  titre du morceau courant 
*/
  JTextField titreTF;
/**
*  permet d'enregister les modifications du titre 
*/
  JButton boutonModifier;
/**
*  permet de passer en mode &eacute;dition pour changer le titre du morceau 
*/
  JButton boutonEditer;
/**
*  permet de jouer le morceau
*/
  JButton boutonEcouter;
/**
*  permet d'interrompre le morceau  
*/
  JButton boutonPause;
/**
*  permet de reprendre la lecture du morceau 
*/
  JButton boutonContinuer;
/**
* construit l'interface
*/
  public JukeBox() {   
    morceaux=new Vector<Morceau>();
    getContentPane().setLayout(new GridLayout(4,1));
    JPanel panBouton=new  JPanel();
    EffetBouton e=new EffetBouton(this);
    JButton bouton; 
    getContentPane().add(panBouton);
    panBouton.setLayout(new FlowLayout());
    panBouton.add(new JLabel("Nombre d'entrées : "));
    panBouton.add(nbMorceauxTF=new JTextField(Integer.toString(morceaux.size()),5));
    nbMorceauxTF.setEditable(false);
    panBouton.add(bouton=new JButton("<<"));
    bouton.addActionListener(e);
    panBouton.add(bouton=new JButton("<"));
    bouton.addActionListener(e);
    panBouton.add(bouton=new JButton(">"));
    bouton.addActionListener(e);
    panBouton.add(bouton=new JButton(">>"));
    bouton.addActionListener(e);
    panBouton.add(boutonEcouter=new JButton("Ecouter"));
    boutonEcouter.addActionListener(e);
    panBouton.add(boutonPause=new JButton("Pause"));
    boutonPause.addActionListener(e);
    boutonPause.setVisible(false);
    panBouton.add(boutonContinuer=new JButton("Continuer"));
    boutonContinuer.addActionListener(e);
    boutonContinuer.setVisible(false);
    JPanel panText=new JPanel();
    getContentPane().add(panText);
    panText.setLayout(new GridLayout(3,2));
    panText.add(new JLabel("Titre"));
    panText.add(titreTF=new JTextField("",15));
    if(morceaux.size() >0)
      titreTF.setText(morceaux.elementAt(noMorceauCourant).getTitre());
    titreTF.setEditable(false);
    JPanel panQuit=new  JPanel();
    getContentPane().add(panQuit);
    panQuit.setLayout(new FlowLayout());
    panQuit.add(bouton=new JButton("Ajouter"));
    bouton.addActionListener(e);
    panQuit.add(boutonEditer=new JButton("Editer"));
    boutonEditer.addActionListener(e);
    panQuit.add(boutonModifier=new JButton("Modifier"));
    boutonModifier.addActionListener(e);
    boutonModifier.setVisible(false);
    panQuit.add(bouton=new JButton("Quitter"));
    bouton.addActionListener(e);
    noMorceauCourant=0;
    if(morceaux.size()>0){
      afficherMorceau();
    }
  }
/**
* met l'interface en mode &eacute;dition ou consultation
*@param  b de type boolean
*/
  public void setEditable(boolean b){
    titreTF.setEditable(b);
    boutonModifier.setVisible(b);
    boutonEditer.setVisible(!b);
  }
/**
* dit si l'interface est en mode &eacute;dition ou non
@return true si l'interface est en mode &eacute;dition false sinon
*/
  public boolean isEditable(){
    return titreTF.isEditable();
  }
/**
* affiche le morceau dont l'index est {@link  jbp12.JukeBox#noMorceauCourant} noMorceauCourant
*/
  public void afficherMorceau(){
    Morceau morceauCourant=morceaux.elementAt(noMorceauCourant);
    titreTF.setText(morceauCourant.getTitre());
    if(morceauCourant.getThread().isAlive()){
      boutonEcouter.setVisible(false);
      if(morceauCourant.getPlayer().isPlaying()){
        boutonPause.setVisible(true);
        boutonContinuer.setVisible(false);
      }
      else{
        boutonPause.setVisible(false);
        boutonContinuer.setVisible(true);
      }
    }
    else{
      boutonEcouter.setVisible(true);
      boutonPause.setVisible(false);
      boutonContinuer.setVisible(false);
    }
  }
/**
*  programme principal affiche l'interface
*/
  public static void main(String[] args){
    JukeBox  a = new JukeBox();
    a.setSize(500,300);
    a.setVisible(true);
  }
}
/**
* traite les clics sur les boutons du juke-box
*/

class EffetBouton implements ActionListener{
/**
* r&eacute;f&eacute;rence sur l'interface graphique
*/
   JukeBox jukeBox;
/**
* construit un &eacute;couteur reli&eacute; &agrave; l'interface graphique
*@param  f de type {@link jbp12.JukeBox} JukeBox
*/
   EffetBouton(JukeBox f){
     jukeBox=f;
   }
/**
*   traite les clics sur les boutons de l'interface 
*@param  a de type java.awt.Event.ActionEvent
*/
   public void actionPerformed(ActionEvent a){
     if(a.getActionCommand().equals("<<")){
       jukeBox.noMorceauCourant=0;
       jukeBox.afficherMorceau();
     }
     else if(a.getActionCommand().equals("<")){
       jukeBox.noMorceauCourant--;
       if( jukeBox.noMorceauCourant<0)
         jukeBox.noMorceauCourant=0;
       jukeBox.afficherMorceau();
     }
     else if(a.getActionCommand().equals(">")){
       jukeBox.noMorceauCourant++;
       if( jukeBox.noMorceauCourant>=jukeBox.morceaux.size())
         jukeBox.noMorceauCourant=jukeBox.morceaux.size()-1;
       jukeBox.afficherMorceau();
     }
     else if(a.getActionCommand().equals(">>")){
       jukeBox.noMorceauCourant=jukeBox.morceaux.size()-1;
       jukeBox.afficherMorceau();
     }
     else if(a.getActionCommand().equals("Ecouter")){
      jukeBox.morceaux.elementAt(jukeBox.noMorceauCourant).start();
      jukeBox.boutonEcouter.setVisible(false);
      jukeBox.boutonPause.setVisible(true);
     }
     else if(a.getActionCommand().equals("Pause")){
       jukeBox.morceaux.elementAt(jukeBox.noMorceauCourant).getPlayer().pause();
       jukeBox.boutonPause.setVisible(false);
       jukeBox.boutonContinuer.setVisible(true);
     }
     else if(a.getActionCommand().equals("Continuer")){
       jukeBox.morceaux.elementAt(jukeBox.noMorceauCourant).getPlayer().resume();
       jukeBox.boutonPause.setVisible(true);
       jukeBox.boutonContinuer.setVisible(false);
     }
     else if(a.getActionCommand().equals("Editer")){
       jukeBox.setEditable(true);
     }
     else if(a.getActionCommand().equals("Ajouter")){
       JFileChooser jfc=new JFileChooser(JukeBox.MP3_DIR);
       jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
       int res=0;
       res=jfc.showOpenDialog(jukeBox);
       if(res==JFileChooser.APPROVE_OPTION){
         Morceau mp3=new Morceau(jfc.getSelectedFile().getName(),jfc.getSelectedFile().getAbsolutePath());
         jukeBox.morceaux.add(mp3);
         jukeBox.nbMorceauxTF.setText(Integer.toString(jukeBox.morceaux.size()));
         jukeBox.noMorceauCourant=jukeBox.morceaux.size()-1;
         jukeBox.afficherMorceau();
       }
     }
     else if(a.getActionCommand().equals("Modifier")){
       if(jukeBox.isEditable()){
         jukeBox.morceaux.elementAt(jukeBox.noMorceauCourant).setTitre(jukeBox.titreTF.getText());
         jukeBox.setEditable(false);
       }
     }
     else if(a.getActionCommand().equals("Quitter")){
       System.exit(0);
     }
  }
}

