]> git.proxmox.com Git - extjs.git/blame - extjs/modern/modern/src/grid/Row.js
add extjs 6.0.1 sources
[extjs.git] / extjs / modern / modern / src / grid / Row.js
CommitLineData
6527f429
DM
1/**\r
2 * This class is created by a {@link Ext.grid.Grid grid} to manage each record. Rows act\r
3 * as containers for {@link Ext.grid.cell.Base cells}.\r
4 *\r
5 * Row does not extend {@link Ext.Container} to keep overhead to a minimum. Application\r
6 * code should not need to create instances of this class directly. Rows are created by\r
7 * the {@link Ext.dataview.List} base as configured by {@link Ext.grid.Grid}.\r
8 */\r
9Ext.define('Ext.grid.Row', {\r
10 extend: 'Ext.Component',\r
11 xtype: 'gridrow',\r
12\r
13 requires: [\r
14 'Ext.grid.cell.Cell'\r
15 ],\r
16\r
17 mixins: [\r
18 'Ext.mixin.Queryable'\r
19 ],\r
20\r
21 config: {\r
22 baseCls: Ext.baseCSSPrefix + 'grid-row',\r
23\r
24 header: {\r
25 xtype: 'component',\r
26 cls: 'x-grid-header',\r
27 html: ' '\r
28 },\r
29\r
30 grid: null\r
31 },\r
32\r
33 constructor: function(config) {\r
34 this.cells = [];\r
35 this.columnMap = {};\r
36 this.callParent([config]);\r
37 },\r
38\r
39 applyHeader: function(header) {\r
40 if (header && !header.isComponent) {\r
41 header = Ext.factory(header, Ext.Component, this.getHeader());\r
42 }\r
43 return header;\r
44 },\r
45\r
46 updateHeader: function(header, oldHeader) {\r
47 if (oldHeader) {\r
48 oldHeader.destroy();\r
49 }\r
50 },\r
51\r
52 updateGrid: function(grid) {\r
53 var me = this,\r
54 i, columns, ln;\r
55\r
56 if (grid) {\r
57 columns = grid.getColumns();\r
58 for (i = 0, ln = columns.length; i < ln; i++) {\r
59 me.addColumn(columns[i]);\r
60 }\r
61 }\r
62 },\r
63\r
64 addColumn: function(column) {\r
65 this.insertColumn(this.cells.length, column);\r
66 },\r
67\r
68 getRefItems: function() {\r
69 return this.cells;\r
70 },\r
71\r
72 insertColumn: function(index, column) {\r
73 var me = this,\r
74 cells = me.cells,\r
75 cell = me.createCell(column);\r
76\r
77 if (index === cells.length) {\r
78 me.element.appendChild(cell.element);\r
79 cells.push(cell);\r
80 } else {\r
81 cell.element.insertBefore(cells[index].element);\r
82 cells.splice(index, 0, cell);\r
83 }\r
84\r
85 me.columnMap[column.getId()] = cell;\r
86 },\r
87\r
88 moveColumn: function(column, fromIdx, toIdx) {\r
89 var cells = this.cells,\r
90 cell = cells[fromIdx];\r
91\r
92 Ext.Array.move(cells, fromIdx, toIdx);\r
93 if (toIdx === cells.length - 1) {\r
94 this.element.appendChild(cell.element);\r
95 } else {\r
96 cell.element.insertBefore(cells[toIdx + 1].element);\r
97 }\r
98 },\r
99\r
100 removeColumn: function(column) {\r
101 var me = this,\r
102 columnMap = me.columnMap,\r
103 columnId = column.getId(),\r
104 cell = columnMap[columnId];\r
105\r
106 if (cell) {\r
107 Ext.Array.remove(me.cells, cell);\r
108 delete columnMap[columnId];\r
109 cell.destroy();\r
110 }\r
111 },\r
112\r
113 updateRecord: function(record) {\r
114 if (!record) {\r
115 return;\r
116 }\r
117\r
118 var cells = this.cells,\r
119 len = cells.length,\r
120 i, cell;\r
121\r
122 for (i = 0; i < len; ++i) {\r
123 cell = cells[i];\r
124 if (cell.getRecord() === record) {\r
125 cell.updateRecord(record);\r
126 } else {\r
127 cell.setRecord(record);\r
128 }\r
129 }\r
130 },\r
131\r
132 setColumnWidth: function(column, width) {\r
133 var cell = this.getCellByColumn(column);\r
134 if (cell) {\r
135 cell.setWidth(width);\r
136 }\r
137 },\r
138\r
139 showColumn: function(column) {\r
140 this.setCellHidden(column, false);\r
141 },\r
142\r
143 hideColumn: function(column) {\r
144 this.setCellHidden(column, true);\r
145 },\r
146\r
147 getCellByColumn: function(column) {\r
148 return this.columnMap[column.getId()];\r
149 },\r
150\r
151 getColumnByCell: function(cell) {\r
152 return cell.getColumn();\r
153 },\r
154\r
155 destroy: function() {\r
156 var me = this;\r
157\r
158 me.cells = Ext.destroy(me.cells, me.getHeader());\r
159 me.setRecord(null);\r
160 me.callParent();\r
161 },\r
162\r
163 privates: {\r
164 createCell: function(column) {\r
165 var cell = this.getCellCfg(column);\r
166\r
167 cell.$initParent = this;\r
168 cell = Ext.create(cell);\r
169 delete cell.$initParent;\r
170\r
171 return cell;\r
172 },\r
173\r
174 getCellCfg: function(column) {\r
175 return Ext.apply({\r
176 parent: this,\r
177 column: column,\r
178 record: this.getRecord(),\r
179 hidden: column.getHidden(),\r
180 width: column.getComputedWidth()\r
181 }, column.getCell());\r
182 },\r
183\r
184 setCellHidden: function(column, hidden) {\r
185 var cell = this.getCellByColumn(column);\r
186 if (cell) {\r
187 cell.setHidden(hidden);\r
188 }\r
189 }\r
190 }\r
191});\r