/* client side js functions for registry editing Copyright Andrew Tridgell 2005 released under the GNU GPL Version 3 or later */ /* callback from the key enumeration call */ function __folder_keys(fParent, list) { var i; if (fParent.working == 1) { fParent.working = 0; fParent.removeAll(); } for (i=0;i<list.length;i++) { var fChild; fChild = new QxTreeFolder(list[i]); fParent.add(fChild); fChild.binding = fParent.binding; if (fParent.reg_path == '\\') { fChild.reg_path = list[i]; } else { fChild.reg_path = fParent.reg_path + '\\' + list[i]; } fChild.working = 1; fChild.add(new QxTreeFolder('Working ...')); fChild.addEventListener("click", function() { var el = this; __folder_click(el); }); } fParent.setOpen(1); } /* callback from the key enumeration call */ function __folder_values(fParent, list) { var i; if (list.length == 0) { return; } if (fParent.working == 1) { fParent.working = 0; fParent.removeAll(); } for (i=0;i<list.length;i++) { var fChild; fChild = new QxTreeFile(list[i].name); fChild.parent = fParent; fChild.details = list[i]; fParent.add(fChild); } fParent.setOpen(1); } /* called when someone clicks on a folder */ function __folder_click(node) { if (!node.populated) { node.populated = true; server_call_url("/scripting/server/regedit.esp", 'enum_keys', function(list) { __folder_keys(node, list); }, node.binding, node.reg_path); server_call_url("/scripting/server/regedit.esp", 'enum_values', function(list) { __folder_values(node, list); }, node.binding, node.reg_path); } } /* return a registry tree for the given server */ function __registry_tree(binding) { var tree = new QxTree("registry: " + binding); tree.binding = binding; tree.reg_path = "\\"; tree.populated = false; with(tree) { setBackgroundColor(255); setBorder(QxBorder.presets.inset); setOverflow("scroll"); setStyleProperty("padding", "2px"); setWidth("50%"); setHeight("90%"); setTop("10%"); } tree.addEventListener("click", function() { var el = this; __folder_click(el); }); return tree; } /* the table of values */ function __values_table() { var headings = new Array("Name", "Type", "Size", "Value"); var table = document.createElement('table'); table.border = "1"; var body = document.createElement('tbody'); table.appendChild(body); var th = document.createElement('th'); for (var i=0;i<headings.length;i++) { var td = document.createElement('td'); td.appendChild(document.createTextNode(headings[i])); th.appendChild(td); } body.appendChild(th); return table; } /* create a registry editing widget and return it as a object */ function regedit_widget(binding) { var fieldSet = new QxFieldSet(); fieldSet.binding = binding; with(fieldSet) { setWidth("100%"); setHeight("100%"); }; var gl = new QxGridLayout("auto,auto,auto,auto,auto", "50%,50%"); gl.setEdge(0); gl.setCellPaddingTop(3); gl.setCellPaddingBottom(3); var t = __registry_tree(fieldSet.binding); function change_binding(e) { fieldSet.binding = e.getNewValue(); srv_printf("changed binding to %s\\n", fieldSet.binding); gl.remove(t); t = __registry_tree(fieldSet.binding); gl.add(t, { row : 2, col : 1 }); } var b = new QxTextField(fieldSet.binding); b.addEventListener("changeText", change_binding); var values = new __values_table(); gl.add(b, { row : 1, col : 1 }); gl.add(t, { row : 2, col : 1 }); // gl.add(values, { row : 2, col : 2 }); fieldSet.add(gl); return fieldSet; };