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: [{
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', {
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'));
- }
+ },
});
- }
+ },
});