Advertisement
Guest User

FG All Keys

a guest
May 5th, 2013
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  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
  39. var keylist = dialog[name].addChild("group");
  40. keylist.set("layout", "table");
  41. keylist.set("default-padding", 2);
  42. var keydefs=[];
  43. foreach (key; props.globals.getNode("/input/keyboard").getChildren("key")) {
  44. var name_node=key.getChild("name");
  45. var desc_node=key.getChild("desc");
  46. if (key.getChild("mod-shift") != nil) var mshf_node=key.getChild("mod-shift").getChild("desc");
  47. else var mshf_node = nil;
  48. if (name_node != nil) {
  49. var nme = name_node.getValue();
  50. var custom=1;
  51. if (desc_node != nil) {
  52. var desc = desc_node.getValue();
  53. if (desc == getprop("/input/keyboard-default/key["~key.getIndex()~"]/desc")) custom = 0;
  54. } else var desc="";
  55. if (mshf_node != nil) {
  56. var mshf = mshf_node.getValue();
  57. if (mshf == getprop("/input/keyboard-default/key["~key.getIndex()~"]/mod-shift/desc")) custom=0;
  58. } else var mshf="";
  59. if (nme != getprop("/input/keyboard-default/key["~key.getIndex()~"]/name") and
  60. nme != getprop("/input/keyboard-default/key["~key.getIndex()~"]/mod-shift/name")) custom = 1;
  61. if (custom == 1) nme = nme ~" (c)";
  62.  
  63. if (desc_node != nil) {
  64. if (key.getChild("category") != nil) append(keydefs, [nme, desc, key.getChild("category").getValue()]);
  65. else append(keydefs, [nme, desc, "None"]);
  66. }
  67. if (mshf_node != nil) {
  68. if (key.getChild("mod-shift").getChild("category") != nil)
  69. append(keydefs, ["Shift-"~nme, mshf, key.getChild("mod-shift").getChild("category").getValue()]);
  70. else append(keydefs, ["Shift-"~nme, mshf, "None"]);
  71. }
  72. }
  73. }
  74. keydefs = sort(keydefs, func(a, b) { cmp(a[2],b[2]); });
  75. var cat = "";
  76. var text="";
  77. foreach (var key; keydefs) {
  78. if (cmp(key[2], cat) != 0) {
  79. text = text ~ (text == "" ? "" : "\n") ~ key[2] ~ ":\n";
  80. cat=key[2];
  81. }
  82. text = text ~ key[0] ~ " ... " ~ key[1] ~ "\n";
  83. }
  84. node.setValues({"text": text});
  85.  
  86. # scrollable text area
  87. if (node.getNode("text") != nil) {
  88. dialog[name].set("resizable", 1);
  89. dialog[name].addChild("empty").set("pref-height", 10);
  90.  
  91. var width = 500;
  92. var height = screenHProp.getValue() - 100;
  93. if (height < 200) {
  94. height = 200;
  95. }
  96.  
  97. var w = dialog[name].addChild("textbox");
  98. w.set("padding", 4);
  99. w.set("halign", "fill");
  100. w.set("valign", "fill");
  101. w.set("stretch", "true");
  102. w.set("slider", 20);
  103. w.set("pref-width", width);
  104. w.set("pref-height", height);
  105. w.set("editable", 0);
  106. w.set("property", node.getPath() ~ "/text");
  107. } else {
  108. dialog[name].addChild("empty").set("pref-height", 8);
  109. }
  110. fgcommand("dialog-new", dialog[name].prop());
  111. showDialog(name);
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement