]>
git.proxmox.com Git - pmg-gui.git/blob - js/ConfigPanel.js
2 * Base class for all the multitab config panels
6 * You create a subclass of this, and then define your wanted tabs
12 * iconCls: 'fa fa-icon',
13 * groups: ['somegroup'],
14 * expandedOnInit: true,
18 * this has to be in the declarative syntax, else we
19 * cannot save them for later
20 * (so no Ext.create or Ext.apply of an item in the subclass)
22 * the groups array expects the itemids of the items
23 * which are the parents, which have to come before they
26 * if you want following the tree:
33 * the suboption1 group array has to look like this:
34 * groups: ['itemid-of-option2']
36 * and of subsuboption1:
37 * groups: ['itemid-of-option2', 'itemid-of-suboption1']
39 * setting the expandedOnInit determines if the item/group is expanded
40 * initially (false by default)
42 Ext
.define('PMG.panel.Config', {
43 extend
: 'Ext.panel.Panel',
44 alias
: 'widget.pmgPanelConfig',
46 viewFilter
: undefined, // a filter to pass to that ressource grid
49 // this is needed for the overflow handler
51 overflowHandler
: 'scroller',
54 backgroundColor
: '#f5f5f5',
67 selectionchange: function(treeList
, selection
) {
68 var me
= this.up('panel');
69 me
.suspendLayout
= true;
70 me
.activateCard(selection
.data
.id
);
71 me
.suspendLayout
= false;
74 itemclick: function(treelist
, info
) {
75 var olditem
= treelist
.getSelection();
76 var newitem
= info
.node
;
78 // when clicking on the expand arrow,
79 // we dont select items, but still want
80 // the original behaviour
81 if (info
.select
=== false) {
85 // if you click on a different item which is open,
87 // else toggle the clicked item
88 if (olditem
.data
.id
!== newitem
.data
.id
&&
89 newitem
.data
.expanded
=== true) {
103 // used for automated test
104 selectById: function(cardid
) {
107 var root
= me
.store
.getRoot();
108 var selection
= root
.findChild('id', cardid
, true);
112 var menu
= me
.down('#menu');
113 menu
.setSelection(selection
);
118 activateCard: function(cardid
) {
120 if (me
.savedItems
[cardid
]) {
121 var curcard
= me
.getLayout().getActiveItem();
122 var newcard
= me
.add(me
.savedItems
[cardid
]);
124 me
.setActiveItem(cardid
);
125 me
.remove(curcard
, true);
127 // trigger state change
130 // Note: '' is alias for first tab.
131 // First tab can be 'search' or something else
132 if (cardid
=== me
.firstItem
) {
136 me
.sp
.set(me
.hstateid
, { value
: ncard
});
142 initComponent: function() {
145 var stateid
= me
.hstateid
;
147 me
.sp
= Ext
.state
.Manager
.getProvider();
149 var activeTab
; // leaving this undefined means items[0] will be the default tab
152 var state
= me
.sp
.get(stateid
);
153 if (state
&& state
.value
) {
154 // if this tab does not exists, it chooses the first
155 activeTab
= state
.value
;
160 var title
= me
.title
;
161 me
.title
= undefined;
164 //var tbar = me.tbar || [];
165 //me.tbar = undefined;
167 //tbar.unshift('->');
171 // baseCls: 'x-panel-header-text'
174 //me.dockedItems[1].items = tbar;
176 // include search tab
177 me
.items
= me
.items
|| [];
180 /*jslint confusion:true*/
182 me
.firstItem
= me
.items
[0].itemId
;
184 /*jslint confusion:false*/
186 me
.store
= Ext
.create('Ext.data.TreeStore', {
191 var root
= me
.store
.getRoot();
192 me
.items
.forEach(function(item
){
193 var treeitem
= Ext
.create('Ext.data.TreeModel',{
196 iconCls
: item
.iconCls
,
198 expanded
: item
.expandedOnInit
201 if (me
.savedItems
[item
.itemId
] !== undefined) {
202 throw "itemId already exists, please use another";
204 me
.savedItems
[item
.itemId
] = item
;
209 // get/create the group items
210 while (Ext
.isArray(item
.groups
) && item
.groups
.length
> 0) {
211 group
= item
.groups
.shift();
213 var child
= curnode
.findChild('id', group
);
214 if (child
=== null) {
215 // did not find the group item
216 // so add it where we are
224 // lets see if it already exists
225 var node
= curnode
.findChild('id', item
.itemId
);
228 curnode
.appendChild(treeitem
);
230 // should not happen!
231 throw "id already exists";
236 me
.defaults
= me
.defaults
|| {};
237 Ext
.apply(me
.defaults
, {
238 viewFilter
: me
.viewFilter
,
244 var menu
= me
.down('#menu');
245 var selection
= root
.findChild('id', activeTab
, true) || root
.firstChild
;
246 var node
= selection
;
247 while (node
!== root
) {
249 node
= node
.parentNode
;
251 menu
.setStore(me
.store
);
252 menu
.setSelection(selection
);
254 // on a state change,
255 // select the new item
256 var statechange = function(sp
, key
, state
) {
257 // it the state change is for this panel
258 if (stateid
&& (key
=== stateid
) && state
) {
260 var acard
= me
.getLayout().getActiveItem().itemId
;
261 // get the itemid of the new value
262 var ncard
= state
.value
|| me
.firstItem
;
263 if (ncard
&& (acard
!= ncard
)) {
264 // select the chosen item
265 menu
.setSelection(root
.findChild('id', ncard
, true) || root
.firstChild
);
271 me
.mon(me
.sp
, 'statechange', statechange
);