package gui;
/**
  * Universidade Federal de Pernambuco
  * Centro de Informática
  * Disciplina: Introducao a Programação
  * Projeto Celular
  *
  * Tipo: PainelDeControle
  *
  * @author: Luciana Pereira Oliveira
  * @since 2002
  * @version 3.0
  **/
import java.awt.*;import java.io.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;

public class PainelDeControle extends Panel{
  Button botaoUm = new Button();
  private transient Vector painelDeControleListeners;
  
  public PainelDeControle() {
    try  {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  private void jbInit() throws Exception {
    this.setSize(50,50);
    botaoUm.setLabel("1");
    botaoUm.addActionListener(new PainelDeControle_botaoUm_actionAdapter(this));
    
    this.add(botaoUm, null);
  }

  void writeObject(ObjectOutputStream oos) throws IOException {
    oos.defaultWriteObject();
  }

  void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
    ois.defaultReadObject();
  }
  
  public void setUmHabilitado(boolean newUmHabilitado) {
    botaoUm.setEnabled(newUmHabilitado);
  }

  public boolean isUmHabilitado() {
    return botaoUm.isEnabled();
  }

  
  //remove da lista de "ouvinte", ou seja, tratamento de eventos (PainelDeControleListener)
  public synchronized void removePainelDeControleListener(PainelDeControleListener l) {
    if (painelDeControleListeners != null && painelDeControleListeners.contains(l)) {
      Vector v = (Vector) painelDeControleListeners.clone();
      v.removeElement(l);
      painelDeControleListeners = v;
    }
  }
  //adicionar na lista de "ouvinte", ou seja, tratamento de eventos (PainelDeControleListener)
  public synchronized void addPainelDeControleListener(PainelDeControleListener l) {
    Vector v = painelDeControleListeners == null ? new Vector(2) : (Vector) painelDeControleListeners.clone();
    if (!v.contains(l)) {
      v.addElement(l);
      painelDeControleListeners = v;
    }
  }
  
  /*De acordo com a classe adaptadore, estamos interessados
  apenas no click do botao, sendo passado para o metodo 
  fireBotaoUmPressionado*/
  void botaoUm_actionPerformed(ActionEvent e) {
    fireBotaoUmPressionado(new PainelDeControleEvent(this));
  }
  
  /*o fireBotaoUmPressionado avisa para PainelDeControleListener
  fazer o tratamento do botao um pressionado*/
  protected void fireBotaoUmPressionado(PainelDeControleEvent e) {
    if (painelDeControleListeners != null) {
      Vector listeners = painelDeControleListeners;
      int count = listeners.size();
      for (int i = 0; i < count; i++)
        ((PainelDeControleListener) listeners.elementAt(i)).botaoUmPressionado(e);
    }
  }
}
/*Classe adaptadora fornece uma implementação vazia para 
  da um dos métodos de uma interface ouvinte de eventos 
  (event listener).Elas são muito úteis quando queremos 
  receber e processar apenas alguns dos eventos 
  que são manipulados por uma determinada interface listener de
  eventos. Podemos definir uma nova classe para funcionar como
  listener implementando somente os métodos 
  correspondentes àqueles eventos nos quais estamos interessados.
  Neste caso estamos interessado no click do botão um */ 

class PainelDeControle_botaoUm_actionAdapter implements java.awt.event.ActionListener{
  PainelDeControle adaptee;


  PainelDeControle_botaoUm_actionAdapter(PainelDeControle adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.botaoUm_actionPerformed(e);
  }
}

