]> git.proxmox.com Git - pve-manager.git/commitdiff
copy form/ControllerSelector.js from manager to manager5
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 3 Jul 2015 09:29:11 +0000 (11:29 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 3 Jul 2015 09:29:11 +0000 (11:29 +0200)
www/manager5/form/ControllerSelector.js [new file with mode: 0644]

diff --git a/www/manager5/form/ControllerSelector.js b/www/manager5/form/ControllerSelector.js
new file mode 100644 (file)
index 0000000..dfff96b
--- /dev/null
@@ -0,0 +1,111 @@
+Ext.define('PVE.form.ControllerSelector', {
+    extend: 'Ext.form.FieldContainer',
+    alias: ['widget.PVE.form.ControllerSelector'],
+   
+    statics: {
+       maxIds: {
+           ide: 3,
+           sata: 5,
+           virtio: 15,
+           scsi: 13
+       }
+    },
+
+    noVirtIO: false,
+
+    noScsi: false,
+
+    vmconfig: {}, // used to check for existing devices
+
+    setVMConfig: function(vmconfig, autoSelect) {
+       var me = this;
+
+       me.vmconfig = Ext.apply({}, vmconfig);
+       if (autoSelect) {
+           var clist = ['ide', 'virtio', 'scsi', 'sata'];
+           if (autoSelect === 'cdrom') {
+               clist = ['ide', 'scsi', 'sata'];
+               if (!Ext.isDefined(me.vmconfig.ide2)) {
+                   me.down('field[name=controller]').setValue('ide');
+                   me.down('field[name=deviceid]').setValue(2);
+                   return;
+               }
+           } else if (me.vmconfig.ostype === 'l26') {
+               clist = ['virtio', 'ide', 'scsi', 'sata'];
+           }
+
+           Ext.Array.each(clist, function(controller) {
+               var confid, i;
+               if ((controller === 'virtio' && me.noVirtIO) ||
+                   (controller === 'scsi' && me.noScsi)) {
+                   return; //continue
+               }
+               me.down('field[name=controller]').setValue(controller);
+               for (i = 0; i <= PVE.form.ControllerSelector.maxIds[controller]; i++) {
+                   confid = controller + i.toString();
+                   if (!Ext.isDefined(me.vmconfig[confid])) {
+                       me.down('field[name=deviceid]').setValue(i);
+                       return false; // break
+                   }
+               }
+           });
+       }
+       me.down('field[name=deviceid]').validate();
+    },
+
+    initComponent: function() {
+       var me = this;
+
+       Ext.apply(me, {
+           fieldLabel: gettext('Bus/Device'),
+           layout: 'hbox',
+           height: 22, // hack: set to same height as other fields
+           defaults: {
+                flex: 1,
+                hideLabel: true
+           },
+           items: [
+               {
+                   xtype: 'PVE.form.BusTypeSelector',
+                   name: 'controller',
+                   value: 'ide',
+                   noVirtIO: me.noVirtIO,
+                   noScsi: me.noScsi,
+                   allowBlank: false,
+                   listeners: {
+                       change: function(t, value) {
+                           if (!me.rendered || !value) {
+                               return;
+                           }
+                           var field = me.down('field[name=deviceid]');
+                           field.setMaxValue(PVE.form.ControllerSelector.maxIds[value]);
+                           field.validate();
+                       }
+                   }
+               },
+               {
+                   xtype: 'numberfield',
+                   name: 'deviceid',
+                   minValue: 0,
+                   maxValue: PVE.form.ControllerSelector.maxIds.ide,
+                   value: '0',
+                   validator: function(value) {
+                       /*jslint confusion: true */
+                       if (!me.rendered) {
+                           return;
+                       }
+                       var field = me.down('field[name=controller]');
+                       var controller = field.getValue();
+                       var confid = controller + value;
+                       if (Ext.isDefined(me.vmconfig[confid])) {
+                           return "This device is already in use.";
+                       }
+                       return true;
+                   }
+               }
+           ]
+       });
+
+       me.callParent();
+    }
+});