package v1.Impl.UI;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import v1.Impl.Controller;
import v1.Impl.HorlogeImpl;
import v1.Interface.Horloge;
public class IHM extends JFrame {
private static final long serialVersionUID = -6549382161315113036L;
private Controller ctl;
private Buzzer bzzr;
private StartButton startBtn;
private StopButton stopBtn;
private DecButton decBtn;
private IncButton incBtn;
private MoletteSlider moletteSldr;
private MesureDisplayer md;
private Afficheur aff;
private Led ledTemps;
private Led ledMesure;
private JPanel barreDeBouttons;
private Horloge h;
private int tempo;
private JPanel zoneDuCentre;
private Afficheur affMesure;
public IHM(final Controller ctl) {
this.ctl = ctl;
bzzr = new Buzzer();
stopBtn = new StopButton(this);
startBtn = new StartButton(this);
decBtn = new DecButton(this);
incBtn = new IncButton(this);
moletteSldr = new MoletteSlider(this);
aff = new Afficheur(this);
md = new MesureDisplayer(this, ctl.getMesure());
h = new HorlogeImpl();
ledTemps = new Led(Color.GREEN, h);
ledMesure = new Led(Color.RED,h );
affMesure = new Afficheur(this);
affMesure.setText(""+ctl.getMesure());
tempoHasChanged(moletteSldr.getValue());
this.setPreferredSize(new Dimension(400, 150));
this.setSize(getPreferredSize());
this.setVisible(true);
this.setLayout(new BorderLayout());
stopBtn.setEnabled(false);
barreDeBouttons = new JPanel();
barreDeBouttons.setLayout(new FlowLayout());
barreDeBouttons
.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
barreDeBouttons.add(startBtn);
barreDeBouttons.add(stopBtn);
barreDeBouttons.add(affMesure);
barreDeBouttons.add(incBtn);
barreDeBouttons.add(decBtn);
this.add(barreDeBouttons, BorderLayout.SOUTH);
zoneDuCentre = new JPanel();
zoneDuCentre.setLayout(new BorderLayout());
zoneDuCentre.add(ledTemps,BorderLayout.WEST);
zoneDuCentre.add(aff,BorderLayout.CENTER);
zoneDuCentre.add(ledMesure, BorderLayout.EAST);
zoneDuCentre.add(md, BorderLayout.SOUTH);
this.add(zoneDuCentre, BorderLayout.CENTER);
this.add(moletteSldr, BorderLayout.NORTH);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
System.exit(0);
}
});
this.pack();
}
public void notifyTemps() {
md.temps();
ledTemps.update(Led.LEDTEMPS);
bzzr.update();
}
public void notifyMesure() {
md.mesure();
ledMesure.update(Led.LEDMESURE);
}
public void start() {
ctl.start();
stopBtn.setEnabled(true);
}
public void stop() {
ctl.stop();
stopBtn.setEnabled(false);
md.reset();
}
public void incMesure() {
ctl.inc();
md.inc();
affMesure.setText("" + ctl.getMesure());
}
public void decMesure() {
ctl.dec();
md.dec();
affMesure.setText("" + ctl.getMesure());
}
public void tempoHasChanged(int newTempo) {
tempo = newTempo;
aff.setText(tempo + " bpm");
ctl.setTempo(tempo);
}
public int getTempo() {
return tempo;
}
public void activerDec() {
decBtn.setEnabled(true);
}
public void desactiverInc() {
incBtn.setEnabled(false);
}
public void activerInc() {
incBtn.setEnabled(true);
}
public void desactiverDec() {
decBtn.setEnabled(false);
}
public void tempoHasChanging(int value) {
aff.setText(value + " bpm");
}
}