Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / examples / grid / grid-plugins.js
1 Ext.Loader.setConfig({
2     enabled: true
3 });
4 Ext.Loader.setPath('Ext.ux', '../ux');
5
6 Ext.require([
7     'Ext.grid.*',
8     'Ext.data.*',
9     'Ext.ux.RowExpander',
10     'Ext.selection.CheckboxModel'
11 ]);
12
13 Ext.onReady(function(){
14     Ext.define('Company', {
15         extend: 'Ext.data.Model',
16         fields: [
17             {name: 'company'},
18             {name: 'price', type: 'float'},
19             {name: 'change', type: 'float'},
20             {name: 'pctChange', type: 'float'},
21             {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'},
22             {name: 'industry'},
23             {name: 'desc'}
24          ]
25     });
26     // Array data for the grids
27     Ext.grid.dummyData = [
28         ['3m Co',71.72,0.02,0.03,'9/1 12:00am', 'Manufacturing'],
29         ['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am', 'Manufacturing'],
30         ['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am', 'Manufacturing'],
31         ['American Express Company',52.55,0.01,0.02,'9/1 12:00am', 'Finance'],
32         ['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am', 'Services'],
33         ['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am', 'Services'],
34         ['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am', 'Manufacturing'],
35         ['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am', 'Services'],
36         ['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am', 'Finance'],
37         ['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am', 'Manufacturing'],
38         ['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am', 'Manufacturing'],
39         ['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am', 'Manufacturing'],
40         ['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am', 'Automotive'],
41         ['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am', 'Computer'],
42         ['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am', 'Manufacturing'],
43         ['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am', 'Computer'],
44         ['International Business Machines',81.41,0.44,0.54,'9/1 12:00am', 'Computer'],
45         ['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am', 'Medical'],
46         ['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am', 'Finance'],
47         ['McDonald\'s Corporation',36.76,0.86,2.40,'9/1 12:00am', 'Food'],
48         ['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am', 'Medical'],
49         ['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am', 'Computer'],
50         ['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am', 'Services', 'Medical'],
51         ['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am', 'Food'],
52         ['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am', 'Retail'],
53         ['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am', 'Manufacturing'],
54         ['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am', 'Computer'],
55         ['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am', 'Services'],
56         ['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am', 'Retail'],
57         ['Walt Disney Company (The) (Holding Company)',29.89,0.24,0.81,'9/1 12:00am', 'Services']
58     ];
59
60     // add in some dummy descriptions
61     for(var i = 0; i < Ext.grid.dummyData.length; i++){
62         Ext.grid.dummyData[i].push('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed metus nibh, sodales a, porta at, vulputate eget, dui. Pellentesque ut nisl. ');
63     }
64
65
66     Ext.QuickTips.init();
67
68     var getLocalStore = function() {
69         return Ext.create('Ext.data.ArrayStore', {
70             model: 'Company',
71             data: Ext.grid.dummyData
72         });
73     };
74
75
76     ////////////////////////////////////////////////////////////////////////////////////////
77     // Grid 1
78     ////////////////////////////////////////////////////////////////////////////////////////
79     // row expander
80
81     var grid1 = Ext.create('Ext.grid.Panel', {
82         store: getLocalStore(),
83         columns: [
84             {text: "Company", flex: 1, dataIndex: 'company'},
85             {text: "Price", renderer: Ext.util.Format.usMoney, dataIndex: 'price'},
86             {text: "Change", dataIndex: 'change'},
87             {text: "% Change", dataIndex: 'pctChange'},
88             {text: "Last Updated", renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
89         ],
90         width: 600,
91         height: 300,
92         plugins: [{
93             ptype: 'rowexpander',
94             rowBodyTpl : [
95                 '<p><b>Company:</b> {company}</p><br>',
96                 '<p><b>Summary:</b> {desc}</p>'
97             ]
98         }],
99         collapsible: true,
100         animCollapse: false,
101         title: 'Expander Rows in a Collapsible Grid',
102         iconCls: 'icon-grid',
103         renderTo: Ext.getBody()
104     });
105
106     ////////////////////////////////////////////////////////////////////////////////////////
107     // Grid 2
108     ////////////////////////////////////////////////////////////////////////////////////////
109     var sm = Ext.create('Ext.selection.CheckboxModel');
110     var grid2 = Ext.create('Ext.grid.Panel', {
111         store: getLocalStore(),
112         selModel: sm,
113         columns: [
114             {text: "Company", width: 200, dataIndex: 'company'},
115             {text: "Price", renderer: Ext.util.Format.usMoney, dataIndex: 'price'},
116             {text: "Change", dataIndex: 'change'},
117             {text: "% Change", dataIndex: 'pctChange'},
118             {text: "Last Updated", width: 135, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
119         ],
120         columnLines: true,
121         width: 600,
122         height: 300,
123         frame: true,
124         title: 'Framed with Checkbox Selection and Horizontal Scrolling',
125         iconCls: 'icon-grid',
126         renderTo: Ext.getBody()
127     });
128
129     ////////////////////////////////////////////////////////////////////////////////////////
130     // Grid 3
131     ////////////////////////////////////////////////////////////////////////////////////////
132     var grid3 = Ext.create('Ext.grid.Panel', {
133         store: getLocalStore(),
134         columns: [
135             Ext.create('Ext.grid.RowNumberer'),
136             {text: "Company", flex: 1, sortable: true, dataIndex: 'company'},
137             {text: "Price", width: 120, sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'},
138             {text: "Change", width: 120, sortable: true, dataIndex: 'change'},
139             {text: "% Change", width: 120, sortable: true, dataIndex: 'pctChange'},
140             {text: "Last Updated", width: 120, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
141         ],
142         columnLines: true,
143         width:600,
144         height:300,
145         title:'Grid with Numbered Rows',
146         iconCls:'icon-grid',
147         renderTo: Ext.getBody()
148     });
149
150     ////////////////////////////////////////////////////////////////////////////////////////
151     // Grid 4
152     ////////////////////////////////////////////////////////////////////////////////////////
153     var selModel = Ext.create('Ext.selection.CheckboxModel', {
154         listeners: {
155             selectionchange: function(sm, selections) {
156                 grid4.down('#removeButton').setDisabled(selections.length == 0);
157             }
158         }
159     });
160     
161     var grid4 = Ext.create('Ext.grid.Panel', {
162         id:'button-grid',
163         store: getLocalStore(),
164         columns: [
165             {text: "Company", flex: 1, sortable: true, dataIndex: 'company'},
166             {text: "Price", width: 120, sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'},
167             {text: "Change", width: 120, sortable: true, dataIndex: 'change'},
168             {text: "% Change", width: 120, sortable: true, dataIndex: 'pctChange'},
169             {text: "Last Updated", width: 120, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
170         ],
171         columnLines: true,
172         selModel: selModel,
173
174         // inline buttons
175         dockedItems: [{
176             xtype: 'toolbar',
177             dock: 'bottom',
178             ui: 'footer',
179             layout: {
180                 pack: 'center'
181             },
182             items: [{
183                 minWidth: 80,
184                 text: 'Save'
185             },{
186                 minWidth: 80,
187                 text: 'Cancel'
188             }]
189         }, {
190             xtype: 'toolbar',
191             items: [{
192                 text:'Add Something',
193                 tooltip:'Add a new row',
194                 iconCls:'add'
195             }, '-', {
196                 text:'Options',
197                 tooltip:'Set options',
198                 iconCls:'option'
199             },'-',{
200                 itemId: 'removeButton',
201                 text:'Remove Something',
202                 tooltip:'Remove the selected item',
203                 iconCls:'remove',
204                 disabled: true
205             }]
206         }],
207
208         width: 600,
209         height: 300,
210         frame: true,
211         title: 'Support for standard Panel features such as framing, buttons and toolbars',
212         iconCls: 'icon-grid',
213         renderTo: Ext.getBody()
214     });
215 });