Desktop.js
上传用户:snow1005
上传日期:2015-11-10
资源大小:3151k
文件大小:9k
源码类别:

Ajax

开发平台:

JavaScript

  1. /*
  2.  * qWikiOffice Desktop 0.8.1
  3.  * Copyright(c) 2007-2008, Integrated Technologies, Inc.
  4.  * licensing@qwikioffice.com
  5.  * 
  6.  * http://www.qwikioffice.com/license
  7.  *
  8.  * NOTE:
  9.  * This code is based on code from the original Ext JS desktop demo.
  10.  * I have made many modifications/additions.
  11.  *
  12.  * The Ext JS licensing can be viewed here:
  13.  *
  14.  * Ext JS Library 2.0 Beta 2
  15.  * Copyright(c) 2006-2007, Ext JS, LLC.
  16.  * licensing@extjs.com
  17.  * 
  18.  * http://extjs.com/license
  19.  */
  20. Ext.Desktop = function(app){
  21. this.taskbar = new Ext.ux.TaskBar(app);
  22. var taskbar = this.taskbar;
  23. this.el = Ext.get('x-desktop');
  24. var desktopEl = this.el;
  25.     var taskbarEl = Ext.get('ux-taskbar');
  26.     
  27.     this.shortcuts = new Ext.ux.Shortcuts({
  28.      renderTo: 'x-desktop',
  29.      taskbarEl: taskbarEl
  30.     });
  31.     var windows = new Ext.WindowGroup();
  32.     windows.zseed = 10000;
  33.     var activeWindow;
  34.     function minimizeWin(win){
  35.         win.minimized = true;
  36.         win.hide();
  37.     }
  38.     function markActive(win){
  39.         if(activeWindow && activeWindow != win){
  40.             markInactive(activeWindow);
  41.         }
  42.         taskbar.setActiveButton(win.taskButton);
  43.         activeWindow = win;
  44.         Ext.fly(win.taskButton.el).addClass('active-win');
  45.         win.minimized = false;
  46.     }
  47.     function markInactive(win){
  48.         if(win == activeWindow){
  49.             activeWindow = null;
  50.             Ext.fly(win.taskButton.el).removeClass('active-win');
  51.         }
  52.     }
  53.     function removeWin(win){
  54.      taskbar.taskButtonPanel.remove(win.taskButton);
  55.         layout();
  56.     }
  57.     function layout(){
  58.      desktopEl.setHeight(Ext.lib.Dom.getViewHeight() - taskbarEl.getHeight());
  59.     }
  60.     Ext.EventManager.onWindowResize(layout);
  61.     this.layout = layout;
  62.     this.createWindow = function(config, cls){
  63.      var win = new (cls||Ext.Window)(
  64.             Ext.applyIf(config||{}, {
  65.                 manager: windows,
  66.                 minimizable: true,
  67.                 maximizable: true
  68.             })
  69.         );
  70.         win.render(desktopEl);
  71.         win.taskButton = taskbar.taskButtonPanel.add(win);
  72.         win.cmenu = new Ext.menu.Menu({
  73.             items: [
  74.             ]
  75.         });
  76.         win.animateTarget = win.taskButton.el;
  77.         
  78.         win.on({
  79.          'activate': {
  80.          fn: markActive
  81.          },
  82.          'beforeshow': {
  83.          fn: markActive
  84.          },
  85.          'deactivate': {
  86.          fn: markInactive
  87.          },
  88.          'minimize': {
  89.          fn: minimizeWin
  90.          },
  91.          'close': {
  92.          fn: removeWin
  93.          }
  94.         });
  95.         
  96.         layout();
  97.         return win;
  98.     };
  99.     this.getManager = function(){
  100.         return windows;
  101.     };
  102.     this.getWindow = function(id){
  103.         return windows.get(id);
  104.     };
  105.     
  106.     this.getViewHeight = function(){
  107.      return (Ext.lib.Dom.getViewHeight()-taskbarEl.getHeight());
  108.     };
  109.     
  110.     this.getViewWidth = function(){
  111.      return Ext.lib.Dom.getViewWidth();
  112.     };
  113.     
  114.     this.getWinWidth = function(){
  115. var width = Ext.lib.Dom.getViewWidth();
  116. return width < 200 ? 200 : width;
  117. };
  118. this.getWinHeight = function(){
  119. var height = (Ext.lib.Dom.getViewHeight()-taskbarEl.getHeight());
  120. return height < 100 ? 100 : height;
  121. };
  122. this.getWinX = function(width){
  123. return (Ext.lib.Dom.getViewWidth() - width) / 2
  124. };
  125. this.getWinY = function(height){
  126. return (Ext.lib.Dom.getViewHeight()-taskbarEl.getHeight() - height) / 2;
  127. };
  128. this.setBackgroundColor = function(hex){
  129. if(hex){
  130. Ext.get(document.body).setStyle('background-color', '#'+hex);
  131. app.styles.backgroundcolor = hex;
  132. }
  133. };
  134. this.setFontColor = function(hex){
  135. if(hex){
  136. Ext.util.CSS.updateRule('.ux-shortcut-btn-text', 'color', '#'+hex);
  137. app.styles.fontcolor = hex;
  138. }
  139. };
  140. this.setTheme = function(o){
  141. if(o && o.id && o.name && o.pathtofile){
  142. Ext.util.CSS.swapStyleSheet('theme', o.pathtofile);
  143. app.styles.theme = o;
  144. }
  145. };
  146. this.setTransparency = function(v){
  147. if(v >= 0 && v <= 100){
  148. taskbarEl.addClass("transparent");
  149. Ext.util.CSS.updateRule('.transparent','opacity', v/100);
  150. Ext.util.CSS.updateRule('.transparent','-moz-opacity', v/100);
  151. Ext.util.CSS.updateRule('.transparent','filter', 'alpha(opacity='+v+')');
  152. app.styles.transparency = v;
  153. }
  154. };
  155. this.setWallpaper = function(o){
  156. if(o && o.id && o.name && o.pathtofile){
  157. var notifyWin = this.showNotification({
  158. html: 'Loading wallpaper...'
  159. , title: 'Please wait'
  160. });
  161. var wp = new Image();
  162. wp.src = o.pathtofile;
  163. var task = new Ext.util.DelayedTask(verify, this);
  164. task.delay(200);
  165. app.styles.wallpaper = o;
  166. }
  167. function verify(){
  168. if(wp.complete){
  169. task.cancel();
  170. notifyWin.setIconClass('x-icon-done');
  171. notifyWin.setTitle('Finished');
  172. notifyWin.setMessage('Wallpaper loaded.');
  173. this.hideNotification(notifyWin);
  174. document.body.background = wp.src;
  175. }else{
  176. task.delay(200);
  177. }
  178. }
  179. };
  180. this.setWallpaperPosition = function(pos){
  181. if(pos){
  182. if(pos === "center"){
  183. var b = Ext.get(document.body);
  184. b.removeClass('wallpaper-tile');
  185. b.addClass('wallpaper-center');
  186. }else if(pos === "tile"){
  187. var b = Ext.get(document.body);
  188. b.removeClass('wallpaper-center');
  189. b.addClass('wallpaper-tile');
  190. }
  191. app.styles.wallpaperposition = pos;
  192. }
  193. };
  194. this.showNotification = function(config){
  195. var win = new Ext.ux.Notification(Ext.apply({
  196. animateTarget: taskbarEl
  197. , autoDestroy: true
  198. , hideDelay: 5000
  199. , html: ''
  200. , iconCls: 'x-icon-waiting'
  201. , title: ''
  202. }, config));
  203. win.show();
  204. return win;
  205. };
  206. this.hideNotification = function(win, delay){
  207. if(win){
  208. (function(){ win.animHide(); }).defer(delay || 3000);
  209. }
  210. };
  211. this.addAutoRun = function(id){
  212. var m = app.getModule(id),
  213. c = app.launchers.autorun;
  214. if(m && !m.autorun){
  215. m.autorun = true;
  216. c.push(id);
  217. }
  218. };
  219. this.removeAutoRun = function(id){
  220. var m = app.getModule(id),
  221. c = app.launchers.autorun;
  222. if(m && m.autorun){
  223. var i = 0;
  224. while(i < c.length){
  225. if(c[i] == id){
  226. c.splice(i, 1);
  227. }else{
  228. i++;
  229. }
  230. }
  231. m.autorun = null;
  232. }
  233. };
  234. // Private
  235. this.addContextMenuItem = function(id){
  236. var m = app.getModule(id);
  237. if(m && !m.contextMenuItem){
  238. /* if(m.moduleType === 'menu'){ // handle menu modules
  239. var items = m.items;
  240. for(var i = 0, len = items.length; i < len; i++){
  241. m.launcher.menu.items.push(app.getModule(items[i]).launcher);
  242. }
  243. } */
  244. this.cmenu.add(m.launcher);
  245. }
  246. };
  247. this.addShortcut = function(id, updateConfig){
  248. var m = app.getModule(id);
  249. if(m && !m.shortcut){
  250. var c = m.launcher;
  251. m.shortcut = this.shortcuts.addShortcut({
  252. handler: c.handler,
  253. iconCls: c.shortcutIconCls,
  254. scope: c.scope,
  255. text: c.text,
  256. tooltip: c.tooltip || ''
  257. });
  258. if(updateConfig){
  259. app.launchers.shortcut.push(id);
  260. }
  261. }
  262. };
  263. this.removeShortcut = function(id, updateConfig){
  264. var m = app.getModule(id);
  265. if(m && m.shortcut){
  266. this.shortcuts.removeShortcut(m.shortcut);
  267. m.shortcut = null;
  268. if(updateConfig){
  269. var sc = app.launchers.shortcut,
  270. i = 0;
  271. while(i < sc.length){
  272. if(sc[i] == id){
  273. sc.splice(i, 1);
  274. }else{
  275. i++;
  276. }
  277. }
  278. }
  279. }
  280. };
  281. this.addQuickStartButton = function(id, updateConfig){
  282.      var m = app.getModule(id);
  283.     
  284. if(m && !m.quickStartButton){
  285. var c = m.launcher;
  286. m.quickStartButton = this.taskbar.quickStartPanel.add({
  287. handler: c.handler,
  288. iconCls: c.iconCls,
  289. scope: c.scope,
  290. text: c.text,
  291. tooltip: c.tooltip || c.text
  292. });
  293. if(updateConfig){
  294. app.launchers.quickstart.push(id);
  295. }
  296. }
  297.     };
  298.     
  299.     this.removeQuickStartButton = function(id, updateConfig){
  300.      var m = app.getModule(id);
  301.     
  302. if(m && m.quickStartButton){
  303. this.taskbar.quickStartPanel.remove(m.quickStartButton);
  304. m.quickStartButton = null;
  305. if(updateConfig){
  306. var qs = app.launchers.quickstart,
  307. i = 0;
  308. while(i < qs.length){
  309. if(qs[i] == id){
  310. qs.splice(i, 1);
  311. }else{
  312. i++;
  313. }
  314. }
  315. }
  316. }
  317.     };
  318.     layout();
  319.     
  320.     this.cmenu = new Ext.menu.Menu();
  321.     
  322.     desktopEl.on('contextmenu', function(e){
  323.      if(e.target.id === desktopEl.id){
  324.      e.stopEvent();
  325. if(!this.cmenu.el){
  326. this.cmenu.render();
  327. }
  328. var xy = e.getXY();
  329. xy[1] -= this.cmenu.el.getHeight();
  330. this.cmenu.showAt(xy);
  331. }
  332. }, this);
  333. };