r9434: moved the registry editor into a common js library. Deryck, does this
[ira/wip.git] / swat / scripting / client / regedit.js
1 /*
2         client side js functions for registry editing
3
4         Copyright Andrew Tridgell 2005
5         released under the GNU GPL Version 2 or later
6 */
7
8 function __folder_list(fParent, list) 
9 {
10         var i;
11         fParent.removeAll();
12         for (i=0;i<list.length;i++) {
13                 var fChild;
14                 fChild = new QxTreeFolder(list[i]);
15                 fParent.add(fChild);
16                 fChild.binding = fParent.binding;
17                 if (fParent.reg_path == '\\') {
18                         fChild.reg_path = list[i];
19                 } else {
20                         fChild.reg_path = fParent.reg_path + '\\' + list[i];
21                 }
22                 fChild.add(new QxTreeFolder('Working ...'));
23                 fChild.addEventListener("click", function() { 
24                         var el = this; __folder_click(el); 
25                 });
26                 fParent.setOpen(1);
27         }
28 }
29
30 function __folder_click(node) 
31 {
32         if (!node.populated) {
33                 node.populated = true;
34                 server_call_url("/scripting/server/regedit.esp", 'enum_path', 
35                                 function(list) { __folder_list(node, list); }, 
36                                 node.binding, node.reg_path);
37         }
38 }
39
40 /* return a registry tree for the given server */
41 function __registry_tree(binding) 
42 {
43         var tree = new QxTree("registry: " + binding);
44         tree.binding = binding;
45         tree.reg_path = "\\";
46         tree.populated = false;
47         with(tree) {
48                 setBackgroundColor(255);
49                 setBorder(QxBorder.presets.inset);
50                 setOverflow("scroll");
51                 setStyleProperty("padding", "2px");
52                 setWidth("100%");
53                 setHeight("90%");
54                 setTop("10%");
55         }
56         tree.addEventListener("click", function() { 
57                 var el = this; __folder_click(el); 
58         });
59         return tree;
60 }
61
62 /*
63   create a registry editing widget and return it as a object
64
65 */
66 function regedit_widget(binding) 
67 {
68         var regedit = new QxWindow("Registry Editor");
69         regedit.setSpace(300, 600, 300, 600);
70
71         var fieldSet = new QxFieldSet();
72
73         regedit.binding = binding;
74
75         with(fieldSet) {
76                 setWidth("100%");
77                 setHeight("100%");
78         };
79
80         var gl = new QxGridLayout("auto,auto,auto,auto,auto", "100%");
81         gl.setEdge(0);
82         gl.setCellPaddingTop(3);
83         gl.setCellPaddingBottom(3);
84
85         regedit.add(fieldSet);
86
87         var t = __registry_tree(regedit.binding);
88
89         function change_binding(e) {
90                 regedit.binding = e.getNewValue();
91                 srv_printf("changed binding to %s\\n", regedit.binding);
92                 gl.remove(t);
93                 t = __registry_tree(regedit.binding);
94                 gl.add(t, { row : 2, col : 1 });
95         }
96
97         var b = new QxTextField(regedit.binding);
98         b.addEventListener("changeText", change_binding);
99
100         gl.add(b, { row : 1, col : 1 });
101         gl.add(t, { row : 2, col : 1 });
102         
103         fieldSet.add(gl);
104         regedit.add(fieldSet);
105
106         /* 
107            call the startup() method to display the widget
108         */
109         regedit.startup = function() {
110                 this.setVisible(true);
111                 this.setMoveable(true);
112                 this.setResizeable(true);
113                 this.setResizeMethod("frame");
114                 this.setMoveable(true);
115         }
116
117         return regedit;
118 };