]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - grid/ObjectGrid.js
follouwp: code cleanup for bond_mode_array
[proxmox-widget-toolkit.git] / grid / ObjectGrid.js
index 7f221eb377c2ff983a6de0d10f96d0ae07725725..36c873c56a3790d48a55b546db3a8ae61a72a453 100644 (file)
@@ -22,6 +22,178 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     disabled: false,
     hideHeaders: true,
 
+    monStoreErrors: false,
+
+    add_combobox_row: function(name, text, opts) {
+       var me = this;
+
+       opts = opts || {};
+       me.rows = me.rows || {};
+
+       me.rows[name] = {
+           required: true,
+           defaultValue: opts.defaultValue,
+           header: text,
+           renderer: opts.renderer,
+           editor: {
+               xtype: 'proxmoxWindowEdit',
+               subject: text,
+               fieldDefaults: {
+                   labelWidth: opts.labelWidth || 100
+               },
+               items: {
+                   xtype: 'proxmoxKVComboBox',
+                   name: name,
+                   comboItems: opts.comboItems,
+                   value: opts.defaultValue,
+                   deleteEmpty: opts.deleteEmpty ? true : false,
+                   emptyText: opts.defaultValue,
+                   labelWidth: Proxmox.Utils.compute_min_label_width(
+                       text, opts.labelWidth),
+                   fieldLabel: text
+               }
+           }
+       };
+    },
+
+    add_text_row: function(name, text, opts) {
+       var me = this;
+
+       opts = opts || {};
+       me.rows = me.rows || {};
+
+       me.rows[name] = {
+           required: true,
+           defaultValue: opts.defaultValue,
+           header: text,
+           renderer: opts.renderer,
+           editor: {
+               xtype: 'proxmoxWindowEdit',
+               subject: text,
+               fieldDefaults: {
+                   labelWidth: opts.labelWidth || 100
+               },
+               items: {
+                   xtype: 'proxmoxtextfield',
+                   name: name,
+                   deleteEmpty: opts.deleteEmpty ? true : false,
+                   emptyText: opts.defaultValue,
+                   labelWidth: Proxmox.Utils.compute_min_label_width(
+                       text, opts.labelWidth),
+                   vtype: opts.vtype,
+                   fieldLabel: text
+               }
+           }
+       };
+    },
+
+    add_boolean_row: function(name, text, opts) {
+       var me = this;
+
+       opts = opts || {};
+       me.rows = me.rows || {};
+
+       me.rows[name] = {
+           required: true,
+           defaultValue: opts.defaultValue || 0,
+           header: text,
+           renderer: opts.renderer || Proxmox.Utils.format_boolean,
+           editor: {
+               xtype: 'proxmoxWindowEdit',
+               subject: text,
+               fieldDefaults: {
+                   labelWidth: opts.labelWidth || 100
+               },
+               items: {
+                   xtype: 'proxmoxcheckbox',
+                   name: name,
+                   uncheckedValue: 0,
+                   defaultValue: opts.defaultValue  || 0,
+                   checked: opts.defaultValue ? true : false,
+                   deleteDefaultValue: opts.deleteDefaultValue ? true : false,
+                   labelWidth: Proxmox.Utils.compute_min_label_width(
+                       text, opts.labelWidth),
+                   fieldLabel: text
+               }
+           }
+       };
+    },
+
+    add_integer_row: function(name, text, opts) {
+       var me = this;
+
+       opts = opts || {}
+       me.rows = me.rows || {};
+
+       me.rows[name] = {
+           required: true,
+           defaultValue: opts.defaultValue,
+           header: text,
+           renderer: opts.renderer,
+           editor: {
+               xtype: 'proxmoxWindowEdit',
+               subject: text,
+               fieldDefaults: {
+                   labelWidth: opts.labelWidth || 100
+               },
+               items: {
+                   xtype: 'proxmoxintegerfield',
+                   name: name,
+                   minValue: opts.minValue,
+                   maxValue: opts.maxValue,
+                   emptyText: gettext('Default'),
+                   deleteEmpty: opts.deleteEmpty ? true : false,
+                   value: opts.defaultValue,
+                   labelWidth: Proxmox.Utils.compute_min_label_width(
+                       text, opts.labelWidth),
+                   fieldLabel: text
+               }
+           }
+       };
+    },
+
+    editorConfig: {}, // default config passed to editor
+
+    run_editor: function() {
+       var me = this;
+
+       var sm = me.getSelectionModel();
+       var rec = sm.getSelection()[0];
+       if (!rec) {
+           return;
+       }
+
+       var rows = me.rows;
+       var rowdef = rows[rec.data.key];
+       if (!rowdef.editor) {
+           return;
+       }
+
+       var win;
+       var config;
+       if (Ext.isString(rowdef.editor)) {
+           config = Ext.apply({
+               confid: rec.data.key,
+           },  me.editorConfig);
+           win = Ext.create(rowdef.editor, config);
+       } else {
+           config = Ext.apply({
+               confid: rec.data.key,
+           },  me.editorConfig);
+           Ext.apply(config, rowdef.editor);
+           win = Ext.createWidget(rowdef.editor.xtype, config);
+           win.load();
+       }
+
+       win.show();
+       win.on('destroy', me.reload, me);
+    },
+
+    reload: function() {
+       var me = this;
+       me.rstore.load();
+    },
+
     getObjectValue: function(key, defaultValue) {
        var me = this;
        var rec = me.store.getById(key);
@@ -52,6 +224,21 @@ Ext.define('Proxmox.grid.ObjectGrid', {
        return value;
     },
 
+    listeners: {
+       itemkeydown: function(view, record, item, index, e) {
+           if (e.getKey() === e.ENTER) {
+               this.pressedIndex = index;
+           }
+       },
+       itemkeyup: function(view, record, item, index, e) {
+           if (e.getKey() === e.ENTER && index == this.pressedIndex) {
+               this.run_editor();
+           }
+
+           this.pressedIndex = undefined;
+       }
+    },
+
     initComponent : function() {
        var me = this;
 
@@ -127,5 +314,9 @@ Ext.define('Proxmox.grid.ObjectGrid', {
        });
 
        me.callParent();
+
+       if (me.monStoreErrors) {
+           Proxmox.Utils.monStoreErrors(me, me.store);
+       }
    }
 });