summaryrefslogtreecommitdiffstats
path: root/deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridColumnResizer.js
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridColumnResizer.js')
-rw-r--r--deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridColumnResizer.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridColumnResizer.js b/deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridColumnResizer.js
new file mode 100644
index 0000000..de73608
--- /dev/null
+++ b/deluge/ui/web/js/extjs/ext-extensions/tree/TreeGridColumnResizer.js
@@ -0,0 +1,123 @@
+/**
+ * Ext JS Library 3.4.0
+ * Copyright(c) 2006-2011 Sencha Inc.
+ * licensing@sencha.com
+ * http://www.sencha.com/license
+ */
+/**
+ * @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);
+ },
+});