package tv; // poderia estar num package mais genérico

import java.awt.*;
import java.beans.*;
import java.io.*;

/**
 * Um botão que acende quando está "on"
 */
public class BotaoOnOff extends Button
                        implements Serializable, PropertyChangeListener {

  protected boolean   on; // estado do botão
  protected PropertyChangeSupport pcs;

  // Construtor
  public BotaoOnOff() {
    // Cada bean tem um construtor default ("no-arg")
    super("Liga/Desliga");
    pcs = new PropertyChangeSupport(this);
    on = false;
  }

  // Método getter para propriedade "on"
  public boolean isOn() {
    return on;
  }

  // Método setter para propriedade "on"
  public void setOn(boolean on) {
    // Dispara a mudança para os listeners, se houver
    pcs.firePropertyChange("on", new Boolean(this.on), new Boolean(on));
    this.on = on;
    mudaVisual();
  }

  // Muda o visual da "lâmpada on/off"
  private void mudaVisual() {
    setBackground(isOn() ? Color.red : Color.gray);
  }

  // Se este bean for listener da propriedade "on" de outro bean,
  // entao precisamos deste método
  public void propertyChange(PropertyChangeEvent pce) {
    String propriedadeMudada = pce.getPropertyName();
    Object novoValor = pce.getNewValue();
    if(propriedadeMudada.equals("on")) {
      this.setOn(((Boolean)novoValor).booleanValue());
    }
  }

  // Método de cadastro de listeners
  // usa delegação para implementar
  public void addPropertyChangeListener(PropertyChangeListener l) {
    pcs.addPropertyChangeListener(l);
  }

  // Método de remoção de listeners
  // usa delegação para implementar
  public void removePropertyChangeListener(PropertyChangeListener l) {
    pcs.removePropertyChangeListener(l);
  }
}

