summaryrefslogtreecommitdiff
path: root/swat/scripting/client/regedit.js
diff options
context:
space:
mode:
Diffstat (limited to 'swat/scripting/client/regedit.js')
-rw-r--r--swat/scripting/client/regedit.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/swat/scripting/client/regedit.js b/swat/scripting/client/regedit.js
new file mode 100644
index 0000000000..9175017c2e
--- /dev/null
+++ b/swat/scripting/client/regedit.js
@@ -0,0 +1,160 @@
+/*
+ client side js functions for registry editing
+
+ Copyright Andrew Tridgell 2005
+ released under the GNU GPL Version 2 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;
+};