1 | /*! |
---|
2 | * Ext JS Library 3.4.0 |
---|
3 | * Copyright(c) 2006-2011 Sencha Inc. |
---|
4 | * licensing@sencha.com |
---|
5 | * http://www.sencha.com/license |
---|
6 | */ |
---|
7 | /** |
---|
8 | * @class Ext.dd.PanelProxy |
---|
9 | * A custom drag proxy implementation specific to {@link Ext.Panel}s. This class is primarily used internally |
---|
10 | * for the Panel's drag drop implementation, and should never need to be created directly. |
---|
11 | * @constructor |
---|
12 | * @param panel The {@link Ext.Panel} to proxy for |
---|
13 | * @param config Configuration options |
---|
14 | */ |
---|
15 | Ext.dd.PanelProxy = Ext.extend(Object, { |
---|
16 | |
---|
17 | constructor : function(panel, config){ |
---|
18 | this.panel = panel; |
---|
19 | this.id = this.panel.id +'-ddproxy'; |
---|
20 | Ext.apply(this, config); |
---|
21 | }, |
---|
22 | |
---|
23 | /** |
---|
24 | * @cfg {Boolean} insertProxy True to insert a placeholder proxy element while dragging the panel, |
---|
25 | * false to drag with no proxy (defaults to true). |
---|
26 | */ |
---|
27 | insertProxy : true, |
---|
28 | |
---|
29 | // private overrides |
---|
30 | setStatus : Ext.emptyFn, |
---|
31 | reset : Ext.emptyFn, |
---|
32 | update : Ext.emptyFn, |
---|
33 | stop : Ext.emptyFn, |
---|
34 | sync: Ext.emptyFn, |
---|
35 | |
---|
36 | /** |
---|
37 | * Gets the proxy's element |
---|
38 | * @return {Element} The proxy's element |
---|
39 | */ |
---|
40 | getEl : function(){ |
---|
41 | return this.ghost; |
---|
42 | }, |
---|
43 | |
---|
44 | /** |
---|
45 | * Gets the proxy's ghost element |
---|
46 | * @return {Element} The proxy's ghost element |
---|
47 | */ |
---|
48 | getGhost : function(){ |
---|
49 | return this.ghost; |
---|
50 | }, |
---|
51 | |
---|
52 | /** |
---|
53 | * Gets the proxy's element |
---|
54 | * @return {Element} The proxy's element |
---|
55 | */ |
---|
56 | getProxy : function(){ |
---|
57 | return this.proxy; |
---|
58 | }, |
---|
59 | |
---|
60 | /** |
---|
61 | * Hides the proxy |
---|
62 | */ |
---|
63 | hide : function(){ |
---|
64 | if(this.ghost){ |
---|
65 | if(this.proxy){ |
---|
66 | this.proxy.remove(); |
---|
67 | delete this.proxy; |
---|
68 | } |
---|
69 | this.panel.el.dom.style.display = ''; |
---|
70 | this.ghost.remove(); |
---|
71 | delete this.ghost; |
---|
72 | } |
---|
73 | }, |
---|
74 | |
---|
75 | /** |
---|
76 | * Shows the proxy |
---|
77 | */ |
---|
78 | show : function(){ |
---|
79 | if(!this.ghost){ |
---|
80 | this.ghost = this.panel.createGhost(this.panel.initialConfig.cls, undefined, Ext.getBody()); |
---|
81 | this.ghost.setXY(this.panel.el.getXY()); |
---|
82 | if(this.insertProxy){ |
---|
83 | this.proxy = this.panel.el.insertSibling({cls:'x-panel-dd-spacer'}); |
---|
84 | this.proxy.setSize(this.panel.getSize()); |
---|
85 | } |
---|
86 | this.panel.el.dom.style.display = 'none'; |
---|
87 | } |
---|
88 | }, |
---|
89 | |
---|
90 | // private |
---|
91 | repair : function(xy, callback, scope){ |
---|
92 | this.hide(); |
---|
93 | if(typeof callback == "function"){ |
---|
94 | callback.call(scope || this); |
---|
95 | } |
---|
96 | }, |
---|
97 | |
---|
98 | /** |
---|
99 | * Moves the proxy to a different position in the DOM. This is typically called while dragging the Panel |
---|
100 | * to keep the proxy sync'd to the Panel's location. |
---|
101 | * @param {HTMLElement} parentNode The proxy's parent DOM node |
---|
102 | * @param {HTMLElement} before (optional) The sibling node before which the proxy should be inserted (defaults |
---|
103 | * to the parent's last child if not specified) |
---|
104 | */ |
---|
105 | moveProxy : function(parentNode, before){ |
---|
106 | if(this.proxy){ |
---|
107 | parentNode.insertBefore(this.proxy.dom, before); |
---|
108 | } |
---|
109 | } |
---|
110 | }); |
---|
111 | |
---|
112 | // private - DD implementation for Panels |
---|
113 | Ext.Panel.DD = Ext.extend(Ext.dd.DragSource, { |
---|
114 | |
---|
115 | constructor : function(panel, cfg){ |
---|
116 | this.panel = panel; |
---|
117 | this.dragData = {panel: panel}; |
---|
118 | this.proxy = new Ext.dd.PanelProxy(panel, cfg); |
---|
119 | Ext.Panel.DD.superclass.constructor.call(this, panel.el, cfg); |
---|
120 | var h = panel.header, |
---|
121 | el = panel.body; |
---|
122 | if(h){ |
---|
123 | this.setHandleElId(h.id); |
---|
124 | el = panel.header; |
---|
125 | } |
---|
126 | el.setStyle('cursor', 'move'); |
---|
127 | this.scroll = false; |
---|
128 | }, |
---|
129 | |
---|
130 | showFrame: Ext.emptyFn, |
---|
131 | startDrag: Ext.emptyFn, |
---|
132 | b4StartDrag: function(x, y) { |
---|
133 | this.proxy.show(); |
---|
134 | }, |
---|
135 | b4MouseDown: function(e) { |
---|
136 | var x = e.getPageX(), |
---|
137 | y = e.getPageY(); |
---|
138 | this.autoOffset(x, y); |
---|
139 | }, |
---|
140 | onInitDrag : function(x, y){ |
---|
141 | this.onStartDrag(x, y); |
---|
142 | return true; |
---|
143 | }, |
---|
144 | createFrame : Ext.emptyFn, |
---|
145 | getDragEl : function(e){ |
---|
146 | return this.proxy.ghost.dom; |
---|
147 | }, |
---|
148 | endDrag : function(e){ |
---|
149 | this.proxy.hide(); |
---|
150 | this.panel.saveState(); |
---|
151 | }, |
---|
152 | |
---|
153 | autoOffset : function(x, y) { |
---|
154 | x -= this.startPageX; |
---|
155 | y -= this.startPageY; |
---|
156 | this.setDelta(x, y); |
---|
157 | } |
---|
158 | }); |
---|