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

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. Ext.namespace("Ext.ux");
  9. Ext.ux.Shortcuts = function(config){
  10. var desktopEl = Ext.get(config.renderTo)
  11. , taskbarEl = config.taskbarEl
  12. , btnHeight = 74
  13. , btnWidth = 64
  14. , btnPadding = 15
  15. , col = null
  16. , row = null
  17. , items = [];
  18. initColRow();
  19. function initColRow(){
  20. col = {index: 1, x: btnPadding};
  21. row = {index: 1, y: btnPadding};
  22. }
  23. function isOverflow(y){
  24. if(y > (Ext.lib.Dom.getViewHeight() - taskbarEl.getHeight())){
  25. return true;
  26. }
  27. return false;
  28. }
  29. this.addShortcut = function(config){
  30. var div = desktopEl.createChild({tag:'div', cls: 'ux-shortcut-item'}),
  31. btn = new Ext.ux.ShortcutButton(Ext.apply(config, {
  32. text: Ext.util.Format.ellipsis(config.text, 16)
  33. }), div);
  34. //btn.container.initDD('DesktopShortcuts');
  35. items.push(btn);
  36. this.setXY(btn.container);
  37. return btn;
  38. };
  39. this.removeShortcut = function(b){
  40. var d = document.getElementById(b.container.id);
  41. b.destroy();
  42. d.parentNode.removeChild(d);
  43. var s = [];
  44. for(var i = 0, len = items.length; i < len; i++){
  45. if(items[i] != b){
  46. s.push(items[i]);
  47. }
  48. }
  49. items = s;
  50. this.handleUpdate();
  51. }
  52. this.handleUpdate = function(){
  53. initColRow();
  54. for(var i = 0, len = items.length; i < len; i++){
  55. this.setXY(items[i].container);
  56. }
  57. }
  58. this.setXY = function(item){
  59. var bottom = row.y + btnHeight,
  60. overflow = isOverflow(row.y + btnHeight);
  61. if(overflow && bottom > (btnHeight + btnPadding)){
  62. col = {
  63. index: col.index++
  64. , x: col.x + btnWidth + btnPadding
  65. };
  66. row = {
  67. index: 1
  68. , y: btnPadding
  69. };
  70. }
  71. item.setXY([
  72. col.x
  73. , row.y
  74. ]);
  75. row.index++;
  76. row.y = row.y + btnHeight + btnPadding;
  77. };
  78. Ext.EventManager.onWindowResize(this.handleUpdate, this, {delay:500});
  79. };
  80. /**
  81.  * @class Ext.ux.ShortcutButton
  82.  * @extends Ext.Button
  83.  */
  84. Ext.ux.ShortcutButton = function(config, el){
  85.     Ext.ux.ShortcutButton.superclass.constructor.call(this, Ext.apply(config, {
  86.         renderTo: el,
  87.         //clickEvent: 'dblclick',
  88. template: new Ext.Template(
  89. '<div class="ux-shortcut-btn"><div>',
  90. '<img src="'+Ext.BLANK_IMAGE_URL+'" />',
  91. '<div class="ux-shortcut-btn-text">{0}</div>',
  92. '</div></div>')
  93.     }));
  94.     
  95. };
  96. Ext.extend(Ext.ux.ShortcutButton, Ext.Button, {
  97. buttonSelector : 'div:first',
  98.     /* onRender : function(){
  99.         Ext.ux.ShortcutButton.superclass.onRender.apply(this, arguments);
  100.         this.cmenu = new Ext.menu.Menu({
  101.             items: [{
  102.                 id: 'open',
  103.                 text: 'Open',
  104.                 //handler: this.win.minimize,
  105.                 scope: this.win
  106.             }, '-', {
  107.                 id: 'remove',
  108.                 iconCls: 'remove',
  109.                 text: 'Remove Shortcut',
  110.                 //handler: this.closeWin.createDelegate(this, this.win, true),
  111.                 scope: this.win
  112.             }]
  113.         });
  114.         this.el.on('contextmenu', function(e){
  115.          e.stopEvent();
  116.             if(!this.cmenu.el){
  117.                 this.cmenu.render();
  118.             }
  119.             var xy = e.getXY();
  120.             xy[1] -= this.cmenu.el.getHeight();
  121.             this.cmenu.showAt(xy);
  122.         }, this);
  123.     }, */
  124.     
  125.     initButtonEl : function(btn, btnEl){
  126.      Ext.ux.ShortcutButton.superclass.initButtonEl.apply(this, arguments);
  127.     
  128.      btn.removeClass("x-btn");
  129.     
  130.      if(this.iconCls){
  131.             if(!this.cls){
  132.                 btn.removeClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon');
  133.             }
  134.         }
  135.     },
  136.     
  137.     autoWidth : function(){
  138.      // do nothing
  139.     },
  140. /**
  141.      * Sets this shortcut button's text
  142.      * @param {String} text The button text
  143.      */
  144.     setText : function(text){
  145.         this.text = text;
  146.         if(this.el){
  147.          this.el.child("div.ux-shortcut-btn-text").update(text);
  148.         }
  149.     }
  150. });