import java.awt.Frame;
import java.awt.FlowLayout;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.Event;
import java.awt.Panel;
import java.awt.Dimension;
import java.awt.Color;

/**
 * Class ButtonBar : Gestion des boutons de controle
 * URL Parameters : Parametres du repertoire distant
 * Options : Gestion des options
 * Results : Affichage des resultats des dernieres requetes
 */
class ButtonBar extends Panel {
  private Frame top;
  private Button b_quit, b_par, b_opt, b_res;
  private String URL="", Remdir="", Port="21";
  private static String ClassName = "ButtonBar";
  private boolean LOADING = false;

/**
 * Constructeur ButtonBar
 * @param parent Frame principale
 */
  public ButtonBar(Frame parent) {
    top = parent;
    setLayout(new FlowLayout());
    add(new ClockThread());
    add(b_par = new Button("URL Parameters"));
    add(b_opt = new Button("Options"));
    add(b_res = new Button("Results"));
    add(b_quit = new Button("Quit"));
  }

/** 
 * @param state Etat du chargement
 */
  public void inform(boolean state) {
    Init.println(ClassName, "Inform:"+state);
    LOADING=state;
    repaint();
  }

/**
 * Gestion des actions sur les boutons
 */
  public boolean action(Event ev, Object what) {
    if (ev.target == b_quit)
      System.exit(1);
    else if (ev.target == b_par)  // Parametres de l'URL
      ((FtpClnt)top).bp.Open(getURLParameter(), this);
    else if (ev.target == b_opt)  // Bouton d'options
      Init.println(ClassName, "Options:Not implemented yet");
    else if (ev.target == b_res)  // Boutons de resultats
      ((FtpClnt)top).op.Results();
    else  // Action indefinie
      Init.println(ClassName, "Autre (NE DOIT JAMAIS APPARAITRE):"+ev.target);
    return true;
  }

/**
 * Recupere les parametres de l'URL
 */
  public String getURLParameter() {
//  ouvre un boite de dialog pour entrer les parametres
    URLDialog d = new URLDialog(URL, Remdir, Port);
    d.show();
    if (d.getMode()) {  // Si on a appuye sur Ok
// recupere les parametres entres
      URL = d.getURL();
      Remdir = d.getRemdir();
      Port = d.getPort();
      String log = d.getLogin(), passwd = d.getPasswd();

// Recherche le type de l'URL
      int ind = URL.indexOf("//");
      Init.println(ClassName, "URL:"+URL+":"+ind);
      String r;
      if (log == null || log.length() == 0)
        r = "";
      else
        r = log+":"+passwd+(Port.length()==0?"":(":"+Port))+"@";

//calcul l'URL globale : type://login:password:port:url/dir/
      Init.println(ClassName, URL+"."+Remdir+".");	  
      if (ind == -1)
        return "ftp://"+r+URL+"|"+Remdir;
      return URL.substring(0, ind+2)+r+URL.substring(ind+2)+"|"+Remdir;
    } else return null;
  }

  public void paint (Graphics g) {
    Init.println(ClassName, "paint:"+LOADING);
    Dimension tmp = size();
    
    if (LOADING) {
      g.setColor(Color.red);
      g.drawString("LOADING...", tmp.width-100, 30);
    }
  }

/**
 * @return dimensions desirees
 * Ces dimensions sont calculees en fonction de la taille de
 * la fenetre principale.
 */
  public Dimension preferredSize() {
    Dimension tmp = top.size();
    return new Dimension(tmp.width, 50);
  }
}

