]>
Commit | Line | Data |
---|---|---|
4f3e66d8 DC |
1 | Ext.define('PVE.qemu.DisplayInputPanel', { |
2 | extend: 'Proxmox.panel.InputPanel', | |
3 | xtype: 'pveDisplayInputPanel', | |
d2d16a78 | 4 | onlineHelp: 'qm_display', |
db050180 | 5 | |
4f3e66d8 | 6 | onGetValues: function(values) { |
c8e171a8 | 7 | let ret = PVE.Parser.printPropertyString(values, 'type'); |
4f3e66d8 | 8 | if (ret === '') { |
c8e171a8 | 9 | return { 'delete': 'vga' }; |
4f3e66d8 | 10 | } |
c8e171a8 | 11 | return { vga: ret }; |
4f3e66d8 | 12 | }, |
8a56fe1a | 13 | |
524be1b9 MF |
14 | viewModel: { |
15 | data: { | |
16 | type: '__default__', | |
17 | clipboard: '__default__', | |
18 | }, | |
19 | formulas: { | |
20 | matchNonGUIOption: function(get) { | |
21 | return get('type').match(/^(serial\d|none)$/); | |
22 | }, | |
23 | memoryEmptyText: function(get) { | |
24 | let val = get('type'); | |
25 | if (val === "cirrus") { | |
26 | return "4"; | |
27 | } else if (val === "std" || val.match(/^qxl\d?$/) || val === "vmware") { | |
28 | return "16"; | |
29 | } else if (val.match(/^virtio/)) { | |
30 | return "256"; | |
31 | } else if (get('matchNonGUIOption')) { | |
32 | return "N/A"; | |
33 | } else { | |
34 | console.debug("unexpected display type", val); | |
35 | return Proxmox.Utils.defaultText; | |
36 | } | |
37 | }, | |
80da5bb9 MF |
38 | isVNC: get => get('clipboard') === 'vnc', |
39 | hideDefaultHint: get => get('isVNC') || get('matchNonGUIOption'), | |
40 | hideVNCHint: get => !get('isVNC') || get('matchNonGUIOption'), | |
524be1b9 MF |
41 | }, |
42 | }, | |
43 | ||
8a56fe1a | 44 | items: [{ |
4f3e66d8 | 45 | name: 'type', |
8a56fe1a TL |
46 | xtype: 'proxmoxKVComboBox', |
47 | value: '__default__', | |
4f3e66d8 | 48 | deleteEmpty: false, |
8a56fe1a | 49 | fieldLabel: gettext('Graphic card'), |
56148f25 | 50 | comboItems: Object.entries(PVE.Utils.kvm_vga_drivers), |
c8e171a8 TL |
51 | validator: function(v) { |
52 | let cfg = this.up('proxmoxWindowEdit').vmconfig || {}; | |
8a56fe1a TL |
53 | |
54 | if (v.match(/^serial\d+$/) && (!cfg[v] || cfg[v] !== 'socket')) { | |
c8e171a8 | 55 | let fmt = gettext("Serial interface '{0}' is not correctly configured."); |
8a56fe1a | 56 | return Ext.String.format(fmt, v); |
db050180 | 57 | } |
db050180 | 58 | return true; |
4f3e66d8 | 59 | }, |
524be1b9 MF |
60 | bind: { |
61 | value: '{type}', | |
f6710aac | 62 | }, |
c8e171a8 TL |
63 | }, |
64 | { | |
4f3e66d8 DC |
65 | xtype: 'proxmoxintegerfield', |
66 | emptyText: Proxmox.Utils.defaultText, | |
67 | fieldLabel: gettext('Memory') + ' (MiB)', | |
68 | minValue: 4, | |
69 | maxValue: 512, | |
70 | step: 4, | |
f6710aac | 71 | name: 'memory', |
524be1b9 MF |
72 | bind: { |
73 | emptyText: '{memoryEmptyText}', | |
74 | disabled: '{matchNonGUIOption}', | |
75 | }, | |
f6710aac | 76 | }], |
80da5bb9 MF |
77 | |
78 | advancedItems: [ | |
79 | { | |
80 | xtype: 'proxmoxKVComboBox', | |
81 | name: 'clipboard', | |
82 | deleteEmpty: false, | |
83 | value: '__default__', | |
84 | fieldLabel: gettext('Clipboard'), | |
85 | comboItems: [ | |
86 | ['__default__', Proxmox.Utils.defaultText], | |
87 | ['vnc', 'VNC'], | |
88 | ], | |
89 | bind: { | |
90 | value: '{clipboard}', | |
91 | disabled: '{matchNonGUIOption}', | |
92 | }, | |
93 | }, | |
94 | { | |
95 | xtype: 'displayfield', | |
96 | name: 'vncHint', | |
97 | userCls: 'pmx-hint', | |
98 | value: gettext('You cannot use the default SPICE clipboard if the VNC Clipboard is selected.') + ' ' + | |
99 | gettext('VNC Clipboard requires spice-tools installed in the Guest-VM.'), | |
100 | bind: { | |
101 | hidden: '{hideVNCHint}', | |
102 | }, | |
103 | }, | |
104 | { | |
105 | xtype: 'displayfield', | |
106 | name: 'defaultHint', | |
107 | userCls: 'pmx-hint', | |
108 | value: gettext('This option depends on your display type.') + ' ' + | |
109 | gettext('If the display type uses SPICE you are able to use the default SPICE Clipboard.'), | |
110 | bind: { | |
111 | hidden: '{hideDefaultHint}', | |
112 | }, | |
113 | }, | |
114 | ], | |
4f3e66d8 DC |
115 | }); |
116 | ||
117 | Ext.define('PVE.qemu.DisplayEdit', { | |
118 | extend: 'Proxmox.window.Edit', | |
119 | ||
120 | vmconfig: undefined, | |
121 | ||
122 | subject: gettext('Display'), | |
123 | width: 350, | |
124 | ||
125 | items: [{ | |
f6710aac | 126 | xtype: 'pveDisplayInputPanel', |
8a56fe1a | 127 | }], |
db050180 | 128 | |
8058410f | 129 | initComponent: function() { |
c8e171a8 | 130 | let me = this; |
db050180 DM |
131 | |
132 | me.callParent(); | |
133 | ||
134 | me.load({ | |
8a56fe1a TL |
135 | success: function(response) { |
136 | me.vmconfig = response.result.data; | |
c8e171a8 | 137 | let vga = me.vmconfig.vga || '__default__'; |
4f3e66d8 | 138 | me.setValues(PVE.Parser.parsePropertyString(vga, 'type')); |
f6710aac | 139 | }, |
db050180 | 140 | }); |
f6710aac | 141 | }, |
db050180 | 142 | }); |