[pve-devel] [PATCH manager] Close #2262: Add noVNC scale setting
Thomas Lamprecht
t.lamprecht at proxmox.com
Mon Aug 26 12:50:34 CEST 2019
On 07.08.19 13:10, Dominic Jäger wrote:
> Add a setting to choose the scale mode of the noVNC pop-up as well as the
> embedded console in the content panel to "My Settings". Having both set to
> local scaling was the most important use-case for the users. One setting for
> both places is the simplest solution making this possible.
>
> Signed-off-by: Dominic Jäger <d.jaeger at proxmox.com>
> ---
> Adding an option to My Settings was proposed by Dietmar.
>
> www/manager6/Utils.js | 3 +-
> www/manager6/VNCConsole.js | 3 +-
> www/manager6/window/Settings.js | 50 ++++++++++++++++++++++++++++++++-
> 3 files changed, 53 insertions(+), 3 deletions(-)
>
> diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
> index 6838ef2f..36732a37 100644
> --- a/www/manager6/Utils.js
> +++ b/www/manager6/Utils.js
> @@ -960,13 +960,14 @@ Ext.define('PVE.Utils', { utilities: {
> },
>
> openVNCViewer: function(vmtype, vmid, nodename, vmname, cmd) {
> + var sp = Ext.state.Manager.getProvider();
> var url = Ext.Object.toQueryString({
> console: vmtype, // kvm, lxc, upgrade or shell
> novnc: 1,
> vmid: vmid,
> vmname: vmname,
> node: nodename,
> - resize: 'off',
> + resize: sp.get('novnc-scaling'),
> cmd: cmd
> });
> var nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427");
> diff --git a/www/manager6/VNCConsole.js b/www/manager6/VNCConsole.js
> index cd8fa243..22c82257 100644
> --- a/www/manager6/VNCConsole.js
> +++ b/www/manager6/VNCConsole.js
> @@ -41,12 +41,13 @@ Ext.define('PVE.noVncConsole', {
> items: box,
> listeners: {
> activate: function() {
> + var sp = Ext.state.Manager.getProvider();
> var queryDict = {
> console: me.consoleType, // kvm, lxc, upgrade or shell
> vmid: me.vmid,
> node: me.nodename,
> cmd: me.cmd,
> - resize: 'scale'
> + resize: sp.get('novnc-scaling'),
> };
> queryDict[type] = 1;
> PVE.Utils.cleanEmptyObjectKeys(queryDict);
> diff --git a/www/manager6/window/Settings.js b/www/manager6/window/Settings.js
> index 1a4d8599..0f7764ea 100644
> --- a/www/manager6/window/Settings.js
> +++ b/www/manager6/window/Settings.js
> @@ -37,6 +37,13 @@ Ext.define('PVE.window.Settings', {
>
> var username = sp.get('login-username') || Proxmox.Utils.noneText;
> me.lookupReference('savedUserName').setValue(username);
> + var vncMode = sp.get('novnc-scaling');
> + if (vncMode === 'scale') {
> + me.lookupReference('radio-vnc-scale').setValue(true);
> + } else {
> + // vncMode is 'off'
> + me.lookupReference('radio-vnc-off').setValue(true);
> + }
IMO a bit strange to read, one really thinks that there must be a nicer,
more concise way doing this.. And yes, there is, ExtJS radiogroup itself
provides the set/get/.. Value methods abstracting the radiobuttons itself
away so if you give the radiogroup (not it's fields) a reference instead
you can just do:
if (vncMode !== undefined) {
me.lookupReference('noVNCScaling').setValue(vncMode);
}
(see below why I did not used hyphens in the reference name)
>
> var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
> settings.forEach(function(setting) {
> @@ -246,7 +253,48 @@ Ext.define('PVE.window.Settings', {
> text: gettext('Reset Layout'),
> width: 'auto',
> name: 'reset'
> - }
> + },
maybe, place this in it's own section, mirroring xterm.js settings?
While now it's just a single one the "Local Cursor" could also be an
option we could add here..?
> + {
> + xtype: 'box',
> + autoEl: { tag: 'hr'}
> + },
> + {
> + xtype: 'displayfield',
> + fieldLabel: gettext('noVNC scaling mode'),
> + labelAlign: 'left',
> + labelWidth: '50%'
> + },
> + {
> + layout: {
> + type: 'hbox',
> + align: 'middle'
> + },
> + border: false,
> + xtype: 'radiogroup',
> + items: [
> + {
> + xtype: 'radiofield',
> + name: 'novnc-scaling',
> + inputValue: 'scale',
> + reference: 'radio-vnc-scale',
this is a invalid reference name (contains "-"), it works in ExtJS "production" mode,
but as soon as you enable debug mode ExtJS is a bit pickier and throws an exception
here. See above why you can just omit those references, you can then add a
checked: true,
to the default field.
> + boxLabel: 'Local Scaling',
> + },
> + {
> + xtype: 'radiofield',
> + name: 'novnc-scaling',
> + inputValue: 'off',
> + reference: 'radio-vnc-off',
> + boxLabel: 'Off',
> + margin: '0 0 0 10',
> + },
> + ],
> + listeners: {
> + change: function(el, newValue, undefined) {
> + var sp = Ext.state.Manager.getProvider();
> + sp.set('novnc-scaling', newValue['novnc-scaling']);
> + }
> + },
> + },
> ]
> },{
> xtype: 'fieldset',
>
More information about the pve-devel
mailing list