equal
deleted
inserted
replaced
1 "{ Package: 'stx:goodies/libcairo' }" |
1 "{ Package: 'stx:goodies/libcairo' }" |
2 |
2 |
3 "{ NameSpace: Cairo }" |
3 "{ NameSpace: Cairo }" |
4 |
4 |
5 ApplicationModel subclass:#AbstractViewer |
5 ApplicationModel subclass:#AbstractViewer |
6 instanceVariableNames:'workspace exampleCodeHolder exampleMethodHolder' |
6 instanceVariableNames:'workspace exampleCodeHolder exampleMethodHolder zoomHolder' |
7 classVariableNames:'' |
7 classVariableNames:'' |
8 poolDictionaries:'' |
8 poolDictionaries:'' |
9 category:'Cairo-Examples' |
9 category:'Cairo-Examples' |
10 ! |
10 ! |
11 |
11 |
120 "Do not manually edit this!! If it is corrupted, |
120 "Do not manually edit this!! If it is corrupted, |
121 the MenuEditor may not be able to read the specification." |
121 the MenuEditor may not be able to read the specification." |
122 |
122 |
123 |
123 |
124 " |
124 " |
125 MenuEditor new openOnClass:Cairo::Examples andSelector:#windowMenu |
125 MenuEditor new openOnClass:Cairo::AbstractViewer andSelector:#windowMenu |
126 (Menu new fromLiteralArrayEncoding:(Cairo::Examples windowMenu)) startUp |
126 (Menu new fromLiteralArrayEncoding:(Cairo::AbstractViewer windowMenu)) startUp |
127 " |
127 " |
128 |
128 |
129 <resource: #menu> |
129 <resource: #menu> |
130 |
130 |
131 ^ |
131 ^ |
151 (Menu |
151 (Menu |
152 ( |
152 ( |
153 (MenuItem |
153 (MenuItem |
154 label: 'Cut' |
154 label: 'Cut' |
155 itemValue: cutSelection |
155 itemValue: cutSelection |
|
156 nameKey: Cut |
|
157 shortcutKey: Cut |
156 ) |
158 ) |
157 (MenuItem |
159 (MenuItem |
158 label: 'Copy' |
160 label: 'Copy' |
159 itemValue: copySelection |
161 itemValue: copySelection |
|
162 nameKey: Copy |
|
163 shortcutKey: Copy |
160 ) |
164 ) |
161 (MenuItem |
165 (MenuItem |
162 label: 'Paste' |
166 label: 'Paste' |
163 itemValue: paste |
167 itemValue: paste |
|
168 nameKey: Paste |
|
169 shortcutKey: Paste |
|
170 ) |
|
171 (MenuItem |
|
172 label: '-' |
|
173 ) |
|
174 (MenuItem |
|
175 label: 'Accept' |
|
176 nameKey: Accept |
|
177 shortcutKey: Accept |
|
178 ) |
|
179 ) |
|
180 nil |
|
181 nil |
|
182 ) |
|
183 ) |
|
184 (MenuItem |
|
185 label: 'View' |
|
186 submenu: |
|
187 (Menu |
|
188 ( |
|
189 (MenuItem |
|
190 label: 'Refresh' |
|
191 itemValue: menuViewRefresh |
164 ) |
192 ) |
165 ) |
193 ) |
166 nil |
194 nil |
167 nil |
195 nil |
168 ) |
196 ) |
169 ) |
197 ) |
170 (MenuItem |
198 (MenuItem |
171 label: 'Examples' |
199 label: 'Examples' |
172 submenuChannel: menuExamples |
200 submenuChannel: menuExamples |
|
201 ) |
|
202 (MenuItem |
|
203 label: 'Zoom' |
|
204 submenu: |
|
205 (Menu |
|
206 ( |
|
207 (MenuItem |
|
208 label: 'Larger' |
|
209 itemValue: menuZoomLarger |
|
210 shortcutKey: #'Ctrl=' |
|
211 ) |
|
212 (MenuItem |
|
213 label: 'Smaller' |
|
214 itemValue: menuZoomSmaller |
|
215 shortcutKey: #'Ctrl-' |
|
216 ) |
|
217 (MenuItem |
|
218 label: '-' |
|
219 ) |
|
220 (MenuItem |
|
221 label: '100%' |
|
222 itemValue: menuZoomSet: |
|
223 argument: 100 |
|
224 ) |
|
225 (MenuItem |
|
226 label: '200%' |
|
227 itemValue: menuZoomSet: |
|
228 argument: 200 |
|
229 ) |
|
230 (MenuItem |
|
231 label: '400%' |
|
232 itemValue: menuZoomSet: |
|
233 argument: 400 |
|
234 ) |
|
235 ) |
|
236 nil |
|
237 nil |
|
238 ) |
173 ) |
239 ) |
174 ) |
240 ) |
175 nil |
241 nil |
176 nil |
242 nil |
177 ) |
243 ) |
178 |
244 |
179 "Modified: / 26-02-2016 / 22:39:15 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
245 "Modified: / 28-02-2016 / 16:22:49 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
180 ! ! |
246 ! ! |
181 |
247 |
182 !AbstractViewer methodsFor:'aspects'! |
248 !AbstractViewer methodsFor:'aspects'! |
183 |
249 |
184 exampleCodeHolder |
250 exampleCodeHolder |
235 ]. |
301 ]. |
236 newValue := exampleMethodHolder value. |
302 newValue := exampleMethodHolder value. |
237 oldValue ~~ newValue ifTrue:[ |
303 oldValue ~~ newValue ifTrue:[ |
238 self update:#value with:newValue from:exampleMethodHolder. |
304 self update:#value with:newValue from:exampleMethodHolder. |
239 ]. |
305 ]. |
|
306 ! |
|
307 |
|
308 zoomHolder |
|
309 "return/create the 'zoomHolder' value holder (automatically generated)" |
|
310 |
|
311 zoomHolder isNil ifTrue:[ |
|
312 zoomHolder := ValueHolder with: 100. |
|
313 zoomHolder addDependent:self. |
|
314 ]. |
|
315 ^ zoomHolder |
|
316 |
|
317 "Modified: / 28-02-2016 / 16:12:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
318 ! |
|
319 |
|
320 zoomHolder:something |
|
321 "set the 'zoomHolder' value holder (automatically generated)" |
|
322 |
|
323 |oldValue newValue| |
|
324 |
|
325 zoomHolder notNil ifTrue:[ |
|
326 oldValue := zoomHolder value. |
|
327 zoomHolder removeDependent:self. |
|
328 ]. |
|
329 zoomHolder := something. |
|
330 zoomHolder notNil ifTrue:[ |
|
331 zoomHolder addDependent:self. |
|
332 ]. |
|
333 newValue := zoomHolder value. |
|
334 oldValue ~~ newValue ifTrue:[ |
|
335 self update:#value with:newValue from:zoomHolder. |
|
336 ]. |
240 ! ! |
337 ! ! |
241 |
338 |
242 !AbstractViewer methodsFor:'change & update'! |
339 !AbstractViewer methodsFor:'change & update'! |
243 |
340 |
244 update:something with:aParameter from:changedObject |
341 update:something with:aParameter from:changedObject |
252 ]. |
349 ]. |
253 changedObject == exampleMethodHolder ifTrue:[ |
350 changedObject == exampleMethodHolder ifTrue:[ |
254 self updateAfterExampleMethodChanged. |
351 self updateAfterExampleMethodChanged. |
255 ^ self. |
352 ^ self. |
256 ]. |
353 ]. |
|
354 changedObject == zoomHolder ifTrue:[ |
|
355 self updateAfterZoomChanged. |
|
356 ^ self. |
|
357 ]. |
|
358 |
257 super update:something with:aParameter from:changedObject |
359 super update:something with:aParameter from:changedObject |
258 |
360 |
259 "Modified: / 26-02-2016 / 21:32:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
361 "Modified: / 28-02-2016 / 16:12:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
260 ! |
362 ! |
261 |
363 |
262 updateAfterExampleCodeChanged |
364 updateAfterExampleCodeChanged |
263 | code method | |
365 | code method | |
264 |
366 |
277 |
379 |
278 updateAfterExampleMethodChanged |
380 updateAfterExampleMethodChanged |
279 self subclassResponsibility |
381 self subclassResponsibility |
280 |
382 |
281 "Created: / 26-02-2016 / 21:32:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
383 "Created: / 26-02-2016 / 21:32:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
384 ! |
|
385 |
|
386 updateAfterZoomChanged |
|
387 self redraw |
|
388 |
|
389 "Created: / 28-02-2016 / 16:12:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
282 ! ! |
390 ! ! |
283 |
391 |
284 !AbstractViewer methodsFor:'hooks'! |
392 !AbstractViewer methodsFor:'hooks'! |
285 |
393 |
286 postBuildWorkspace:aCodeView2 |
394 postBuildWorkspace:aCodeView2 |
350 source := source copyFrom: 2. |
458 source := source copyFrom: 2. |
351 source := source asString. |
459 source := source asString. |
352 self menuExampleShow: source. |
460 self menuExampleShow: source. |
353 |
461 |
354 "Created: / 26-02-2016 / 22:28:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
462 "Created: / 26-02-2016 / 22:28:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
463 ! |
|
464 |
|
465 menuViewRefresh |
|
466 self redraw. |
|
467 |
|
468 "Created: / 28-02-2016 / 16:10:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
469 ! |
|
470 |
|
471 menuZoomLarger |
|
472 self zoomHolder value: self zoomHolder value + 10. |
|
473 |
|
474 "Created: / 28-02-2016 / 16:13:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
475 ! |
|
476 |
|
477 menuZoomSet: aNumber |
|
478 self zoomHolder value: aNumber |
|
479 |
|
480 "Created: / 28-02-2016 / 16:13:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
481 ! |
|
482 |
|
483 menuZoomSmaller |
|
484 self zoomHolder value: self zoomHolder value - 10. |
|
485 |
|
486 "Created: / 28-02-2016 / 16:13:35 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
355 ! ! |
487 ! ! |
356 |
488 |
357 !AbstractViewer methodsFor:'private'! |
489 !AbstractViewer methodsFor:'private'! |
|
490 |
|
491 redraw |
|
492 self subclassResponsibility |
|
493 |
|
494 "Created: / 28-02-2016 / 16:21:20 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
495 ! |
358 |
496 |
359 redraw:view using: method |
497 redraw:view using: method |
360 self subclassResponsibility |
498 self subclassResponsibility |
361 |
499 |
362 "Created: / 26-02-2016 / 21:40:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
500 "Created: / 26-02-2016 / 21:40:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
366 method notNil ifTrue:[ |
504 method notNil ifTrue:[ |
367 method valueWithReceiver:nil arguments:(Array with: gc). |
505 method valueWithReceiver:nil arguments:(Array with: gc). |
368 ] |
506 ] |
369 |
507 |
370 "Created: / 26-02-2016 / 21:47:25 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
508 "Created: / 26-02-2016 / 21:47:25 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
371 ! |
|
372 |
|
373 redraw:arg1 usingMethod:arg2 |
|
374 "raise an error: must be redefined in concrete subclass(es)" |
|
375 |
|
376 ^ self subclassResponsibility |
|
377 ! |
|
378 |
|
379 redrawUsingCode:aString |
|
380 ^ self subclassResponsibility |
|
381 |
|
382 "Modified (comment): / 26-02-2016 / 21:23:35 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
383 ! |
|
384 |
|
385 redrawUsingMethod:aString |
|
386 ^ self subclassResponsibility |
|
387 |
|
388 "Created: / 26-02-2016 / 21:23:44 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
389 ! ! |
509 ! ! |
390 |
510 |
391 !AbstractViewer methodsFor:'private - templates'! |
511 !AbstractViewer methodsFor:'private - templates'! |
392 |
512 |
393 exampleMethodParameterName |
513 exampleMethodParameterName |