]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Settings.js
vnc scaling: show setting in a single line
[pve-manager.git] / www / manager6 / window / Settings.js
CommitLineData
ce11a8af
DC
1Ext.define('PVE.window.Settings', {
2 extend: 'Ext.window.Window',
3
d9ace13c 4 width: '800px',
ce11a8af
DC
5 title: gettext('My Settings'),
6 iconCls: 'fa fa-gear',
7 modal: true,
8 bodyPadding: 10,
9 resizable: false,
10
75ceae78
DL
11 buttons: [
12 {
13 xtype: 'proxmoxHelpButton',
14 onlineHelp: 'gui_my_settings',
15 hidden: false
16 },
17 '->',
18 {
19 text: gettext('Close'),
20 handler: function() {
21 this.up('window').close();
22 }
ce11a8af 23 }
75ceae78 24 ],
ce11a8af
DC
25
26 layout: {
d9ace13c
DC
27 type: 'hbox',
28 align: 'top'
ce11a8af
DC
29 },
30
31 controller: {
32 xclass: 'Ext.app.ViewController',
33
d9ace13c
DC
34 init: function(view) {
35 var me = this;
36 var sp = Ext.state.Manager.getProvider();
37
38 var username = sp.get('login-username') || Proxmox.Utils.noneText;
39 me.lookupReference('savedUserName').setValue(username);
26fcae33
DJ
40 var vncMode = sp.get('novnc-scaling');
41 if (vncMode !== undefined) {
42 me.lookupReference('noVNCScalingGroup').setValue(vncMode);
43 }
d9ace13c
DC
44
45 var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
d9ace13c
DC
46 settings.forEach(function(setting) {
47 var val = localStorage.getItem('pve-xterm-' + setting);
48 if (val !== undefined && val !== null) {
49 var field = me.lookup(setting);
50 field.setValue(val);
2b0bdc46 51 field.resetOriginalValue();
d9ace13c
DC
52 }
53 });
2b0bdc46
DC
54 },
55
56 set_button_status: function() {
57 var me = this;
58
59 var form = me.lookup('xtermform');
60 var valid = form.isValid();
61 var dirty = form.isDirty();
d9ace13c 62
2b0bdc46
DC
63 var hasvalues = false;
64 var values = form.getValues();
65 Ext.Object.eachValue(values, function(value) {
66 if (value) {
67 hasvalues = true;
68 return false;
69 }
70 });
71
72 me.lookup('xtermsave').setDisabled(!dirty || !valid);
73 me.lookup('xtermreset').setDisabled(!hasvalues);
d9ace13c
DC
74 },
75
ce11a8af 76 control: {
2b0bdc46
DC
77 '#xtermjs form': {
78 dirtychange: 'set_button_status',
79 validitychange: 'set_button_status'
d9ace13c
DC
80 },
81 '#xtermjs button': {
82 click: function(button) {
83 var me = this;
84 var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
85 settings.forEach(function(setting) {
86 var field = me.lookup(setting);
87 if (button.reference === 'xtermsave') {
88 var value = field.getValue();
89 if (value) {
90 localStorage.setItem('pve-xterm-' + setting, value);
91 } else {
92 localStorage.removeItem('pve-xterm-' + setting);
93 }
94 } else if (button.reference === 'xtermreset') {
95 field.setValue(undefined);
96 localStorage.removeItem('pve-xterm-' + setting);
97 }
2b0bdc46 98 field.resetOriginalValue();
d9ace13c 99 });
2b0bdc46 100 me.set_button_status();
ce11a8af
DC
101 }
102 },
103 'button[name=reset]': {
104 click: function () {
2488c226 105 var blacklist = ['GuiCap', 'login-username', 'dash-storages'];
ce11a8af
DC
106 var sp = Ext.state.Manager.getProvider();
107 var state;
108 for (state in sp.state) {
109 if (sp.state.hasOwnProperty(state)) {
110 if (blacklist.indexOf(state) !== -1) {
111 continue;
112 }
113
114 sp.clear(state);
115 }
116 }
117
118 window.location.reload();
119 }
120 },
121 'button[name=clear-username]': {
122 click: function () {
123 var me = this;
124 var usernamefield = me.lookupReference('savedUserName');
125 var sp = Ext.state.Manager.getProvider();
126
e7ade592 127 usernamefield.setValue(Proxmox.Utils.noneText);
ce11a8af
DC
128 sp.clear('login-username');
129 }
2488c226
DC
130 },
131 'grid[reference=dashboard-storages]': {
132 selectionchange: function(grid, selected) {
133 var me = this;
134 var sp = Ext.state.Manager.getProvider();
135
136 // saves the selected storageids as
137 // "id1,id2,id3,..."
138 // or clears the variable
139 if (selected.length > 0) {
140 sp.set('dash-storages',
141 Ext.Array.pluck(selected, 'id').join(','));
142 } else {
143 sp.clear('dash-storages');
144 }
145 },
146 afterrender: function(grid) {
147 var me = grid;
148 var sp = Ext.state.Manager.getProvider();
149 var store = me.getStore();
150 var items = [];
151 me.suspendEvent('selectionchange');
152 var storages = sp.get('dash-storages') || '';
153 storages.split(',').forEach(function(storage){
154 // we have to get the records
155 // to be able to select them
156 if (storage !== '') {
157 var item = store.getById(storage);
158 if (item) {
159 items.push(item);
160 }
161 }
162 });
163 me.getSelectionModel().select(items);
164 me.resumeEvent('selectionchange');
165 }
ce11a8af
DC
166 }
167 }
168 },
169
170 items: [{
26fcae33
DJ
171 xtype: 'fieldset',
172 width: '50%',
173 title: gettext('Webinterface Settings'),
174 margin: '5',
175 layout: {
176 type: 'vbox',
177 align: 'left'
178 },
179 defaults: {
180 width: '100%',
181 margin: '0 0 10 0'
182 },
183 items: [
184 {
185 xtype: 'displayfield',
186 fieldLabel: gettext('Dashboard Storages'),
187 labelAlign: 'left',
188 labelWidth: '50%'
ce11a8af 189 },
26fcae33
DJ
190 {
191 xtype: 'grid',
192 maxHeight: 150,
193 reference: 'dashboard-storages',
194 selModel: {
195 selType: 'checkboxmodel'
2488c226 196 },
26fcae33
DJ
197 columns: [{
198 header: gettext('Name'),
199 dataIndex: 'storage',
200 flex: 1
201 },{
202 header: gettext('Node'),
203 dataIndex: 'node',
204 flex: 1
205 }],
206 store: {
207 type: 'diff',
208 field: ['type', 'storage', 'id', 'node'],
209 rstore: PVE.data.ResourceStore,
210 filters: [{
211 property: 'type',
212 value: 'storage'
2488c226 213 }],
26fcae33 214 sorters: [ 'node','storage']
ce11a8af 215 }
26fcae33
DJ
216 },
217 {
218 xtype: 'box',
219 autoEl: { tag: 'hr'}
220 },
221 {
222 xtype: 'displayfield',
223 fieldLabel: gettext('Saved User name'),
224 labelAlign: 'left',
225 labelWidth: '50%',
226 stateId: 'login-username',
227 reference: 'savedUserName',
228 value: ''
229 },
230 {
231 xtype: 'button',
232 cls: 'x-btn-default-toolbar-small proxmox-inline-button',
233 text: gettext('Clear User name'),
234 width: 'auto',
235 name: 'clear-username'
236 },
237 {
238 xtype: 'box',
239 autoEl: { tag: 'hr'}
240 },
241 {
242 xtype: 'displayfield',
243 fieldLabel: gettext('Layout'),
244 labelAlign: 'left',
245 labelWidth: '50%'
246 },
247 {
248 xtype: 'button',
249 cls: 'x-btn-default-toolbar-small proxmox-inline-button',
250 text: gettext('Reset Layout'),
251 width: 'auto',
252 name: 'reset'
253 },
254 ]
d9ace13c 255 },{
26fcae33
DJ
256 xtype: 'container',
257 layout: 'vbox',
d9ace13c
DC
258 width: '50%',
259 margin: '5',
26fcae33
DJ
260 defaults: {
261 width: '100%',
262 // right margin ensures that the right border of the fieldsets
263 // is shown
264 margin: '0 2 10 0'
265 },
266 items:[
267 {
268 xtype: 'fieldset',
269 itemId: 'xtermjs',
270 title: gettext('xterm.js Settings'),
271 items: [{
272 xtype: 'form',
273 reference: 'xtermform',
274 border: false,
2b0bdc46 275 layout: {
26fcae33
DJ
276 type: 'vbox',
277 algin: 'left'
278 },
279 defaults: {
280 width: '100%',
281 margin: '0 0 10 0',
d9ace13c 282 },
2b0bdc46
DC
283 items: [
284 {
26fcae33
DJ
285 xtype: 'textfield',
286 name: 'fontFamily',
287 reference: 'fontFamily',
288 emptyText: Proxmox.Utils.defaultText,
289 fieldLabel: gettext('Font-Family')
290 },
291 {
292 xtype: 'proxmoxintegerfield',
293 emptyText: Proxmox.Utils.defaultText,
294 name: 'fontSize',
295 reference: 'fontSize',
296 minValue: 1,
297 fieldLabel: gettext('Font-Size')
298 },
299 {
300 xtype: 'numberfield',
301 name: 'letterSpacing',
302 reference: 'letterSpacing',
303 emptyText: Proxmox.Utils.defaultText,
304 fieldLabel: gettext('Letter Spacing')
305 },
306 {
307 xtype: 'numberfield',
308 name: 'lineHeight',
309 minValue: 0.1,
310 reference: 'lineHeight',
311 emptyText: Proxmox.Utils.defaultText,
312 fieldLabel: gettext('Line Height')
2b0bdc46
DC
313 },
314 {
26fcae33
DJ
315 xtype: 'container',
316 layout: {
317 type: 'hbox',
318 pack: 'end'
319 },
320 items: [
321 {
322 xtype: 'button',
323 reference: 'xtermreset',
324 disabled: true,
325 text: gettext('Reset')
326 },
327 {
328 xtype: 'button',
329 reference: 'xtermsave',
330 disabled: true,
331 text: gettext('Save')
332 }
333 ]
2b0bdc46
DC
334 }
335 ]
26fcae33
DJ
336 }]
337 },{
338 xtype: 'fieldset',
339 title: gettext('noVNC Settings'),
340 items: [
26fcae33
DJ
341 {
342 xtype: 'radiogroup',
b89a26bc 343 fieldLabel: gettext('Scaling mode'),
26fcae33
DJ
344 reference: 'noVNCScalingGroup',
345 height: '15px', // renders faster with value assigned
346 layout: {
347 type: 'hbox',
348 },
349 items: [
350 {
351 xtype: 'radiofield',
352 name: 'noVNCScalingField',
353 inputValue: 'scale',
354 boxLabel: 'Local Scaling',
355 checked: true,
356 },{
357 xtype: 'radiofield',
358 name: 'noVNCScalingField',
359 inputValue: 'off',
360 boxLabel: 'Off',
361 margin: '0 0 0 10',
362 }
363 ],
364 listeners: {
365 change: function(el, newValue, undefined) {
366 var sp = Ext.state.Manager.getProvider();
367 sp.set('novnc-scaling', newValue);
368 }
369 },
370 },
371 ]
372 },
373 ]
ce11a8af
DC
374 }],
375
376 onShow: function() {
377 var me = this;
378 me.callParent();
ce11a8af
DC
379 }
380});