pve-manager/www/manager6/form/ControllerSelector.js
Stefan Hrdlicka 1a3e2e9f5d cleanup: style fix
Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>
2022-10-24 13:38:23 +02:00

123 lines
2.8 KiB
JavaScript

Ext.define('PVE.form.ControllerSelector', {
extend: 'Ext.form.FieldContainer',
alias: 'widget.pveControllerSelector',
withVirtIO: true,
withUnused: false,
vmconfig: {}, // used to check for existing devices
setToFree: function(controllers, busField, deviceIDField) {
let me = this;
let freeId = PVE.Utils.nextFreeDisk(controllers, me.vmconfig);
if (freeId !== undefined) {
busField?.setValue(freeId.controller);
deviceIDField.setValue(freeId.id);
}
},
updateVMConfig: function(vmconfig) {
let me = this;
me.vmconfig = Ext.apply({}, vmconfig);
me.down('field[name=deviceid]').validate();
},
setVMConfig: function(vmconfig, autoSelect) {
let me = this;
me.vmconfig = Ext.apply({}, vmconfig);
let bussel = me.down('field[name=controller]');
let deviceid = me.down('field[name=deviceid]');
let clist;
if (autoSelect === 'cdrom') {
if (!Ext.isDefined(me.vmconfig.ide2)) {
bussel.setValue('ide');
deviceid.setValue(2);
return;
}
clist = ['ide', 'scsi', 'sata'];
} else {
// in most cases we want to add a disk to the same controller we previously used
clist = PVE.Utils.sortByPreviousUsage(me.vmconfig);
}
me.setToFree(clist, bussel, deviceid);
deviceid.validate();
},
getConfId: function() {
let me = this;
let controller = me.getComponent('controller').getValue() || 'ide';
let id = me.getComponent('deviceid').getValue() || 0;
return `${controller}${id}`;
},
initComponent: function() {
let me = this;
Ext.apply(me, {
fieldLabel: gettext('Bus/Device'),
layout: 'hbox',
defaults: {
hideLabel: true,
},
items: [
{
xtype: 'pveBusSelector',
name: 'controller',
itemId: 'controller',
value: PVE.qemu.OSDefaults.generic.busType,
withVirtIO: me.withVirtIO,
withUnused: me.withUnused,
allowBlank: false,
flex: 2,
listeners: {
change: function(t, value) {
if (!value) {
return;
}
let field = me.down('field[name=deviceid]');
me.setToFree([value], undefined, field);
field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value] - 1);
field.validate();
},
},
},
{
xtype: 'proxmoxintegerfield',
name: 'deviceid',
itemId: 'deviceid',
minValue: 0,
maxValue: PVE.Utils.diskControllerMaxIDs.ide - 1,
value: '0',
flex: 1,
allowBlank: false,
validator: function(value) {
if (!me.rendered) {
return undefined;
}
let controller = me.down('field[name=controller]').getValue();
let confid = controller + value;
if (Ext.isDefined(me.vmconfig[confid])) {
return "This device is already in use.";
}
return true;
},
},
],
});
me.callParent();
if (me.selectFree) {
me.setVMConfig(me.vmconfig);
}
},
});