Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var showAllKeysDialog = func {
- var node = props.globals.getNode("/input/keyboard");
- var def = props.Node.new({ filename : getprop("/sim/fg-root")~"/keyboard.xml", targetnode : "/input/keyboard-default" });
- fgcommand("loadxml",def);
- var name = "Allkeys";
- var toggle = size(arg) > 0 and arg[0] != nil and arg[0] > 0;
- if (toggle and contains(dialog, name)) {
- fgcommand("dialog-close", props.Node.new({ "dialog-name": name }));
- delete(dialog, name);
- return;
- }
- dialog[name] = Widget.new();
- dialog[name].set("layout", "vbox");
- dialog[name].set("default-padding", 0);
- dialog[name].set("name", name);
- # title bar
- var titlebar = dialog[name].addChild("group");
- titlebar.set("layout", "hbox");
- titlebar.addChild("empty").set("stretch", 1);
- titlebar.addChild("text").set("label", "All keys by category");
- titlebar.addChild("empty").set("stretch", 1);
- var w = titlebar.addChild("button");
- w.set("pref-width", 16);
- w.set("pref-height", 16);
- w.set("legend", "");
- w.set("default", 1);
- w.set("key", "esc");
- w.setBinding("nasal", "delete(gui.dialog, \"" ~ name ~ "\")");
- w.setBinding("dialog-close");
- dialog[name].addChild("hrule");
- # key listing
- var keydefs=[];
- foreach (var key; node.getChildren("key")) {
- var name_node=key.getChild("name");
- var desc_node=key.getChild("desc");
- if (key.getChild("mod-shift") != nil) var mshf_node=key.getChild("mod-shift").getChild("desc");
- else var mshf_node = nil;
- if (name_node != nil) {
- var nme = name_node.getValue();
- var custom=1;
- if (desc_node != nil) {
- var desc = desc_node.getValue();
- if (desc == getprop("/input/keyboard-default/key["~key.getIndex()~"]/desc")) custom = 0;
- } else var desc="";
- if (mshf_node != nil) {
- var mshf = mshf_node.getValue();
- if (mshf == getprop("/input/keyboard-default/key["~key.getIndex()~"]/mod-shift/desc")) custom=0;
- } else var mshf="";
- if (nme != getprop("/input/keyboard-default/key["~key.getIndex()~"]/name") and
- nme != getprop("/input/keyboard-default/key["~key.getIndex()~"]/mod-shift/name")) custom = 1;
- if (custom == 1) nme = nme ~" (c)";
- if (desc_node != nil) {
- if (key.getChild("category") != nil) append(keydefs, [nme, desc, key.getChild("category").getValue()]);
- else append(keydefs, [nme, desc, "None"]);
- }
- if (mshf_node != nil) {
- if (key.getChild("mod-shift").getChild("category") != nil)
- append(keydefs, ["Shift-"~nme, mshf, key.getChild("mod-shift").getChild("category").getValue()]);
- else append(keydefs, ["Shift-"~nme, mshf, "None"]);
- }
- }
- }
- keydefs = sort(keydefs, func(a, b) { cmp(a[2],b[2]); });
- var cat = "";
- var text="";
- foreach (var key; keydefs) {
- if (cmp(key[2], cat) != 0) {
- text = text ~ (text == "" ? "" : "\n") ~ key[2] ~ ":\n";
- cat=key[2];
- }
- text = text ~ key[0] ~ " ... " ~ key[1] ~ "\n";
- }
- node.setValues({"text": text});
- # scrollable text area
- if (node.getNode("text") != nil) {
- dialog[name].set("resizable", 1);
- dialog[name].addChild("empty").set("pref-height", 10);
- var width = 500;
- var height = screenHProp.getValue() - 100;
- if (height < 200) {
- height = 200;
- }
- var w = dialog[name].addChild("textbox");
- w.set("padding", 4);
- w.set("halign", "fill");
- w.set("valign", "fill");
- w.set("stretch", "true");
- w.set("slider", 20);
- w.set("pref-width", width);
- w.set("pref-height", height);
- w.set("editable", 0);
- w.set("property", node.getPath() ~ "/text");
- } else {
- dialog[name].addChild("empty").set("pref-height", 8);
- }
- fgcommand("dialog-new", dialog[name].prop());
- showDialog(name);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement