View difference between Paste ID: 5Rcz6AU7 and 26h2nZ2D
SHOW: | | - or go back to the newest paste.
1
var showAllKeysDialog = func {
2
    var node = props.globals.getNode("/input/keyboard");
3
    var def = props.Node.new({ filename : getprop("/sim/fg-root")~"/keyboard.xml", targetnode : "/input/keyboard-default" });
4
    fgcommand("loadxml",def);
5
                
6
    var name = "Allkeys";
7
    
8
    var toggle = size(arg) > 0 and arg[0] != nil and arg[0] > 0;
9
    if (toggle and contains(dialog, name)) {
10
        fgcommand("dialog-close", props.Node.new({ "dialog-name": name }));
11
        delete(dialog, name);
12
        return;
13
    }
14
15
    dialog[name] = Widget.new();
16
    dialog[name].set("layout", "vbox");
17
    dialog[name].set("default-padding", 0);
18
    dialog[name].set("name", name);
19
20
    # title bar
21
    var titlebar = dialog[name].addChild("group");
22
    titlebar.set("layout", "hbox");
23
    titlebar.addChild("empty").set("stretch", 1);
24
    titlebar.addChild("text").set("label", "All keys by category");
25
    titlebar.addChild("empty").set("stretch", 1);
26
27
    var w = titlebar.addChild("button");
28
    w.set("pref-width", 16);
29
    w.set("pref-height", 16);
30
    w.set("legend", "");
31
    w.set("default", 1);
32
    w.set("key", "esc");
33
    w.setBinding("nasal", "delete(gui.dialog, \"" ~ name ~ "\")");
34
    w.setBinding("dialog-close");
35
36
    dialog[name].addChild("hrule");
37
38-
    # key list
38+
    # key listing
39-
    var keylist = dialog[name].addChild("group");
39+
40-
    keylist.set("layout", "table");
40+
    foreach (var key; node.getChildren("key")) {
41-
    keylist.set("default-padding", 2);
41+
42
      var desc_node=key.getChild("desc");
43-
    foreach (key; props.globals.getNode("/input/keyboard").getChildren("key")) {
43+
44
      else var mshf_node = nil;
45
      if (name_node != nil) {
46
        var nme = name_node.getValue();
47
        var custom=1;
48
        if (desc_node != nil) {
49
          var desc = desc_node.getValue(); 
50
          if (desc == getprop("/input/keyboard-default/key["~key.getIndex()~"]/desc")) custom = 0;
51
        } else var desc="";
52
        if (mshf_node != nil) {
53
          var mshf = mshf_node.getValue(); 
54
          if (mshf == getprop("/input/keyboard-default/key["~key.getIndex()~"]/mod-shift/desc")) custom=0;
55
        } else var mshf="";
56
        if (nme != getprop("/input/keyboard-default/key["~key.getIndex()~"]/name") and 
57
           nme != getprop("/input/keyboard-default/key["~key.getIndex()~"]/mod-shift/name")) custom = 1; 
58
        if (custom == 1) nme = nme ~" (c)";
59
        
60
        if (desc_node != nil) {
61
          if (key.getChild("category") != nil) append(keydefs, [nme, desc, key.getChild("category").getValue()]);
62
          else append(keydefs, [nme, desc, "None"]);
63
        }
64
        if (mshf_node != nil) {
65
          if (key.getChild("mod-shift").getChild("category") != nil) 
66
              append(keydefs, ["Shift-"~nme, mshf, key.getChild("mod-shift").getChild("category").getValue()]);
67
          else append(keydefs, ["Shift-"~nme, mshf, "None"]);
68
        }
69
      }
70
    } 
71
    keydefs = sort(keydefs, func(a, b) { cmp(a[2],b[2]); });
72
    var cat = "";
73
    var text="";
74
    foreach (var key; keydefs) {
75
      if (cmp(key[2], cat) != 0) {
76
        text = text ~ (text == "" ? "" : "\n") ~ key[2] ~ ":\n";
77
        cat=key[2];
78
      }
79
      text = text ~ key[0] ~ " ... " ~ key[1] ~ "\n";
80
    }
81
    node.setValues({"text": text});
82
83
    # scrollable text area
84
    if (node.getNode("text") != nil) {
85
        dialog[name].set("resizable", 1);
86
        dialog[name].addChild("empty").set("pref-height", 10);
87
88
        var width = 500;
89
        var height = screenHProp.getValue() - 100;
90
        if (height < 200) {
91
            height = 200;
92
        }
93
94
        var w = dialog[name].addChild("textbox");
95
        w.set("padding", 4);
96
        w.set("halign", "fill");
97
        w.set("valign", "fill");
98
        w.set("stretch", "true");
99
        w.set("slider", 20);
100
        w.set("pref-width", width);
101
        w.set("pref-height", height);
102
        w.set("editable", 0);
103
        w.set("property", node.getPath() ~ "/text");
104
    } else {
105
        dialog[name].addChild("empty").set("pref-height", 8);
106
    }
107
    fgcommand("dialog-new", dialog[name].prop());
108
    showDialog(name);
109
}