]> git.proxmox.com Git - extjs.git/blame - extjs/examples/modern/stockapp/app/view/Preview.js
add extjs 6.0.1 sources
[extjs.git] / extjs / examples / modern / stockapp / app / view / Preview.js
CommitLineData
6527f429
DM
1Ext.define("StockApp.view.Preview", {\r
2 extend: 'Ext.chart.CartesianChart',\r
3 requires: ['StockApp.sprite.RangeMask'],\r
4 xtype: 'preview',\r
5 config: {\r
6 docked: 'bottom',\r
7 insetPadding: 0,\r
8 background: 'white',\r
9 series: [\r
10 {\r
11 store: 'Apple',\r
12 type: 'line',\r
13 xField: 'date',\r
14 yField: 'close',\r
15 style: {\r
16 stroke: 'rgba(237,123,43,0.75)',\r
17 fill: 'rgba(237,123,43,0.1)',\r
18 miterLimit: 1\r
19 }\r
20 },\r
21 {\r
22 store: 'Google',\r
23 type: 'line',\r
24 xField: 'date',\r
25 yField: 'close',\r
26 style: {\r
27 stroke: 'rgba(67,175,174,0.75)',\r
28 fill: 'rgba(67,175,174,0.1)',\r
29 miterLimit: 1\r
30 }\r
31 }\r
32// {\r
33// store: 'Autodesk',\r
34// type: 'line',\r
35// xField: 'date',\r
36// yField: 'close',\r
37// style: {\r
38// stroke: 'rgba(221,31,74,0.75)',\r
39// fill: 'rgba(221,31,74,0.1)',\r
40// miterLimit: 1\r
41// }\r
42// },\r
43// {\r
44// store: 'IBM',\r
45// type: 'line',\r
46// xField: 'date',\r
47// yField: 'close',\r
48// style: {\r
49// stroke: 'rgba(255,76,77,0.75)',\r
50// fill: 'rgba(255,76,77,0.1)',\r
51// miterLimit: 1\r
52// }\r
53// },\r
54// {\r
55// store: 'Microsoft',\r
56// type: 'line',\r
57// xField: 'date',\r
58// yField: 'close',\r
59// style: {\r
60// stroke: 'rgba(24,121,34,0.75)',\r
61// fill: 'rgba(24,121,34,0.1)',\r
62// miterLimit: 1\r
63// }\r
64// },\r
65// {\r
66// store: 'Oracle',\r
67// type: 'line',\r
68// xField: 'date',\r
69// yField: 'close',\r
70// style: {\r
71// stroke: 'rgba(254,166,58,0.75)',\r
72// fill: 'rgba(254,166,58,0.1)',\r
73// miterLimit: 1\r
74// }\r
75// }\r
76 ],\r
77 axes: [\r
78 {\r
79 type: 'numeric',\r
80 position: 'left',\r
81 fields: ['close'],\r
82 hidden: true\r
83 },\r
84 {\r
85 type: 'time',\r
86 position: 'bottom',\r
87 fields: ['date'],\r
88 style: {\r
89 axisLine: false,\r
90 strokeStyle: '#666',\r
91 estStepSize: 150\r
92 },\r
93 dateFormat: 'Y',\r
94 segmenter: {\r
95 type: 'time',\r
96 step: {\r
97 unit: 'y',\r
98 step: 1\r
99 }\r
100 },\r
101 label: {\r
102 fontSize: 10,\r
103 fillStyle: '#666'\r
104 }\r
105 }\r
106 ],\r
107 sprites: [\r
108 {\r
109 type: 'rangemask',\r
110 visibleRange: [0.5, 0.9],\r
111 fill: 'rgba(0,0,0,0.15)',\r
112 opacity: 1\r
113 }\r
114 ]\r
115 },\r
116\r
117\r
118 initialize: function () {\r
119 this.callParent();\r
120 this.getSurface('chart').element.setStyle({zIndex: 100});\r
121 this.rangeMask = this.getSurface('chart').getItems()[0];\r
122 this.rangeMask.fx.setCustomDurations({'handlerOpacity': 100});\r
123 this.dragStatus = {};\r
124 this.element.on('touchstart', 'onTouchStart', this);\r
125 this.element.on('touchmove', 'onTouchMove', this);\r
126 this.element.on('touchend', 'onTouchEnd', this);\r
127 },\r
128\r
129 onTouchStart: function (e) {\r
130 var xy = this.element.getXY(),\r
131 axis = this.axis || (this.axis = Ext.ComponentQuery.query('#mainChart axis')[1]),\r
132 width = this.element.getSize().width,\r
133 min = width * this.rangeMask.attr.visibleRange[0],\r
134 max = width * this.rangeMask.attr.visibleRange[1],\r
135 x = e.getX() - xy[0],\r
136 any = false;\r
137\r
138 if (min + 22 < x && x < max - 22 && !this.dragStatus.pan) {\r
139 any = true;\r
140 this.dragStatus.pan = {\r
141 x: x,\r
142 type: 'pan'\r
143 };\r
144 } else if (x - 22 < max && max < x + 22 && !this.dragStatus.right) {\r
145 any = true;\r
146 this.dragStatus.right = {\r
147 x: x,\r
148 type: 'right'\r
149 };\r
150 } else if (x - 22 < min && min < x + 22 && !this.dragStatus.left) {\r
151 any = true;\r
152 this.dragStatus.left = {\r
153 x: x,\r
154 type: 'left'\r
155 };\r
156 }\r
157\r
158 if (any) {\r
159 this.rangeMask.fx.setCustomDurations({'handlerOpacity': 0});\r
160 this.rangeMask.setAttributes({handlerOpacity: 1});\r
161 this.rangeMask.getParent().renderFrame();\r
162 }\r
163 },\r
164\r
165 onTouchMove: function (e) {\r
166 var axis = this.axis,\r
167 width = this.element.getSize().width,\r
168 min = this.rangeMask.attr.visibleRange[0],\r
169 max = this.rangeMask.attr.visibleRange[1],\r
170 gap = 5 / width,\r
171 x = e.getX(),\r
172 dx;\r
173\r
174 if (this.dragStatus.pan) {\r
175 dx = (x - this.dragStatus.pan.x) / width;\r
176 this.dragStatus.pan.x = x;\r
177 min += dx;\r
178 max += dx;\r
179 if (min < 0) {\r
180 max -= min;\r
181 min = 0;\r
182 }\r
183 if (max > 1) {\r
184 min -= max - 1;\r
185 max = 1;\r
186 }\r
187 }\r
188 else if (this.dragStatus.left) {\r
189 dx = (x - this.dragStatus.left.x) / width;\r
190 this.dragStatus.left.x = x;\r
191 min += dx;\r
192 if (min < 0) {\r
193 min = 0;\r
194 }\r
195 if (min > max - gap) {\r
196 min = max - gap;\r
197 }\r
198 } else if (this.dragStatus.right) {\r
199 dx = (x - this.dragStatus.right.x) / width;\r
200 this.dragStatus.right.x = x;\r
201 max += dx;\r
202 if (max > 1) {\r
203 max = 1;\r
204 }\r
205 if (max < min + gap) {\r
206 max = min + gap;\r
207 }\r
208 } else {\r
209 return;\r
210 }\r
211 axis.setVisibleRange([min, max]);\r
212 this.rangeMask.setAttributes({visibleRange: [min, max]});\r
213 this.getSurface('chart').renderFrame();\r
214 Ext.getCmp('mainChart').performLayout();\r
215 },\r
216\r
217 onTouchEnd: function (e) {\r
218 for (var i in {pan: 0, left: 0, right: 0}) {\r
219 if (this.dragStatus[i]) {\r
220 delete this.dragStatus[i];\r
221 }\r
222 }\r
223 if (!this.dragStatus.pan && !this.dragStatus.left && !this.dragStatus.right) {\r
224 this.rangeMask.fx.setCustomDurations({'handlerOpacity': 500});\r
225 this.rangeMask.setAttributes({handlerOpacity: 0});\r
226 }\r
227 },\r
228\r
229 performLayout: function () {\r
230 this.callParent();\r
231 var surface = this.getSurface('chart'),\r
232 size = this.element.getSize();\r
233\r
234 this.rangeMask.setAttributes({\r
235 scalingCenterX: 0,\r
236 scalingCenterY: 0,\r
237 scalingX: size.width,\r
238 scalingY: size.height\r
239 });\r
240 surface.setRect([0, 0, size.width, size.height]);\r
241 surface.renderFrame();\r
242 }\r
243});