]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/ControllerSelector.js
1 Ext
.define('PVE.form.ControllerSelector', {
2 extend
: 'Ext.form.FieldContainer',
3 alias
: 'widget.pveControllerSelector',
16 vmconfig
: {}, // used to check for existing devices
18 sortByPreviousUsage: function(vmconfig
, controllerList
) {
20 var usedControllers
= Ext
.clone(PVE
.form
.ControllerSelector
.maxIds
);
23 for (type
in usedControllers
) {
24 if(usedControllers
.hasOwnProperty(type
)) {
25 usedControllers
[type
] = 0;
30 for (property
in vmconfig
) {
31 if (vmconfig
.hasOwnProperty(property
)) {
32 if (property
.match(PVE
.Utils
.bus_match
) && !vmconfig
[property
].match(/media=cdrom/)) {
33 var foundController
= property
.match(PVE
.Utils
.bus_match
)[1];
34 usedControllers
[foundController
]++;
39 var vmDefaults
= PVE
.qemu
.OSDefaults
[vmconfig
.ostype
];
41 var sortPriority
= vmDefaults
&& vmDefaults
.busPriority
42 ? vmDefaults
.busPriority
: PVE
.qemu
.OSDefaults
.generic
;
44 var sortedList
= Ext
.clone(controllerList
);
45 sortedList
.sort(function(a
,b
) {
46 if (usedControllers
[b
] == usedControllers
[a
]) {
47 return sortPriority
[b
] - sortPriority
[a
];
49 return usedControllers
[b
] - usedControllers
[a
];
55 setVMConfig: function(vmconfig
, autoSelect
) {
58 me
.vmconfig
= Ext
.apply({}, vmconfig
);
60 var clist
= ['ide', 'virtio', 'scsi', 'sata'];
61 var bussel
= me
.down('field[name=controller]');
62 var deviceid
= me
.down('field[name=deviceid]');
64 if (autoSelect
=== 'cdrom') {
65 clist
= ['ide', 'scsi', 'sata'];
66 if (!Ext
.isDefined(me
.vmconfig
.ide2
)) {
67 bussel
.setValue('ide');
72 // in most cases we want to add a disk to the same controller
74 clist
= me
.sortByPreviousUsage(me
.vmconfig
, clist
);
77 Ext
.Array
.each(clist
, function(controller
) {
79 bussel
.setValue(controller
);
80 for (i
= 0; i
<= PVE
.form
.ControllerSelector
.maxIds
[controller
]; i
++) {
81 confid
= controller
+ i
.toString();
82 if (!Ext
.isDefined(me
.vmconfig
[confid
])) {
84 return false; // break
91 initComponent: function() {
95 fieldLabel
: gettext('Bus/Device'),
102 xtype
: 'pveBusSelector',
104 value
: PVE
.qemu
.OSDefaults
.generic
.busType
,
105 noVirtIO
: me
.noVirtIO
,
109 change: function(t
, value
) {
110 if (!me
.rendered
|| !value
) {
113 var field
= me
.down('field[name=deviceid]');
114 field
.setMaxValue(PVE
.form
.ControllerSelector
.maxIds
[value
]);
120 xtype
: 'proxmoxintegerfield',
123 maxValue
: PVE
.form
.ControllerSelector
.maxIds
.ide
,
127 validator: function(value
) {
128 /*jslint confusion: true */
132 var field
= me
.down('field[name=controller]');
133 var controller
= field
.getValue();
134 var confid
= controller
+ value
;
135 if (Ext
.isDefined(me
.vmconfig
[confid
])) {
136 return "This device is already in use.";