fixme:

- add missing options from config file in store
- remove ObjectStore2.js

Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 www/manager/Makefile             |    2 +
 www/manager/data/ObjectStore2.js |   28 ++++++++
 www/manager/data/PVEProxy.js     |    6 ++
 www/manager/grid/ObjectGrid2.js  |  132 ++++++++++++++++++++++++++++++++++++++
 www/manager/qemu/HardwareView.js |    4 +-
 www/manager/qemu/Options.js      |    4 +-
 6 files changed, 172 insertions(+), 4 deletions(-)
 create mode 100644 www/manager/data/ObjectStore2.js
 create mode 100644 www/manager/grid/ObjectGrid2.js

diff --git a/www/manager/Makefile b/www/manager/Makefile
index 704895d..b5f6ba6 100644
--- a/www/manager/Makefile
+++ b/www/manager/Makefile
@@ -19,6 +19,7 @@ JSSRC=                                                        
\
        data/UpdateStore.js                             \
        data/DiffStore.js                               \
        data/ObjectStore.js                             \
+       data/ObjectStore2.js                            \
        data/ResourceStore.js                           \
        form/VLanField.js                               \
        form/Checkbox.js                                \
@@ -76,6 +77,7 @@ JSSRC=                                                        
\
        grid/CheckColumn.js                             \
        grid/SelectFeature.js                           \
        grid/ObjectGrid.js                              \
+       grid/ObjectGrid2.js                             \
        grid/ResourceGrid.js                            \
        grid/PoolMembers.js                             \
        grid/FirewallRules.js                           \
diff --git a/www/manager/data/ObjectStore2.js b/www/manager/data/ObjectStore2.js
new file mode 100644
index 0000000..0946f03
--- /dev/null
+++ b/www/manager/data/ObjectStore2.js
@@ -0,0 +1,28 @@
+Ext.define('PVE.data.ObjectStore2',  {
+    extend: 'PVE.data.UpdateStore',
+
+    constructor: function(config) {
+       var me = this;
+
+        config = config || {};
+
+       if (!config.storeid) {
+           config.storeid =  'pve-store-' + (++Ext.idSeed);
+       }
+
+        Ext.applyIf(config, {
+           model: 'KeyValuePendingDelete',
+            proxy: {
+                type: 'pve',
+               url: config.url,
+               extraParams: config.extraParams,
+//                reader: {
+//                 type: 'jsonobject',
+//                 rows: config.rows
+//             }
+            }
+        });
+
+        me.callParent([config]);
+    }
+});
diff --git a/www/manager/data/PVEProxy.js b/www/manager/data/PVEProxy.js
index 46cecf6..219a620 100644
--- a/www/manager/data/PVEProxy.js
+++ b/www/manager/data/PVEProxy.js
@@ -67,6 +67,12 @@ Ext.define('PVE.RestProxy', {
        idProperty: 'key'
     });
 
+    Ext.define('KeyValuePendingDelete', {
+       extend: "Ext.data.Model",
+       fields: [ 'key', 'value', 'pending', 'delete' ],
+       idProperty: 'key'
+    });
+
     Ext.define('pve-string-list', {
        extend: 'Ext.data.Model',
        fields:  [ 'n', 't' ],
diff --git a/www/manager/grid/ObjectGrid2.js b/www/manager/grid/ObjectGrid2.js
new file mode 100644
index 0000000..76589da
--- /dev/null
+++ b/www/manager/grid/ObjectGrid2.js
@@ -0,0 +1,132 @@
+Ext.define('PVE.grid.ObjectGrid2', {
+    extend: 'Ext.grid.GridPanel',
+    alias: ['widget.pveObjectGrid2'],
+
+    getObjectValue: function(key, defaultValue) {
+       var me = this;
+       var rec = me.store.getById(key);
+       if (rec) {
+           return rec.data.value;
+       }
+       return defaultValue;
+    },
+
+    renderKey: function(key, metaData, record, rowIndex, colIndex, store) {
+       var me = this;
+       var rows = me.rows;
+       var rowdef = (rows && rows[key]) ?  rows[key] : {};
+       return rowdef.header || key;
+    },
+
+    renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
+       var me = this;
+       var rows = me.rows;
+       var key = record.data.key;
+       var rowdef = (rows && rows[key]) ?  rows[key] : {};
+       var renderer = rowdef.renderer;
+       var current = '';
+       var pendingdelete = '';
+       var pending = '';
+
+       if (renderer) {
+           current = renderer(value, metaData, record, rowIndex, colIndex, 
store);
+           if(record.data['pending']){
+               pending = renderer(record.data['pending'], metaData, record, 
rowIndex, colIndex, store);
+           }
+       }else{
+           current = value;
+           pending = record.data['pending'];
+       }
+       if(record.data['delete']){
+           pendingdelete = '<div style="text-decoration: line-through;">'+ 
current +'</div>';
+       }
+
+       value = current;
+       if(pending || pendingdelete){
+           value += '<div style="color:red">' + pending + pendingdelete + 
'</div>';
+       }
+       return value;
+    },
+
+    initComponent : function() {
+       var me = this;
+
+       var rows = me.rows;
+
+       if (!me.rstore) {
+           if (!me.url) {
+               throw "no url specified";
+           }
+
+//fixme : use updatestore directly
+
+           me.rstore = Ext.create('PVE.data.ObjectStore2', {
+//         me.rstore = Ext.create('PVE.data.UpdateStore', {
+               url: me.url,
+               interval: me.interval,
+               extraParams: me.extraParams,
+               rows: me.rows,
+//                model: 'KeyValuePendingDelete',
+//             storeid:  'pve-store-' + (++Ext.idSeed)
+           });
+       }
+
+       var rstore = me.rstore;
+
+       var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
+
+       if (rows) {
+           Ext.Object.each(rows, function(key, rowdef) {
+               //fixme : add missing options from config file ?
+               if (Ext.isDefined(rowdef.defaultValue)) {
+                   store.add({ key: key, value: rowdef.defaultValue, pending: 
undefined });
+               } else if (rowdef.required) {
+                   store.add({ key: key, value: undefined, pending: undefined 
});
+               }
+           });
+       }
+
+       if (me.sorterFn) {
+           store.sorters.add(new Ext.util.Sorter({
+               sorterFn: me.sorterFn
+           }));
+       }
+
+       store.filters.add(new Ext.util.Filter({
+           filterFn: function(item) {
+               if (rows) {
+                   var rowdef = rows[item.data.key];
+                   if (!rowdef || (rowdef.visible === false)) {
+                       return false;
+                   }
+               }
+               return true;
+           }
+       }));
+
+       PVE.Utils.monStoreErrors(me, rstore);
+
+
+       Ext.applyIf(me, {
+           store: store,
+           hideHeaders: true,
+           stateful: false,
+           columns: [
+               {
+                   header: gettext('Name'),
+                   width: me.cwidth1 || 100,
+                   dataIndex: 'key',
+                   renderer: me.renderKey
+               },
+               {
+                   flex: 1,
+                   header: gettext('Value'),
+                   dataIndex: 'value',
+                   renderer: me.renderValue
+               }
+           ]
+       });
+
+       me.callParent();
+   }
+});
diff --git a/www/manager/qemu/HardwareView.js b/www/manager/qemu/HardwareView.js
index f1055e5..31c8be0 100644
--- a/www/manager/qemu/HardwareView.js
+++ b/www/manager/qemu/HardwareView.js
@@ -1,7 +1,7 @@
 // fixme: howto avoid jslint type confusion?
 /*jslint confusion: true */
 Ext.define('PVE.qemu.HardwareView', {
-    extend: 'PVE.grid.ObjectGrid',
+    extend: 'PVE.grid.ObjectGrid2',
     alias: ['widget.PVE.qemu.HardwareView'],
 
     renderKey: function(key, metaData, record, rowIndex, colIndex, store) {
@@ -359,7 +359,7 @@ Ext.define('PVE.qemu.HardwareView', {
        });
 
        Ext.applyIf(me, {
-           url: '/api2/json/' + baseurl,
+           url: '/api2/json/' + 'nodes/' + nodename + '/qemu/' + vmid + 
'/pending',
            selModel: sm,
            cwidth1: 170,
            tbar: [ 
diff --git a/www/manager/qemu/Options.js b/www/manager/qemu/Options.js
index 490c475..7cd302f 100644
--- a/www/manager/qemu/Options.js
+++ b/www/manager/qemu/Options.js
@@ -1,6 +1,6 @@
 /*jslint confusion: true */
 Ext.define('PVE.qemu.Options', {
-    extend: 'PVE.grid.ObjectGrid',
+    extend: 'PVE.grid.ObjectGrid2',
     alias: ['widget.PVE.qemu.Options'],
 
     initComponent : function() {
@@ -315,7 +315,7 @@ Ext.define('PVE.qemu.Options', {
        };
 
        Ext.applyIf(me, {
-           url: "/api2/json/nodes/" + nodename + "/qemu/" + vmid + "/config",
+           url: "/api2/json/nodes/" + nodename + "/qemu/" + vmid + "/pending",
            cwidth1: 170,
            tbar: [ edit_btn ],
            rows: rows,
-- 
1.7.10.4

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to