var dialog = nil;
var namenode = nil;

var close = func {
  zkv500.isOn = 0;
  fgcommand("dialog-close", namenode);
  delete(gui.dialog, "\"zkv500\"");
  dialog = nil;
}

var _title = func {
  var titlebar = dialog.addChild("group");
  titlebar.set("layout", "hbox");
  var wdg = titlebar.addChild("text");
  wdg.set("label", "test zkv500");
  titlebar.addChild("empty").set("stretch", 1);
  var wdg = titlebar.addChild("button");
  wdg.node.setValues({"pref-width": 16, "pref-height": 16, legend: "", default: 0});
  wdg.setBinding("nasal", "zkv_dbg.close()");
}

var _top_buttons = func {
  dialog.addChild("hrule");
  var buttons = dialog.addChild("group");
  buttons.set("layout", "hbox");
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "P", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.left_knob(1)");
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "en", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.enter_button()");
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "es", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.escape_button()");
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "st", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.start_button()");
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "S", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.right_knob(1)");
}

var _content = func {
  dialog.addChild("hrule");
  var content = dialog.addChild("group");
  content.set("layout", "table");
  content.set("default-padding", 0);
  for (var i = 0; i < 5; i += 1) {
    var line = content.addChild("text");
    line.node.setValues({"row":i,"col":0,"label":" "});
    var line = content.addChild("text");
    line.node.setValues({
      "row": i,
      "col": 1,
      "property": "/instrumentation/zkv500/line["~i~"]",
      "halign": "left",
      "live": 1
    });
    var line = content.addChild("text");
    line.node.setValues({"row":i,"col":2,"label":" "});
  }
}

var _bottom_buttons = func {
  dialog.addChild("hrule");
  var buttons = dialog.addChild("group");
  buttons.set("layout", "hbox");
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "M", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.select_mode(1)");
  buttons.addChild("empty").set("stretch", 1);
  var wdg = buttons.addChild("button");
  wdg.node.setValues({legend: "0/1", "pref-height": 20});
  wdg.setBinding("nasal", "zkv500.switch_ON_OFF()");
}

var reload_zkv_code = func {
  var zkv500_dir = getprop("/sim/fg-root") ~ "/Aircraft/Instruments-3d/zkv500/";
  io.load_nasal(zkv500_dir ~ "ZKV500.nas","zkv500");
  print("debugger: zkv500 loaded");
  zkv500.init();
}

var test = func {
  dialog == nil or close();
  reload_zkv_code();

  namenode = props.Node.new({"dialog-name" : "zkv500" });
  dialog = gui.Widget.new();
  dialog.set("name", "zkv500");

  dialog.set("layout", "vbox");
  dialog.set("default-padding", 0);

  _title();
  _top_buttons();
  _content();
  _bottom_buttons();

  fgcommand("dialog-new", dialog.prop());
  fgcommand("dialog-show", namenode);
  print("debugger: zkv500 testing interface loaded");
}
