[pve-devel] r5780 - in pve-manager/pve2/www/new: . form

svn-commits at proxmox.com svn-commits at proxmox.com
Mon Apr 4 13:57:52 CEST 2011


Author: dietmar
Date: 2011-04-04 13:57:52 +0200 (Mon, 04 Apr 2011)
New Revision: 5780

Modified:
   pve-manager/pve2/www/new/ResourceTree.js
   pve-manager/pve2/www/new/Workspace.js
   pve-manager/pve2/www/new/form/ViewSelector.js
Log:
build a correct tree - first try


Modified: pve-manager/pve2/www/new/ResourceTree.js
===================================================================
--- pve-manager/pve2/www/new/ResourceTree.js	2011-04-04 05:15:21 UTC (rev 5779)
+++ pve-manager/pve2/www/new/ResourceTree.js	2011-04-04 11:57:52 UTC (rev 5780)
@@ -1,16 +1,72 @@
-Ext.define('PVE.ResourceTree', {
+Ext.define('PVE.tree.ResourceTree', {
     extend: 'Ext.tree.TreePanel',
     requires: ['Ext.tree.*', 'PVE.Utils', 
-	       'PVE.form.ViewSelector', 'PVE.data.ResourceStore'],
+	       'PVE.form.ViewSelector', 
+	       'PVE.data.ResourceStore'],
     alias: ['widget.pveResourceTree'],
-    
+
+    statics: {
+	iconClsHash: {
+	    node: 'x-tree-node-server',
+	    storage: 'x-tree-node-harddisk',
+	    qemu: 'x-tree-node-computer',
+	    openvz: 'x-tree-node-computer',
+	} 
+    },
+
+    addChild: function(node, info) {
+	var self = this;
+
+	var statics = self.statics();
+	var iconCls = statics.iconClsHash[info.type];
+	if (iconCls) 
+	    info.iconCls = iconCls;
+	var child = Ext.ModelMgr.create(info,  'PVETree');
+	node.appendChild(child);
+	return child;
+    },
+
+    groupChild: function(node, info, groups, level) {
+	var self = this;
+
+	var groupby = groups[level];
+	var v = info[groupby];
+
+	if (v) {
+            var group = node.findChild('groupbyid', v);
+	    if (!group) {
+		var groupinfo;
+		if (info.type === groupby) {
+		    groupinfo = info;
+		} else {
+		    groupinfo = {
+			type: groupby,
+			id : "group/" + groupby + "/" + v,
+			text: v,
+		    };
+		}
+		groupinfo.leaf = false;
+		groupinfo.groupbyid = v; 
+		group = self.addChild(node, groupinfo);
+		group.expand(); group.collapse();
+		console.log("ADD GROUP " + v + " " + groupinfo.id);
+	    }
+	    if (info.type === groupby)
+		return group;
+	    if (group)
+		return self.groupChild(group, info, groups, level + 1);
+	}
+
+	return self.addChild(node, info);
+    },
+
     initComponent : function() {
 	var self = this;
 
 	var rstore = PVE.data.ResourceStore;
-	
+
 	var pdata = {
-	    view: {},
+	    view: PVE.form.ViewSelector.defaultView,
 	    dataIndex: {},
 	    updateCount: 0
 	};
@@ -30,6 +86,7 @@
 
 	    var index = pdata.dataIndex;
 
+	    var groups = [].concat(pdata.view.groups);
 
 	    // remove vanished or changed items
 	    for (var key in index) {
@@ -38,11 +95,24 @@
 
 		var olditem = index[key];
 
-		var changed = false;
 		// getById() use find(), which is slow (ExtJS4 DP5) 
 		//var item = rstore.getById(olditem.data.id);
 		var item = rstore.data.get(olditem.data.id);
 
+		var changed = false;
+		if (item) {
+		    // test if any grouping attributes changed
+		    for (var i = 0, len = groups.length; i < len; i++) {
+			var attr = groups[i];
+			if (item.data[attr] != olditem.data[attr]) {
+			    //console.log("changed");
+			    changed = true;
+			    break;
+			}
+		    }
+		    // fixme: also test filterfn()?
+		}
+
 		if (!item || changed) {
 		    console.log("REM UID: " + key);
 		    delete index[key];
@@ -56,16 +126,14 @@
 		if (olditem)
 		    return;
 
-		var itype = item.data.type;
 		console.log("ADD UID: " + item.id);
-		item.data.text = item.id;
+		item.data.text = item.data.id;
 		item.data.leaf = true;
-		item.data.cls = 'x-tree-icon-parent';
 
-		var ni = Ext.apply({}, item.data);
-		var nn = Ext.ModelMgr.create(ni,  'PVETree');
-		rootnode.appendChild(nn);
-		index[item.id] = nn;
+		var info = Ext.apply({}, item.data);
+		var child = self.groupChild(rootnode, info, groups, 0);
+		if (child)
+		    index[item.id] = child;
 	    });
 
 	    if (!pdata.updateCount) {
@@ -113,10 +181,11 @@
 
 	});
 
-	PVE.ResourceTree.superclass.initComponent.call(self);
+	self.callParent();
 
 	rstore.on("load", updateTree);
 	rstore.startUpdate();
+	rstore.stopUpdate();
     }
 
 });

Modified: pve-manager/pve2/www/new/Workspace.js
===================================================================
--- pve-manager/pve2/www/new/Workspace.js	2011-04-04 05:15:21 UTC (rev 5779)
+++ pve-manager/pve2/www/new/Workspace.js	2011-04-04 11:57:52 UTC (rev 5780)
@@ -1,6 +1,6 @@
 Ext.define('PVE.Workspace', {
     extend: 'Ext.container.Viewport',
-    requires: ['PVE.window.LoginWindow', 'PVE.Utils', 'PVE.ResourceTree'],
+    requires: ['PVE.window.LoginWindow', 'PVE.Utils', 'PVE.tree.ResourceTree'],
 
     // private
     defaultView: {

Modified: pve-manager/pve2/www/new/form/ViewSelector.js
===================================================================
--- pve-manager/pve2/www/new/form/ViewSelector.js	2011-04-04 05:15:21 UTC (rev 5779)
+++ pve-manager/pve2/www/new/form/ViewSelector.js	2011-04-04 11:57:52 UTC (rev 5780)
@@ -3,14 +3,18 @@
     requires: ['Ext.data.Store'],
     alias: ['widget.pveViewSelector'],
 
+    statics: {
+	defaultView: {
+	    text: 'Server View',
+	    groups: ['node']
+	}
+    },
+
     initComponent: function() {
 	var self = this;
 
 	var default_views = {
-	    server: {
-		text: 'Server View',
-		groups: ['node']
-	    },
+	    server: self.statics().defaultView,
 	    folder: {
 		text: 'Folder View',
 		groups: ['type']



More information about the pve-devel mailing list