RenderersGrid.js (5316B)
1 Ext.define("PartKeepr.Components.Widgets.ColumnConfigurator.RenderersGrid", { 2 extend: "Ext.grid.Panel", 3 4 xtype: 'partkeepr.renderersGrid', 5 6 plugins: { 7 ptype: 'cellediting', 8 clicksToEdit: 1 9 }, 10 11 bbar: [{ 12 itemId: "addRenderer", 13 text: i18n("Add") 14 }, { 15 itemId: "removeRenderer", 16 text: i18n("Remove"), 17 disabled: true, 18 bind: { 19 disabled: '{!renderers.selection}' 20 } 21 }], 22 23 reference: "renderers", 24 25 initComponent: function () 26 { 27 this.rendererStore = Ext.create("Ext.data.Store"); 28 29 this.columns = [{ 30 text: i18n("Renderer"), 31 dataIndex: 'rtype', 32 renderer: function (val, q, rec) 33 { 34 var targetClass = PartKeepr.Components.Grid.Renderers.RendererRegistry.lookupRenderer( 35 rec.get("rtype")); 36 37 if (typeof(targetClass) === "undefined") 38 { 39 return i18n("unknown"); 40 } 41 42 if (targetClass.rendererName) 43 { 44 return targetClass.rendererName; 45 } 46 47 return targetClass.$className; 48 }, 49 editor: { 50 xtype: 'combobox', 51 store: this.rendererStore, 52 displayField: 'rendererName', 53 valueField: 'rendererType', 54 queryMode: 'local', 55 forceSelection: true, 56 editable: false, 57 clicksToEdit: 1, 58 matchFieldWidth: false, 59 listConfig: { 60 itemTpl: [ 61 '<div>{rendererName}: {rendererDescription}</div>' 62 ] 63 } 64 }, 65 flex: 1 66 }, { 67 text: i18n("Description"), 68 renderer: function (val, q, rec) 69 { 70 var targetClass = PartKeepr.Components.Grid.Renderers.RendererRegistry.lookupRenderer( 71 rec.get("rtype")); 72 73 if (typeof(targetClass) === "undefined") 74 { 75 return i18n("unknown"); 76 } 77 78 if (targetClass.rendererDescription) 79 { 80 return targetClass.rendererDescription; 81 } 82 83 return targetClass.$className; 84 }, 85 flex: 2 86 }, { 87 text: i18n("Configuration"), 88 dataIndex: "config", 89 editor: { 90 xtype: 'textarea' 91 } 92 }, { 93 xtype: 'actioncolumn', 94 items: [ 95 { 96 iconCls: 'fugue-icon pencil', 97 tooltip: i18n("Configure"), 98 handler: function (view, rowIndex, colIndex, item, e, record) 99 { 100 var config = record.get("config"); 101 102 if (typeof config === "undefined") 103 { 104 config = {}; 105 record.set("config", config); 106 } 107 108 this.configure(record); 109 }, 110 scope: this 111 } 112 ] 113 }]; 114 115 this.callParent(arguments); 116 117 this.down("#addRenderer").on("click", this.addRenderer, this); 118 this.down("#removeRenderer").on("click", this.removeRenderer, this); 119 }, 120 configure: function (record) 121 { 122 var i = Ext.create("PartKeepr.Components.Widgets.ColumnConfigurator.RendererConfigurationForm", { 123 renderer: record.get("rtype"), 124 rendererConfiguration: record.get("config") 125 }); 126 127 var j = Ext.create("Ext.window.Window", { 128 layout: 'fit', 129 minWidth: 500, 130 minHeight: 200, 131 title: i18n("Renderer Configuration"), 132 modal: true, 133 items: [i] 134 }); 135 136 i.down("#apply").on("click", function () 137 { 138 record.set("config", Ext.encode(i.getForm().getValues())); 139 j.destroy(); 140 141 }); 142 143 i.down("#cancel").on("click", function () 144 { 145 j.destroy(); 146 }); 147 148 j.show(); 149 }, 150 setSourceModel: function (sourceModel) 151 { 152 this.sourceModel = sourceModel; 153 154 var rendererClasses = PartKeepr.Components.Grid.Renderers.RendererRegistry.getRenderersForEntity( 155 this.sourceModel.$className); 156 157 for (var i = 0; i < rendererClasses.length; i++) 158 { 159 this.rendererStore.add({ 160 rendererClass: rendererClasses[i], 161 rendererName: Ext.ClassManager.get(rendererClasses[i]).rendererName, 162 rendererDescription: Ext.ClassManager.get(rendererClasses[i]).rendererDescription, 163 rendererType: PartKeepr.Components.Grid.Renderers.RendererRegistry.getRType(rendererClasses[i]) 164 }); 165 } 166 }, 167 addRenderer: function () 168 { 169 this.getStore().add({config: "null"}); 170 }, 171 removeRenderer: function () 172 { 173 var selection = this.getSelection(); 174 175 if (selection.length !== 1) 176 { 177 return; 178 } 179 180 this.getStore().remove(selection[0]); 181 } 182 });