4d9168e490a344cac04f2af5be4866a80351aea3
[roojs1] / docs / src / Roo_SplitBar.js.html
1 <html><head><title>/home/edward/gitlive/roojs1/Roo/SplitBar.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11
12
13 /**
14  * @class Roo.SplitBar
15  * @extends Roo.util.Observable
16  * Creates draggable splitter bar functionality from two elements (element to be dragged and element to be resized).
17  * &lt;br&gt;&lt;br&gt;
18  * Usage:
19  * &lt;pre&gt;&lt;code&gt;
20 var split = new Roo.SplitBar(&quot;elementToDrag&quot;, &quot;elementToSize&quot;,
21                    Roo.SplitBar.HORIZONTAL, Roo.SplitBar.LEFT);
22 split.setAdapter(new Roo.SplitBar.AbsoluteLayoutAdapter(&quot;container&quot;));
23 split.minSize = 100;
24 split.maxSize = 600;
25 split.animate = true;
26 split.on('moved', splitterMoved);
27 &lt;/code&gt;&lt;/pre&gt;
28  * @constructor
29  * Create a new SplitBar
30  * @param {String/HTMLElement/Roo.Element} dragElement The element to be dragged and act as the SplitBar. 
31  * @param {String/HTMLElement/Roo.Element} resizingElement The element to be resized based on where the SplitBar element is dragged 
32  * @param {Number} orientation (optional) Either Roo.SplitBar.HORIZONTAL or Roo.SplitBar.VERTICAL. (Defaults to HORIZONTAL)
33  * @param {Number} placement (optional) Either Roo.SplitBar.LEFT or Roo.SplitBar.RIGHT for horizontal or  
34                         Roo.SplitBar.TOP or Roo.SplitBar.BOTTOM for vertical. (By default, this is determined automatically by the initial
35                         position of the SplitBar).
36  */
37 </span><span class="jsdoc-var">Roo.SplitBar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">dragElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">resizingElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">orientation</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">placement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">existingProxy</span><span class="jsdoc-syntax">){
38
39     </span><span class="jsdoc-comment">/** @private */
40     </span><span class="jsdoc-var">this.el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">dragElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
41     </span><span class="jsdoc-var">this.el.dom.unselectable </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">&quot;on&quot;</span><span class="jsdoc-syntax">;
42     </span><span class="jsdoc-comment">/** @private */
43     </span><span class="jsdoc-var">this.resizingEl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">resizingElement</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
44
45     </span><span class="jsdoc-comment">/**
46      * @private
47      * The orientation of the split. Either Roo.SplitBar.HORIZONTAL or Roo.SplitBar.VERTICAL. (Defaults to HORIZONTAL)
48      * Note: If this is changed after creating the SplitBar, the placement property must be manually updated
49      * @type Number
50      */
51     </span><span class="jsdoc-var">this.orientation </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">orientation </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL</span><span class="jsdoc-syntax">;
52
53     </span><span class="jsdoc-comment">/**
54      * The minimum size of the resizing element. (Defaults to 0)
55      * @type Number
56      */
57     </span><span class="jsdoc-var">this.minSize </span><span class="jsdoc-syntax">= 0;
58
59     </span><span class="jsdoc-comment">/**
60      * The maximum size of the resizing element. (Defaults to 2000)
61      * @type Number
62      */
63     </span><span class="jsdoc-var">this.maxSize </span><span class="jsdoc-syntax">= 2000;
64
65     </span><span class="jsdoc-comment">/**
66      * Whether to animate the transition to the new size
67      * @type Boolean
68      */
69     </span><span class="jsdoc-var">this.animate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
70
71     </span><span class="jsdoc-comment">/**
72      * Whether to create a transparent shim that overlays the page when dragging, enables dragging across iframes.
73      * @type Boolean
74      */
75     </span><span class="jsdoc-var">this.useShim </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
76
77     </span><span class="jsdoc-comment">/** @private */
78     </span><span class="jsdoc-var">this.shim </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">;
79
80     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">existingProxy</span><span class="jsdoc-syntax">){
81         </span><span class="jsdoc-comment">/** @private */
82         </span><span class="jsdoc-var">this.proxy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.SplitBar.createProxy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.orientation</span><span class="jsdoc-syntax">);
83     }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
84         </span><span class="jsdoc-var">this.proxy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">existingProxy</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.dom</span><span class="jsdoc-syntax">;
85     }
86     </span><span class="jsdoc-comment">/** @private */
87     </span><span class="jsdoc-var">this.dd </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.dd.DDProxy</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.el.dom.id</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">&quot;XSplitBars&quot;</span><span class="jsdoc-syntax">, {</span><span class="jsdoc-var">dragElId </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.proxy.id</span><span class="jsdoc-syntax">});
88
89     </span><span class="jsdoc-comment">/** @private */
90     </span><span class="jsdoc-var">this.dd.b4StartDrag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.onStartProxyDrag.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
91
92     </span><span class="jsdoc-comment">/** @private */
93     </span><span class="jsdoc-var">this.dd.endDrag </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.onEndProxyDrag.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
94
95     </span><span class="jsdoc-comment">/** @private */
96     </span><span class="jsdoc-var">this.dragSpecs </span><span class="jsdoc-syntax">= {};
97
98     </span><span class="jsdoc-comment">/**
99      * @private The adapter to use to positon and resize elements
100      */
101     </span><span class="jsdoc-var">this.adapter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.SplitBar.BasicLayoutAdapter</span><span class="jsdoc-syntax">();
102     </span><span class="jsdoc-var">this.adapter.init</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
103
104     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.orientation </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL</span><span class="jsdoc-syntax">){
105         </span><span class="jsdoc-comment">/** @private */
106         </span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">placement </span><span class="jsdoc-syntax">|| (</span><span class="jsdoc-var">this.el.getX</span><span class="jsdoc-syntax">() &gt; </span><span class="jsdoc-var">this.resizingEl.getX</span><span class="jsdoc-syntax">() ? </span><span class="jsdoc-var">Roo.SplitBar.LEFT </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.SplitBar.RIGHT</span><span class="jsdoc-syntax">);
107         </span><span class="jsdoc-var">this.el.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-splitbar-h&quot;</span><span class="jsdoc-syntax">);
108     }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
109         </span><span class="jsdoc-comment">/** @private */
110         </span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">placement </span><span class="jsdoc-syntax">|| (</span><span class="jsdoc-var">this.el.getY</span><span class="jsdoc-syntax">() &gt; </span><span class="jsdoc-var">this.resizingEl.getY</span><span class="jsdoc-syntax">() ? </span><span class="jsdoc-var">Roo.SplitBar.TOP </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.SplitBar.BOTTOM</span><span class="jsdoc-syntax">);
111         </span><span class="jsdoc-var">this.el.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;x-splitbar-v&quot;</span><span class="jsdoc-syntax">);
112     }
113
114     </span><span class="jsdoc-var">this.addEvents</span><span class="jsdoc-syntax">({
115         </span><span class="jsdoc-comment">/**
116          * @event resize
117          * Fires when the splitter is moved (alias for {@link #event-moved})
118          * @param {Roo.SplitBar} this
119          * @param {Number} newSize the new width or height
120          */
121         </span><span class="jsdoc-string">&quot;resize&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
122         </span><span class="jsdoc-comment">/**
123          * @event moved
124          * Fires when the splitter is moved
125          * @param {Roo.SplitBar} this
126          * @param {Number} newSize the new width or height
127          */
128         </span><span class="jsdoc-string">&quot;moved&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
129         </span><span class="jsdoc-comment">/**
130          * @event beforeresize
131          * Fires before the splitter is dragged
132          * @param {Roo.SplitBar} this
133          */
134         </span><span class="jsdoc-string">&quot;beforeresize&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
135
136         </span><span class="jsdoc-string">&quot;beforeapply&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true
137     </span><span class="jsdoc-syntax">});
138
139     </span><span class="jsdoc-var">Roo.util.Observable.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
140 };
141
142 </span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.SplitBar</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.util.Observable</span><span class="jsdoc-syntax">, {
143     </span><span class="jsdoc-var">onStartProxyDrag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">){
144         </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;beforeresize&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
145         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.overlay</span><span class="jsdoc-syntax">){
146             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.DomHelper.insertFirst</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document.body</span><span class="jsdoc-syntax">,  {</span><span class="jsdoc-var">cls</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;x-drag-overlay&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">html</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">&quot;&amp;#160;&quot;</span><span class="jsdoc-syntax">}, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">);
147             </span><span class="jsdoc-var">o.unselectable</span><span class="jsdoc-syntax">();
148             </span><span class="jsdoc-var">o.enableDisplayMode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;block&quot;</span><span class="jsdoc-syntax">);
149             </span><span class="jsdoc-comment">// all splitbars share the same overlay
150             </span><span class="jsdoc-var">Roo.SplitBar.prototype.overlay </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">;
151         }
152         </span><span class="jsdoc-var">this.overlay.setSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.lib.Dom.getViewWidth</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">Roo.lib.Dom.getViewHeight</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">));
153         </span><span class="jsdoc-var">this.overlay.show</span><span class="jsdoc-syntax">();
154         </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.proxy</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.setDisplayed</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;block&quot;</span><span class="jsdoc-syntax">);
155         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">size </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.adapter.getElementSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
156         </span><span class="jsdoc-var">this.activeMinSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getMinimumSize</span><span class="jsdoc-syntax">();;
157         </span><span class="jsdoc-var">this.activeMaxSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getMaximumSize</span><span class="jsdoc-syntax">();;
158         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">c1 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">size </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">this.activeMinSize</span><span class="jsdoc-syntax">;
159         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">c2 </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Math.max</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.activeMaxSize </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">size</span><span class="jsdoc-syntax">, 0);
160         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.orientation </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL</span><span class="jsdoc-syntax">){
161             </span><span class="jsdoc-var">this.dd.resetConstraints</span><span class="jsdoc-syntax">();
162             </span><span class="jsdoc-var">this.dd.setXConstraint</span><span class="jsdoc-syntax">(
163                 </span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.LEFT </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">c1 </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">c2</span><span class="jsdoc-syntax">,
164                 </span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.LEFT </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">c2 </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">c1
165             </span><span class="jsdoc-syntax">);
166             </span><span class="jsdoc-var">this.dd.setYConstraint</span><span class="jsdoc-syntax">(0, 0);
167         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
168             </span><span class="jsdoc-var">this.dd.resetConstraints</span><span class="jsdoc-syntax">();
169             </span><span class="jsdoc-var">this.dd.setXConstraint</span><span class="jsdoc-syntax">(0, 0);
170             </span><span class="jsdoc-var">this.dd.setYConstraint</span><span class="jsdoc-syntax">(
171                 </span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.TOP </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">c1 </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">c2</span><span class="jsdoc-syntax">,
172                 </span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.TOP </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">c2 </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">c1
173             </span><span class="jsdoc-syntax">);
174          }
175         </span><span class="jsdoc-var">this.dragSpecs.startSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">size</span><span class="jsdoc-syntax">;
176         </span><span class="jsdoc-var">this.dragSpecs.startPoint </span><span class="jsdoc-syntax">= [</span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">];
177         </span><span class="jsdoc-var">Roo.dd.DDProxy.prototype.b4StartDrag.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.dd</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">);
178     },
179
180     </span><span class="jsdoc-comment">/** 
181      * @private Called after the drag operation by the DDProxy
182      */
183     </span><span class="jsdoc-var">onEndProxyDrag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">){
184         </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.proxy</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.setDisplayed</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
185         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">endPoint </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.lib.Event.getXY</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">);
186         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.overlay</span><span class="jsdoc-syntax">){
187             </span><span class="jsdoc-var">this.overlay.hide</span><span class="jsdoc-syntax">();
188         }
189         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">;
190         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.orientation </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL</span><span class="jsdoc-syntax">){
191             </span><span class="jsdoc-var">newSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.dragSpecs.startSize </span><span class="jsdoc-syntax">+
192                 (</span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.LEFT </span><span class="jsdoc-syntax">?
193                     </span><span class="jsdoc-var">endPoint</span><span class="jsdoc-syntax">[0] - </span><span class="jsdoc-var">this.dragSpecs.startPoint</span><span class="jsdoc-syntax">[0] :
194                     </span><span class="jsdoc-var">this.dragSpecs.startPoint</span><span class="jsdoc-syntax">[0] - </span><span class="jsdoc-var">endPoint</span><span class="jsdoc-syntax">[0]
195                 );
196         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
197             </span><span class="jsdoc-var">newSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.dragSpecs.startSize </span><span class="jsdoc-syntax">+
198                 (</span><span class="jsdoc-var">this.placement </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.TOP </span><span class="jsdoc-syntax">?
199                     </span><span class="jsdoc-var">endPoint</span><span class="jsdoc-syntax">[1] - </span><span class="jsdoc-var">this.dragSpecs.startPoint</span><span class="jsdoc-syntax">[1] :
200                     </span><span class="jsdoc-var">this.dragSpecs.startPoint</span><span class="jsdoc-syntax">[1] - </span><span class="jsdoc-var">endPoint</span><span class="jsdoc-syntax">[1]
201                 );
202         }
203         </span><span class="jsdoc-var">newSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Math.min</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Math.max</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.activeMinSize</span><span class="jsdoc-syntax">), </span><span class="jsdoc-var">this.activeMaxSize</span><span class="jsdoc-syntax">);
204         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newSize </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-var">this.dragSpecs.startSize</span><span class="jsdoc-syntax">){
205             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'beforeapply'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">) !== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
206                 </span><span class="jsdoc-var">this.adapter.setElementSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
207                 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;moved&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
208                 </span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;resize&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
209             }
210         }
211     },
212
213     </span><span class="jsdoc-comment">/**
214      * Get the adapter this SplitBar uses
215      * @return The adapter object
216      */
217     </span><span class="jsdoc-var">getAdapter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
218         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.adapter</span><span class="jsdoc-syntax">;
219     },
220
221     </span><span class="jsdoc-comment">/**
222      * Set the adapter this SplitBar uses
223      * @param {Object} adapter A SplitBar adapter object
224      */
225     </span><span class="jsdoc-var">setAdapter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">adapter</span><span class="jsdoc-syntax">){
226         </span><span class="jsdoc-var">this.adapter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">adapter</span><span class="jsdoc-syntax">;
227         </span><span class="jsdoc-var">this.adapter.init</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
228     },
229
230     </span><span class="jsdoc-comment">/**
231      * Gets the minimum size for the resizing element
232      * @return {Number} The minimum size
233      */
234     </span><span class="jsdoc-var">getMinimumSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
235         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.minSize</span><span class="jsdoc-syntax">;
236     },
237
238     </span><span class="jsdoc-comment">/**
239      * Sets the minimum size for the resizing element
240      * @param {Number} minSize The minimum size
241      */
242     </span><span class="jsdoc-var">setMinimumSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">minSize</span><span class="jsdoc-syntax">){
243         </span><span class="jsdoc-var">this.minSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">minSize</span><span class="jsdoc-syntax">;
244     },
245
246     </span><span class="jsdoc-comment">/**
247      * Gets the maximum size for the resizing element
248      * @return {Number} The maximum size
249      */
250     </span><span class="jsdoc-var">getMaximumSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
251         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.maxSize</span><span class="jsdoc-syntax">;
252     },
253
254     </span><span class="jsdoc-comment">/**
255      * Sets the maximum size for the resizing element
256      * @param {Number} maxSize The maximum size
257      */
258     </span><span class="jsdoc-var">setMaximumSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">maxSize</span><span class="jsdoc-syntax">){
259         </span><span class="jsdoc-var">this.maxSize </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">maxSize</span><span class="jsdoc-syntax">;
260     },
261
262     </span><span class="jsdoc-comment">/**
263      * Sets the initialize size for the resizing element
264      * @param {Number} size The initial size
265      */
266     </span><span class="jsdoc-var">setCurrentSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">size</span><span class="jsdoc-syntax">){
267         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">oldAnimate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.animate</span><span class="jsdoc-syntax">;
268         </span><span class="jsdoc-var">this.animate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
269         </span><span class="jsdoc-var">this.adapter.setElementSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">size</span><span class="jsdoc-syntax">);
270         </span><span class="jsdoc-var">this.animate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">oldAnimate</span><span class="jsdoc-syntax">;
271     },
272
273     </span><span class="jsdoc-comment">/**
274      * Destroy this splitbar. 
275      * @param {Boolean} removeEl True to remove the element
276      */
277     </span><span class="jsdoc-var">destroy </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">removeEl</span><span class="jsdoc-syntax">){
278         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.shim</span><span class="jsdoc-syntax">){
279             </span><span class="jsdoc-var">this.shim.remove</span><span class="jsdoc-syntax">();
280         }
281         </span><span class="jsdoc-var">this.dd.unreg</span><span class="jsdoc-syntax">();
282         </span><span class="jsdoc-var">this.proxy.parentNode.removeChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.proxy</span><span class="jsdoc-syntax">);
283         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">removeEl</span><span class="jsdoc-syntax">){
284             </span><span class="jsdoc-var">this.el.remove</span><span class="jsdoc-syntax">();
285         }
286     }
287 });
288
289 </span><span class="jsdoc-comment">/**
290  * @private static Create our own proxy element element. So it will be the same same size on all browsers, we won't use borders. Instead we use a background color.
291  */
292 </span><span class="jsdoc-var">Roo.SplitBar.createProxy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">dir</span><span class="jsdoc-syntax">){
293     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">proxy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.Element</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;div&quot;</span><span class="jsdoc-syntax">));
294     </span><span class="jsdoc-var">proxy.unselectable</span><span class="jsdoc-syntax">();
295     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'x-splitbar-proxy'</span><span class="jsdoc-syntax">;
296     </span><span class="jsdoc-var">proxy.addClass</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">' ' </span><span class="jsdoc-syntax">+ (</span><span class="jsdoc-var">dir </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">+</span><span class="jsdoc-string">'-h' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">cls </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'-v'</span><span class="jsdoc-syntax">));
297     </span><span class="jsdoc-var">document.body.appendChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">proxy.dom</span><span class="jsdoc-syntax">);
298     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">proxy.dom</span><span class="jsdoc-syntax">;
299 };
300
301 </span><span class="jsdoc-comment">/** 
302  * @class Roo.SplitBar.BasicLayoutAdapter
303  * Default Adapter. It assumes the splitter and resizing element are not positioned
304  * elements and only gets/sets the width of the element. Generally used for table based layouts.
305  */
306 </span><span class="jsdoc-var">Roo.SplitBar.BasicLayoutAdapter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
307 };
308
309 </span><span class="jsdoc-var">Roo.SplitBar.BasicLayoutAdapter.prototype </span><span class="jsdoc-syntax">= {
310     </span><span class="jsdoc-comment">// do nothing for now
311     </span><span class="jsdoc-var">init </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
312
313     },
314     </span><span class="jsdoc-comment">/**
315      * Called before drag operations to get the current size of the resizing element. 
316      * @param {Roo.SplitBar} s The SplitBar using this adapter
317      */
318      </span><span class="jsdoc-var">getElementSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
319         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.orientation </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL</span><span class="jsdoc-syntax">){
320             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">s.resizingEl.getWidth</span><span class="jsdoc-syntax">();
321         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
322             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">s.resizingEl.getHeight</span><span class="jsdoc-syntax">();
323         }
324     },
325
326     </span><span class="jsdoc-comment">/**
327      * Called after drag operations to set the size of the resizing element.
328      * @param {Roo.SplitBar} s The SplitBar using this adapter
329      * @param {Number} newSize The new size to set
330      * @param {Function} onComplete A function to be invoked when resizing is complete
331      */
332     </span><span class="jsdoc-var">setElementSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">){
333         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.orientation </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL</span><span class="jsdoc-syntax">){
334             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.animate</span><span class="jsdoc-syntax">){
335                 </span><span class="jsdoc-var">s.resizingEl.setWidth</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
336                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">){
337                     </span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
338                 }
339             }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
340                 </span><span class="jsdoc-var">s.resizingEl.setWidth</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">.1</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'easeOut'</span><span class="jsdoc-syntax">);
341             }
342         }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
343
344             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">s.animate</span><span class="jsdoc-syntax">){
345                 </span><span class="jsdoc-var">s.resizingEl.setHeight</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
346                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">){
347                     </span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">);
348                 }
349             }</span><span class="jsdoc-keyword">else</span><span class="jsdoc-syntax">{
350                 </span><span class="jsdoc-var">s.resizingEl.setHeight</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">.1</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">, </span><span class="jsdoc-string">'easeOut'</span><span class="jsdoc-syntax">);
351             }
352         }
353     }
354 };
355
356 </span><span class="jsdoc-comment">/** 
357  *@class Roo.SplitBar.AbsoluteLayoutAdapter
358  * @extends Roo.SplitBar.BasicLayoutAdapter
359  * Adapter that  moves the splitter element to align with the resized sizing element. 
360  * Used with an absolute positioned SplitBar.
361  * @param {String/HTMLElement/Roo.Element} container The container that wraps around the absolute positioned content. If it's
362  * document.body, make sure you assign an id to the body element.
363  */
364 </span><span class="jsdoc-var">Roo.SplitBar.AbsoluteLayoutAdapter </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">container</span><span class="jsdoc-syntax">){
365     </span><span class="jsdoc-var">this.basic </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.SplitBar.BasicLayoutAdapter</span><span class="jsdoc-syntax">();
366     </span><span class="jsdoc-var">this.container </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.get</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">container</span><span class="jsdoc-syntax">);
367 };
368
369 </span><span class="jsdoc-var">Roo.SplitBar.AbsoluteLayoutAdapter.prototype </span><span class="jsdoc-syntax">= {
370     </span><span class="jsdoc-var">init </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
371         </span><span class="jsdoc-var">this.basic.init</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">);
372     },
373
374     </span><span class="jsdoc-var">getElementSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
375         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.basic.getElementSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">);
376     },
377
378     </span><span class="jsdoc-var">setElementSize </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">onComplete</span><span class="jsdoc-syntax">){
379         </span><span class="jsdoc-var">this.basic.setElementSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">newSize</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">this.moveSplitter.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">, [</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">]));
380     },
381
382     </span><span class="jsdoc-var">moveSplitter </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
383         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">yes </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Roo.SplitBar</span><span class="jsdoc-syntax">;
384         </span><span class="jsdoc-keyword">switch</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.placement</span><span class="jsdoc-syntax">){
385             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">yes.LEFT</span><span class="jsdoc-syntax">:
386                 </span><span class="jsdoc-var">s.el.setX</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.resizingEl.getRight</span><span class="jsdoc-syntax">());
387                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
388             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">yes.RIGHT</span><span class="jsdoc-syntax">:
389                 </span><span class="jsdoc-var">s.el.setStyle</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;right&quot;</span><span class="jsdoc-syntax">, (</span><span class="jsdoc-var">this.container.getWidth</span><span class="jsdoc-syntax">() - </span><span class="jsdoc-var">s.resizingEl.getLeft</span><span class="jsdoc-syntax">()) + </span><span class="jsdoc-string">&quot;px&quot;</span><span class="jsdoc-syntax">);
390                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
391             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">yes.TOP</span><span class="jsdoc-syntax">:
392                 </span><span class="jsdoc-var">s.el.setY</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.resizingEl.getBottom</span><span class="jsdoc-syntax">());
393                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
394             </span><span class="jsdoc-keyword">case </span><span class="jsdoc-var">yes.BOTTOM</span><span class="jsdoc-syntax">:
395                 </span><span class="jsdoc-var">s.el.setY</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.resizingEl.getTop</span><span class="jsdoc-syntax">() - </span><span class="jsdoc-var">s.el.getHeight</span><span class="jsdoc-syntax">());
396                 </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
397         }
398     }
399 };
400
401 </span><span class="jsdoc-comment">/**
402  * Orientation constant - Create a vertical SplitBar
403  * @static
404  * @type Number
405  */
406 </span><span class="jsdoc-var">Roo.SplitBar.VERTICAL </span><span class="jsdoc-syntax">= 1;
407
408 </span><span class="jsdoc-comment">/**
409  * Orientation constant - Create a horizontal SplitBar
410  * @static
411  * @type Number
412  */
413 </span><span class="jsdoc-var">Roo.SplitBar.HORIZONTAL </span><span class="jsdoc-syntax">= 2;
414
415 </span><span class="jsdoc-comment">/**
416  * Placement constant - The resizing element is to the left of the splitter element
417  * @static
418  * @type Number
419  */
420 </span><span class="jsdoc-var">Roo.SplitBar.LEFT </span><span class="jsdoc-syntax">= 1;
421
422 </span><span class="jsdoc-comment">/**
423  * Placement constant - The resizing element is to the right of the splitter element
424  * @static
425  * @type Number
426  */
427 </span><span class="jsdoc-var">Roo.SplitBar.RIGHT </span><span class="jsdoc-syntax">= 2;
428
429 </span><span class="jsdoc-comment">/**
430  * Placement constant - The resizing element is positioned above the splitter element
431  * @static
432  * @type Number
433  */
434 </span><span class="jsdoc-var">Roo.SplitBar.TOP </span><span class="jsdoc-syntax">= 3;
435
436 </span><span class="jsdoc-comment">/**
437  * Placement constant - The resizing element is positioned under splitter element
438  * @static
439  * @type Number
440  */
441 </span><span class="jsdoc-var">Roo.SplitBar.BOTTOM </span><span class="jsdoc-syntax">= 4;
442 </span></code></body></html>