DataView-more.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:4k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ /**
  2.  * @class Ext.DataView.LabelEditor
  3.  * @extends Ext.Editor
  4.  * 
  5.  */
  6. Ext.DataView.LabelEditor = Ext.extend(Ext.Editor, {
  7.     alignment: "tl-tl",
  8.     hideEl : false,
  9.     cls: "x-small-editor",
  10.     shim: false,
  11.     completeOnEnter: true,
  12.     cancelOnEsc: true,
  13.     labelSelector: 'span.x-editable',
  14.     
  15.     constructor: function(cfg, field){
  16.         Ext.DataView.LabelEditor.superclass.constructor.call(this,
  17.             field || new Ext.form.TextField({
  18.                 allowBlank: false,
  19.                 growMin:90,
  20.                 growMax:240,
  21.                 grow:true,
  22.                 selectOnFocus:true
  23.             }), cfg
  24.         );
  25.     },
  26.     
  27.     init : function(view){
  28.         this.view = view;
  29.         view.on('render', this.initEditor, this);
  30.         this.on('complete', this.onSave, this);
  31.     },
  32.     initEditor : function(){
  33.         this.view.on({
  34.             scope: this,
  35.             containerclick: this.doBlur,
  36.             click: this.doBlur
  37.         });
  38.         this.view.getEl().on('mousedown', this.onMouseDown, this, {delegate: this.labelSelector});
  39.     },
  40.     
  41.     doBlur: function(){
  42.         if(this.editing){
  43.             this.field.blur();
  44.         }
  45.     },
  46.     onMouseDown : function(e, target){
  47.         if(!e.ctrlKey && !e.shiftKey){
  48.             var item = this.view.findItemFromChild(target);
  49.             e.stopEvent();
  50.             var record = this.view.store.getAt(this.view.indexOf(item));
  51.             this.startEdit(target, record.data[this.dataIndex]);
  52.             this.activeRecord = record;
  53.         }else{
  54.             e.preventDefault();
  55.         }
  56.     },
  57.     onSave : function(ed, value){
  58.         this.activeRecord.set(this.dataIndex, value);
  59.     }
  60. });
  61. Ext.DataView.DragSelector = function(cfg){
  62.     cfg = cfg || {};
  63.     var view, proxy, tracker;
  64.     var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);
  65.     var dragSafe = cfg.dragSafe === true;
  66.     this.init = function(dataView){
  67.         view = dataView;
  68.         view.on('render', onRender);
  69.     };
  70.     function fillRegions(){
  71.         rs = [];
  72.         view.all.each(function(el){
  73.             rs[rs.length] = el.getRegion();
  74.         });
  75.         bodyRegion = view.el.getRegion();
  76.     }
  77.     function cancelClick(){
  78.         return false;
  79.     }
  80.     function onBeforeStart(e){
  81.         return !dragSafe || e.target == view.el.dom;
  82.     }
  83.     function onStart(e){
  84.         view.on('containerclick', cancelClick, view, {single:true});
  85.         if(!proxy){
  86.             proxy = view.el.createChild({cls:'x-view-selector'});
  87.         }else{
  88.             proxy.setDisplayed('block');
  89.         }
  90.         fillRegions();
  91.         view.clearSelections();
  92.     }
  93.     function onDrag(e){
  94.         var startXY = tracker.startXY;
  95.         var xy = tracker.getXY();
  96.         var x = Math.min(startXY[0], xy[0]);
  97.         var y = Math.min(startXY[1], xy[1]);
  98.         var w = Math.abs(startXY[0] - xy[0]);
  99.         var h = Math.abs(startXY[1] - xy[1]);
  100.         dragRegion.left = x;
  101.         dragRegion.top = y;
  102.         dragRegion.right = x+w;
  103.         dragRegion.bottom = y+h;
  104.         dragRegion.constrainTo(bodyRegion);
  105.         proxy.setRegion(dragRegion);
  106.         for(var i = 0, len = rs.length; i < len; i++){
  107.             var r = rs[i], sel = dragRegion.intersect(r);
  108.             if(sel && !r.selected){
  109.                 r.selected = true;
  110.                 view.select(i, true);
  111.             }else if(!sel && r.selected){
  112.                 r.selected = false;
  113.                 view.deselect(i);
  114.             }
  115.         }
  116.     }
  117.     function onEnd(e){
  118.         if (!Ext.isIE) {
  119.             view.un('containerclick', cancelClick, view);    
  120.         }        
  121.         if(proxy){
  122.             proxy.setDisplayed(false);
  123.         }
  124.     }
  125.     function onRender(view){
  126.         tracker = new Ext.dd.DragTracker({
  127.             onBeforeStart: onBeforeStart,
  128.             onStart: onStart,
  129.             onDrag: onDrag,
  130.             onEnd: onEnd
  131.         });
  132.         tracker.initEl(view.el);
  133.     }
  134. };