133 lines
No EOL
4.2 KiB
JavaScript
133 lines
No EOL
4.2 KiB
JavaScript
/*
|
|
This file is part of Ext JS 3.4
|
|
|
|
Copyright (c) 2011-2013 Sencha Inc
|
|
|
|
Contact: http://www.sencha.com/contact
|
|
|
|
GNU General Public License Usage
|
|
This file may be used under the terms of the GNU General Public License version 3.0 as
|
|
published by the Free Software Foundation and appearing in the file LICENSE included in the
|
|
packaging of this file.
|
|
|
|
Please review the following information to ensure the GNU General Public License version 3.0
|
|
requirements will be met: http://www.gnu.org/copyleft/gpl.html.
|
|
|
|
If you are unsure which license is appropriate for your use, please contact the sales department
|
|
at http://www.sencha.com/contact.
|
|
|
|
Build date: 2013-04-03 15:07:25
|
|
*/
|
|
/**
|
|
* @class Ext.tree.ColumnResizer
|
|
* @extends Ext.util.Observable
|
|
*/
|
|
Ext.tree.ColumnResizer = Ext.extend(Ext.util.Observable, {
|
|
/**
|
|
* @cfg {Number} minWidth The minimum width the column can be dragged to.
|
|
* Defaults to <tt>14</tt>.
|
|
*/
|
|
minWidth: 14,
|
|
|
|
constructor: function(config){
|
|
Ext.apply(this, config);
|
|
Ext.tree.ColumnResizer.superclass.constructor.call(this);
|
|
},
|
|
|
|
init : function(tree){
|
|
this.tree = tree;
|
|
tree.on('render', this.initEvents, this);
|
|
},
|
|
|
|
initEvents : function(tree){
|
|
tree.mon(tree.innerHd, 'mousemove', this.handleHdMove, this);
|
|
this.tracker = new Ext.dd.DragTracker({
|
|
onBeforeStart: this.onBeforeStart.createDelegate(this),
|
|
onStart: this.onStart.createDelegate(this),
|
|
onDrag: this.onDrag.createDelegate(this),
|
|
onEnd: this.onEnd.createDelegate(this),
|
|
tolerance: 3,
|
|
autoStart: 300
|
|
});
|
|
this.tracker.initEl(tree.innerHd);
|
|
tree.on('beforedestroy', this.tracker.destroy, this.tracker);
|
|
},
|
|
|
|
handleHdMove : function(e, t){
|
|
var hw = 5,
|
|
x = e.getPageX(),
|
|
hd = e.getTarget('.x-treegrid-hd', 3, true);
|
|
|
|
if(hd){
|
|
var r = hd.getRegion(),
|
|
ss = hd.dom.style,
|
|
pn = hd.dom.parentNode;
|
|
|
|
if(x - r.left <= hw && hd.dom !== pn.firstChild) {
|
|
var ps = hd.dom.previousSibling;
|
|
while(ps && Ext.fly(ps).hasClass('x-treegrid-hd-hidden')) {
|
|
ps = ps.previousSibling;
|
|
}
|
|
if(ps) {
|
|
this.activeHd = Ext.get(ps);
|
|
ss.cursor = Ext.isWebKit ? 'e-resize' : 'col-resize';
|
|
}
|
|
} else if(r.right - x <= hw) {
|
|
var ns = hd.dom;
|
|
while(ns && Ext.fly(ns).hasClass('x-treegrid-hd-hidden')) {
|
|
ns = ns.previousSibling;
|
|
}
|
|
if(ns) {
|
|
this.activeHd = Ext.get(ns);
|
|
ss.cursor = Ext.isWebKit ? 'w-resize' : 'col-resize';
|
|
}
|
|
} else{
|
|
delete this.activeHd;
|
|
ss.cursor = '';
|
|
}
|
|
}
|
|
},
|
|
|
|
onBeforeStart : function(e){
|
|
this.dragHd = this.activeHd;
|
|
return !!this.dragHd;
|
|
},
|
|
|
|
onStart : function(e){
|
|
this.dragHeadersDisabled = this.tree.headersDisabled;
|
|
this.tree.headersDisabled = true;
|
|
this.proxy = this.tree.body.createChild({cls:'x-treegrid-resizer'});
|
|
this.proxy.setHeight(this.tree.body.getHeight());
|
|
|
|
var x = this.tracker.getXY()[0];
|
|
|
|
this.hdX = this.dragHd.getX();
|
|
this.hdIndex = this.tree.findHeaderIndex(this.dragHd);
|
|
|
|
this.proxy.setX(this.hdX);
|
|
this.proxy.setWidth(x-this.hdX);
|
|
|
|
this.maxWidth = this.tree.outerCt.getWidth() - this.tree.innerBody.translatePoints(this.hdX).left;
|
|
},
|
|
|
|
onDrag : function(e){
|
|
var cursorX = this.tracker.getXY()[0];
|
|
this.proxy.setWidth((cursorX-this.hdX).constrain(this.minWidth, this.maxWidth));
|
|
},
|
|
|
|
onEnd : function(e){
|
|
var nw = this.proxy.getWidth(),
|
|
tree = this.tree,
|
|
disabled = this.dragHeadersDisabled;
|
|
|
|
this.proxy.remove();
|
|
delete this.dragHd;
|
|
|
|
tree.columns[this.hdIndex].width = nw;
|
|
tree.updateColumnWidths();
|
|
|
|
setTimeout(function(){
|
|
tree.headersDisabled = disabled;
|
|
}, 100);
|
|
}
|
|
}); |