}
}
- return n1.text > n2.text ? 1 : (n1.text < n2.text ? -1 : 0);
+ return n1.id > n2.id ? 1 : (n1.id < n2.id ? -1 : 0);
} else if (n1.groupbyid) {
return -1;
} else if (n2.groupbyid) {
}
},
+ // add additional elements to text
+ // at the moment only the usage indicator for storages
+ setText: function(info) {
+ var me = this;
+
+ var status = '';
+ if (info.type === 'storage') {
+ var maxdisk = info.maxdisk;
+ var disk = info.disk;
+ var usage = disk/maxdisk;
+ var cls = '';
+ if (usage <= 1.0 && usage >= 0.0) {
+ var height = (usage*100).toFixed(0);
+ var neg_height = (100-usage*100).toFixed(0);
+ status = '<div class="usage-wrapper">';
+ status += '<div class="usage-negative" style="height: ';
+ status += neg_height + '%"></div>';
+ status += '<div class="usage" style="height: '+ height +'%"></div>';
+ status += '</div> ';
+ }
+ }
+
+ info.text = status + info.text;
+ },
+
+ setToolTip: function(info) {
+ if (info.type === 'pool' || info.groupbyid !== undefined) {
+ return;
+ }
+
+ var qtips = [gettext('Status') + ': ' + (info.qmpstatus || info.status)];
+ if (info.hastate != 'unmanaged') {
+ qtips.push(gettext('HA State') + ": " + info.hastate);
+ }
+
+ info.qtip = qtips.join(', ');
+ },
+
// private
addChildSorted: function(node, info) {
var me = this;
me.setIconCls(info);
+ me.setText(info);
+ me.setToolTip(info);
var defaults;
if (info.groupbyid) {
- info.text = info.groupbyid;
+ info.text = info.groupbyid;
if (info.type === 'type') {
defaults = PVE.tree.ResourceTree.typeDefaults[info.groupbyid];
if (defaults && defaults.text) {
groupinfo.leaf = false;
groupinfo.groupbyid = v;
group = me.addChildSorted(node, groupinfo);
- // fixme: remove when EXTJS has fixed those bugs?!
- group.expand(); group.collapse();
}
if (info.type === groupby) {
return group;
}
// tree item has been updated
- if ((item.data.text !== olditem.data.text) ||
- (item.data.running !== olditem.data.running) ||
- (item.data.template !== olditem.data.template) ||
- (item.data.status !== olditem.data.status) ||
- (item.data.hastate!== olditem.data.hastate)) {
- //console.log("changed node/text/running " + olditem.data.id);
- changed = true;
+ var fields = [
+ 'text', 'running', 'template', 'status',
+ 'qmpstatus', 'hastate', 'lock'
+ ];
+
+ var field;
+ for (i = 0; i < fields.length; i++) {
+ field = fields[i];
+ if (item.data[field] !== olditem.data[field]) {
+ changed = true;
+ break;
+ }
}
// fixme: also test filterfn()?
var info = olditem.data;
Ext.apply(info, item.data);
me.setIconCls(info);
+ me.setText(info);
+ me.setToolTip(info);
olditem.commit();
}
if ((!item || moved) && olditem.isLeaf()) {
});
store.resumeEvents();
+ store.fireEvent('refresh', store);
// select parent node is selection vanished
if (lastsel && !rootnode.findChild('id', lastsel.data.id, true)) {
// on first tree load set the selection from the stateful provider
if (!pdata.updateCount) {
- rootnode.collapse();
rootnode.expand();
me.applyState(sp.get(stateid));
}
pdata.updateCount++;
- store.fireEvent('refresh', store);
};
var statechange = function(sp, key, value) {
me.clearTree();
updateTree();
},
+ setDatacenterText: function(clustername) {
+ var rootnode = me.store.getRootNode();
+
+ var rnodeText = gettext('Datacenter');
+ if (clustername !== undefined) {
+ rnodeText += ' (' + clustername + ')';
+ }
+
+ rootnode.beginEdit();
+ rootnode.data.text = rnodeText;
+ rootnode.commit();
+ },
clearTree: function() {
pdata.updateCount = 0;
var rootnode = me.store.getRootNode();