Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / examples / desktop / js / App.js
old mode 100644 (file)
new mode 100755 (executable)
index 3ec41a8..383cd08
 /*!
- * Ext JS Library 3.3.1
- * Copyright(c) 2006-2010 Sencha Inc.
+ * Ext JS Library 4.0
+ * Copyright(c) 2006-2011 Sencha Inc.
  * licensing@sencha.com
  * http://www.sencha.com/license
  */
-Ext.app.App = function(cfg){
-    Ext.apply(this, cfg);
-    this.addEvents({
-        'ready' : true,
-        'beforeunload' : true
-    });
 
-    Ext.onReady(this.initApp, this);
-};
+Ext.define('Ext.ux.desktop.App', {
+    mixins: {
+        observable: 'Ext.util.Observable'
+    },
+
+    requires: [
+        'Ext.container.Viewport',
+
+        'Ext.ux.desktop.Desktop'
+    ],
 
-Ext.extend(Ext.app.App, Ext.util.Observable, {
     isReady: false,
-    startMenu: null,
     modules: null,
+    useQuickTips: true,
 
-    getStartConfig : function(){
+    constructor: function (config) {
+        var me = this;
+        me.addEvents(
+            'ready',
+            'beforeunload'
+        );
 
-    },
+        me.mixins.observable.constructor.call(this, config);
 
-    initApp : function(){
-       this.startConfig = this.startConfig || this.getStartConfig();
+        if (Ext.isReady) {
+            Ext.Function.defer(me.init, 10, me);
+        } else {
+            Ext.onReady(me.init, me);
+        }
+    },
 
-        this.desktop = new Ext.Desktop(this);
+    init: function() {
+        var me = this, desktopCfg;
 
-               this.launcher = this.desktop.taskbar.startMenu;
+        if (me.useQuickTips) {
+            Ext.QuickTips.init();
+        }
 
-               this.modules = this.getModules();
-        if(this.modules){
-            this.initModules(this.modules);
+        me.modules = me.getModules();
+        if (me.modules) {
+            me.initModules(me.modules);
         }
 
-        this.init();
+        desktopCfg = me.getDesktopConfig();
+        me.desktop = new Ext.ux.desktop.Desktop(desktopCfg);
+
+        me.viewport = new Ext.container.Viewport({
+            layout: 'fit',
+            items: [ me.desktop ]
+        });
+
+        Ext.EventManager.on(window, 'beforeunload', me.onUnload, me);
 
-        Ext.EventManager.on(window, 'beforeunload', this.onUnload, this);
-               this.fireEvent('ready', this);
-        this.isReady = true;
+        me.isReady = true;
+        me.fireEvent('ready', me);
     },
 
-    getModules : Ext.emptyFn,
-    init : Ext.emptyFn,
+    /**
+     * This method returns the configuration object for the Desktop object. A derived
+     * class can override this method, call the base version to build the config and
+     * then modify the returned object before returning it.
+     */
+    getDesktopConfig: function () {
+        var me = this, cfg = {
+            app: me,
+            taskbarConfig: me.getTaskbarConfig()
+        };
+
+        Ext.apply(cfg, me.desktopConfig);
+        return cfg;
+    },
 
-    initModules : function(ms){
-               for(var i = 0, len = ms.length; i < len; i++){
-            var m = ms[i];
-            this.launcher.add(m.launcher);
-            m.app = this;
-        }
+    getModules: Ext.emptyFn,
+
+    /**
+     * This method returns the configuration object for the Start Button. A derived
+     * class can override this method, call the base version to build the config and
+     * then modify the returned object before returning it.
+     */
+    getStartConfig: function () {
+        var me = this, cfg = {
+            app: me,
+            menu: []
+        };
+
+        Ext.apply(cfg, me.startConfig);
+
+        Ext.each(me.modules, function (module) {
+            if (module.launcher) {
+                cfg.menu.push(module.launcher);
+            }
+        });
+
+        return cfg;
     },
 
-    getModule : function(name){
+    /**
+     * This method returns the configuration object for the TaskBar. A derived class
+     * can override this method, call the base version to build the config and then
+     * modify the returned object before returning it.
+     */
+    getTaskbarConfig: function () {
+        var me = this, cfg = {
+            app: me,
+            startConfig: me.getStartConfig()
+        };
+
+        Ext.apply(cfg, me.taskbarConfig);
+        return cfg;
+    },
+
+    initModules : function(modules) {
+        var me = this;
+        Ext.each(modules, function (module) {
+            module.app = me;
+        });
+    },
+
+    getModule : function(name) {
        var ms = this.modules;
-       for(var i = 0, len = ms.length; i < len; i++){
-               if(ms[i].id == name || ms[i].appType == name){
-                       return ms[i];
-                       }
+        for (var i = 0, len = ms.length; i < len; i++) {
+            var m = ms[i];
+            if (m.id == name || m.appType == name) {
+                return m;
+            }
         }
-        return '';
+        return null;
     },
 
-    onReady : function(fn, scope){
-        if(!this.isReady){
-            this.on('ready', fn, scope);
-        }else{
+    onReady : function(fn, scope) {
+        if (this.isReady) {
             fn.call(scope, this);
+        } else {
+            this.on({
+                ready: fn,
+                scope: scope,
+                single: true
+            });
         }
     },
 
-    getDesktop : function(){
+    getDesktop : function() {
         return this.desktop;
     },
 
-    onUnload : function(e){
-        if(this.fireEvent('beforeunload', this) === false){
+    onUnload : function(e) {
+        if (this.fireEvent('beforeunload', this) === false) {
             e.stopEvent();
         }
     }
-});
\ No newline at end of file
+});