| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 | <!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-resizer-BorderSplitterTracker'>/**</span> * Private utility class for Ext.BorderSplitter. * @private */Ext.define('Ext.resizer.BorderSplitterTracker', {    extend: 'Ext.resizer.SplitterTracker',    requires: ['Ext.util.Region'],    getPrevCmp: null,    getNextCmp: null,    // calculate the constrain Region in which the splitter el may be moved.    calculateConstrainRegion: function() {        var me = this,            splitter = me.splitter,            collapseTarget = splitter.collapseTarget,            defaultSplitMin = splitter.defaultSplitMin,            sizePropCap = splitter.vertical ? 'Width' : 'Height',            minSizeProp = 'min' + sizePropCap,            maxSizeProp = 'max' + sizePropCap,            getSizeMethod = 'get' + sizePropCap,            neighbors = splitter.neighbors,            length = neighbors.length,            box = collapseTarget.el.getBox(),            left = box.x,            top = box.y,            right = box.right,            bottom = box.bottom,            size = splitter.vertical ? (right - left) : (bottom - top),            //neighborSizes = [],            i, neighbor, minRange, maxRange, maxGrowth, maxShrink, targetSize;        // if size=100 and minSize=80, we can reduce by 20 so minRange = minSize-size = -20        minRange = (collapseTarget[minSizeProp] || Math.min(size,defaultSplitMin)) - size;        // if maxSize=150, maxRange = maxSize - size = 50        maxRange = collapseTarget[maxSizeProp];        if (!maxRange) {            maxRange = 1e9;        } else {            maxRange -= size;        }        targetSize = size;        for (i = 0; i < length; ++i) {            neighbor = neighbors[i];            size = neighbor[getSizeMethod]();            //neighborSizes.push(size);            maxGrowth = size - neighbor[maxSizeProp]; // NaN if no maxSize or negative            maxShrink = size - (neighbor[minSizeProp] || Math.min(size,defaultSplitMin));            if (!isNaN(maxGrowth)) {                // if neighbor can only grow by 10 (maxGrowth = -10), minRange cannot be                // -20 anymore, but now only -10:                if (minRange < maxGrowth) {                    minRange = maxGrowth;                }            }            // if neighbor can shrink by 20 (maxShrink=20), maxRange cannot be 50 anymore,            // but now only 20:            if (maxRange > maxShrink) {                maxRange = maxShrink;            }        }        if (maxRange - minRange < 2) {            return null;        }        box = new Ext.util.Region(top, right, bottom, left);        me.constraintAdjusters[splitter.collapseDirection](box, minRange, maxRange, splitter);        me.dragInfo = {            minRange: minRange,            maxRange: maxRange,            //neighborSizes: neighborSizes,            targetSize: targetSize        };        return box;    },    constraintAdjusters: {        // splitter is to the right of the box        left: function (box, minRange, maxRange, splitter) {            box[0] = box.x = box.left = box.right + minRange;            box.right += maxRange + splitter.getWidth();        },        // splitter is below the box        top: function (box, minRange, maxRange, splitter) {            box[1] = box.y = box.top = box.bottom + minRange;            box.bottom += maxRange + splitter.getHeight();        },        // splitter is above the box        bottom: function (box, minRange, maxRange, splitter) {            box.bottom = box.top - minRange;            box.top -= maxRange + splitter.getHeight();        },        // splitter is to the left of the box        right: function (box, minRange, maxRange, splitter) {            box.right = box.left - minRange;            box.left -= maxRange + splitter.getWidth();        }    },    onBeforeStart: function(e) {        var me = this,            splitter = me.splitter,            collapseTarget = splitter.collapseTarget,            neighbors = splitter.neighbors,            collapseEl = me.getSplitter().collapseEl,            target = e.getTarget(),            length = neighbors.length,            i, neighbor;                    if (collapseEl && target === splitter.collapseEl.dom) {            return false;        }        if (collapseTarget.collapsed) {            return false;        }        // disabled if any neighbors are collapsed in parallel direction.        for (i = 0; i < length; ++i) {            neighbor = neighbors[i];            if (neighbor.collapsed && neighbor.isHorz === collapseTarget.isHorz) {                return false;            }        }        if (!(me.constrainTo = me.calculateConstrainRegion())) {            return false;        }        me.createDragOverlay();        return true;    },    performResize: function(e, offset) {        var me = this,            splitter = me.splitter,            collapseDirection = splitter.collapseDirection,            collapseTarget = splitter.collapseTarget,            // a vertical splitter adjusts horizontal dimensions            adjusters = me.splitAdjusters[splitter.vertical ? 'horz' : 'vert'],            delta = offset[adjusters.index],            dragInfo = me.dragInfo,            //neighbors = splitter.neighbors,            //length = neighbors.length,            //neighborSizes = dragInfo.neighborSizes,            //isVert = collapseTarget.isVert,            //i, neighbor,            owner;        if (collapseDirection == 'right' || collapseDirection == 'bottom') {            // these splitters grow by moving left/up, so flip the sign of delta...            delta = -delta;        }        // now constrain delta to our computed range:        delta = Math.min(Math.max(dragInfo.minRange, delta), dragInfo.maxRange);        if (delta) {            (owner = splitter.ownerCt).suspendLayouts();            adjusters.adjustTarget(collapseTarget, dragInfo.targetSize, delta);            //for (i = 0; i < length; ++i) {            //    neighbor = neighbors[i];            //    if (!neighbor.isCenter && !neighbor.maintainFlex && neighbor.isVert == isVert) {            //        delete neighbor.flex;            //        adjusters.adjustNeighbor(neighbor, neighborSizes[i], delta);            //    }            //}            owner.resumeLayouts(true);        }    },    splitAdjusters: {        horz: {            index: 0,            //adjustNeighbor: function (neighbor, size, delta) {            //    neighbor.setSize(size - delta);            //},            adjustTarget: function (target, size, delta) {                target.flex = null;                target.setSize(size + delta);            }        },        vert: {            index: 1,            //adjustNeighbor: function (neighbor, size, delta) {            //    neighbor.setSize(undefined, size - delta);            //},            adjustTarget: function (target, targetSize, delta) {                target.flex = null;                target.setSize(undefined, targetSize + delta);            }        }    }});</pre></body></html>
 |