commit extjs-2.2.1
[extjs.git] / examples / grid / PanelResizer.js
1 /*\r
2  * Ext JS Library 2.2.1\r
3  * Copyright(c) 2006-2009, Ext JS, LLC.\r
4  * licensing@extjs.com\r
5  * \r
6  * http://extjs.com/license\r
7  */\r
8 \r
9 Ext.ux.PanelResizer = Ext.extend(Ext.util.Observable, {\r
10     minHeight: 0,\r
11     maxHeight:10000000,\r
12 \r
13     constructor: function(config){\r
14         Ext.apply(this, config);\r
15         this.events = {};\r
16         Ext.ux.PanelResizer.superclass.constructor.call(this, config);\r
17     },\r
18 \r
19     init : function(p){\r
20         this.panel = p;\r
21 \r
22         if(this.panel.elements.indexOf('footer')==-1){\r
23             p.elements += ',footer';\r
24         }\r
25         p.on('render', this.onRender, this);\r
26     },\r
27 \r
28     onRender : function(p){\r
29         this.handle = p.footer.createChild({cls:'x-panel-resize'});\r
30 \r
31         this.tracker = new Ext.dd.DragTracker({\r
32             onStart: this.onDragStart.createDelegate(this),\r
33             onDrag: this.onDrag.createDelegate(this),\r
34             onEnd: this.onDragEnd.createDelegate(this),\r
35             tolerance: 3,\r
36             autoStart: 300\r
37         });\r
38         this.tracker.initEl(this.handle);\r
39         p.on('beforedestroy', this.tracker.destroy, this.tracker);\r
40     },\r
41 \r
42         // private\r
43     onDragStart: function(e){\r
44         this.dragging = true;\r
45         this.startHeight = this.panel.el.getHeight();\r
46         this.fireEvent('dragstart', this, e);\r
47     },\r
48 \r
49         // private\r
50     onDrag: function(e){\r
51         this.panel.setHeight((this.startHeight-this.tracker.getOffset()[1]).constrain(this.minHeight, this.maxHeight));\r
52         this.fireEvent('drag', this, e);\r
53     },\r
54 \r
55         // private\r
56     onDragEnd: function(e){\r
57         this.dragging = false;\r
58         this.fireEvent('dragend', this, e);\r
59     }\r
60 });