r9779: Add a contextmenu function to be used by all window/widget objects.
[samba.git] / swat / scripting / client / desktop.js
index e6a4230f10cde23e74ef1f865a415815d7b0ac4d..bddd38b60c8bfea88eae1faa030edd9284bababf 100644 (file)
@@ -6,11 +6,21 @@
 */
 
 
+// The global widget we attach everything to
+var w = new QxWidget();
+with(w) {
+       setTop(0);
+       setLeft(0);
+       setWidth(docX());
+       setHeight(docY());
+}
+
 /* Qooxdoo's browser sniffer doesn't distinguish IE version.
 We'll cover IE 6 for now, but these checks need to be
 revisited for fuller browser coverage. */
 var browser = QxClient().engine;
 
+// DocX/Y returns the width/height of the page in browser
 function docX()
 {
        var x;
@@ -25,36 +35,50 @@ function docX()
 function docY()
 {
        var y;
-       // Less 25px to not cover the toolbar
        if (browser != "mshtml") {
-               y = window.innerHeight - 25;
+               y = window.innerHeight;
        } else {
                y = document.documentElement.clientHeight;
        }
        return y;
 }
 
-function sizeX()
+//  If given a number, sizeX/Y returns in pixels a percentage of the browser
+//  window. If given a Window object, sizeX/Y returns the size of that object. 
+function sizeX(s)
 {
-       var sX = Math.floor(docX() * .45);
+       var sX;
+
+       if (typeof(s) == 'number') {
+               sX = Math.floor(docX() * s);
+       } else {
+               sX = s.getMinWidth();
+       }
+
        return sX;
 }
 
-function sizeY()
+function sizeY(s)
 {
-       var sY = Math.floor(docY() * .45);
+       var sY;
+       if (typeof(s) == 'number') {
+               sY = Math.floor(docY() * s);
+       } else {
+               sY = s.getMinHeight();
+       }
+
        return sY;
 }
 
-function getPosX()
+function getPosX(win)
 {
-       var y = Math.floor( (docY() - sizeY()) * Math.random() );
+       var y = Math.floor( (docY() - sizeY(win)) * Math.random() );
        return y;
 }
 
-function getPosY()
+function getPosY(win)
 {
-       var x = Math.floor( (docX() - sizeX()) * Math.random() );
+       var x = Math.floor( (docX() - sizeX(win)) * Math.random() );
        return x;
 }
 
@@ -65,35 +89,85 @@ function openIn(e)
        blank.setVisible(true);
 }
        
-function winMenu(e)
+function Window(h, src, s)
 {
-       var self = this;
-       var WinWin = new QxCommand();
-       WinWin.addEventListener("execute", function() {
-               var blank = new QxWindow();
-               self.add(blank);
-               blank.setVisible(true);
-       }); 
-
-       var inset = new QxMenu;
-       var sub1 = new QxMenuButton("Open window in a window", null, WinWin);
-
-       inset.add(sub1);
-       self.add(inset)
-
-       cmenu.setVisible(false);
-       inset.setVisible(true);
+       this.self = new QxWindow(h);
+
+       // Settings for all windows
+       if (s) {
+               this.self.setMinWidth(sizeX(s));
+               this.self.setMinHeight(sizeY(s));
+       }
+       this.self.setTop(getPosX(this.self));
+       this.self.setLeft(getPosY(this.self));
+
+       this.self.addEventListener("contextmenu", contextMenu);
+
+       return this.self;
 }
 
-function Window(title)
+function SmallWindow(h, src)
 {
-       var self = new QxWindow(title);
-       self.setTop(getPosX());
-       self.setLeft(getPosY());
-       self.setMinWidth(sizeX());
-       self.setMinHeight(sizeY());
-       self.addEventListener("contextmenu", winMenu);
-       return self;
+       this.self = new Window(h, src, .20);
+       return this.self;
 }
 
+function StandardWindow(h, src)
+{
+       this.self = new Window(h, src, .45);
+       return this.self;
+}
+
+function LargeWindow(h, src)
+{
+       this.self = new Window(h, src, .70);
+       return this.self;
+}
+
+Window.small = SmallWindow;
+Window.standard = StandardWindow;
+Window.large = LargeWindow;
+
+function contextMenu(e)
+{      
+       var t = e.getTarget()
+       var tObj = t.getHtmlAttribute("class")
+
+       if (tObj == 'QxWidget') {
+               clientContextMenu(e);
+       } else if (tObj == 'QxWindowPane') {
+               windowContextMenu(t, e);
+       }
+}
+
+
+window.application.main = function()
+{
+       var doc = this.getClientWindow().getClientDocument();
+       doc.addEventListener("contextmenu", contextMenu);
+       doc.add(w);
+
+       var bar = new QxMenuBar;
+       with (bar) {
+               setBottom(0);
+               setLeft(0);
+               setWidth("100%");
+               setHeight(25);
+               setBackgroundColor("ThreeDFace");
+       }
+
+       var start = new QxMenuButton("START");
+       start.addEventListener("click", function() {
+               startMenu();
+       });
+       bar.add(start);
+
+       w.add(bar);
+}
+
+window.onresize = function() 
+{
+       w.setWidth(docX());
+       w.setHeight(docY());
+}