r9466: add display of values as well as keys in the registry editor
authorAndrew Tridgell <tridge@samba.org>
Mon, 22 Aug 2005 01:53:06 +0000 (01:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:34:19 +0000 (13:34 -0500)
(This used to be commit 62d55a250afa3e3923a6b9da7b59177ad59d55a3)

swat/scripting/client/regedit.js
swat/scripting/server/regedit.esp

index 5769a88785b29d6b2fe612bea9aded42986f6002..60ee95a4835c308a5b7427c42725750cc90112ca 100644 (file)
@@ -5,10 +5,17 @@
        released under the GNU GPL Version 2 or later
 */
 
-function __folder_list(fParent, list) 
+
+/*
+  callback from the key enumeration call
+*/
+function __folder_keys(fParent, list) 
 {
        var i;
-       fParent.removeAll();
+       if (fParent.working == 1) {
+               fParent.working = 0;
+               fParent.removeAll();
+       }
        for (i=0;i<list.length;i++) {
                var fChild;
                fChild = new QxTreeFolder(list[i]);
@@ -19,20 +26,50 @@ function __folder_list(fParent, list)
                } 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);
        }
+       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_path', 
-                               function(list) { __folder_list(node, list); }, 
+               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);
        }
 }
index 31977d5a519ac485b8d6dacfd6e3b0aa08228b62..a13ad8afe59dadbf76fe4f0ed1e49f04670b9015 100644 (file)
@@ -8,10 +8,10 @@ libinclude("winreg.js");
 libinclude("server_call.js");
 
 /* 
-   server side call to return a listing of elements in a winreg path
+   server side call to return a listing of keys in a winreg path
 */
-function enum_path(binding, path) {
-       printf("enum_path(%s, %s)\n", binding, path);
+function enum_keys(binding, path) {
+       printf("enum_keys(%s, %s)\n", binding, path);
        var reg = winreg_init();
        security_init(reg);
 
@@ -22,13 +22,31 @@ function enum_path(binding, path) {
                printVars(status);
                return undefined;
        }
-       var list = winreg_enum_path(reg, path);
-       return list;
+       return winreg_enum_path(reg, path);
+}
+
+/* 
+   server side call to return a listing of values in a winreg path
+*/
+function enum_values(binding, path) {
+       printf("enum_values(%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;
+       }
+       return winreg_enum_values(reg, path);
 }
 
 /* register a call for clients to make */
 var call = servCallObj();
-call.add('enum_path', enum_path);
+call.add('enum_keys', enum_keys);
+call.add('enum_values', enum_values);
 
 /* run the function that was asked for */
 call.run();