]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - grid/ObjectGrid.js
1 /* Renders a list of key values objets
3 mandatory config parameters:
4 rows: an object container where each propery is a key-value object we want to render
7 header: gettext('Keyboard Layout'),
8 editor: 'Your.KeyboardEdit',
13 disabled: setting this parameter to true will disable selection and focus on the
14 proxmoxObjectGrid as well as greying out input elements.
15 Useful for a readonly tabular display
19 Ext
.define('Proxmox.grid.ObjectGrid', {
20 extend
: 'Ext.grid.GridPanel',
21 alias
: ['widget.proxmoxObjectGrid'],
25 monStoreErrors
: false,
27 add_combobox_row: function(name
, text
, opts
) {
31 me
.rows
= me
.rows
|| {};
35 defaultValue
: opts
.defaultValue
,
37 renderer
: opts
.renderer
,
39 xtype
: 'proxmoxWindowEdit',
42 labelWidth
: opts
.labelWidth
|| 100
45 xtype
: 'proxmoxKVComboBox',
47 comboItems
: opts
.comboItems
,
48 value
: opts
.defaultValue
,
49 deleteEmpty
: opts
.deleteEmpty
? true : false,
50 emptyText
: opts
.defaultValue
,
51 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
52 text
, opts
.labelWidth
),
59 add_text_row: function(name
, text
, opts
) {
63 me
.rows
= me
.rows
|| {};
67 defaultValue
: opts
.defaultValue
,
69 renderer
: opts
.renderer
,
71 xtype
: 'proxmoxWindowEdit',
74 labelWidth
: opts
.labelWidth
|| 100
77 xtype
: 'proxmoxtextfield',
79 deleteEmpty
: opts
.deleteEmpty
? true : false,
80 emptyText
: opts
.defaultValue
,
81 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
82 text
, opts
.labelWidth
),
90 add_boolean_row: function(name
, text
, opts
) {
94 me
.rows
= me
.rows
|| {};
98 defaultValue
: opts
.defaultValue
|| 0,
100 renderer
: opts
.renderer
|| Proxmox
.Utils
.format_boolean
,
102 xtype
: 'proxmoxWindowEdit',
105 labelWidth
: opts
.labelWidth
|| 100
108 xtype
: 'proxmoxcheckbox',
111 defaultValue
: opts
.defaultValue
|| 0,
112 checked
: opts
.defaultValue
? true : false,
113 deleteDefaultValue
: opts
.deleteDefaultValue
? true : false,
114 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
115 text
, opts
.labelWidth
),
122 add_integer_row: function(name
, text
, opts
) {
126 me
.rows
= me
.rows
|| {};
130 defaultValue
: opts
.defaultValue
,
132 renderer
: opts
.renderer
,
134 xtype
: 'proxmoxWindowEdit',
137 labelWidth
: opts
.labelWidth
|| 100
140 xtype
: 'proxmoxintegerfield',
142 minValue
: opts
.minValue
,
143 maxValue
: opts
.maxValue
,
144 emptyText
: gettext('Default'),
145 deleteEmpty
: opts
.deleteEmpty
? true : false,
146 value
: opts
.defaultValue
,
147 labelWidth
: Proxmox
.Utils
.compute_min_label_width(
148 text
, opts
.labelWidth
),
155 editorConfig
: {}, // default config passed to editor
157 run_editor: function() {
160 var sm
= me
.getSelectionModel();
161 var rec
= sm
.getSelection()[0];
167 var rowdef
= rows
[rec
.data
.key
];
168 if (!rowdef
.editor
) {
174 if (Ext
.isString(rowdef
.editor
)) {
176 confid
: rec
.data
.key
,
178 win
= Ext
.create(rowdef
.editor
, config
);
181 confid
: rec
.data
.key
,
183 Ext
.apply(config
, rowdef
.editor
);
184 win
= Ext
.createWidget(rowdef
.editor
.xtype
, config
);
189 win
.on('destroy', me
.reload
, me
);
197 getObjectValue: function(key
, defaultValue
) {
199 var rec
= me
.store
.getById(key
);
201 return rec
.data
.value
;
206 renderKey: function(key
, metaData
, record
, rowIndex
, colIndex
, store
) {
209 var rowdef
= (rows
&& rows
[key
]) ? rows
[key
] : {};
210 return rowdef
.header
|| key
;
213 renderValue: function(value
, metaData
, record
, rowIndex
, colIndex
, store
) {
216 var key
= record
.data
.key
;
217 var rowdef
= (rows
&& rows
[key
]) ? rows
[key
] : {};
219 var renderer
= rowdef
.renderer
;
221 return renderer(value
, metaData
, record
, rowIndex
, colIndex
, store
);
228 itemkeyup: function(view
, record
, item
, index
, e
) {
229 if (e
.getKey() === e
.ENTER
) {
235 initComponent : function() {
242 throw "no url specified";
245 me
.rstore
= Ext
.create('Proxmox.data.ObjectStore', {
247 interval
: me
.interval
,
248 extraParams
: me
.extraParams
,
253 var rstore
= me
.rstore
;
255 var store
= Ext
.create('Proxmox.data.DiffStore', { rstore
: rstore
,
261 Ext
.Object
.each(rows
, function(key
, rowdef
) {
262 if (Ext
.isDefined(rowdef
.defaultValue
)) {
263 store
.add({ key
: key
, value
: rowdef
.defaultValue
});
264 } else if (rowdef
.required
) {
265 store
.add({ key
: key
, value
: undefined });
271 store
.sorters
.add(Ext
.create('Ext.util.Sorter', {
272 sorterFn
: me
.sorterFn
276 store
.filters
.add(Ext
.create('Ext.util.Filter', {
277 filterFn: function(item
) {
279 var rowdef
= rows
[item
.data
.key
];
280 if (!rowdef
|| (rowdef
.visible
=== false)) {
288 Proxmox
.Utils
.monStoreErrors(me
, rstore
);
295 header
: gettext('Name'),
296 width
: me
.cwidth1
|| 200,
298 renderer
: me
.renderKey
302 header
: gettext('Value'),
304 renderer
: me
.renderValue
311 if (me
.monStoreErrors
) {
312 Proxmox
.Utils
.monStoreErrors(me
, me
.store
);