/*

  Status window class

*/


import java.awt.*;


class StatusWindow extends Frame {

  public Net net;

  int width = 120;    // dimensions of window
  int height = 170;
  

  StatusWindow (Net nt) {

    super ("Status");
    net = nt;

    setTitle("Status");
    setBackground(new Color(220, 220, 220));
    move (net.window_x + 10, 200);
  }



  public void paint (Graphics g) {
    String str;
    Font status_font14, status_font18;
    FontMetrics f_met14, f_met18;
    int i, f_width, f_ascent14, f_ascent18;
    int cur_line = 40;

    g.setColor (new Color (127, 0, 50));

    status_font18 = new Font("TimesRoman", Font.PLAIN, 18);
    f_met18 = g.getFontMetrics(status_font18);
    f_ascent18 = f_met18.getAscent();
    status_font14 = new Font("TimesRoman", Font.PLAIN, 14);
    f_met14 = g.getFontMetrics(status_font14);
    f_ascent14 = f_met14.getAscent();

    // Draw "Iteration"
    
    if (net.cur_iter > 0) {
      g.setFont(status_font18);
      cur_line += 7 + f_ascent18;
      str = "Iteration #" + Integer.toString(net.cur_iter);
      f_width = f_met18.stringWidth(str);
      g.drawString(str, center(f_width), cur_line);
      cur_line += 2;
      g.drawLine(center(f_width), cur_line, center(f_width)+f_width, cur_line);
    }

    // Draw "Inputs"

    g.setFont(status_font18);
    cur_line += 7 + f_ascent18;
    str = "Inputs";
    f_width = f_met18.stringWidth(str);
    g.drawString(str, center(f_width), cur_line);
    cur_line += 2;
    g.drawLine(center(f_width), cur_line, center(f_width)+f_width, cur_line);

    // Draw Inputs

    g.setFont(status_font14);
    int max_nodenum_width = 0;
    int cur_x;
    for (i = 1; i <= net.input_nodes; i ++) {
      f_width = f_met14.stringWidth(Integer.toString(i));
      if (f_width > max_nodenum_width) max_nodenum_width = f_width;
    }
    
    cur_line += 5;
    for (i = 1; i <= net.input_nodes; i ++) {
      cur_line += f_ascent14 + 4;
      str = "Node";
      g.drawString(str, 10, cur_line);
      cur_x = f_met14.stringWidth(str);
      g.drawString(Integer.toString(i) + ":  " + Float.toString(net.neuron[1][i].getRndValue()),
          8 + cur_x + max_nodenum_width, cur_line);
    }

    // Draw "Outputs"

    g.setFont(status_font18);
    cur_line += 14 + f_ascent18;
    str = "Outputs";
    f_width = f_met18.stringWidth(str);
    g.drawString(str, center(f_width), cur_line);
    cur_line += 2;
    g.drawLine(center(f_width), cur_line, center(f_width)+f_width, cur_line);

    // Draw Outputs

    g.setFont(status_font14);
    max_nodenum_width = 0;
    cur_x = 0;
    for (i = 1; i <= net.output_nodes; i ++) {
      f_width = f_met14.stringWidth(Integer.toString(i));
      if (f_width > max_nodenum_width) max_nodenum_width = f_width;
    }

    cur_line += 5;
    for (i = 1; i <= net.output_nodes; i ++) {
      cur_line += f_ascent14 + 4;
      str = "Node";
      g.drawString(str, 10, cur_line);
      cur_x = f_met14.stringWidth(str);
      g.drawString(Integer.toString(i) + ":  " + Float.toString(net.neuron[net.num_layers][i].getRndValue()),
          8 + cur_x + max_nodenum_width, cur_line);
    }

    // Resize the window

    cur_line += 19;
    height = cur_line;
    resize(width, height+10);
  }

  int center (int font_width) {
    return (int) ((width - font_width) / 2);
  }

}
