]> git.proxmox.com Git - extjs.git/blame - extjs/build/examples/kitchensink/classic/samples/view/charts/column/RendererController.js
add extjs 6.0.1 sources
[extjs.git] / extjs / build / examples / kitchensink / classic / samples / view / charts / column / RendererController.js
CommitLineData
6527f429
DM
1Ext.define('KitchenSink.view.charts.column.RendererController', {\r
2 extend: 'Ext.app.ViewController',\r
3 alias: 'controller.column-renderer',\r
4\r
5 onRefresh: function () {\r
6 var chart = this.lookupReference('chart'),\r
7 store = chart.getStore();\r
8\r
9 store.setData(store.generateData(7));\r
10 },\r
11\r
12 onG1SeriesRender: function (sprite, config, rendererData, index) {\r
13 var store = rendererData.store,\r
14 storeItems = store.getData().items,\r
15 record = storeItems[index],\r
16 last = storeItems.length - 1,\r
17 surface = sprite.getSurface(),\r
18 isRtl = surface.getInherited().rtl,\r
19 changes = {},\r
20 lineSprites, firstColumnConfig, firstData, lastData, growth, string;\r
21 if (!record) {\r
22 return;\r
23 }\r
24 // Make the first and last columns larger and painted blue.\r
25 if (index == 0 || index == last) {\r
26 changes.fillStyle = 'powderblue';\r
27 changes.x = config.x - config.width * 0.4;\r
28 changes.y = config.y;\r
29 changes.width = config.width * 1.8;\r
30 changes.lineWidth = 4;\r
31 // Draw a line between the first and last columns\r
32 lineSprites = surface.myLineSprites;\r
33 if (!lineSprites) {\r
34 lineSprites = surface.myLineSprites = [];\r
35 lineSprites[0] = surface.add({type:'path'});\r
36 lineSprites[1] = surface.add({type:'text'});\r
37 }\r
38 if (index == 0) {\r
39 surface.myFirstColumnConfig = Ext.clone(changes);\r
40 } else if (index == last) {\r
41 firstData = storeItems[0].data['g1'];\r
42 lastData = storeItems[last].data['g1'];\r
43\r
44 firstColumnConfig = surface.myFirstColumnConfig;\r
45 var x1 = firstColumnConfig.x + firstColumnConfig.width,\r
46 y1 = firstColumnConfig.y,\r
47 x2 = changes.x,\r
48 y2 = changes.y;\r
49\r
50 growth = Math.round(100 * (lastData - firstData) / (firstData || 1));\r
51 lineSprites[0].setAttributes({\r
52 lineWidth: 1,\r
53 strokeStyle: growth > 0 ? '#61C102' : '#FF4D35',\r
54 zIndex: 10000,\r
55 opacity: 0.7,\r
56 path: "M" + x2 + " " + y2 + " L" + x1 + " " + y1 + " L" + x2 + " " + y1 + (lastData < firstData ? " L" : " M") + x2 + " " + y2 + " Z"\r
57 });\r
58 string = (growth > 0 ? "+ " : "- ") + Math.abs(growth) + " %";\r
59 lineSprites[1].setAttributes({\r
60 text: string,\r
61 x: changes.x + (isRtl ? 12 : -12),\r
62 y: firstColumnConfig.y + (changes.y - firstColumnConfig.y)/2 + 10,\r
63 fillStyle: growth > 0 ? '#61C102' : '#FF4D35',\r
64 fontSize: 20,\r
65 zIndex: 10000,\r
66 opacity: 0.6,\r
67 scalingY: -1,\r
68 textAlign: 'center',\r
69 rotate: -90\r
70 });\r
71 }\r
72 } else {\r
73 changes.fillStyle = 'lightgray';\r
74 changes.lineWidth = 2;\r
75 }\r
76 return changes;\r
77 },\r
78\r
79 onG2SeriesRender: function (sprite, config, rendererData, index) {\r
80 var store = rendererData.store,\r
81 storeItems = store.getData().items,\r
82 last = storeItems.length - 1,\r
83 record = storeItems[index],\r
84 diff = record && Math.round(record.data['g2'] - record.data['g1']),\r
85 changes = {},\r
86 surface = sprite.getSurface(),\r
87 isRtl = surface.getInherited().rtl,\r
88 textSprites, textSprite, rectSprite;\r
89 if (!record) {\r
90 return;\r
91 }\r
92 // This renderer function draws a red label if series #2 is greater than series #1.\r
93 // The label displays the difference between the values of series #1 and series #2.\r
94 //\r
95 // Note: The two renderer functions in this test case cannot be consolidated. The red labels\r
96 // are rendered here because they are positioned relatively to the series #2 columns.\r
97 if (diff > 0) {\r
98 changes.strokeStyle = 'tomato';\r
99 changes.fillStyle = 'mistyrose';\r
100 changes.opacity = 1.0;\r
101\r
102 textSprites = surface.myTextSprites;\r
103 if (!textSprites) {\r
104 textSprites = surface.myTextSprites = [];\r
105 }\r
106 textSprite = textSprites[index];\r
107 if (!textSprite) {\r
108 textSprite = textSprites[index] = surface.add({type:'text'});\r
109 rectSprite = textSprite.rectSprite = surface.add({type:'rect'});\r
110 } else {\r
111 rectSprite = textSprite.rectSprite;\r
112 textSprite.show();\r
113 rectSprite.show();\r
114 }\r
115\r
116 rectSprite.setAttributes({\r
117 x: config.x + (index == last ? -17 : (isRtl ? -50 : 16)),\r
118 y: config.y - 36,\r
119 width: 30 + (diff >= 10 ? (diff >= 100 ? (diff >= 1000 ? 18 : 12) : 6) : 0),\r
120 height: 18,\r
121 stroke: 'tomato',\r
122 fill: 'mistyrose',\r
123 lineWidth: 1,\r
124 radius: 4,\r
125 zIndex: 10000\r
126 });\r
127\r
128 textSprite.setAttributes({\r
129 text: "+ " + diff,\r
130 x: config.x + (index == last ? -11 : (isRtl ? -46 : 20)),\r
131 y: config.y - 23,\r
132 fill: 'red',\r
133 fontSize: 12,\r
134 zIndex: 10001,\r
135 scalingY: -1\r
136 });\r
137 } else {\r
138 changes.strokeStyle = 'dodgerblue';\r
139 changes.fillStyle = 'palegreen';\r
140 changes.opacity = 0.6;\r
141\r
142 textSprites = surface.myTextSprites;\r
143 if (textSprites) {\r
144 textSprite = textSprites[index];\r
145 if (textSprite) {\r
146 textSprite.rectSprite.hide();\r
147 textSprite.hide();\r
148 }\r
149 }\r
150 }\r
151 return changes;\r
152 },\r
153\r
154 onAfterRender: function () {\r
155 this.onRefresh();\r
156 }\r
157\r
158});