--- /dev/null
+/*!
+ * Ext JS Library 3.3.0
+ * Copyright(c) 2006-2010 Ext JS, Inc.
+ * licensing@extjs.com
+ * http://www.extjs.com/license
+ */
+/**\r
+ * @class pivot.ConfigPanel\r
+ * @extends Ext.Panel\r
+ * A configuration panel used for modifying the properties of a PivotGrid.\r
+ */\r
+pivot.ConfigPanel = Ext.extend(Ext.Panel, {\r
+ title: 'Configure',\r
+ layout: {\r
+ type: 'vbox',\r
+ align: 'stretch'\r
+ },\r
+ /**\r
+ * @cfg {Ext.data.Record} record The Ext.data.Record to extract the field list from. Required\r
+ */\r
+\r
+ initComponent: function() {\r
+ var fields = this.getRecordFields();\r
+\r
+ /**\r
+ * @property form\r
+ * @type Ext.form.FormPanel\r
+ * Used to set the measure and aggregation function\r
+ */\r
+ this.form = new Ext.Container({\r
+ layout: 'form',\r
+ style: 'padding: 7px',\r
+ items: [{\r
+ xtype: 'combo',\r
+ mode: 'local',\r
+ triggerAction: 'all',\r
+ forceSelection: true,\r
+ editable: false,\r
+ anchor: "0",\r
+ fieldLabel: 'Measure',\r
+ ref: '/measure',\r
+ name: 'measure',\r
+ displayField: 'name',\r
+ valueField: 'name',\r
+ value: this.measure || this.measures[0],\r
+ store: this.getMeasureStore()\r
+ }, {\r xtype: 'combo',\r
+ mode: 'local',\r
+ triggerAction: 'all',\r forceSelection: true,\r editable: false,\r anchor: "0",\r fieldLabel: 'Aggregator',\r ref: '/aggregator',\r
+ name: 'aggregator',\r
+ displayField: 'name',\r valueField: 'value',\r value: this.aggregator,\r
+ store: new Ext.data.JsonStore({\r
+ fields : ['name', 'value'],\r
+ data : [\r
+ {name : 'Sum', value: 'sum'},\r
+ {name : 'Count', value: 'count'},\r
+ {name : 'Min', value: 'min'},\r
+ {name : 'Max', value: 'max'},\r
+ {name : 'Average', value: 'avg'}\r
+ ]\r
+ })\r
+ }]\r
+ });\r
+\r
+ /**\r
+ * @property leftAxisGrid\r
+ * @type pivot.AxisGrid\r
+ */\r
+ this.leftAxisGrid = new pivot.AxisGrid({\r
+ title : 'Left Axis',\r
+ fields: fields,\r
+ dimensionData: this.leftAxisDimensions || [],\r
+ hasWidthField: true\r
+ });\r
+\r
+ /**\r
+ * @property topAxisGrid\r
+ * @type pivot.AxisGrid\r
+ */\r
+ this.topAxisGrid = new pivot.AxisGrid({\r
+ title : 'Top Axis',\r
+ fields: fields,\r
+ dimensionData: this.topAxisDimensions || []\r
+ });\r
+\r
+ Ext.applyIf(this, {\r
+ items: [\r
+ this.form,\r
+ this.topAxisGrid,\r
+ this.leftAxisGrid\r
+ ],\r
+ fbar: {\r
+ buttonAlign: 'left',\r
+ items: [{\r
+ icon : '../shared/icons/fam/accept.png',\r
+ text : 'Update',\r
+ scope : this,\r
+ handler: this.updateGrid\r
+ }]\r
+ }\r
+ });\r
+ \r
+ pivot.ConfigPanel.superclass.initComponent.apply(this, arguments);\r
+ },\r
+\r
+ /**\r
+ * @private\r
+ * Retrieves the configured axis dimensions for the top and left grids and updates the PivotGrid accordingly\r
+ */\r
+ updateGrid: function() {\r
+ var leftDimensions = [],\r
+ topDimensions = [],\r
+ leftGridItems = this.leftAxisGrid.store.data.items,\r
+ topGridItems = this.topAxisGrid.store.data.items,\r
+ i;\r
+\r
+ for (i = 0; i < leftGridItems.length; i++) {\r
+ leftDimensions.push({\r
+ dataIndex: leftGridItems[i].get('field'),\r
+ direction: leftGridItems[i].get('direction'),\r
+ width : leftGridItems[i].get('width')\r
+ });\r
+ }\r
+\r
+ for (i = 0; i < topGridItems.length; i++) {\r
+ topDimensions.push({\r
+ dataIndex: topGridItems[i].get('field'),\r
+ direction: topGridItems[i].get('direction')\r
+ });\r
+ }\r
+\r
+ this.fireEvent('update', {\r
+ leftDimensions: leftDimensions,\r
+ topDimensions : topDimensions,\r
+ aggregator : this.aggregator.getValue(),\r
+ measure : this.measure.getValue()\r
+ });\r
+ },\r
+\r
+ /**\r
+ * Extracts the field names from the configured record\r
+ * @return {Array} The set of Record fields\r
+ */\r
+ getRecordFields: function() {\r
+ return Ext.pluck(this.record.prototype.fields.items, 'name');\r
+ },\r
+\r
+ /**\r
+ * @private\r
+ * @return {Ext.data.Store} The store\r
+ */\r
+ getMeasureStore: function() {\r
+ /**\r
+ * @property measureStore\r
+ * @type Ext.data.JsonStore\r
+ * The store bound to the combo for selecting the field\r
+ */\r
+ if (this.measureStore == undefined) {\r
+ var fields = [],\r
+ measures = this.measures,\r
+ length = measures.length,\r
+ i;\r
+\r
+ for (i = 0; i < length; i++) {\r
+ fields[i] = [measures[i]];\r
+ }\r
+\r
+ this.measureStore = new Ext.data.ArrayStore({\r
+ fields: ['name'],\r
+ data : fields\r
+ });\r
+ }\r
+\r
+ return this.measureStore; \r
+ }\r
+});\r
+\r
+Ext.reg('pivotconfig', pivot.ConfigPanel);
\ No newline at end of file