]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/ComboGrid.js
1 Ext
.define('PVE.form.ComboGrid', {
2 extend
: 'Ext.form.field.ComboBox',
3 alias
: ['widget.PVE.form.ComboGrid'],
5 // this value is used as default value after load()
6 preferredValue
: undefined,
8 computeHeight: function() {
10 var lh
= PVE
.Utils
.gridLineHeigh();
11 var count
= me
.store
.getTotalCount();
12 return (count
> 10) ? 10*lh
: 26+count
*lh
;
15 // hack: allow to select empty value
16 // seems extjs does not allow that when 'editable == false'
17 onKeyUp: function(e
, t
) {
21 if (!me
.editable
&& me
.allowBlank
&& !me
.multiSelect
&&
22 (key
== e
.BACKSPACE
|| key
== e
.DELETE
)) {
26 me
.callParent(arguments
);
29 // copied from ComboBox
30 createPicker: function() {
33 menuCls
= Ext
.baseCSSPrefix
+ 'menu',
37 mode
: me
.multiSelect
? 'SIMPLE' : 'SINGLE'
42 cls
: me
.el
.up('.' + menuCls
) ? menuCls
: '',
44 displayField
: me
.displayField
,
45 focusOnToFront
: false,
46 height
: me
.computeHeight(),
48 }, me
.listConfig
, me
.defaultListConfig
);
50 // NOTE: we simply use a grid panel
51 //picker = me.picker = Ext.create('Ext.view.BoundList', opts);
52 picker
= me
.picker
= Ext
.create('Ext.grid.Panel', opts
);
54 // pass getNode() to the view
55 picker
.getNode = function() {
56 picker
.getView().getNode(arguments
);
60 itemclick
: me
.onItemClick
,
61 refresh
: me
.onListRefresh
,
63 picker
.setHeight(me
.computeHeight());
69 me
.mon(picker
.getSelectionModel(), 'selectionchange', me
.onListSelectionChange
, me
);
74 initComponent: function() {
77 if (me
.initialConfig
.editable
=== undefined) {
83 matchFieldWidth
: false
86 Ext
.applyIf(me
, { value
: ''}); // hack: avoid ExtJS validate() bug
88 Ext
.applyIf(me
.listConfig
, { width
: 400 });
92 me
.store
.on('beforeload', function() {
93 if (!me
.isDisabled()) {
95 me
.enableAfterLoad
= true;
99 // hack: autoSelect does not work
100 me
.store
.on('load', function(store
, r
, success
, o
) {
104 if (me
.enableAfterLoad
) {
105 delete me
.enableAfterLoad
;
106 me
.setDisabled(false);
109 var def
= me
.getValue() || me
.preferredValue
;
111 me
.setValue(def
, true); // sync with grid
115 if (Ext
.isArray(def
)) {
116 Ext
.Array
.each(def
, function(v
) {
117 if (store
.findRecord(me
.valueField
, v
)) {
119 return false; // break
123 found
= store
.findRecord(me
.valueField
, def
);
128 var rec
= me
.store
.first();
129 if (me
.autoSelect
&& rec
&& rec
.data
) {
130 def
= rec
.data
[me
.valueField
];
131 me
.setValue(def
, true);
133 me
.setValue(me
.editable
? def
: '', true);