| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | <!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-util-ComponentDragger'>/**</span> * A subclass of Ext.dd.DragTracker which handles dragging any Component. * * This is configured with a Component to be made draggable, and a config object for the {@link Ext.dd.DragTracker} * class. * * A {@link #delegate} may be provided which may be either the element to use as the mousedown target or a {@link * Ext.DomQuery} selector to activate multiple mousedown targets. * * When the Component begins to be dragged, its `beginDrag` method will be called if implemented. * * When the drag ends, its `endDrag` method will be called if implemented. */Ext.define('Ext.util.ComponentDragger', {    extend: 'Ext.dd.DragTracker',<span id='Ext-util-ComponentDragger-cfg-constrain'>    /**</span>     * @cfg {Boolean} constrain     * Specify as `true` to constrain the Component to within the bounds of the {@link #constrainTo} region.     */<span id='Ext-util-ComponentDragger-cfg-delegate'>    /**</span>     * @cfg {String/Ext.Element} delegate     * A {@link Ext.DomQuery DomQuery} selector which identifies child elements within the Component's encapsulating     * Element which are the drag handles. This limits dragging to only begin when the matching elements are     * mousedowned.     *     * This may also be a specific child element within the Component's encapsulating element to use as the drag handle.     */<span id='Ext-util-ComponentDragger-cfg-constrainDelegate'>    /**</span>     * @cfg {Boolean} constrainDelegate     * Specify as `true` to constrain the drag handles within the {@link #constrainTo} region.     */    autoStart: 500,<span id='Ext-util-ComponentDragger-method-constructor'>    /**</span>     * Creates new ComponentDragger.     * @param {Object} comp The Component to provide dragging for.     * @param {Object} [config] Config object     */    constructor: function(comp, config) {        this.comp = comp;        this.initialConstrainTo = config.constrainTo;        this.callParent([ config ]);    },    onStart: function(e) {        var me = this,            comp = me.comp;        // Cache the start [X, Y] array        this.startPosition = comp.el.getXY();        // If client Component has a ghost method to show a lightweight version of itself        // then use that as a drag proxy unless configured to liveDrag.        if (comp.ghost && !comp.liveDrag) {             me.proxy = comp.ghost();             me.dragTarget = me.proxy.header.el;        }        // Set the constrainTo Region before we start dragging.        if (me.constrain || me.constrainDelegate) {            me.constrainTo = me.calculateConstrainRegion();        }        if (comp.beginDrag) {            comp.beginDrag();        }    },    calculateConstrainRegion: function() {        var me = this,            comp = me.comp,            c = me.initialConstrainTo,            delegateRegion,            elRegion,            dragEl = me.proxy ? me.proxy.el : comp.el,            shadowSize = (!me.constrainDelegate && dragEl.shadow && !dragEl.shadowDisabled) ? dragEl.shadow.getShadowSize() : 0;        // The configured constrainTo might be a Region or an element        if (!(c instanceof Ext.util.Region)) {            c =  Ext.fly(c).getViewRegion();        }        // Reduce the constrain region to allow for shadow        if (shadowSize) {            c.adjust(shadowSize[0], -shadowSize[1], -shadowSize[2], shadowSize[3]);        }        // If they only want to constrain the *delegate* to within the constrain region,        // adjust the region to be larger based on the insets of the delegate from the outer        // edges of the Component.        if (!me.constrainDelegate) {            delegateRegion = Ext.fly(me.dragTarget).getRegion();            elRegion = dragEl.getRegion();            c.adjust(                delegateRegion.top - elRegion.top,                delegateRegion.right - elRegion.right,                delegateRegion.bottom - elRegion.bottom,                delegateRegion.left - elRegion.left            );        }        return c;    },    // Move either the ghost Component or the target Component to its new position on drag    onDrag: function(e) {        var me = this,            comp = (me.proxy && !me.comp.liveDrag) ? me.proxy : me.comp,            offset = me.getOffset(me.constrain || me.constrainDelegate ? 'dragTarget' : null);        comp.setPagePosition(me.startPosition[0] + offset[0], me.startPosition[1] + offset[1]);    },    onEnd: function(e) {        var comp = this.comp;        if (this.proxy && !comp.liveDrag) {            comp.unghost();        }        if (comp.endDrag) {            comp.endDrag();        }    }});</pre></body></html>
 |