]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/tree/ResourceTree.js
gui: add lock to resource store and tree
[pve-manager.git] / www / manager6 / tree / ResourceTree.js
index f6422beb8fd0b8b09e9ac2d53afd65cbefed402f..360e7e73b5e033a7548fbe1337e8e0656ec666dc 100644 (file)
@@ -68,7 +68,7 @@ Ext.define('PVE.tree.ResourceTree', {
                }
            }
 
-           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) {
@@ -106,15 +106,55 @@ Ext.define('PVE.tree.ResourceTree', {
        }
     },
 
+    // 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) {
@@ -160,8 +200,6 @@ Ext.define('PVE.tree.ResourceTree', {
                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;
@@ -258,13 +296,18 @@ Ext.define('PVE.tree.ResourceTree', {
                        }
 
                        // 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()?
@@ -276,6 +319,8 @@ Ext.define('PVE.tree.ResourceTree', {
                        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()) {
@@ -319,6 +364,7 @@ Ext.define('PVE.tree.ResourceTree', {
            });
 
            store.resumeEvents();
+           store.fireEvent('refresh', store);
 
            // select parent node is selection vanished
            if (lastsel && !rootnode.findChild('id', lastsel.data.id, true)) {
@@ -336,13 +382,11 @@ Ext.define('PVE.tree.ResourceTree', {
 
            // 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) {
@@ -386,6 +430,18 @@ Ext.define('PVE.tree.ResourceTree', {
                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();