summaryrefslogtreecommitdiff
path: root/swat/scripting
diff options
context:
space:
mode:
Diffstat (limited to 'swat/scripting')
-rw-r--r--swat/scripting/client/regedit.js118
-rw-r--r--swat/scripting/server/regedit.esp35
2 files changed, 153 insertions, 0 deletions
diff --git a/swat/scripting/client/regedit.js b/swat/scripting/client/regedit.js
new file mode 100644
index 0000000000..5769a88785
--- /dev/null
+++ b/swat/scripting/client/regedit.js
@@ -0,0 +1,118 @@
+/*
+ client side js functions for registry editing
+
+ Copyright Andrew Tridgell 2005
+ released under the GNU GPL Version 2 or later
+*/
+
+function __folder_list(fParent, list)
+{
+ var i;
+ 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.add(new QxTreeFolder('Working ...'));
+ fChild.addEventListener("click", function() {
+ var el = this; __folder_click(el);
+ });
+ fParent.setOpen(1);
+ }
+}
+
+function __folder_click(node)
+{
+ if (!node.populated) {
+ node.populated = true;
+ server_call_url("/scripting/server/regedit.esp", 'enum_path',
+ function(list) { __folder_list(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("100%");
+ setHeight("90%");
+ setTop("10%");
+ }
+ tree.addEventListener("click", function() {
+ var el = this; __folder_click(el);
+ });
+ return tree;
+}
+
+/*
+ create a registry editing widget and return it as a object
+
+*/
+function regedit_widget(binding)
+{
+ var regedit = new QxWindow("Registry Editor");
+ regedit.setSpace(300, 600, 300, 600);
+
+ var fieldSet = new QxFieldSet();
+
+ regedit.binding = binding;
+
+ with(fieldSet) {
+ setWidth("100%");
+ setHeight("100%");
+ };
+
+ var gl = new QxGridLayout("auto,auto,auto,auto,auto", "100%");
+ gl.setEdge(0);
+ gl.setCellPaddingTop(3);
+ gl.setCellPaddingBottom(3);
+
+ regedit.add(fieldSet);
+
+ var t = __registry_tree(regedit.binding);
+
+ function change_binding(e) {
+ regedit.binding = e.getNewValue();
+ srv_printf("changed binding to %s\\n", regedit.binding);
+ gl.remove(t);
+ t = __registry_tree(regedit.binding);
+ gl.add(t, { row : 2, col : 1 });
+ }
+
+ var b = new QxTextField(regedit.binding);
+ b.addEventListener("changeText", change_binding);
+
+ gl.add(b, { row : 1, col : 1 });
+ gl.add(t, { row : 2, col : 1 });
+
+ fieldSet.add(gl);
+ regedit.add(fieldSet);
+
+ /*
+ call the startup() method to display the widget
+ */
+ regedit.startup = function() {
+ this.setVisible(true);
+ this.setMoveable(true);
+ this.setResizeable(true);
+ this.setResizeMethod("frame");
+ this.setMoveable(true);
+ }
+
+ return regedit;
+};
diff --git a/swat/scripting/server/regedit.esp b/swat/scripting/server/regedit.esp
new file mode 100644
index 0000000000..31977d5a51
--- /dev/null
+++ b/swat/scripting/server/regedit.esp
@@ -0,0 +1,35 @@
+<%
+/*
+ server side AJAJ functions for registry editing. These go along
+ with scripting/client/regedit.js
+*/
+libinclude("base.js");
+libinclude("winreg.js");
+libinclude("server_call.js");
+
+/*
+ server side call to return a listing of elements in a winreg path
+*/
+function enum_path(binding, path) {
+ printf("enum_path(%s, %s)\n", binding, path);
+ var reg = winreg_init();
+ security_init(reg);
+
+ reg.credentials = session.authinfo.credentials;
+
+ var status = reg.connect(binding);
+ if (status.is_ok != true) {
+ printVars(status);
+ return undefined;
+ }
+ var list = winreg_enum_path(reg, path);
+ return list;
+}
+
+/* register a call for clients to make */
+var call = servCallObj();
+call.add('enum_path', enum_path);
+
+/* run the function that was asked for */
+call.run();
+%>