[pve-devel] r6333 - in pve-manager/pve2: . www/manager www/manager/dc www/manager/form www/manager/qemu www/manager/storage

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Jul 20 12:40:23 CEST 2011


Author: dietmar
Date: 2011-07-20 12:40:23 +0200 (Wed, 20 Jul 2011)
New Revision: 6333

Added:
   pve-manager/pve2/www/manager/form/ContentTypeSelector.js
   pve-manager/pve2/www/manager/storage/DirEdit.js
Modified:
   pve-manager/pve2/ChangeLog
   pve-manager/pve2/www/manager/Makefile.am
   pve-manager/pve2/www/manager/dc/StorageView.js
   pve-manager/pve2/www/manager/form/Checkbox.js
   pve-manager/pve2/www/manager/qemu/HardwareView.js
Log:
	* www/manager/storage/DirEdit.js: impl.

	* www/manager/form/ContentTypeSelector.js: impl.

	* www/manager/dc/StorageView.js: impl. Add/Remove/Edit buttons



Modified: pve-manager/pve2/ChangeLog
===================================================================
--- pve-manager/pve2/ChangeLog	2011-07-20 10:28:38 UTC (rev 6332)
+++ pve-manager/pve2/ChangeLog	2011-07-20 10:40:23 UTC (rev 6333)
@@ -1,5 +1,11 @@
 2011-07-20  Proxmox Support Team  <support at proxmox.com>
 
+	* www/manager/storage/DirEdit.js: impl.
+
+	* www/manager/form/ContentTypeSelector.js: impl.
+
+	* www/manager/dc/StorageView.js: impl. Add/Remove/Edit buttons
+
 	* www/manager/grid/ResourceGrid.js (gather_child_nodes): only
 	include real children.
 

Modified: pve-manager/pve2/www/manager/Makefile.am
===================================================================
--- pve-manager/pve2/www/manager/Makefile.am	2011-07-20 10:28:38 UTC (rev 6332)
+++ pve-manager/pve2/www/manager/Makefile.am	2011-07-20 10:40:23 UTC (rev 6333)
@@ -18,7 +18,7 @@
 	form/RRDTypeSelector.js				\
 	form/ComboGrid.js				\
 	form/KVComboBox.js				\
-	form/Boolean.js				\
+	form/Boolean.js					\
 	form/NetworkCardSelector.js			\
 	form/DiskFormatSelector.js			\
 	form/BusTypeSelector.js				\
@@ -34,6 +34,7 @@
 	form/VNCKeyboardSelector.js			\
 	form/DisplaySelector.js				\
 	form/CacheTypeSelector.js			\
+	form/ContentTypeSelector.js			\
 	dc/Tasks.js					\
 	dc/Log.js					\
 	panel/StatusPanel.js				\
@@ -82,6 +83,7 @@
 	storage/StatusView.js				\
 	storage/Summary.js				\
 	storage/Browser.js				\
+	storage/DirEdit.js				\
 	dc/StorageView.js				\
 	dc/UserEdit.js					\
 	dc/UserView.js					\

Modified: pve-manager/pve2/www/manager/dc/StorageView.js
===================================================================
--- pve-manager/pve2/www/manager/dc/StorageView.js	2011-07-20 10:28:38 UTC (rev 6332)
+++ pve-manager/pve2/www/manager/dc/StorageView.js	2011-07-20 10:40:23 UTC (rev 6333)
@@ -18,13 +18,125 @@
 	    }
 	});
 
+	var reload = function() {
+	    store.load();
+	}
 
+	var run_editor = function() {
+	    var sm = me.getSelectionModel();
+	    var rec = sm.getSelection()[0];
+	    if (!rec) {
+		return;
+	    }
+	    var type = rec.data.type;
+	    
+	    var editor;
+	    if (type === 'dir') {
+		editor = 'PVE.storage.DirEdit';
+	    } else {
+		return;
+	    }
+	    var win = Ext.create(editor, {
+		storageId: rec.data.storage,
+	    });
+
+	    win.show();
+	    win.on('destroy', reload);
+	};
+	
+	var edit_btn = new Ext.Button({
+	    text: 'Edit',
+	    disabled: true,
+	    handler: run_editor
+	});
+
+	var remove_btn = new Ext.Button({
+	    text: 'Remove',
+	    disabled: true,
+	    handler: function(){
+		var sm = me.getSelectionModel();
+		var rec = sm.getSelection()[0];
+
+		if (!rec) {
+		    return;
+		}
+
+		var msg = "Are you sure you want to remove storage: '" + 
+		    rec.data.storage + "'";
+
+		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		    if (btn !== 'yes') {
+			return;
+		    }
+		    me.setLoading(true, true);
+		    PVE.Utils.API2Request({
+			url: '/storage/' + rec.data.storage,
+			method: 'DELETE',
+			callback: function() {
+			    me.setLoading(false);
+			    reload();
+			},
+			failure: function (response, opts) {
+			    Ext.Msg.alert('Error', response.htmlStatus);
+			}
+		    });
+		});
+	    }
+	});
+
+	var set_button_status = function() {
+	    var sm = me.getSelectionModel();
+	    var rec = sm.getSelection()[0];
+
+	    if (!rec) {
+		remove_btn.disable();
+		edit_btn.disable();
+		return;
+	    }
+
+	    edit_btn.setDisabled(false);
+
+	    remove_btn.setDisabled(rec.data.storage === 'local');
+	};
+
 	Ext.apply(me, {
 	    store: store,
 	    stateful: false,
 	    viewConfig: {
 		trackOver: false
 	    },
+	    tbar: [ 
+		{
+		    text: 'Add',
+		    menu: new Ext.menu.Menu({
+			items: [
+			    {
+				text: 'Directory',
+				iconCls: 'pve-itype-icon-itype',
+				handler: function() {
+				    var win = Ext.create('PVE.storage.DirEdit', {});
+				    win.on('destroy', reload);
+				    win.show();
+				}
+
+			    },
+			    {
+				text: 'LVM group'
+			    },
+			    {
+				text: 'NFS share',
+				iconCls: 'pve-itype-icon-node'
+			    },
+			    {
+				text: 'iSCSI target',
+				iconCls: 'pve-itype-icon-node'
+			    }
+			]
+		    })
+		},
+		remove_btn,
+		edit_btn
+	    ],
 	    columns: [
 		{
 		    header: 'Storage ID',
@@ -34,33 +146,43 @@
 		},
 		{
 		    header: 'Type',
-		    width: 100,
+		    width: 60,
 		    sortable: true,
-		    dataIndex: 'type'
+		    dataIndex: 'type',
+		    renderer: PVE.Utils.format_storage_type
 		},
 		{
-		    header: 'Path',
+		    header: 'Content',
 		    width: 150,
 		    sortable: true,
+		    dataIndex: 'content',
+		    renderer: PVE.Utils.format_content_types
+		},
+		{
+		    header: 'Path',
+		    width: 200,
+		    sortable: true,
 		    dataIndex: 'path'
 		},
 		{
 		    header: 'Shared',
 		    width: 80,
 		    sortable: true,
-		    dataIndex: 'shared'
+		    dataIndex: 'shared',
+		    renderer: PVE.Utils.format_boolean
 		},
 		{
 		    header: 'Disable',
 		    width: 80,
 		    sortable: true,
-		    dataIndex: 'disable'
+		    dataIndex: 'disable',
+		    renderer: PVE.Utils.format_boolean
 		}
 	    ],
 	    listeners: {
-		show: function() {
-		    store.load();
-		}
+		show: reload,
+		itemdblclick: run_editor,
+		selectionchange: set_button_status
 	    }
 	});
 

Modified: pve-manager/pve2/www/manager/form/Checkbox.js
===================================================================
--- pve-manager/pve2/www/manager/form/Checkbox.js	2011-07-20 10:28:38 UTC (rev 6332)
+++ pve-manager/pve2/www/manager/form/Checkbox.js	2011-07-20 10:40:23 UTC (rev 6333)
@@ -9,6 +9,8 @@
  
     inputValue: '1',
 
+    height: 22, // hack: set same height as text fields
+
     getSubmitData: function() {
         var me = this,
             data = null,

Added: pve-manager/pve2/www/manager/form/ContentTypeSelector.js
===================================================================
--- pve-manager/pve2/www/manager/form/ContentTypeSelector.js	                        (rev 0)
+++ pve-manager/pve2/www/manager/form/ContentTypeSelector.js	2011-07-20 10:40:23 UTC (rev 6333)
@@ -0,0 +1,17 @@
+Ext.define('PVE.form.ContentTypeSelector', {
+    extend: 'PVE.form.KVComboBox',
+    alias: ['widget.pveContentTypeSelector'],
+  
+    initComponent: function() {
+	var me = this;
+
+	me.data = [
+	    ['images', 'Images'],
+	    ['iso', 'ISO'],
+	    ['vztmpl', 'Templates'],
+	    ['backup', 'Backups']
+	];
+
+	me.callParent();
+    }
+});

Modified: pve-manager/pve2/www/manager/qemu/HardwareView.js
===================================================================
--- pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-07-20 10:28:38 UTC (rev 6332)
+++ pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-07-20 10:40:23 UTC (rev 6333)
@@ -296,13 +296,12 @@
 	    rows: rows,
 	    sorterFn: sorterFn,
 	    listeners: {
+		show: reload,
 		itemdblclick: run_editor,
 		selectionchange: set_button_status
 	    }
 	});
 
 	me.callParent();
-
-	me.on('show', reload);
     }
 });

Added: pve-manager/pve2/www/manager/storage/DirEdit.js
===================================================================
--- pve-manager/pve2/www/manager/storage/DirEdit.js	                        (rev 0)
+++ pve-manager/pve2/www/manager/storage/DirEdit.js	2011-07-20 10:40:23 UTC (rev 6333)
@@ -0,0 +1,111 @@
+Ext.define('PVE.storage.DirInputPanel', {
+    extend: 'PVE.panel.InputPanel',
+
+    onGetValues: function(values) {
+	var me = this;
+
+	values.type = 'dir';
+
+	if (!me.create) {
+	    delete values.type;
+	    delete values.storage;
+	}
+	
+	return values;
+    },
+
+    initComponent : function() {
+	var me = this;
+
+
+	me.column1 = [
+	    {
+		xtype: me.create ? 'textfield' : 'displayfield',
+		name: 'storage',
+		height: 22, // hack: set same height as text fields
+		value: me.storageId || '',
+		fieldLabel: 'Storage name',
+		allowBlank: false
+	    },
+	    {
+		xtype: me.create ? 'textfield' : 'displayfield',
+		height: 22, // hack: set same height as text fields
+		name: 'path',
+		value: '',
+		fieldLabel: 'Directory',
+		allowBlank: false
+	    },
+	    {
+		xtype: 'pveContentTypeSelector',
+		name: 'content',
+		value: 'images',
+		multiSelect: me.storageId === 'local',
+		fieldLabel: 'Content',
+		allowBlank: false
+	    }
+	];
+
+	me.column2 = [
+	    {
+		xtype: 'pvecheckbox',
+		name: 'disable',
+		uncheckedValue: 0,
+		fieldLabel: 'Disable'
+	    },
+	    {
+		xtype: 'pvecheckbox',
+		name: 'shared',
+		uncheckedValue: 0,
+		fieldLabel: 'Shared'
+	    }
+	];
+
+	me.callParent();
+    }
+});
+
+Ext.define('PVE.storage.DirEdit', {
+    extend: 'PVE.window.Edit',
+
+    initComponent : function() {
+	var me = this;
+ 
+	me.create = !me.storageId;
+
+	if (me.create) {
+            me.url = '/api2/extjs/storage';
+            me.method = 'POST';
+        } else {
+            me.url = '/api2/extjs/storage/' + me.storageId;
+            me.method = 'PUT';
+        }
+
+	var ipanel = Ext.create('PVE.storage.DirInputPanel', {
+	    create: me.create,
+	    storageId: me.storageId
+	});
+	
+	Ext.apply(me, {
+	    title: me.create ? "Create directory storage" :
+		"Edit directory storage '" + me.storageId + "'",
+	    items: [ ipanel ]
+	});
+
+	me.callParent();
+
+	if (!me.create) {
+	    me.load({
+		success:  function(response, options) {
+		    var values = response.result.data;
+		    var ctypes = values.content || '';
+
+		    if (values.storage === 'local') {
+			values.content = ctypes.split(',');
+		    }
+
+		    ipanel.setValues(values);
+		}
+	    });
+	}
+    }
+});



More information about the pve-devel mailing list