[pve-devel] [PATCH v3 manager] Make CPU Model Selector a grouped grid view
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue Sep 10 13:03:51 CEST 2019
On 10.09.19 12:20, Stefan Reiter wrote:
> Uses a ComboGrid with grouping feature to segment different CPU vendors.
> Allows a user to show/hide groups.
>
> Doesn't work with value set in widget definition for some reason, but
> we always use setValue() anyway (and if we don't, value will be '', aka
> the default, which is correct too).
>
> Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
> ---
>
> I'm personally not 100% convinced this grid approach makes it easier to parse
> for a user, but I'd be fine with this being applied, if consensus is otherwise.
>
> A search function like with our ISO selector for example would be nice too I
> think, but I could not get that to work with the grouping feature at all.
Hmm, yeah, I'm on your side. Base issue for me is that I do not really like
how it is now, but neither your proposed version nor mine/Dominik's one..
Multilevel "drop down" could be still better?
Maybe also just the grid as here, but without the grouping?
On-top of you work we could have a setting of which models to show at all in
the selector? May not make sense for some admins to have Intel CPUs listed if
they run an all-AMD CPU backed cluster..
>
> * v3: Use ComboGrid (grouped) instead of list with headings
>
>
> www/manager6/form/CPUModelSelector.js | 249 ++++++++++++++++++++++----
> www/manager6/qemu/ProcessorEdit.js | 1 -
> 2 files changed, 214 insertions(+), 36 deletions(-)
>
> diff --git a/www/manager6/form/CPUModelSelector.js b/www/manager6/form/CPUModelSelector.js
> index 9eb5b0e9..ce6c8f33 100644
> --- a/www/manager6/form/CPUModelSelector.js
> +++ b/www/manager6/form/CPUModelSelector.js
> @@ -1,38 +1,217 @@
> Ext.define('PVE.form.CPUModelSelector', {
> - extend: 'Proxmox.form.KVComboBox',
> + extend: 'Proxmox.form.ComboGrid',
> alias: ['widget.CPUModelSelector'],
> - comboItems: [
> - ['__default__', Proxmox.Utils.defaultText + ' (kvm64)'],
> - ['486', '486'],
> - ['athlon', 'athlon'],
> - ['core2duo', 'core2duo'],
> - ['coreduo', 'coreduo'],
> - ['kvm32', 'kvm32'],
> - ['kvm64', 'kvm64'],
> - ['pentium', 'pentium'],
> - ['pentium2', 'pentium2'],
> - ['pentium3', 'pentium3'],
> - ['phenom', 'phenom'],
> - ['qemu32', 'qemu32'],
> - ['qemu64', 'qemu64'],
> - ['Conroe', 'Conroe'],
> - ['Penryn', 'Penryn'],
> - ['Nehalem', 'Nehalem'],
> - ['Westmere', 'Westmere'],
> - ['SandyBridge', 'SandyBridge'],
> - ['IvyBridge', 'IvyBridge'],
> - ['Haswell', 'Haswell'],
> - ['Haswell-noTSX','Haswell-noTSX'],
> - ['Broadwell', 'Broadwell'],
> - ['Broadwell-noTSX','Broadwell-noTSX'],
> - ['Skylake-Client','Skylake-Client'],
> - ['Opteron_G1', 'Opteron_G1'],
> - ['Opteron_G2', 'Opteron_G2'],
> - ['Opteron_G3', 'Opteron_G3'],
> - ['Opteron_G4', 'Opteron_G4'],
> - ['Opteron_G5', 'Opteron_G5'],
> - ['EPYC', 'EPYC'],
> - ['host', 'host']
> -
> - ]
> +
> + valueField: 'value',
> + displayField: 'name',
Why don't you just use the same column for both, which would allow to reduce the
double definitions in the model below?
Or else format the "name" field content a bit nicer, e.g.:
s/athlon/Athlon/
/Operon_G1/Opteron G1/
> +
> + emptyText: Proxmox.Utils.defaultText + ' (kvm64)',
> + allowBlank: true,
> +
> + initComponent: function() {
> + var me = this;
> +
> + var groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
> + groupHeaderTpl: '{[ values.name ]}',
I tried with:
startCollapsed: true,
not to sure..
> + enableGroupingMenu: false
> + });
> +
trailing white space errror in empty line above
> + Ext.apply(me.listConfig, {
> + features: [groupingFeature]
> + });
> +
> + me.callParent();
> + },
> +
> + getSubmitData: function () {
> + var me = this,
> + val = me.getSubmitValue(),
> + data;
> +
> + if (val === '') {
> + data = { delete: me.getName() };
> + } else {
> + data = {};
> + data[me.getName()] = val;
> + }
> +
> + return data;
> + },
> +
> + listConfig: {
> + columns: [
> + {
> + header: gettext('Model'),
> + dataIndex: 'name',
> + hideable: false,
> + sortable: false,
> + flex: 1
> + },
> + {
> + header: gettext('Vendor'),
> + dataIndex: 'vendor',
> + hideable: false,
> + sortable: false,
> + width: 65
> + }
> + ],
> + width: 280
imo a width of >= 300 and flex for both (3:2 or the like) looks a bit better.
> + },
> +
> + store: {
> + fields: [ 'value', 'name', 'vendor'],
> + groupField: 'vendor',
> + data: [
> + {
> + value: '486',
> + name: '486',
> + vendor: 'Intel'
> + },
> + {
> + value: 'athlon',
> + name: 'athlon',
> + vendor: 'AMD'
> + },
> + {
> + value: 'core2duo',
> + name: 'core2duo',
> + vendor: 'Intel'
> + },
> + {
> + value: 'coreduo',
> + name: 'coreduo',
> + vendor: 'Intel'
> + },
> + {
> + value: 'kvm32',
> + name: 'kvm32',
> + vendor: 'Other'
> + },
> + {
> + value: 'kvm64',
> + name: 'kvm64',
> + vendor: 'Other'
> + },
> + {
> + value: 'pentium',
> + name: 'pentium',
> + vendor: 'Intel'
> + },
> + {
> + value: 'pentium2',
> + name: 'pentium2',
> + vendor: 'Intel'
> + },
> + {
> + value: 'pentium3',
> + name: 'pentium3',
> + vendor: 'Intel'
> + },
> + {
> + value: 'phenom',
> + name: 'phenom',
> + vendor: 'AMD'
> + },
> + {
> + value: 'qemu32',
> + name: 'qemu32',
> + vendor: 'Other'
> + },
> + {
> + value: 'qemu64',
> + name: 'qemu64',
> + vendor: 'Other'
> + },
> + {
> + value: 'Conroe',
> + name: 'Conroe',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Penryn',
> + name: 'Penryn',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Nehalem',
> + name: 'Nehalem',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Westmere',
> + name: 'Westmere',
> + vendor: 'Intel'
> + },
> + {
> + value: 'SandyBridge',
> + name: 'SandyBridge',
> + vendor: 'Intel'
> + },
> + {
> + value: 'IvyBridge',
> + name: 'IvyBridge',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Haswell',
> + name: 'Haswell',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Haswell-noTSX',
> + name:'Haswell-noTSX',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Broadwell',
> + name: 'Broadwell',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Broadwell-noTSX',
> + name:'Broadwell-noTSX',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Skylake-Client',
> + name:'Skylake-Client',
> + vendor: 'Intel'
> + },
> + {
> + value: 'Opteron_G1',
> + name: 'Opteron_G1',
> + vendor: 'AMD'
> + },
> + {
> + value: 'Opteron_G2',
> + name: 'Opteron_G2',
> + vendor: 'AMD'
> + },
> + {
> + value: 'Opteron_G3',
> + name: 'Opteron_G3',
> + vendor: 'AMD'
> + },
> + {
> + value: 'Opteron_G4',
> + name: 'Opteron_G4',
> + vendor: 'AMD'
> + },
> + {
> + value: 'Opteron_G5',
> + name: 'Opteron_G5',
> + vendor: 'AMD'
> + },
> + {
> + value: 'EPYC',
> + name: 'EPYC',
> + vendor: 'AMD'
> + },
> + {
> + value: 'host',
> + name: 'host',
> + vendor: 'Other'
> + }
> + ]
> + }
> });
> diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js
> index c62dc734..bc17e152 100644
> --- a/www/manager6/qemu/ProcessorEdit.js
> +++ b/www/manager6/qemu/ProcessorEdit.js
> @@ -103,7 +103,6 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
> {
> xtype: 'CPUModelSelector',
> name: 'cputype',
> - value: '__default__',
> fieldLabel: gettext('Type')
> },
> {
>
More information about the pve-devel
mailing list