]>
git.proxmox.com Git - pve-manager.git/blob - www/manager/form/ComboGrid.js
1 Ext
.define('PVE.form.ComboGrid', {
2 extend
: 'Ext.form.field.ComboBox',
3 alias
: ['widget.PVE.form.ComboGrid'],
5 computeHeight: function() {
7 var lh
= PVE
.Utils
.gridLineHeigh();
8 var count
= me
.store
.getCount();
9 return (count
> 10) ? 10*lh
: 26+count
*lh
;
12 // hack: allow to select empty value
13 // seems extjs does not allow that when 'editable == false'
14 onKeyUp: function(e
, t
) {
18 if (!me
.editable
&& me
.allowBlank
&& !me
.multiSelect
&&
19 (key
== e
.BACKSPACE
|| key
== e
.DELETE
)) {
23 me
.callParent(arguments
);
26 // copied from ComboBox
27 createPicker: function() {
30 menuCls
= Ext
.baseCSSPrefix
+ 'menu',
34 mode
: me
.multiSelect
? 'SIMPLE' : 'SINGLE'
39 cls
: me
.el
.up('.' + menuCls
) ? menuCls
: '',
41 displayField
: me
.displayField
,
42 focusOnToFront
: false,
43 height
: me
.computeHeight(),
45 }, me
.listConfig
, me
.defaultListConfig
);
47 // NOTE: we simply use a grid panel
48 //picker = me.picker = Ext.create('Ext.view.BoundList', opts);
49 picker
= me
.picker
= Ext
.create('Ext.grid.Panel', opts
);
51 // pass getNode() to the view
52 picker
.getNode = function() {
53 picker
.getView().getNode(arguments
);
57 itemclick
: me
.onItemClick
,
58 refresh
: me
.onListRefresh
,
60 picker
.setHeight(me
.computeHeight());
66 me
.mon(picker
.getSelectionModel(), 'selectionchange', me
.onListSelectionChange
, me
);
71 initComponent: function() {
77 matchFieldWidth
: false
80 Ext
.applyIf(me
, { value
: ''}); // hack: avoid ExtJS validate() bug
82 Ext
.applyIf(me
.listConfig
, { width
: 400 });
86 me
.store
.on('beforeload', function() {
87 if (!me
.isDisabled()) {
89 me
.enableAfterLoad
= true;
93 // hack: autoSelect does not work
94 me
.store
.on('load', function(store
, r
, success
, o
) {
98 if (me
.enableAfterLoad
) {
99 delete me
.enableAfterLoad
;
100 me
.setDisabled(false);
103 var def
= me
.getValue();
105 me
.setValue(def
, true); // sync with grid
109 if (Ext
.isArray(def
)) {
110 Ext
.Array
.each(def
, function(v
) {
111 if (store
.findRecord(me
.valueField
, v
)) {
113 return false; // break
117 found
= store
.findRecord(me
.valueField
, def
);
122 var rec
= me
.store
.first();
123 if (me
.autoSelect
&& rec
&& rec
.data
) {
124 def
= rec
.data
[me
.valueField
];
125 me
.setValue(def
, true);
127 me
.setValue('', true);