Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / DataView-more.html
diff --git a/docs/source/DataView-more.html b/docs/source/DataView-more.html
new file mode 100644 (file)
index 0000000..4d3800f
--- /dev/null
@@ -0,0 +1,160 @@
+<html>\r
+<head>\r
+  <title>The source code</title>\r
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body  onload="prettyPrint();">\r
+    <pre class="prettyprint lang-js"><div id="cls-Ext.DataView.LabelEditor"></div>/**\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
+};</pre>    \r
+</body>\r
+</html>
\ No newline at end of file