+/*!
+ * Ext JS Library 3.0.0
+ * Copyright(c) 2006-2009 Ext JS, LLC
+ * licensing@extjs.com
+ * http://www.extjs.com/license
+ */
+/**\r
+ * @class Ext.DataView.LabelEditor\r
+ * @extends Ext.Editor\r
+ * \r
+ */\r
+Ext.DataView.LabelEditor = Ext.extend(Ext.Editor, {\r
+ alignment: "tl-tl",\r
+ hideEl : false,\r
+ cls: "x-small-editor",\r
+ shim: false,\r
+ completeOnEnter: true,\r
+ cancelOnEsc: true,\r
+ labelSelector: 'span.x-editable',\r
+ \r
+ constructor: function(cfg, field){\r
+ Ext.DataView.LabelEditor.superclass.constructor.call(this,\r
+ field || new Ext.form.TextField({\r
+ allowBlank: false,\r
+ growMin:90,\r
+ growMax:240,\r
+ grow:true,\r
+ selectOnFocus:true\r
+ }), cfg\r
+ );\r
+ },\r
+ \r
+ init : function(view){\r
+ this.view = view;\r
+ view.on('render', this.initEditor, this);\r
+ this.on('complete', this.onSave, this);\r
+ },\r
+\r
+ initEditor : function(){\r
+ this.view.on({\r
+ scope: this,\r
+ containerclick: this.doBlur,\r
+ click: this.doBlur\r
+ });\r
+ this.view.getEl().on('mousedown', this.onMouseDown, this, {delegate: this.labelSelector});\r
+ },\r
+ \r
+ doBlur: function(){\r
+ if(this.editing){\r
+ this.field.blur();\r
+ }\r
+ },\r
+\r
+ onMouseDown : function(e, target){\r
+ if(!e.ctrlKey && !e.shiftKey){\r
+ var item = this.view.findItemFromChild(target);\r
+ e.stopEvent();\r
+ var record = this.view.store.getAt(this.view.indexOf(item));\r
+ this.startEdit(target, record.data[this.dataIndex]);\r
+ this.activeRecord = record;\r
+ }else{\r
+ e.preventDefault();\r
+ }\r
+ },\r
+\r
+ onSave : function(ed, value){\r
+ this.activeRecord.set(this.dataIndex, value);\r
+ }\r
+});\r
+\r
+\r
+Ext.DataView.DragSelector = function(cfg){\r
+ cfg = cfg || {};\r
+ var view, proxy, tracker;\r
+ var rs, bodyRegion, dragRegion = new Ext.lib.Region(0,0,0,0);\r
+ var dragSafe = cfg.dragSafe === true;\r
+\r
+ this.init = function(dataView){\r
+ view = dataView;\r
+ view.on('render', onRender);\r
+ };\r
+\r
+ function fillRegions(){\r
+ rs = [];\r
+ view.all.each(function(el){\r
+ rs[rs.length] = el.getRegion();\r
+ });\r
+ bodyRegion = view.el.getRegion();\r
+ }\r
+\r
+ function cancelClick(){\r
+ return false;\r
+ }\r
+\r
+ function onBeforeStart(e){\r
+ return !dragSafe || e.target == view.el.dom;\r
+ }\r
+\r
+ function onStart(e){\r
+ view.on('containerclick', cancelClick, view, {single:true});\r
+ if(!proxy){\r
+ proxy = view.el.createChild({cls:'x-view-selector'});\r
+ }else{\r
+ proxy.setDisplayed('block');\r
+ }\r
+ fillRegions();\r
+ view.clearSelections();\r
+ }\r
+\r
+ function onDrag(e){\r
+ var startXY = tracker.startXY;\r
+ var xy = tracker.getXY();\r
+\r
+ var x = Math.min(startXY[0], xy[0]);\r
+ var y = Math.min(startXY[1], xy[1]);\r
+ var w = Math.abs(startXY[0] - xy[0]);\r
+ var h = Math.abs(startXY[1] - xy[1]);\r
+\r
+ dragRegion.left = x;\r
+ dragRegion.top = y;\r
+ dragRegion.right = x+w;\r
+ dragRegion.bottom = y+h;\r
+\r
+ dragRegion.constrainTo(bodyRegion);\r
+ proxy.setRegion(dragRegion);\r
+\r
+ for(var i = 0, len = rs.length; i < len; i++){\r
+ var r = rs[i], sel = dragRegion.intersect(r);\r
+ if(sel && !r.selected){\r
+ r.selected = true;\r
+ view.select(i, true);\r
+ }else if(!sel && r.selected){\r
+ r.selected = false;\r
+ view.deselect(i);\r
+ }\r
+ }\r
+ }\r
+\r
+ function onEnd(e){\r
+ if (!Ext.isIE) {\r
+ view.un('containerclick', cancelClick, view); \r
+ } \r
+ if(proxy){\r
+ proxy.setDisplayed(false);\r
+ }\r
+ }\r
+\r
+ function onRender(view){\r
+ tracker = new Ext.dd.DragTracker({\r
+ onBeforeStart: onBeforeStart,\r
+ onStart: onStart,\r
+ onDrag: onDrag,\r
+ onEnd: onEnd\r
+ });\r
+ tracker.initEl(view.el);\r
+ }\r
+};
\ No newline at end of file