]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/qemu/DisplayEdit.js
api: add proxmox-firewall to versions pkg list
[pve-manager.git] / www / manager6 / qemu / DisplayEdit.js
index c31c69ad12b647ec2c9dfa01a0eb88c1ff99d424..7acc25d6355d6acfad23c42f514b80fbe56e83e6 100644 (file)
@@ -1,17 +1,44 @@
 Ext.define('PVE.qemu.DisplayInputPanel', {
     extend: 'Proxmox.panel.InputPanel',
     xtype: 'pveDisplayInputPanel',
+    onlineHelp: 'qm_display',
 
     onGetValues: function(values) {
-       var ret = PVE.Parser.printPropertyString(values, 'type');
+       let ret = PVE.Parser.printPropertyString(values, 'type');
        if (ret === '') {
-           return {
-               'delete': 'vga'
-           };
+           return { 'delete': 'vga' };
        }
-       return {
-           vga: ret
-       };
+       return { vga: ret };
+    },
+
+    viewModel: {
+       data: {
+           type: '__default__',
+           clipboard: '__default__',
+       },
+       formulas: {
+           matchNonGUIOption: function(get) {
+               return get('type').match(/^(serial\d|none)$/);
+           },
+           memoryEmptyText: function(get) {
+               let val = get('type');
+               if (val === "cirrus") {
+                   return "4";
+               } else if (val === "std" || val.match(/^qxl\d?$/) || val === "vmware") {
+                   return "16";
+               } else if (val.match(/^virtio/)) {
+                   return "256";
+               } else if (get('matchNonGUIOption')) {
+                   return "N/A";
+               } else {
+                   console.debug("unexpected display type", val);
+                   return Proxmox.Utils.defaultText;
+               }
+           },
+           isVNC: get => get('clipboard') === 'vnc',
+           hideDefaultHint: get => get('isVNC') || get('matchNonGUIOption'),
+           hideVNCHint: get => !get('isVNC') || get('matchNonGUIOption'),
+       },
     },
 
     items: [{
@@ -20,68 +47,71 @@ Ext.define('PVE.qemu.DisplayInputPanel', {
        value: '__default__',
        deleteEmpty: false,
        fieldLabel: gettext('Graphic card'),
-       comboItems: PVE.Utils.kvm_vga_driver_array(),
-       validator: function() {
-           var v = this.getValue();
-           var cfg = this.up('proxmoxWindowEdit').vmconfig || {};
+       comboItems: Object.entries(PVE.Utils.kvm_vga_drivers),
+       validator: function(v) {
+           let cfg = this.up('proxmoxWindowEdit').vmconfig || {};
 
            if (v.match(/^serial\d+$/) && (!cfg[v] || cfg[v] !== 'socket')) {
-               var fmt = gettext("Serial interface '{0}' is not correctly configured.");
+               let fmt = gettext("Serial interface '{0}' is not correctly configured.");
                return Ext.String.format(fmt, v);
            }
            return true;
        },
-       listeners: {
-           change: function(cb, val) {
-               var me = this.up('panel');
-               if (!val) {
-                   return;
-               }
-               var disable = false;
-               var emptyText = Proxmox.Utils.defaultText;
-               switch (val) {
-                   case "cirrus":
-                       emptyText = "4";
-                       break;
-                   case "std":
-                       emptyText = "16";
-                       break;
-                   case "qxl":
-                   case "qxl2":
-                   case "qxl3":
-                   case "qxl4":
-                       emptyText = "16";
-                       break;
-                   case "vmware":
-                       emptyText = "16";
-                       break;
-                   case "serial0":
-                   case "serial1":
-                   case "serial2":
-                   case "serial3":
-                       emptyText = 'N/A';
-                       disable = true;
-                       break;
-                   case "virtio":
-                       emptyText = "256";
-                       break;
-                   default:
-                       break;
-               }
-               var memoryfield = me.down('field[name=memory]');
-               memoryfield.setEmptyText(emptyText);
-               memoryfield.setDisabled(disable);
-           }
-       }
-    },{
+       bind: {
+           value: '{type}',
+       },
+    },
+    {
        xtype: 'proxmoxintegerfield',
        emptyText: Proxmox.Utils.defaultText,
        fieldLabel: gettext('Memory') + ' (MiB)',
        minValue: 4,
        maxValue: 512,
        step: 4,
-       name: 'memory'
-    }]
+       name: 'memory',
+       bind: {
+           emptyText: '{memoryEmptyText}',
+           disabled: '{matchNonGUIOption}',
+       },
+    }],
+
+    advancedItems: [
+       {
+           xtype: 'proxmoxKVComboBox',
+           name: 'clipboard',
+           deleteEmpty: false,
+           value: '__default__',
+           fieldLabel: gettext('Clipboard'),
+           comboItems: [
+               ['__default__', Proxmox.Utils.defaultText],
+               ['vnc', 'VNC'],
+           ],
+           bind: {
+               value: '{clipboard}',
+               disabled: '{matchNonGUIOption}',
+           },
+       },
+       {
+           xtype: 'displayfield',
+           name: 'vncHint',
+           userCls: 'pmx-hint',
+           value: gettext('You cannot use the default SPICE clipboard if the VNC Clipboard is selected.') + ' ' +
+               gettext('VNC Clipboard requires spice-tools installed in the Guest-VM.'),
+           bind: {
+               hidden: '{hideVNCHint}',
+           },
+       },
+       {
+           xtype: 'displayfield',
+           name: 'defaultHint',
+           userCls: 'pmx-hint',
+           value: gettext('This option depends on your display type.') + ' ' +
+               gettext('If the display type uses SPICE you are able to use the default SPICE Clipboard.'),
+           bind: {
+               hidden: '{hideDefaultHint}',
+           },
+       },
+    ],
 });
 
 Ext.define('PVE.qemu.DisplayEdit', {
@@ -93,20 +123,20 @@ Ext.define('PVE.qemu.DisplayEdit', {
     width: 350,
 
     items: [{
-       xtype: 'pveDisplayInputPanel'
+       xtype: 'pveDisplayInputPanel',
     }],
 
-    initComponent : function() {
-       var me = this;
+    initComponent: function() {
+       let me = this;
 
        me.callParent();
 
        me.load({
            success: function(response) {
                me.vmconfig = response.result.data;
-               var vga = me.vmconfig.vga || '__default__';
+               let vga = me.vmconfig.vga || '__default__';
                me.setValues(PVE.Parser.parsePropertyString(vga, 'type'));
-           }
+           },
        });
-    }
+    },
 });