123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- /*!
- * Ext JS Library 3.3.1
- * Copyright(c) 2006-2010 Sencha Inc.
- * licensing@sencha.com
- * http://www.sencha.com/license
- */
- Ext.Desktop = function(app) {
- this.taskbar = new Ext.ux.TaskBar(app);
- this.xTickSize = this.yTickSize = 1;
- var taskbar = this.taskbar;
- var desktopEl = Ext.get('x-desktop');
- var taskbarEl = Ext.get('ux-taskbar');
- var shortcuts = Ext.get('x-shortcuts');
- var windows = new Ext.WindowGroup();
- var activeWindow;
- function minimizeWin(win) {
- win.minimized = true;
- win.hide();
- }
- function markActive(win) {
- if (activeWindow && activeWindow != win) {
- markInactive(activeWindow);
- }
- taskbar.setActiveButton(win.taskButton);
- activeWindow = win;
- Ext.fly(win.taskButton.el).addClass('active-win');
- win.minimized = false;
- }
- function markInactive(win) {
- if (win == activeWindow) {
- activeWindow = null;
- Ext.fly(win.taskButton.el).removeClass('active-win');
- }
- }
- function removeWin(win) {
- taskbar.removeTaskButton(win.taskButton);
- layout();
- }
- function layout() {
- desktopEl.setHeight(Ext.lib.Dom.getViewHeight() - taskbarEl.getHeight());
- }
- Ext.EventManager.onWindowResize(layout);
- this.layout = layout;
- this.createWindow = function(config, cls) {
- var win = new(cls || Ext.Window)(
- Ext.applyIf(config || {},
- {
- renderTo: desktopEl,
- manager: windows,
- minimizable: true,
- maximizable: true
- })
- );
- win.dd.xTickSize = this.xTickSize;
- win.dd.yTickSize = this.yTickSize;
- if (win.resizer) {
- win.resizer.widthIncrement = this.xTickSize;
- win.resizer.heightIncrement = this.yTickSize;
- }
- win.render(desktopEl);
- win.taskButton = taskbar.addTaskButton(win);
- win.cmenu = new Ext.menu.Menu({
- items: [
- ]
- });
- win.animateTarget = win.taskButton.el;
- win.on({
- 'activate': {
- fn: markActive
- },
- 'beforeshow': {
- fn: markActive
- },
- 'deactivate': {
- fn: markInactive
- },
- 'minimize': {
- fn: minimizeWin
- },
- 'close': {
- fn: removeWin
- }
- });
- layout();
- return win;
- };
- this.getManager = function() {
- return windows;
- };
- this.getWindow = function(id) {
- return windows.get(id);
- };
- this.getWinWidth = function() {
- var width = Ext.lib.Dom.getViewWidth();
- return width < 200 ? 200: width;
- };
- this.getWinHeight = function() {
- var height = (Ext.lib.Dom.getViewHeight() - taskbarEl.getHeight());
- return height < 100 ? 100: height;
- };
- this.getWinX = function(width) {
- return (Ext.lib.Dom.getViewWidth() - width) / 2;
- };
- this.getWinY = function(height) {
- return (Ext.lib.Dom.getViewHeight() - taskbarEl.getHeight() - height) / 2;
- };
- this.setTickSize = function(xTickSize, yTickSize) {
- this.xTickSize = xTickSize;
- if (arguments.length == 1) {
- this.yTickSize = xTickSize;
- } else {
- this.yTickSize = yTickSize;
- }
- windows.each(function(win) {
- win.dd.xTickSize = this.xTickSize;
- win.dd.yTickSize = this.yTickSize;
- win.resizer.widthIncrement = this.xTickSize;
- win.resizer.heightIncrement = this.yTickSize;
- },
- this);
- };
- this.cascade = function() {
- var x = 0,
- y = 0;
- windows.each(function(win) {
- if (win.isVisible() && !win.maximized) {
- win.setPosition(x, y);
- x += 20;
- y += 20;
- }
- },
- this);
- };
- this.tile = function() {
- var availWidth = desktopEl.getWidth(true);
- var x = this.xTickSize;
- var y = this.yTickSize;
- var nextY = y;
- windows.each(function(win) {
- if (win.isVisible() && !win.maximized) {
- var w = win.el.getWidth();
- // Wrap to next row if we are not at the line start and this Window will go off the end
- if ((x > this.xTickSize) && (x + w > availWidth)) {
- x = this.xTickSize;
- y = nextY;
- }
- win.setPosition(x, y);
- x += w + this.xTickSize;
- nextY = Math.max(nextY, y + win.el.getHeight() + this.yTickSize);
- }
- },
- this);
- };
- this.contextMenu = new Ext.menu.Menu({
- items: [{
- text: 'Tile',
- handler: this.tile,
- scope: this
- },
- {
- text: 'Cascade',
- handler: this.cascade,
- scope: this
- }]
- });
- desktopEl.on('contextmenu',
- function(e) {
- e.stopEvent();
- this.contextMenu.showAt(e.getXY());
- },
- this);
- layout();
- if (shortcuts) {
- shortcuts.on('click',
- function(e, t) {
- t = e.getTarget('dt', shortcuts);
- if (t) {
- e.stopEvent();
- var module = app.getModule(t.id.replace('-shortcut', ''));
- if (module) {
- module.createWindow();
- }
- }
- });
- }
- };
|