563af4907fbeaad6951d3d939d470e049e5e3089
[samba.git] / swat / scripting / client / desktop.js
1 /*
2    Windows, tabs, and general widgetry for SWAT.
3
4    Copyright (C) Deryck Hodge 2005
5    released under the GNU GPL Version 2 or later
6 */
7
8
9 /* Qooxdoo's browser sniffer doesn't distinguish IE version.
10 We'll cover IE 6 for now, but these checks need to be
11 revisited for fuller browser coverage. */
12 var browser = QxClient().engine;
13
14 // DocX/Y returns the width/height of the page in browser
15 function docX()
16 {
17         var x;
18         if (browser != "mshtml") {
19                 x = window.innerWidth;
20         } else {
21                 x = document.documentElement.clientWidth;
22         }
23         return x;
24 }
25
26 function docY()
27 {
28         var y;
29         // Less 25px to not cover the toolbar
30         if (browser != "mshtml") {
31                 y = window.innerHeight - 25;
32         } else {
33                 y = document.documentElement.clientHeight;
34         }
35         return y;
36 }
37
38 //  If given a number, sizeX/Y returns in pixels a percentage of the browser
39 //  window. If given a Window object, sizeX/Y returns the size of that object. 
40 function sizeX(s)
41 {
42         var sX;
43
44         if (typeof(s) == 'number') {
45                 sX = Math.floor(docX() * s);
46         } else {
47                 sX = s.getMinWidth();
48         }
49
50         return sX;
51 }
52
53 function sizeY(s)
54 {
55         var sY;
56         if (typeof(s) == 'number') {
57                 sY = Math.floor(docY() * s);
58         } else {
59                 sY = s.getMinHeight();
60         }
61
62         return sY;
63 }
64
65 function getPosX(win)
66 {
67         var y = Math.floor( (docY() - sizeY(win)) * Math.random() );
68         return y;
69 }
70
71 function getPosY(win)
72 {
73         var x = Math.floor( (docX() - sizeX(win)) * Math.random() );
74         return x;
75 }
76
77 function openIn(e)
78 {
79         var blank = new Window("New Menu");
80         e.add(blank);
81         blank.setVisible(true);
82 }
83         
84 function winMenu(e)
85 {
86         var self = this;
87         var WinWin = new QxCommand();
88         WinWin.addEventListener("execute", function() {
89                 var blank = new QxWindow();
90                 self.add(blank);
91                 blank.setVisible(true);
92         }); 
93
94         var inset = new QxMenu;
95         var sub1 = new QxMenuButton("Open window in a window", null, WinWin);
96
97         inset.add(sub1);
98         self.add(inset)
99
100         cmenu.setVisible(false);
101         inset.setVisible(true);
102 }
103
104 function Window(h, src, s)
105 {
106         this.self = new QxWindow(h);
107
108         // Settings for all windows
109         if (s) {
110                 this.self.setMinWidth(sizeX(s));
111                 this.self.setMinHeight(sizeY(s));
112         }
113         this.self.setTop(getPosX(this.self));
114         this.self.setLeft(getPosY(this.self));
115
116         this.self.addEventListener("contextmenu", winMenu);
117
118         return this.self;
119 }
120
121 function SmallWindow(h, src)
122 {
123         this.self = new Window(h, src, .20);
124         return this.self;
125 }
126
127 function StandardWindow(h, src)
128 {
129         this.self = new Window(h, src, .45);
130         return this.self;
131 }
132
133 function LargeWindow(h, src)
134 {
135         this.self = new Window(h, src, .70);
136         return this.self;
137 }
138
139 Window.small = SmallWindow;
140 Window.standard = StandardWindow;
141 Window.large = LargeWindow;