| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-ux-DataView-DragSelector'>/**
 
- </span> * @class Ext.ux.DataView.DragSelector
 
-  * @extends Object
 
-  * @author Ed Spencer
 
-  * 
 
-  */
 
- Ext.define('Ext.ux.DataView.DragSelector', {
 
-     requires: ['Ext.dd.DragTracker', 'Ext.util.Region'],
 
- <span id='Ext-ux-DataView-DragSelector-method-init'>    /**
 
- </span>     * Initializes the plugin by setting up the drag tracker
 
-      */
 
-     init: function(dataview) {
 
- <span id='Ext-ux-DataView-DragSelector-property-dataview'>        /**
 
- </span>         * @property dataview
 
-          * @type Ext.view.View
 
-          * The DataView bound to this instance
 
-          */
 
-         this.dataview = dataview;
 
-         dataview.mon(dataview, {
 
-             beforecontainerclick: this.cancelClick,
 
-             scope: this,
 
-             render: {
 
-                 fn: this.onRender,
 
-                 scope: this,
 
-                 single: true
 
-             }
 
-         });
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-onRender'>    /**
 
- </span>     * @private
 
-      * Called when the attached DataView is rendered. This sets up the DragTracker instance that will be used
 
-      * to created a dragged selection area
 
-      */
 
-     onRender: function() {
 
- <span id='Ext-ux-DataView-DragSelector-property-tracker'>        /**
 
- </span>         * @property tracker
 
-          * @type Ext.dd.DragTracker
 
-          * The DragTracker attached to this instance. Note that the 4 on* functions are called in the scope of the 
 
-          * DragTracker ('this' refers to the DragTracker inside those functions), so we pass a reference to the 
 
-          * DragSelector so that we can call this class's functions.
 
-          */
 
-         this.tracker = Ext.create('Ext.dd.DragTracker', {
 
-             dataview: this.dataview,
 
-             el: this.dataview.el,
 
-             dragSelector: this,
 
-             onBeforeStart: this.onBeforeStart,
 
-             onStart: this.onStart,
 
-             onDrag : this.onDrag,
 
-             onEnd  : this.onEnd
 
-         });
 
- <span id='Ext-ux-DataView-DragSelector-property-dragRegion'>        /**
 
- </span>         * @property dragRegion
 
-          * @type Ext.util.Region
 
-          * Represents the region currently dragged out by the user. This is used to figure out which dataview nodes are
 
-          * in the selected area and to set the size of the Proxy element used to highlight the current drag area
 
-          */
 
-         this.dragRegion = Ext.create('Ext.util.Region');
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-onBeforeStart'>    /**
 
- </span>     * @private
 
-      * Listener attached to the DragTracker's onBeforeStart event. Returns false if the drag didn't start within the
 
-      * DataView's el
 
-      */
 
-     onBeforeStart: function(e) {
 
-         return e.target == this.dataview.getEl().dom;
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-onStart'>    /**
 
- </span>     * @private
 
-      * Listener attached to the DragTracker's onStart event. Cancel's the DataView's containerclick event from firing
 
-      * and sets the start co-ordinates of the Proxy element. Clears any existing DataView selection
 
-      * @param {Ext.EventObject} e The click event
 
-      */
 
-     onStart: function(e) {
 
-         var dragSelector = this.dragSelector,
 
-             dataview     = this.dataview;
 
-         // Flag which controls whether the cancelClick method vetoes the processing of the DataView's containerclick event.
 
-         // On IE (where else), this needs to remain set for a millisecond after mouseup because even though the mouse has
 
-         // moved, the mouseup will still trigger a click event.
 
-         this.dragging = true;
 
-         //here we reset and show the selection proxy element and cache the regions each item in the dataview take up
 
-         dragSelector.fillRegions();
 
-         dragSelector.getProxy().show();
 
-         dataview.getSelectionModel().deselectAll();
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-cancelClick'>    /**
 
- </span>     * @private
 
-      * Reusable handler that's used to cancel the container click event when dragging on the dataview. See onStart for
 
-      * details
 
-      */
 
-     cancelClick: function() {
 
-         return !this.tracker.dragging;
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-onDrag'>    /**
 
- </span>     * @private
 
-      * Listener attached to the DragTracker's onDrag event. Figures out how large the drag selection area should be and
 
-      * updates the proxy element's size to match. Then iterates over all of the rendered items and marks them selected
 
-      * if the drag region touches them
 
-      * @param {Ext.EventObject} e The drag event
 
-      */
 
-     onDrag: function(e) {
 
-         var dragSelector = this.dragSelector,
 
-             selModel     = dragSelector.dataview.getSelectionModel(),
 
-             dragRegion   = dragSelector.dragRegion,
 
-             bodyRegion   = dragSelector.bodyRegion,
 
-             proxy        = dragSelector.getProxy(),
 
-             regions      = dragSelector.regions,
 
-             length       = regions.length,
 
-             startXY   = this.startXY,
 
-             currentXY = this.getXY(),
 
-             minX      = Math.min(startXY[0], currentXY[0]),
 
-             minY      = Math.min(startXY[1], currentXY[1]),
 
-             width     = Math.abs(startXY[0] - currentXY[0]),
 
-             height    = Math.abs(startXY[1] - currentXY[1]),
 
-             region, selected, i;
 
-         Ext.apply(dragRegion, {
 
-             top: minY,
 
-             left: minX,
 
-             right: minX + width,
 
-             bottom: minY + height
 
-         });
 
-         dragRegion.constrainTo(bodyRegion);
 
-         proxy.setRegion(dragRegion);
 
-         for (i = 0; i < length; i++) {
 
-             region = regions[i];
 
-             selected = dragRegion.intersect(region);
 
-             if (selected) {
 
-                 selModel.select(i, true);
 
-             } else {
 
-                 selModel.deselect(i);
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-onEnd'>    /**
 
- </span>     * @private
 
-      * Listener attached to the DragTracker's onEnd event. This is a delayed function which executes 1
 
-      * millisecond after it has been called. This is because the dragging flag must remain active to cancel
 
-      * the containerclick event which the mouseup event will trigger.
 
-      * @param {Ext.EventObject} e The event object
 
-      */
 
-     onEnd: Ext.Function.createDelayed(function(e) {
 
-         var dataview = this.dataview,
 
-             selModel = dataview.getSelectionModel(),
 
-             dragSelector = this.dragSelector;
 
-         this.dragging = false;
 
-         dragSelector.getProxy().hide();
 
-     }, 1),
 
- <span id='Ext-ux-DataView-DragSelector-method-getProxy'>    /**
 
- </span>     * @private
 
-      * Creates a Proxy element that will be used to highlight the drag selection region
 
-      * @return {Ext.Element} The Proxy element
 
-      */
 
-     getProxy: function() {
 
-         if (!this.proxy) {
 
-             this.proxy = this.dataview.getEl().createChild({
 
-                 tag: 'div',
 
-                 cls: 'x-view-selector'
 
-             });
 
-         }
 
-         return this.proxy;
 
-     },
 
- <span id='Ext-ux-DataView-DragSelector-method-fillRegions'>    /**
 
- </span>     * @private
 
-      * Gets the region taken up by each rendered node in the DataView. We use these regions to figure out which nodes
 
-      * to select based on the selector region the user has dragged out
 
-      */
 
-     fillRegions: function() {
 
-         var dataview = this.dataview,
 
-             regions  = this.regions = [];
 
-         dataview.all.each(function(node) {
 
-             regions.push(node.getRegion());
 
-         });
 
-         this.bodyRegion = dataview.getEl().getRegion();
 
-     }
 
- });</pre>
 
- </body>
 
- </html>
 
 
  |