author | Claus Gittinger <cg@exept.de> |
Thu, 10 Feb 2011 22:53:19 +0100 | |
changeset 9760 | 095b379e7a43 |
parent 8904 | f051532eb303 |
child 9996 | aa43dfcaa63a |
permissions | -rw-r--r-- |
8779 | 1 |
"{ Package: 'cvut:stx/goodies/libtool3' }" |
2 |
||
3 |
"{ NameSpace: Tools }" |
|
4 |
||
5 |
ApplicationModel subclass:#Inspector2 |
|
6 |
instanceVariableNames:'tabViewAspect navigationHistoryHolder navigationStateAspect' |
|
7 |
classVariableNames:'' |
|
8 |
poolDictionaries:'' |
|
9 |
category:'Interface-Inspector 2' |
|
10 |
! |
|
11 |
||
12 |
Object subclass:#NavigationState |
|
13 |
instanceVariableNames:'theObject index tabs selectionIndex displayString' |
|
14 |
classVariableNames:'' |
|
15 |
poolDictionaries:'' |
|
16 |
privateIn:Inspector2 |
|
17 |
! |
|
18 |
||
19 |
||
20 |
!Inspector2 class methodsFor:'interface specs'! |
|
21 |
||
22 |
windowSpec |
|
23 |
"This resource specification was automatically generated |
|
24 |
by the UIPainter of ST/X." |
|
25 |
||
26 |
"Do not manually edit this!! If it is corrupted, |
|
27 |
the UIPainter may not be able to read the specification." |
|
28 |
||
29 |
" |
|
30 |
UIPainter new openOnClass:Inspector2 andSelector:#windowSpec |
|
31 |
Inspector2 new openInterface:#windowSpec |
|
32 |
Inspector2 open |
|
33 |
" |
|
34 |
||
35 |
<resource: #canvas> |
|
36 |
||
37 |
^ |
|
38 |
#(FullSpec |
|
39 |
name: windowSpec |
|
40 |
window: |
|
41 |
(WindowSpec |
|
42 |
label: 'Inspector2' |
|
43 |
name: 'Inspector2' |
|
44 |
labelChannel: windowTitleAspect |
|
45 |
min: (Point 0 0) |
|
46 |
bounds: (Rectangle 0 0 388 421) |
|
47 |
) |
|
48 |
component: |
|
49 |
(SpecCollection |
|
50 |
collection: ( |
|
51 |
(MenuPanelSpec |
|
52 |
name: 'ToolBar' |
|
53 |
layout: (LayoutFrame 0 0 0 0 0 1 30 0) |
|
54 |
menu: toolbarMenu |
|
55 |
textDefault: true |
|
56 |
) |
|
57 |
(NoteBookViewSpec |
|
58 |
name: 'NoteBook' |
|
59 |
layout: (LayoutFrame 0 0 30 0 0 1 0 1) |
|
60 |
model: tabSelectionIndexAspect |
|
61 |
menu: tabLabelsAspect |
|
62 |
useIndex: true |
|
63 |
fitLastRow: false |
|
64 |
canvas: tabViewAspect |
|
65 |
keepCanvasAlive: true |
|
66 |
) |
|
67 |
) |
|
68 |
||
69 |
) |
|
70 |
) |
|
71 |
||
72 |
"Modified: / 17-02-2008 / 08:42:31 / janfrog" |
|
73 |
! ! |
|
74 |
||
75 |
!Inspector2 class methodsFor:'menu specs'! |
|
76 |
||
77 |
toolbarMenu |
|
78 |
"This resource specification was automatically generated |
|
79 |
by the MenuEditor of ST/X." |
|
80 |
||
81 |
"Do not manually edit this!! If it is corrupted, |
|
82 |
the MenuEditor may not be able to read the specification." |
|
83 |
||
84 |
" |
|
85 |
MenuEditor new openOnClass:Inspector2 andSelector:#toolbarMenu |
|
86 |
(Menu new fromLiteralArrayEncoding:(Inspector2 toolbarMenu)) startUp |
|
87 |
" |
|
88 |
||
89 |
<resource: #menu> |
|
90 |
||
91 |
^ |
|
92 |
#(Menu |
|
93 |
( |
|
94 |
(MenuItem |
|
95 |
enabled: backButtonEnabledHolder |
|
96 |
label: 'Back' |
|
97 |
itemValue: backButtonAction |
|
98 |
translateLabel: true |
|
99 |
submenuChannel: backButtonMenuChannel |
|
100 |
labelImage: (ResourceRetriever XPToolbarIconLibrary historyBackIcon) |
|
101 |
) |
|
102 |
(MenuItem |
|
103 |
enabled: forwardButtonEnabledHolder |
|
104 |
label: 'Forward' |
|
105 |
itemValue: forwardButtonAction |
|
106 |
translateLabel: true |
|
107 |
submenuChannel: forwardButtonMenuChannel |
|
108 |
labelImage: (ResourceRetriever XPToolbarIconLibrary historyForwardIcon) |
|
109 |
) |
|
110 |
) |
|
111 |
nil |
|
112 |
nil |
|
113 |
) |
|
114 |
||
115 |
"Modified: / 12-01-2008 / 19:18:36 / janfrog" |
|
116 |
! ! |
|
117 |
||
118 |
!Inspector2 class methodsFor:'startup'! |
|
119 |
||
120 |
openOn: anObject |
|
121 |
||
122 |
self new openOn: anObject. |
|
123 |
||
124 |
"Modified: / 17-02-2008 / 10:29:45 / janfrog" |
|
125 |
! ! |
|
126 |
||
127 |
!Inspector2 class methodsFor:'testing'! |
|
128 |
||
129 |
testSimpleShow |
|
130 |
|ins| |
|
131 |
||
132 |
ins := Inspector2 openOn:4. |
|
133 |
ins inspect:10. |
|
134 |
ins inspect:42. |
|
135 |
ins inspect:'dead one'. |
|
136 |
ins inspect:'rolled back'. |
|
137 |
||
138 |
"/ins inspectItem: (ins history at: 3). "/ Rollback history, zustanou jen prvni 3 |
|
139 |
||
140 |
ins inspect:'xFuj'. |
|
141 |
||
142 |
"Modified: / 11-01-2008 / 20:36:37 / janfrog" |
|
143 |
! ! |
|
144 |
||
145 |
!Inspector2 methodsFor:'accessing'! |
|
146 |
||
147 |
backButtonEnabled: value |
|
148 |
||
149 |
^self backButtonEnabledHolder value: value |
|
150 |
||
151 |
"Created: / 12-01-2008 / 19:14:35 / janfrog" |
|
152 |
! |
|
153 |
||
154 |
currentObject |
|
155 |
^ self navigationState theObject |
|
156 |
||
157 |
"Created: / 13-01-2008 / 10:14:47 / janfrog" |
|
158 |
"Modified: / 17-02-2008 / 09:49:01 / janfrog" |
|
159 |
! |
|
160 |
||
161 |
currentState |
|
162 |
^ self navigationHistoryHolder currentItem |
|
163 |
||
164 |
"Created: / 21-02-2008 / 19:39:45 / janfrog" |
|
165 |
"Modified: / 27-02-2008 / 11:56:55 / janfrog" |
|
166 |
! |
|
167 |
||
168 |
forwardButtonEnabled: value |
|
169 |
||
170 |
^self forwardButtonEnabledHolder value: value |
|
171 |
||
172 |
"Created: / 12-01-2008 / 19:14:48 / janfrog" |
|
173 |
! |
|
174 |
||
175 |
navigationState |
|
176 |
^ self navigationHistoryHolder value |
|
177 |
||
178 |
"Created: / 17-02-2008 / 09:49:01 / janfrog" |
|
179 |
"Modified: / 21-02-2008 / 19:34:14 / janfrog" |
|
180 |
! |
|
181 |
||
182 |
navigationState:historyItem |
|
183 |
self navigationHistoryHolder "subjectChannel:" value:historyItem. |
|
184 |
||
185 |
"/self fixNavigation. "Nevola se kvuli problemu s prekreslovanim" |
|
186 |
"/self updateTabs. |
|
187 |
||
188 |
"Created: / 17-02-2008 / 09:49:11 / janfrog" |
|
189 |
"Modified: / 21-02-2008 / 19:47:26 / janfrog" |
|
190 |
! ! |
|
191 |
||
192 |
!Inspector2 methodsFor:'aspects'! |
|
193 |
||
194 |
backButtonEnabledHolder |
|
195 |
"return/create the 'backButtonEnabledHolder' value holder (automatically generated)" |
|
196 |
||
197 |
^(AspectAdaptor forAspect:#canGoBack) |
|
198 |
subjectChannel: self navigationHistoryHolder |
|
199 |
||
200 |
"Created: / 12-01-2008 / 19:13:49 / janfrog" |
|
201 |
"Modified: / 27-02-2008 / 12:11:30 / janfrog" |
|
202 |
! |
|
203 |
||
204 |
forwardButtonEnabledHolder |
|
205 |
"return/create the 'backButtonEnabledHolder' value holder (automatically generated)" |
|
206 |
||
207 |
^(AspectAdaptor forAspect:#canGoForward) |
|
208 |
subjectChannel: self navigationHistoryHolder |
|
209 |
||
210 |
"Created: / 12-01-2008 / 19:13:49 / janfrog" |
|
211 |
"Modified: / 27-02-2008 / 12:11:26 / janfrog" |
|
212 |
! |
|
213 |
||
214 |
navigationHistoryHolder |
|
215 |
"return/create the 'currentItemHolder' value holder (automatically generated)" |
|
216 |
||
217 |
navigationHistoryHolder isNil ifTrue:[ |
|
218 |
navigationHistoryHolder := Tools::NavigationHistory new. |
|
219 |
]. |
|
220 |
^ navigationHistoryHolder |
|
221 |
||
222 |
"Created: / 21-02-2008 / 19:34:14 / janfrog" |
|
223 |
! |
|
224 |
||
225 |
navigationStateAspect |
|
226 |
||
227 |
navigationStateAspect ifNil: |
|
228 |
[navigationStateAspect := |
|
229 |
(AspectAdaptor forAspect: #currentItem) |
|
230 |
subjectChannel:self navigationHistoryHolder]. |
|
231 |
^navigationStateAspect |
|
232 |
||
233 |
"Created: / 27-02-2008 / 12:05:22 / janfrog" |
|
234 |
! |
|
235 |
||
236 |
tabLabelsAspect |
|
237 |
||
238 |
^ (AspectAdaptor forAspect:#tabLabels) |
|
239 |
subjectChannel: self navigationStateAspect |
|
240 |
||
241 |
"Created: / 16-01-2008 / 17:29:52 / janfrog" |
|
242 |
"Modified: / 27-02-2008 / 12:05:32 / janfrog" |
|
243 |
! |
|
244 |
||
245 |
tabSelectionIndexAspect |
|
246 |
^ ((AspectAdaptor forAspect:#selectionIndex) |
|
247 |
subjectChannel:self navigationStateAspect) |
|
248 |
onChangeEvaluate:[ self tabViewAspect changed ]; |
|
249 |
yourself |
|
250 |
||
251 |
"Created: / 16-01-2008 / 17:29:29 / janfrog" |
|
252 |
"Modified: / 27-02-2008 / 12:06:05 / janfrog" |
|
253 |
! |
|
254 |
||
255 |
tabViewAspect |
|
256 |
tabViewAspect |
|
257 |
ifNil:[ |
|
258 |
tabViewAspect := |
|
259 |
(AspectAdaptor forAspect:#selectionView) |
|
260 |
subjectChannel: self navigationStateAspect |
|
261 |
]. |
|
262 |
^ tabViewAspect |
|
263 |
||
264 |
"Created: / 16-01-2008 / 17:30:05 / janfrog" |
|
265 |
"Modified: / 27-02-2008 / 12:05:46 / janfrog" |
|
266 |
! |
|
267 |
||
268 |
windowTitleAspect |
|
269 |
^ (AspectAdaptor forAspect:#displayString) |
|
270 |
subjectChannel:self navigationStateAspect |
|
271 |
||
272 |
"Created: / 17-02-2008 / 08:42:21 / janfrog" |
|
273 |
"Modified: / 27-02-2008 / 12:05:56 / janfrog" |
|
274 |
! ! |
|
275 |
||
276 |
!Inspector2 methodsFor:'menu & menu actions'! |
|
277 |
||
278 |
backButtonAction |
|
279 |
self navigationHistoryHolder goBack |
|
280 |
||
281 |
"Modified: / 21-02-2008 / 19:40:23 / janfrog" |
|
282 |
! |
|
283 |
||
284 |
backButtonMenuChannel |
|
285 |
^ [ self navigationHistoryHolder goBackMenu ] |
|
286 |
||
287 |
"Created: / 12-01-2008 / 18:57:08 / janfrog" |
|
288 |
"Modified: / 22-02-2008 / 16:57:46 / janfrog" |
|
289 |
! |
|
290 |
||
291 |
forwardButtonAction |
|
292 |
self navigationHistoryHolder goForward |
|
293 |
||
294 |
"Created: / 21-02-2008 / 19:52:03 / janfrog" |
|
295 |
! |
|
296 |
||
297 |
forwardButtonMenuChannel |
|
298 |
^ [ self navigationHistoryHolder goForwardMenu ] |
|
299 |
||
300 |
"Created: / 12-01-2008 / 18:57:30 / janfrog" |
|
301 |
"Modified: / 22-02-2008 / 16:58:11 / janfrog" |
|
302 |
! ! |
|
303 |
||
304 |
!Inspector2 methodsFor:'opening'! |
|
305 |
||
306 |
historyTryPush: anObject |
|
307 |
||
308 |
"/ Pokud uz na anObject byl tak tam skocit, jinak pridat na konec |
|
309 |
self history do: [:item | |
|
310 |
item theObject == anObject ifTrue:[ ^item ] |
|
311 |
]. |
|
312 |
||
313 |
^ self history push:anObject. |
|
314 |
||
315 |
"Modified: / 16-01-2008 / 14:25:30 / janfrog" |
|
316 |
! |
|
317 |
||
318 |
inspect:anObject |
|
319 |
||
320 |
self navigationHistoryHolder |
|
321 |
currentItem: (NavigationState for: anObject) |
|
322 |
||
323 |
"Modified: / 27-02-2008 / 12:06:52 / janfrog" |
|
324 |
! |
|
325 |
||
326 |
openOn: anObject |
|
327 |
self open. |
|
328 |
self inspect: anObject. |
|
329 |
||
330 |
"Modified: / 13-01-2008 / 13:55:27 / janfrog" |
|
331 |
! ! |
|
332 |
||
333 |
!Inspector2::NavigationState class methodsFor:'creating classes'! |
|
334 |
||
335 |
for: anObject |
|
336 |
| item | |
|
337 |
item := self new. |
|
338 |
item theObject: anObject. |
|
339 |
^ item. |
|
340 |
! ! |
|
341 |
||
342 |
!Inspector2::NavigationState class methodsFor:'documentation'! |
|
343 |
||
344 |
version_SVN |
|
8904
f051532eb303
update #version_SVN with § as keyword expansion character
fm
parents:
8816
diff
changeset
|
345 |
^'§Id: Tools__Inspector2.st 115 2009-04-16 12:47:07Z vranyj1 §' |
8779 | 346 |
! ! |
347 |
||
348 |
!Inspector2::NavigationState methodsFor:'accessing'! |
|
349 |
||
350 |
index |
|
351 |
^ index |
|
352 |
! |
|
353 |
||
354 |
index:something |
|
355 |
index := something. |
|
356 |
! |
|
357 |
||
358 |
selectionIndex |
|
359 |
selectionIndex ifNil:[^1]. |
|
360 |
selectionIndex < 1 ifTrue:[^1]. |
|
361 |
selectionIndex > tabs size ifTrue:[^tabs size]. |
|
362 |
^selectionIndex |
|
363 |
||
364 |
"Created: / 16-01-2008 / 17:24:27 / janfrog" |
|
365 |
"Modified: / 17-02-2008 / 10:20:35 / janfrog" |
|
366 |
! |
|
367 |
||
368 |
selectionIndex: anInteger |
|
369 |
selectionIndex := anInteger. |
|
370 |
self changed:#selectionIndex |
|
371 |
||
372 |
"Created: / 16-01-2008 / 17:27:52 / janfrog" |
|
373 |
"Modified: / 17-02-2008 / 09:46:45 / janfrog" |
|
374 |
! |
|
375 |
||
376 |
selectionView |
|
377 |
||
378 |
|tab| |
|
379 |
||
380 |
tab := self tabs at: self selectionIndex. |
|
381 |
^tab |
|
382 |
ifNil:[nil] |
|
383 |
ifNotNil:[tab view]. |
|
384 |
||
385 |
"Created: / 16-01-2008 / 17:31:19 / janfrog" |
|
386 |
! |
|
387 |
||
388 |
tabLabels |
|
389 |
||
390 |
^self tabs collect:[:tab | tab label] |
|
391 |
||
392 |
"Created: / 16-01-2008 / 17:14:07 / janfrog" |
|
393 |
! |
|
394 |
||
395 |
tabViews |
|
396 |
||
397 |
^self tabs collect:[:tab | tab view] |
|
398 |
||
399 |
"Created: / 16-01-2008 / 17:14:13 / janfrog" |
|
400 |
! |
|
401 |
||
402 |
tabs |
|
403 |
||
404 |
tabs ifNil:[self initializeTabs]. |
|
405 |
^tabs |
|
406 |
||
407 |
"Created: / 16-01-2008 / 16:51:53 / janfrog" |
|
408 |
! |
|
409 |
||
410 |
theObject |
|
411 |
^ theObject |
|
412 |
! |
|
413 |
||
414 |
theObject:anObject |
|
415 |
theObject := anObject. |
|
416 |
||
417 |
"Modified: / 17-02-2008 / 08:38:44 / janfrog" |
|
418 |
! ! |
|
419 |
||
420 |
!Inspector2::NavigationState methodsFor:'comparing'! |
|
421 |
||
422 |
= anotherState |
|
423 |
||
424 |
^self class == anotherState class |
|
425 |
and:[self theObject == anotherState theObject] |
|
426 |
||
427 |
"Created: / 21-02-2008 / 19:39:01 / janfrog" |
|
428 |
! |
|
429 |
||
430 |
hash |
|
431 |
||
432 |
^theObject hash |
|
433 |
||
434 |
"Created: / 21-02-2008 / 19:38:08 / janfrog" |
|
435 |
! ! |
|
436 |
||
437 |
!Inspector2::NavigationState methodsFor:'displaying'! |
|
438 |
||
439 |
displayString |
|
440 |
||
441 |
displayString ifNil: |
|
442 |
[displayString := theObject printString. |
|
443 |
displayString size > 15 ifTrue:[displayString := (displayString copyTo:12), '...']. |
|
444 |
displayString := displayString , ' [', theObject class name , ']']. |
|
445 |
^ displayString |
|
446 |
||
447 |
"Created: / 21-02-2008 / 19:53:07 / janfrog" |
|
448 |
! ! |
|
449 |
||
450 |
!Inspector2::NavigationState methodsFor:'initialization'! |
|
451 |
||
452 |
initializeCommonTabs |
|
453 |
||
454 |
tabs add: |
|
455 |
(Tools::Inspector2Tab new |
|
456 |
priority: 50; |
|
457 |
label:'Object'; |
|
458 |
view: ((theObject inspectorClass new inspect:theObject) |
|
459 |
yourself)) |
|
460 |
||
461 |
"Created: / 16-01-2008 / 16:56:48 / janfrog" |
|
462 |
"Modified: / 17-02-2008 / 10:29:54 / janfrog" |
|
463 |
! |
|
464 |
||
465 |
initializeExtraTabs |
|
466 |
||
467 |
theObject class allSelectors |
|
468 |
select: |
|
469 |
[:selector|selector startsWith:#inspector2Tab] |
|
470 |
thenDo: |
|
471 |
[:selector| |
|
472 |
| tab | |
|
473 |
tab := [ theObject perform: selector ] |
|
474 |
on: Error do: |
|
475 |
[:ex| |
|
476 |
Tools::Inspector2Tab new |
|
477 |
label: selector; |
|
478 |
text: |
|
479 |
(ex description, Character cr, Character cr, |
|
480 |
ex suspendedContext fullPrintString)]. |
|
481 |
(tab notNil and:[tab isKindOf: Tools::Inspector2Tab]) |
|
482 |
ifTrue:[tabs add: tab]]. |
|
483 |
||
484 |
"Created: / 16-01-2008 / 17:25:24 / janfrog" |
|
485 |
"Modified: / 17-02-2008 / 10:30:43 / janfrog" |
|
486 |
"Modified: / 07-11-2008 / 08:40:35 / Jan Vrany <vranyj1@fel.cvut.cz>" |
|
487 |
! |
|
488 |
||
489 |
initializeTabs |
|
490 |
||
491 |
tabs := OrderedCollection new. |
|
492 |
self initializeCommonTabs. |
|
493 |
self initializeExtraTabs. |
|
494 |
tabs := tabs asSortedCollection:[:a :b|a priority > b priority]. |
|
495 |
||
496 |
"Created: / 16-01-2008 / 16:54:28 / janfrog" |
|
497 |
"Modified: / 17-02-2008 / 10:08:04 / janfrog" |
|
498 |
! ! |
|
499 |
||
500 |
!Inspector2 class methodsFor:'documentation'! |
|
501 |
||
502 |
version |
|
8904
f051532eb303
update #version_SVN with § as keyword expansion character
fm
parents:
8816
diff
changeset
|
503 |
^ '$Header: /cvs/stx/stx/libtool/Tools__Inspector2.st,v 1.4 2009-10-08 11:57:22 fm Exp $' |
8807 | 504 |
! |
505 |
||
506 |
version_CVS |
|
8904
f051532eb303
update #version_SVN with § as keyword expansion character
fm
parents:
8816
diff
changeset
|
507 |
^ '$Header: /cvs/stx/stx/libtool/Tools__Inspector2.st,v 1.4 2009-10-08 11:57:22 fm Exp $' |
8807 | 508 |
! |
509 |
||
8816 | 510 |
version_CVS_jvrany |
8904
f051532eb303
update #version_SVN with § as keyword expansion character
fm
parents:
8816
diff
changeset
|
511 |
^ '§Header: /opt/data/cvs/stx/goodies/libtool3/Inspector2.st,v 1.6 2008-02-27 13:45:23 vranyj1 Exp §' |
8779 | 512 |
! ! |