import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

/**
 * Definisce la struttura comune di tutte le finestre di dialogo
 * usate nell'applicazione:<BR>
 * - una parte centrale predisposta per essere riempita con un pannello;<BR>
 * - una parte inferiore contenente per adesso solo un bottone "chiudi"
 *   ma predisposta per aggiungere altri bottoni.
 */
public class Finestra extends JDialog
{
  /** Bottone per chiudere la finestra. */
  public JButton btChiudi;
  /** Pannello inferiore destinato ad accogliere il bottone per chiudere
   * ed eventuali altri che potranno essere aggiunti.
   * @see Finestra#mettiInBasso */
  protected JPanel panBottoni;
    
  /** Crea finestra secondaria dipendente dalla finestra assegnata.
   * La finestra usa border layout con al centro
   * per adesso nulla (ma il metodo mettiInCentro permettera' di 
   * inserire un elemento) e a sud un pannello organizzato con flowù
   * layout, che per ora contiene solo il bottone Chiudi (ma il
   * metodo mettiInBasso permettera' di aggiungere altri elementi).
   * Il bottone chiudi ha gia' la callback che chiude la finestra.
   * @see Finestra#mettiInCentro
   * @see Finestra#mettiInBasso */
  public Finestra(JDialog chiamante)
  {
    super(chiamante);
    setModal(true);
    btChiudi = new JButton("chiudi");
    panBottoni = new JPanel(new FlowLayout());
    panBottoni.add(btChiudi);
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(BorderLayout.SOUTH,panBottoni);
  }
  
  /** Mette il componente specificato al centro della finestra.
   * Al centro puo' stare un solo componente, percio' questo metodo
   * puo' essere chiamato una volta sola. 
   * @param c   componente da mettere al centro, preferibilmente 
   * deve essere un elemento di dimensioni grandi che rappresenta la
   * parte principale della finestra */
  public void mettiInCentro(JComponent c)
  {  getContentPane().add(BorderLayout.CENTER,c);  }
  
  /**
   * Aggiunge il componente specificato nel pannello predisposto a sud 
   * della finestra. A sud puo' stare un numero a piacere di componenti
   * (sono inseriti in un pannello con flow layout), percio' questo metodo
   * puo' essere chiamato piu' volte.
   * @param c   componente da aggiungere in basso, preferibilente
   * dovrebbe essere un bottone */
  public void mettiInBasso(JComponent c)
  {  panBottoni.add(c);  }
}
