]>
Commit | Line | Data |
---|---|---|
5289a1b8 EK |
1 | /* |
2 | * Top left combobox, used to select a view of the underneath RessourceTree | |
3 | */ | |
4e247bf4 DM |
4 | Ext.define('PVE.form.ViewSelector', { |
5 | extend: 'Ext.form.field.ComboBox', | |
6 | alias: ['widget.pveViewSelector'], | |
7 | ||
820c770f EK |
8 | editable: false, |
9 | allowBlank: false, | |
10 | forceSelection: true, | |
11 | autoSelect: false, | |
12 | valueField: 'key', | |
13 | displayField: 'value', | |
14 | hideLabel: true, | |
389b62b2 | 15 | queryMode: 'local', |
820c770f | 16 | |
4e247bf4 DM |
17 | initComponent: function() { |
18 | var me = this; | |
19 | ||
20 | var default_views = { | |
21 | server: { | |
22 | text: gettext('Server View'), | |
f6710aac | 23 | groups: ['node'], |
4e247bf4 DM |
24 | }, |
25 | folder: { | |
26 | text: gettext('Folder View'), | |
f6710aac | 27 | groups: ['type'], |
4e247bf4 DM |
28 | }, |
29 | storage: { | |
30 | text: gettext('Storage View'), | |
31 | groups: ['node'], | |
32 | filterfn: function(node) { | |
33 | return node.data.type === 'storage' || node.data.type === 'node'; | |
f6710aac | 34 | }, |
4e247bf4 | 35 | }, |
2a4971d8 TL |
36 | pool: { |
37 | text: gettext('Pool View'), | |
4e247bf4 DM |
38 | groups: ['pool'], |
39 | // Pool View only lists VMs and Containers | |
40 | filterfn: function(node) { | |
2a4971d8 | 41 | return node.data.type === 'qemu' || node.data.type === 'lxc' || node.data.type === 'openvz' || |
4e247bf4 | 42 | node.data.type === 'pool'; |
f6710aac TL |
43 | }, |
44 | }, | |
4e247bf4 DM |
45 | }; |
46 | ||
47 | var groupdef = []; | |
48 | Ext.Object.each(default_views, function(viewname, value) { | |
49 | groupdef.push([viewname, value.text]); | |
50 | }); | |
51 | ||
52 | var store = Ext.create('Ext.data.Store', { | |
53 | model: 'KeyValue', | |
54 | proxy: { | |
55 | type: 'memory', | |
f6710aac | 56 | reader: 'array', |
4e247bf4 DM |
57 | }, |
58 | data: groupdef, | |
f6710aac | 59 | autoload: true, |
4e247bf4 DM |
60 | }); |
61 | ||
62 | Ext.apply(me, { | |
4e247bf4 DM |
63 | store: store, |
64 | value: groupdef[0][0], | |
4e247bf4 DM |
65 | getViewFilter: function() { |
66 | var view = me.getValue(); | |
67 | return Ext.apply({ id: view }, default_views[view] || default_views.server); | |
68 | }, | |
69 | ||
70 | getState: function() { | |
71 | return { value: me.getValue() }; | |
72 | }, | |
73 | ||
74 | applyState : function(state, doSelect) { | |
75 | var view = me.getValue(); | |
76 | if (state && state.value && (view != state.value)) { | |
8267aa63 | 77 | var record = store.findRecord('key', state.value, 0, false, true, true); |
4e247bf4 DM |
78 | if (record) { |
79 | me.setValue(state.value, true); | |
80 | if (doSelect) { | |
81 | me.fireEvent('select', me, [record]); | |
82 | } | |
83 | } | |
84 | } | |
85 | }, | |
86 | stateEvents: [ 'select' ], | |
87 | stateful: true, | |
8cf53ea6 | 88 | stateId: 'pveview', |
f6710aac | 89 | id: 'view', |
4e247bf4 DM |
90 | }); |
91 | ||
92 | me.callParent(); | |
93 | ||
94 | var statechange = function(sp, key, value) { | |
95 | if (key === me.id) { | |
96 | me.applyState(value, true); | |
97 | } | |
98 | }; | |
99 | ||
100 | var sp = Ext.state.Manager.getProvider(); | |
4e247bf4 | 101 | me.mon(sp, 'statechange', statechange, me); |
f6710aac | 102 | }, |
a00a9ffd | 103 | }); |