[pve-devel] r5806 - in pve-manager/pve2/www/new: . grid

svn-commits at proxmox.com svn-commits at proxmox.com
Mon Apr 11 12:03:23 CEST 2011


Author: dietmar
Date: 2011-04-11 12:03:23 +0200 (Mon, 11 Apr 2011)
New Revision: 5806

Modified:
   pve-manager/pve2/www/new/PVEUtils.js
   pve-manager/pve2/www/new/grid/ResourceGrid.js
Log:
 grid improvements


Modified: pve-manager/pve2/www/new/PVEUtils.js
===================================================================
--- pve-manager/pve2/www/new/PVEUtils.js	2011-04-08 10:56:41 UTC (rev 5805)
+++ pve-manager/pve2/www/new/PVEUtils.js	2011-04-11 10:03:23 UTC (rev 5806)
@@ -198,7 +198,7 @@
 	var cpu = value;
 	var maxcpu = record.data.maxcpu;
 
-	if (cpu === undefined || maxcpu === undefined)
+	if (!(Ext.isNumeric(value) && Ext.isNumeric(maxcpu) && (maxcpu >= 1)))
 	    return ''
 
 	var per = (cpu * 100) / maxcpu;

Modified: pve-manager/pve2/www/new/grid/ResourceGrid.js
===================================================================
--- pve-manager/pve2/www/new/grid/ResourceGrid.js	2011-04-08 10:56:41 UTC (rev 5805)
+++ pve-manager/pve2/www/new/grid/ResourceGrid.js	2011-04-11 10:03:23 UTC (rev 5806)
@@ -25,63 +25,89 @@
 	});
 
 	var pdata = {
-	    dataIndex: {},
 	    updateCount: 0
 	};
 
 	var updateGrid = function() {
 
-	    var index = pdata.dataIndex;
-
 	    var filterfn = null;
 	    
 	    console.log("START GRID UPDATE");
 
-	    // remove vanished or changed items
-	    var rmlist = [];
-	    for (var key in index) {
-		if (!index.hasOwnProperty(key))
-		    continue;
+	    store.suspendEvents();
 
-		var olditem = index[key];
+	    var nodeidx = {};
+	    var gather_child_nodes = function(cn) {
+                var cs = cn.childNodes,
+		len = cs.length,
+                i = 0, n, res;
 
-		// getById() use find(), which is slow (ExtJS4 beta2) 
-		//var item = rstore.getById(olditem.data.id);
-		var item = rstore.data.get(olditem.data.id);
+                for (; i < len; i++) {
+                    n = cs[i];
+		    var orgnode = rstore.data.get(n.data.id);
+		    if (orgnode) 
+			nodeidx[n.data.id] = rstore.data.get(n.data.id);
+ 		    gather_child_nodes(n);
+		}
+ 	    };
+	    gather_child_nodes(me.pveSelNode);
 
+	    // remove vanished items
+	    var rmlist = [];
+	    store.each(function(olditem) {
+		var item = nodeidx[olditem.data.id];
 		if (!item) {
-		    console.log("GRID REM UID: " + key + " ITEM " + olditem.data.id);
-		    delete index[key];
+		    //console.log("GRID REM UID: " + olditem.data.id);
 		    rmlist.push(item);
-
 		}
-	    }
+	    });
 	    if (rmlist.length) 
 		store.remove(rmlist);
 
  	    // add new items
 	    var addlist = [];
-            rstore.each(function(item) {
-		var olditem = index[item.data.id];
-		if (olditem)
-		    return;
+	    for (var key in nodeidx) {
+		if (!nodeidx.hasOwnProperty(key))
+		    continue;
 
-		if (filterfn && !filterfn(item))
-		    return;
+		var item = nodeidx[key];
+		
+		// getById() use find(), which is slow (ExtJS4 DP5) 
+		//var olditem = store.getById(item.data.id);
+		var olditem = store.data.get(item.data.id);
 
-		//console.log("GRID ADD UID: " + item.data.id);
-
-		var info = Ext.apply({}, item.data);
-		var child = Ext.ModelMgr.create(info, store.model, info.id);
-		addlist.push(item);
-		index[item.data.id] = child;
-	    });
-
+		if (!olditem) {
+		    //console.log("GRID ADD UID: " + item.data.id);
+		    var info = Ext.apply({}, item.data);
+		    var child = Ext.ModelMgr.create(info, store.model, info.id);
+		    addlist.push(item);
+		    continue;
+		}
+		// try to detect changes
+		var changes = false;
+		store.model.prototype.fields.eachKey(function(field) {
+		    if (field != 'id' && item.data[field] != olditem.data[field]) {
+			changes = true;
+			console.log("changed item " + item.id + " " + field + " " + item.data[field] + " != " + olditem.data[field]);
+			olditem.beginEdit()
+			olditem.set(field, item.data[field]);
+		    }
+		});
+		if (changes) {
+		    olditem.endEdit(true)
+		    olditem.commit(true); 
+		}
+	    };
 	    if (addlist.length) {
 		store.cacheRecords(addlist);
-		store.guaranteeRange(0, 49);
+		store.guaranteeRange(0, 50);
 	    }
 
+	    store.sort();
+
+	    store.resumeEvents();
+	    store.fireEvent('datachanged', store);
+
 	    console.log("END GRID UPDATE");
 	    if (!pdata.updateCount) {
 		//self.applyState(sp.get(stateid));
@@ -94,10 +120,11 @@
 	    title: 'Search',
 	    store: store,
 	    viewConfig: {
+		invalidateScrollerOnRefresh: false,
+		stripeRows: true,
 		trackOver: false
             },
-            invalidateScrollerOnRefresh: false,
-	    verticalScroller: {
+ 	    verticalScroller: {
 		xtype: 'paginggridscroller',
 		activePrefetch: false
             },
@@ -106,10 +133,17 @@
 		    rstore.un("load", updateGrid)
 		}
 	    },
-            columns:[{
-		text: 'ID',
-		dataIndex: 'id'
-	    }]
+            columns:[
+		{ text: 'ID', dataIndex: 'id', sortable: true },
+		{ text: 'Type', dataIndex: 'type', sortable: true,
+		  renderer: PVE.Utils.render_itype },
+		{
+		    text: 'CPU',
+		    dataIndex: 'cpu',
+		    sortable: true,
+		    renderer: PVE.Utils.render_cpu
+		},
+	    ]
 	});
 
 	me.callParent();



More information about the pve-devel mailing list