]> git.proxmox.com Git - extjs.git/blame - extjs/modern/modern/src/layout/wrapper/BoxDock.js
add extjs 6.0.1 sources
[extjs.git] / extjs / modern / modern / src / layout / wrapper / BoxDock.js
CommitLineData
6527f429
DM
1/**\r
2 *\r
3 */\r
4Ext.define('Ext.layout.wrapper.BoxDock', {\r
5 config: {\r
6 direction: 'horizontal',\r
7 element: {\r
8 className: Ext.baseCSSPrefix + 'dock'\r
9 },\r
10 bodyElement: {\r
11 className: Ext.baseCSSPrefix + 'dock-body'\r
12 },\r
13 innerWrapper: null,\r
14 sizeState: false,\r
15 container: null\r
16 },\r
17\r
18 positionMap: {\r
19 top: 'start',\r
20 left: 'start',\r
21 bottom: 'end',\r
22 right: 'end'\r
23 },\r
24\r
25 constructor: function(config) {\r
26 this.items = {\r
27 start: [],\r
28 end: []\r
29 };\r
30\r
31 this.itemsCount = 0;\r
32\r
33 this.initConfig(config);\r
34 },\r
35\r
36 addItems: function(items) {\r
37 var i, ln, item;\r
38\r
39 for (i = 0, ln = items.length; i < ln; i++) {\r
40 item = items[i];\r
41 this.addItem(item);\r
42 }\r
43 },\r
44\r
45 addItem: function(item) {\r
46 var docked = item.getDocked(),\r
47 position = this.positionMap[docked],\r
48 wrapper = item.$dockWrapper,\r
49 container = this.getContainer(),\r
50 index = container.indexOf(item),\r
51 element = item.element,\r
52 items = this.items,\r
53 sideItems = items[position],\r
54 i, ln, sibling, referenceElement, siblingIndex;\r
55\r
56 if (wrapper) {\r
57 wrapper.removeItem(item);\r
58 }\r
59\r
60 item.$dockWrapper = this;\r
61 item.addCls(Ext.baseCSSPrefix + 'dock-item');\r
62 item.addCls(Ext.baseCSSPrefix + 'docked-' + docked);\r
63\r
64 for (i = 0, ln = sideItems.length; i < ln; i++) {\r
65 sibling = sideItems[i];\r
66 siblingIndex = container.indexOf(sibling);\r
67\r
68 if (siblingIndex > index) {\r
69 referenceElement = sibling.element;\r
70 sideItems.splice(i, 0, item);\r
71 break;\r
72 }\r
73 }\r
74\r
75 if (!referenceElement) {\r
76 sideItems.push(item);\r
77 referenceElement = this.getBodyElement();\r
78 }\r
79\r
80 this.itemsCount++;\r
81\r
82 if (position === 'start') {\r
83 element.insertBefore(referenceElement);\r
84 }\r
85 else {\r
86 element.insertAfter(referenceElement);\r
87 }\r
88 },\r
89\r
90 removeItem: function(item) {\r
91 var position = item.getDocked(),\r
92 items = this.items[this.positionMap[position]];\r
93\r
94 Ext.Array.remove(items, item);\r
95 item.element.detach();\r
96 delete item.$dockWrapper;\r
97 item.removeCls(Ext.baseCSSPrefix + 'dock-item');\r
98 item.removeCls(Ext.baseCSSPrefix + 'docked-' + position);\r
99\r
100 if (--this.itemsCount === 0) {\r
101 this.destroy();\r
102 }\r
103 },\r
104\r
105 getItemsSlice: function(index) {\r
106 var container = this.getContainer(),\r
107 items = this.items,\r
108 slice = [],\r
109 sideItems, i, ln, item;\r
110\r
111 for (sideItems = items.start, i = 0, ln = sideItems.length; i < ln; i++) {\r
112 item = sideItems[i];\r
113 if (container.indexOf(item) > index) {\r
114 slice.push(item);\r
115 }\r
116 }\r
117\r
118 for (sideItems = items.end, i = 0, ln = sideItems.length; i < ln; i++) {\r
119 item = sideItems[i];\r
120 if (container.indexOf(item) > index) {\r
121 slice.push(item);\r
122 }\r
123 }\r
124\r
125 return slice;\r
126 },\r
127\r
128 applyElement: function(element) {\r
129 return Ext.Element.create(element);\r
130 },\r
131\r
132 updateElement: function(element) {\r
133 element.addCls(Ext.baseCSSPrefix + 'dock-' + this.getDirection());\r
134 },\r
135\r
136 applyBodyElement: function(bodyElement) {\r
137 return Ext.Element.create(bodyElement);\r
138 },\r
139\r
140 updateBodyElement: function(bodyElement) {\r
141 this.getElement().append(bodyElement);\r
142 },\r
143\r
144 updateInnerWrapper: function(innerWrapper, oldInnerWrapper) {\r
145 var bodyElement = this.getBodyElement();\r
146\r
147 if (oldInnerWrapper && oldInnerWrapper.$outerWrapper === this) {\r
148 oldInnerWrapper.getElement().detach();\r
149 delete oldInnerWrapper.$outerWrapper;\r
150 }\r
151\r
152 if (innerWrapper) {\r
153 innerWrapper.setSizeState(this.getSizeState());\r
154 innerWrapper.$outerWrapper = this;\r
155 bodyElement.append(innerWrapper.getElement());\r
156 }\r
157 },\r
158\r
159 updateSizeState: function(state) {\r
160 var innerWrapper = this.getInnerWrapper();\r
161\r
162 this.getElement().setSizeState(state);\r
163\r
164 if (innerWrapper) {\r
165 innerWrapper.setSizeState(state);\r
166 }\r
167 },\r
168\r
169 destroy: function() {\r
170 var me = this,\r
171 innerWrapper = me.getInnerWrapper(),\r
172 outerWrapper = me.$outerWrapper,\r
173 innerWrapperElement;\r
174\r
175 if (innerWrapper) {\r
176 if (outerWrapper) {\r
177 outerWrapper.setInnerWrapper(innerWrapper);\r
178 } else {\r
179 innerWrapperElement = innerWrapper.getElement();\r
180 if (!innerWrapperElement.destroyed) {\r
181 innerWrapperElement.replace(me.getElement());\r
182 }\r
183 delete innerWrapper.$outerWrapper;\r
184 }\r
185 }\r
186\r
187 delete me.$outerWrapper;\r
188\r
189 me.setInnerWrapper(null);\r
190\r
191 me.unlink(['_bodyElement', '_element']);\r
192\r
193 me.callParent();\r
194 }\r
195});\r