|
1 " |
|
2 COPYRIGHT (c) 1995 by eXept Software AG |
|
3 All Rights Reserved |
|
4 |
|
5 This software is furnished under a license and may be used |
|
6 only in accordance with the terms of that license and with the |
|
7 inclusion of the above copyright notice. This software may not |
|
8 be provided or otherwise made available to, or used by, any |
|
9 other person. No title to or ownership of the software is |
|
10 hereby transferred. |
|
11 " |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 ApplicationModel subclass:#UILayoutTool |
|
17 instanceVariableNames:'modifiedHolder aspects selection layoutView' |
|
18 classVariableNames:'' |
|
19 poolDictionaries:'' |
|
20 category:'Interface-UIPainter' |
|
21 ! |
|
22 |
|
23 ApplicationModel subclass:#LayoutOrigin |
|
24 instanceVariableNames:'' |
|
25 classVariableNames:'' |
|
26 poolDictionaries:'' |
|
27 privateIn:UILayoutTool |
|
28 ! |
|
29 |
|
30 ApplicationModel subclass:#Rectangle |
|
31 instanceVariableNames:'' |
|
32 classVariableNames:'' |
|
33 poolDictionaries:'' |
|
34 privateIn:UILayoutTool |
|
35 ! |
|
36 |
|
37 ApplicationModel subclass:#Point |
|
38 instanceVariableNames:'' |
|
39 classVariableNames:'' |
|
40 poolDictionaries:'' |
|
41 privateIn:UILayoutTool |
|
42 ! |
|
43 |
|
44 ApplicationModel subclass:#LayoutFrame |
|
45 instanceVariableNames:'' |
|
46 classVariableNames:'' |
|
47 poolDictionaries:'' |
|
48 privateIn:UILayoutTool |
|
49 ! |
|
50 |
|
51 ApplicationModel subclass:#AlignmentOrigin |
|
52 instanceVariableNames:'' |
|
53 classVariableNames:'' |
|
54 poolDictionaries:'' |
|
55 privateIn:UILayoutTool |
|
56 ! |
|
57 |
|
58 ApplicationModel subclass:#Extent |
|
59 instanceVariableNames:'' |
|
60 classVariableNames:'' |
|
61 poolDictionaries:'' |
|
62 privateIn:UILayoutTool |
|
63 ! |
|
64 |
|
65 !UILayoutTool class methodsFor:'documentation'! |
|
66 |
|
67 copyright |
|
68 " |
|
69 COPYRIGHT (c) 1995 by eXept Software AG |
|
70 All Rights Reserved |
|
71 |
|
72 This software is furnished under a license and may be used |
|
73 only in accordance with the terms of that license and with the |
|
74 inclusion of the above copyright notice. This software may not |
|
75 be provided or otherwise made available to, or used by, any |
|
76 other person. No title to or ownership of the software is |
|
77 hereby transferred. |
|
78 " |
|
79 |
|
80 |
|
81 |
|
82 ! |
|
83 |
|
84 documentation |
|
85 " |
|
86 used by the UIPainter to manipulate the layout of the selected component |
|
87 |
|
88 [author:] |
|
89 Claus Atzkern |
|
90 |
|
91 [see also:] |
|
92 UIPainter |
|
93 UIHelpTool |
|
94 UISpecificationTool |
|
95 " |
|
96 |
|
97 |
|
98 ! ! |
|
99 |
|
100 !UILayoutTool class methodsFor:'constants'! |
|
101 |
|
102 label |
|
103 ^ 'Layout' |
|
104 ! ! |
|
105 |
|
106 !UILayoutTool class methodsFor:'interface specs'! |
|
107 |
|
108 slices |
|
109 ^ #( |
|
110 ( 'Frame' LayoutFrame) |
|
111 ( 'Origin' LayoutOrigin) |
|
112 ( 'Alig.Origin' AlignmentOrigin) |
|
113 ( 'Point' Point) |
|
114 ( 'Rectangle' Rectangle) |
|
115 ( 'Extent' Extent) |
|
116 ) |
|
117 |
|
118 ! |
|
119 |
|
120 windowSpec |
|
121 "this window spec was automatically generated by the ST/X UIPainter" |
|
122 |
|
123 "do not manually edit this - the painter/builder may not be able to |
|
124 handle the specification if its corrupted." |
|
125 |
|
126 " |
|
127 UIPainter new openOnClass:UILayoutTool andSelector:#windowSpec |
|
128 UILayoutTool new openInterface:#windowSpec |
|
129 " |
|
130 "UILayoutTool open" |
|
131 |
|
132 <resource: #canvas> |
|
133 |
|
134 ^ |
|
135 |
|
136 #(#FullSpec |
|
137 #'window:' |
|
138 #(#WindowSpec |
|
139 #'name:' 'uIPainterView' |
|
140 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
141 #'label:' 'unnamed canvas' |
|
142 #'bounds:' #(#Rectangle 0 0 300 300) |
|
143 ) |
|
144 #'component:' |
|
145 #(#SpecCollection |
|
146 #'collection:' |
|
147 #( |
|
148 #(#NoteBookViewSpec |
|
149 #'name:' 'NoteBook' |
|
150 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
151 #'tabable:' true |
|
152 #'menu:' #noteBookList |
|
153 #'enableChannel:' #enableChannel |
|
154 #'style:' |
|
155 #(#FontDescription |
|
156 #helvetica #medium |
|
157 #roman #'10' |
|
158 ) |
|
159 #'model:' #noteBookModel |
|
160 #'tabWidget:' #Window |
|
161 #'direction:' #bottom |
|
162 "/ #'useIndex:' true |
|
163 #'canvas:' #noteBookView |
|
164 ) |
|
165 ) |
|
166 ) |
|
167 ) |
|
168 ! ! |
|
169 |
|
170 !UILayoutTool methodsFor:'accessing'! |
|
171 |
|
172 layout |
|
173 "returns configued layout or nil |
|
174 " |
|
175 |appl| |
|
176 |
|
177 (appl := self noteBookView application) notNil ifTrue:[ |
|
178 ^ appl layout |
|
179 ]. |
|
180 ^ nil |
|
181 ! |
|
182 |
|
183 layoutType |
|
184 "returns current layout type or nil |
|
185 " |
|
186 |slice| |
|
187 |
|
188 (slice := self selectedSlice) notNil ifTrue:[ |
|
189 ^ slice last |
|
190 ]. |
|
191 ^ nil |
|
192 ! |
|
193 |
|
194 layoutView |
|
195 "returns current edited view |
|
196 " |
|
197 ^ layoutView |
|
198 ! |
|
199 |
|
200 layoutView:aView |
|
201 "change current edited view |
|
202 " |
|
203 |type name list| |
|
204 |
|
205 layoutView := aView. |
|
206 |
|
207 (type := UIPainterView layoutType:layoutView) notNil ifTrue:[ |
|
208 self class slices findFirst:[:e| |
|
209 e last == type ifTrue:[name := e first. true] |
|
210 ]. |
|
211 type == #Extent ifTrue:[ |
|
212 list := Array with:name |
|
213 ] ifFalse:[ |
|
214 list := self class slices collect:[:e| e first ]. |
|
215 list removeLast. |
|
216 ]. |
|
217 ]. |
|
218 self noteBookList value:list. |
|
219 self noteBookModel value:name. |
|
220 self update. |
|
221 ! |
|
222 |
|
223 modifiedHolder:aValueHolder |
|
224 "set the value holder set to true in case of modifying attributes |
|
225 " |
|
226 modifiedHolder notNil ifTrue:[ |
|
227 modifiedHolder removeDependent:self. |
|
228 ]. |
|
229 |
|
230 (modifiedHolder := aValueHolder) notNil ifTrue:[ |
|
231 modifiedHolder addDependent:self. |
|
232 ]. |
|
233 |
|
234 ! |
|
235 |
|
236 update |
|
237 "update from view |
|
238 " |
|
239 |view appl| |
|
240 |
|
241 selection notNil ifTrue:[ |
|
242 (view := self layoutView) notNil ifTrue:[ |
|
243 (appl := self noteBookView application) notNil ifTrue:[ |
|
244 appl fetch:view |
|
245 ] |
|
246 ] |
|
247 ]. |
|
248 |
|
249 ! ! |
|
250 |
|
251 !UILayoutTool methodsFor:'aspects'! |
|
252 |
|
253 aspectFor:aKey |
|
254 "returns aspect for a key or nil |
|
255 " |
|
256 ^ aspects at:aKey ifAbsent:[ super aspectFor:aKey ] |
|
257 |
|
258 |
|
259 ! |
|
260 |
|
261 noteBookList |
|
262 "returns list of tab labels |
|
263 " |
|
264 |holder| |
|
265 |
|
266 (holder := builder bindingAt:#noteBookList) isNil ifTrue:[ |
|
267 holder := nil asValue. |
|
268 builder aspectAt:#noteBookList put:holder |
|
269 ]. |
|
270 ^ holder |
|
271 ! |
|
272 |
|
273 noteBookModel |
|
274 "automatically generated by UIPainter ..." |
|
275 |
|
276 |holder| |
|
277 |
|
278 (holder := builder bindingAt:#noteBookModel) isNil ifTrue:[ |
|
279 holder := AspectAdaptor new subject:self; forAspect:#selection. |
|
280 builder aspectAt:#noteBookModel put:holder. |
|
281 ]. |
|
282 ^ holder |
|
283 ! |
|
284 |
|
285 noteBookView |
|
286 "automatically generated by UIPainter ... |
|
287 " |
|
288 |holder| |
|
289 |
|
290 (holder := builder bindingAt:#noteBookView) isNil ifTrue:[ |
|
291 holder := SubCanvas new. |
|
292 builder aspectAt:#noteBookView put:holder |
|
293 ]. |
|
294 ^ holder |
|
295 ! ! |
|
296 |
|
297 !UILayoutTool methodsFor:'change & update'! |
|
298 |
|
299 update:something with:aParameter from:changedObject |
|
300 "one of my models changed its value |
|
301 " |
|
302 changedObject ~~ modifiedHolder ifTrue:[ |
|
303 modifiedHolder value ~~ true ifTrue:[ |
|
304 modifiedHolder isNil ifFalse:[ |
|
305 modifiedHolder value:true |
|
306 ] |
|
307 ] |
|
308 ] |
|
309 |
|
310 ! ! |
|
311 |
|
312 !UILayoutTool methodsFor:'converting absolute'! |
|
313 |
|
314 absolute:what xOrY:xOrY |
|
315 |extent fraction offset fractSymb offsetSymb| |
|
316 |
|
317 extent := (self layoutView superView computeExtent) perform:xOrY. |
|
318 fractSymb := (what, 'Fraction') asSymbol. |
|
319 offsetSymb := (what, 'Offset') asSymbol. |
|
320 fraction := (self aspectFor:fractSymb) value. |
|
321 offset := (self aspectFor:offsetSymb) value. |
|
322 offset := offset + ((fraction * extent) asInteger). |
|
323 |
|
324 (self aspectFor:offsetSymb) value:offset. |
|
325 (self aspectFor:fractSymb) value:0. |
|
326 |
|
327 |
|
328 |
|
329 ! |
|
330 |
|
331 absoluteBottom |
|
332 self absolute:'bottom' xOrY:#y |
|
333 |
|
334 ! |
|
335 |
|
336 absoluteLeft |
|
337 self absolute:'left' xOrY:#x |
|
338 |
|
339 ! |
|
340 |
|
341 absoluteRight |
|
342 self absolute:'right' xOrY:#x |
|
343 |
|
344 ! |
|
345 |
|
346 absoluteTop |
|
347 self absolute:'top' xOrY:#y |
|
348 |
|
349 ! ! |
|
350 |
|
351 !UILayoutTool methodsFor:'converting relative'! |
|
352 |
|
353 relative:what xOrY:xOrY |
|
354 |extent fraction offset fractSymb offsetSymb| |
|
355 |
|
356 extent := (self layoutView superView computeExtent) perform:xOrY. |
|
357 fractSymb := (what, 'Fraction') asSymbol. |
|
358 offsetSymb := (what, 'Offset') asSymbol. |
|
359 fraction := (self aspectFor:fractSymb) value. |
|
360 offset := (self aspectFor:offsetSymb) value. |
|
361 fraction := (fraction + (offset / extent)) asFloat. |
|
362 |
|
363 (fraction > 1.0) ifTrue:[ fraction := 1.0 ]. |
|
364 (fraction < 0.0) ifTrue:[ fraction := 0 ]. |
|
365 |
|
366 (self aspectFor:offsetSymb) value:0. |
|
367 (self aspectFor:fractSymb) value:fraction. |
|
368 |
|
369 |
|
370 |
|
371 ! |
|
372 |
|
373 relativeBottom |
|
374 self relative:'bottom' xOrY:#y |
|
375 |
|
376 |
|
377 ! |
|
378 |
|
379 relativeLeft |
|
380 self relative:'left' xOrY:#x |
|
381 |
|
382 ! |
|
383 |
|
384 relativeRight |
|
385 self relative:'right' xOrY:#x |
|
386 |
|
387 ! |
|
388 |
|
389 relativeTop |
|
390 self relative:'top' xOrY:#y |
|
391 |
|
392 ! ! |
|
393 |
|
394 !UILayoutTool methodsFor:'initialization'! |
|
395 |
|
396 initialize |
|
397 "initialize channels |
|
398 " |
|
399 super initialize. |
|
400 |
|
401 aspects := IdentityDictionary new. |
|
402 |
|
403 #( bottomFraction bottomOffset |
|
404 leftFraction leftOffset |
|
405 topFraction topOffset |
|
406 rightFraction rightOffset |
|
407 leftAlignmentFraction topAlignmentFraction |
|
408 ) |
|
409 |
|
410 do:[:aKey||holder| |
|
411 holder := ValueHolder new. |
|
412 holder addDependent:self. |
|
413 aspects at:aKey put:holder. |
|
414 ]. |
|
415 |
|
416 |
|
417 |
|
418 |
|
419 ! ! |
|
420 |
|
421 !UILayoutTool methodsFor:'selection'! |
|
422 |
|
423 selectedSlice |
|
424 "returns slice assigned to selection or nil |
|
425 " |
|
426 selection notNil ifTrue:[ |
|
427 self class slices do:[:aSlice| |
|
428 aSlice first = selection ifTrue:[ |
|
429 ^ aSlice |
|
430 ] |
|
431 ] |
|
432 ]. |
|
433 ^ nil |
|
434 |
|
435 ! |
|
436 |
|
437 selection |
|
438 ^ selection |
|
439 ! |
|
440 |
|
441 selection:aSelection |
|
442 |appl view slice| |
|
443 |
|
444 selection = aSelection ifFalse:[ |
|
445 (selection := aSelection) notNil ifTrue:[ |
|
446 slice := self selectedSlice. |
|
447 appl := slice last asString. |
|
448 appl := Smalltalk classNamed:(self class name asString, '::', appl). |
|
449 appl := appl new. |
|
450 appl masterApplication:self. |
|
451 ]. |
|
452 self noteBookView client:appl |
|
453 ]. |
|
454 self update |
|
455 ! ! |
|
456 |
|
457 !UILayoutTool::LayoutOrigin class methodsFor:'interface specs'! |
|
458 |
|
459 windowSpec |
|
460 "this window spec was automatically generated by the ST/X UIPainter" |
|
461 |
|
462 "do not manually edit this - the painter/builder may not be able to |
|
463 handle the specification if its corrupted." |
|
464 |
|
465 " |
|
466 UIPainter new openOnClass:UILayoutTool::LayoutOrigin andSelector:#windowSpec |
|
467 UILayoutTool::LayoutOrigin new openInterface:#windowSpec |
|
468 " |
|
469 "UILayoutTool::LayoutOrigin open" |
|
470 |
|
471 <resource: #canvas> |
|
472 |
|
473 ^ |
|
474 |
|
475 #(#FullSpec |
|
476 #'window:' |
|
477 #(#WindowSpec |
|
478 #'name:' 'uIPainterView' |
|
479 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
480 #'label:' 'unnamed' |
|
481 #'bounds:' #(#Rectangle 0 0 258 93) |
|
482 ) |
|
483 #'component:' |
|
484 #(#SpecCollection |
|
485 #'collection:' |
|
486 #( |
|
487 #(#LabelSpec |
|
488 #'name:' 'labelRelative' |
|
489 #'layout:' #(#Point 57 12) |
|
490 #'label:' 'relative' |
|
491 ) |
|
492 #(#LabelSpec |
|
493 #'name:' 'labelAbsolute' |
|
494 #'layout:' #(#Point 154 13) |
|
495 #'label:' 'absolute' |
|
496 ) |
|
497 #(#LabelSpec |
|
498 #'name:' 'labelLeft' |
|
499 #'layout:' #(#AlignmentOrigin 52 0 44 0 1 0) |
|
500 #'label:' 'left' |
|
501 ) |
|
502 #(#InputFieldSpec |
|
503 #'name:' 'fieldLeftFraction' |
|
504 #'layout:' #(#LayoutFrame 57 0 44 0 114 0 62 0) |
|
505 #'tabable:' true |
|
506 #'model:' #leftFraction |
|
507 #'type:' #numberOrNil |
|
508 ) |
|
509 #(#ActionButtonSpec |
|
510 #'name:' 'actionRelativeLeft' |
|
511 #'layout:' #(#LayoutFrame 119 0 44 0 138 0 62 0) |
|
512 #'label:' '' |
|
513 #'model:' #relativeLeft |
|
514 ) |
|
515 #(#InputFieldSpec |
|
516 #'name:' 'fieldLeftOffset' |
|
517 #'layout:' #(#LayoutFrame 154 0 44 0 212 0 62 0) |
|
518 #'tabable:' true |
|
519 #'model:' #leftOffset |
|
520 #'type:' #numberOrNil |
|
521 ) |
|
522 #(#ActionButtonSpec |
|
523 #'name:' 'actionAbsoluteLeft' |
|
524 #'layout:' #(#LayoutFrame 216 0 44 0 235 0 62 0) |
|
525 #'label:' '' |
|
526 #'model:' #absoluteLeft |
|
527 ) |
|
528 #(#LabelSpec |
|
529 #'name:' 'labelTop' |
|
530 #'layout:' #(#AlignmentOrigin 52 0 71 0 1 0) |
|
531 #'label:' 'top' |
|
532 ) |
|
533 #(#InputFieldSpec |
|
534 #'name:' 'fieldTopFraction' |
|
535 #'layout:' #(#LayoutFrame 57 0 71 0 114 0 89 0) |
|
536 #'tabable:' true |
|
537 #'model:' #topFraction |
|
538 #'type:' #numberOrNil |
|
539 ) |
|
540 #(#ActionButtonSpec |
|
541 #'name:' 'actionRelativeTop' |
|
542 #'layout:' #(#LayoutFrame 119 0 71 0 138 0 89 0) |
|
543 #'label:' '' |
|
544 #'model:' #relativeTop |
|
545 ) |
|
546 #(#InputFieldSpec |
|
547 #'name:' 'fieldTopOffset' |
|
548 #'layout:' #(#LayoutFrame 154 0 71 0 212 0 89 0) |
|
549 #'tabable:' true |
|
550 #'model:' #topOffset |
|
551 #'type:' #numberOrNil |
|
552 ) |
|
553 #(#ActionButtonSpec |
|
554 #'name:' 'actionAbsoluteTop' |
|
555 #'layout:' #(#LayoutFrame 216 0 71 0 235 0 89 0) |
|
556 #'label:' '' |
|
557 #'model:' #absoluteTop |
|
558 ) |
|
559 ) |
|
560 ) |
|
561 ) |
|
562 ! ! |
|
563 |
|
564 !UILayoutTool::LayoutOrigin methodsFor:'accessing'! |
|
565 |
|
566 fetch:aView |
|
567 "fetch layoutOrigin |
|
568 " |
|
569 |layout| |
|
570 |
|
571 layout := UIPainterView asLayoutFrameFromView:aView. |
|
572 |
|
573 (self aspectFor:#leftOffset) value:(layout leftOffset). |
|
574 (self aspectFor:#leftFraction) value:(layout leftFraction). |
|
575 (self aspectFor:#topOffset) value:(layout topOffset). |
|
576 (self aspectFor:#topFraction) value:(layout topFraction). |
|
577 |
|
578 |
|
579 ! |
|
580 |
|
581 layout |
|
582 "returns current layout as layoutOrigin |
|
583 " |
|
584 |layout| |
|
585 |
|
586 layout := Smalltalk::LayoutOrigin new. |
|
587 |
|
588 layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. |
|
589 layout topOffset:((self aspectFor:#topOffset) value) ? 0. |
|
590 layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. |
|
591 layout topFraction:((self aspectFor:#topFraction) value) ? 0. |
|
592 |
|
593 ^ layout |
|
594 |
|
595 ! ! |
|
596 |
|
597 !UILayoutTool::Rectangle class methodsFor:'interface specs'! |
|
598 |
|
599 windowSpec |
|
600 "this window spec was automatically generated by the ST/X UIPainter" |
|
601 |
|
602 "do not manually edit this - the painter/builder may not be able to |
|
603 handle the specification if its corrupted." |
|
604 |
|
605 " |
|
606 UIPainter new openOnClass:UILayoutTool::Rectangle andSelector:#windowSpec |
|
607 UILayoutTool::Rectangle new openInterface:#windowSpec |
|
608 " |
|
609 "UILayoutTool::Rectangle open" |
|
610 |
|
611 <resource: #canvas> |
|
612 |
|
613 ^ |
|
614 |
|
615 #(#FullSpec |
|
616 #'window:' |
|
617 #(#WindowSpec |
|
618 #'name:' 'uIPainterView' |
|
619 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
620 #'label:' 'unnamed' |
|
621 #'bounds:' #(#Rectangle 0 0 224 146) |
|
622 ) |
|
623 #'component:' |
|
624 #(#SpecCollection |
|
625 #'collection:' |
|
626 #( |
|
627 #(#UISubSpecification |
|
628 #'name:' 'subSpecification' |
|
629 #'layout:' #(#LayoutOrigin 0 0 0 0) |
|
630 #'majorKey:' #'UILayoutTool::Point' |
|
631 #'minorKey:' #windowSpec |
|
632 ) |
|
633 #(#LabelSpec |
|
634 #'name:' 'labelCornerX' |
|
635 #'layout:' #(#AlignmentOrigin 75 0 74 0 1 0) |
|
636 #'label:' 'corner x:' |
|
637 #'adjust:' #left |
|
638 ) |
|
639 #(#InputFieldSpec |
|
640 #'name:' 'fieldCornerX' |
|
641 #'layout:' #(#LayoutFrame 77 0 74 0 170 0 92 0) |
|
642 #'tabable:' true |
|
643 #'model:' #rightOffset |
|
644 #'type:' #numberOrNil |
|
645 ) |
|
646 #(#LabelSpec |
|
647 #'name:' 'labelCornerY' |
|
648 #'layout:' #(#AlignmentOrigin 75 0 101 0 1 0) |
|
649 #'label:' 'corner y:' |
|
650 #'adjust:' #left |
|
651 ) |
|
652 #(#InputFieldSpec |
|
653 #'name:' 'fieldCornerY' |
|
654 #'layout:' #(#LayoutFrame 77 0 101 0 170 0 119 0) |
|
655 #'tabable:' true |
|
656 #'model:' #bottomOffset |
|
657 #'type:' #numberOrNil |
|
658 ) |
|
659 ) |
|
660 ) |
|
661 ) |
|
662 ! ! |
|
663 |
|
664 !UILayoutTool::Rectangle methodsFor:'accessing'! |
|
665 |
|
666 fetch:aView |
|
667 "fetch rectangle |
|
668 " |
|
669 |origin corner| |
|
670 |
|
671 origin := aView computeOrigin. |
|
672 corner := aView computeCorner. |
|
673 |
|
674 (self aspectFor:#leftOffset) value:(origin x). |
|
675 (self aspectFor:#rightOffset) value:(corner x). |
|
676 (self aspectFor:#topOffset) value:(origin y). |
|
677 (self aspectFor:#bottomOffset) value:(corner y). |
|
678 |
|
679 |
|
680 ! |
|
681 |
|
682 layout |
|
683 "returns current layout as rectangle |
|
684 " |
|
685 ^ Smalltalk::Rectangle left:(((self aspectFor:#leftOffset) value) ? 0) |
|
686 top:(((self aspectFor:#topOffset) value) ? 0) |
|
687 right:(((self aspectFor:#rightOffset) value) ? 0) |
|
688 bottom:(((self aspectFor:#bottomOffset) value) ? 0) |
|
689 |
|
690 |
|
691 ! ! |
|
692 |
|
693 !UILayoutTool::Point class methodsFor:'interface specs'! |
|
694 |
|
695 windowSpec |
|
696 "this window spec was automatically generated by the ST/X UIPainter" |
|
697 |
|
698 "do not manually edit this - the painter/builder may not be able to |
|
699 handle the specification if its corrupted." |
|
700 |
|
701 " |
|
702 UIPainter new openOnClass:UILayoutTool::Point andSelector:#windowSpec |
|
703 UILayoutTool::Point new openInterface:#windowSpec |
|
704 " |
|
705 "UILayoutTool::Point open" |
|
706 |
|
707 <resource: #canvas> |
|
708 |
|
709 ^ |
|
710 |
|
711 #(#FullSpec |
|
712 #'window:' |
|
713 #(#WindowSpec |
|
714 #'name:' 'uIPainterView' |
|
715 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
716 #'label:' 'unnamed' |
|
717 #'bounds:' #(#Rectangle 0 0 194 66) |
|
718 ) |
|
719 #'component:' |
|
720 #(#SpecCollection |
|
721 #'collection:' |
|
722 #( |
|
723 #(#LabelSpec |
|
724 #'name:' 'labelOriginX' |
|
725 #'layout:' #(#AlignmentOrigin 75 0 19 0 1 0) |
|
726 #'label:' 'origin x:' |
|
727 ) |
|
728 #(#InputFieldSpec |
|
729 #'name:' 'fieldOriginX' |
|
730 #'layout:' #(#LayoutFrame 77 0 19 0 170 0 37 0) |
|
731 #'tabable:' true |
|
732 #'model:' #leftOffset |
|
733 #'type:' #numberOrNil |
|
734 ) |
|
735 #(#LabelSpec |
|
736 #'name:' 'labelOriginY' |
|
737 #'layout:' #(#AlignmentOrigin 75 0 46 0 1 0) |
|
738 #'label:' 'origin y:' |
|
739 ) |
|
740 #(#InputFieldSpec |
|
741 #'name:' 'fieldOriginY' |
|
742 #'layout:' #(#LayoutFrame 77 0 46 0 170 0 64 0) |
|
743 #'tabable:' true |
|
744 #'model:' #topOffset |
|
745 #'type:' #numberOrNil |
|
746 ) |
|
747 ) |
|
748 ) |
|
749 ) |
|
750 ! ! |
|
751 |
|
752 !UILayoutTool::Point methodsFor:'accessing'! |
|
753 |
|
754 fetch:aView |
|
755 "fetch point |
|
756 " |
|
757 |origin| |
|
758 |
|
759 origin := aView computeOrigin. |
|
760 |
|
761 (self aspectFor:#leftOffset) value:(origin x). |
|
762 (self aspectFor:#topOffset) value:(origin y). |
|
763 |
|
764 |
|
765 ! |
|
766 |
|
767 layout |
|
768 "returns current layout as point |
|
769 " |
|
770 ^ Smalltalk::Point x:(((self aspectFor:#leftOffset) value) ? 0) |
|
771 y:(((self aspectFor:#topOffset) value) ? 0) |
|
772 |
|
773 ! ! |
|
774 |
|
775 !UILayoutTool::LayoutFrame class methodsFor:'interface specs'! |
|
776 |
|
777 windowSpec |
|
778 "this window spec was automatically generated by the ST/X UIPainter" |
|
779 |
|
780 "do not manually edit this - the painter/builder may not be able to |
|
781 handle the specification if its corrupted." |
|
782 |
|
783 " |
|
784 UIPainter new openOnClass:UILayoutTool::LayoutFrame andSelector:#windowSpec |
|
785 UILayoutTool::LayoutFrame new openInterface:#windowSpec |
|
786 " |
|
787 "UILayoutTool::LayoutFrame open" |
|
788 |
|
789 <resource: #canvas> |
|
790 |
|
791 ^ |
|
792 |
|
793 #(#FullSpec |
|
794 #'window:' |
|
795 #(#WindowSpec |
|
796 #'name:' 'uIPainterView' |
|
797 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
798 #'label:' 'unnamed' |
|
799 #'bounds:' #(#Rectangle 0 0 250 193) |
|
800 ) |
|
801 #'component:' |
|
802 #(#SpecCollection |
|
803 #'collection:' |
|
804 #( |
|
805 #(#UISubSpecification |
|
806 #'name:' 'subLayoutSpec' |
|
807 #'layout:' #(#LayoutOrigin 0 0 0 0) |
|
808 #'majorKey:' #'UILayoutTool::LayoutOrigin' |
|
809 #'minorKey:' #windowSpec |
|
810 ) |
|
811 #(#LabelSpec |
|
812 #'name:' 'labelRight' |
|
813 #'layout:' #(#AlignmentOrigin 52 0 98 0 1 0) |
|
814 #'label:' 'right' |
|
815 ) |
|
816 #(#InputFieldSpec |
|
817 #'name:' 'fieldRightFraction' |
|
818 #'layout:' #(#LayoutFrame 57 0 98 0 114 0 116 0) |
|
819 #'model:' #rightFraction |
|
820 #'type:' #numberOrNil |
|
821 ) |
|
822 #(#ActionButtonSpec |
|
823 #'name:' 'actionRelativeRight' |
|
824 #'layout:' #(#LayoutFrame 119 0 98 0 138 0 116 0) |
|
825 #'label:' '' |
|
826 #'model:' #relativeRight |
|
827 ) |
|
828 #(#InputFieldSpec |
|
829 #'name:' 'fieldRightOffset' |
|
830 #'layout:' #(#LayoutFrame 154 0 98 0 212 0 116 0) |
|
831 #'model:' #rightOffset |
|
832 #'type:' #numberOrNil |
|
833 ) |
|
834 #(#ActionButtonSpec |
|
835 #'name:' 'actionAbsoluteRight' |
|
836 #'layout:' #(#LayoutFrame 216 0 98 0 235 0 116 0) |
|
837 #'label:' '' |
|
838 #'model:' #absoluteRight |
|
839 ) |
|
840 #(#LabelSpec |
|
841 #'name:' 'labelBottom' |
|
842 #'layout:' #(#AlignmentOrigin 52 0 126 0 1 0) |
|
843 #'label:' 'bottom' |
|
844 ) |
|
845 #(#InputFieldSpec |
|
846 #'name:' 'fieldBottomFraction' |
|
847 #'layout:' #(#LayoutFrame 57 0 126 0 114 0 144 0) |
|
848 #'model:' #bottomFraction |
|
849 #'type:' #numberOrNil |
|
850 ) |
|
851 #(#ActionButtonSpec |
|
852 #'name:' 'actionRelativeBottom' |
|
853 #'layout:' #(#LayoutFrame 119 0 126 0 138 0 144 0) |
|
854 #'label:' '' |
|
855 #'model:' #relativeBottom |
|
856 ) |
|
857 #(#InputFieldSpec |
|
858 #'name:' 'fieldBottomOffset' |
|
859 #'layout:' #(#LayoutFrame 154 0 126 0 211 0 144 0) |
|
860 #'model:' #bottomOffset |
|
861 #'type:' #numberOrNil |
|
862 ) |
|
863 #(#ActionButtonSpec |
|
864 #'name:' 'actionAbsoluteBottom' |
|
865 #'layout:' #(#LayoutFrame 216 0 126 0 235 0 144 0) |
|
866 #'label:' '' |
|
867 #'model:' #absoluteBottom |
|
868 ) |
|
869 ) |
|
870 ) |
|
871 ) |
|
872 ! ! |
|
873 |
|
874 !UILayoutTool::LayoutFrame methodsFor:'accessing'! |
|
875 |
|
876 fetch:aView |
|
877 |layout| |
|
878 |
|
879 layout := UIPainterView asLayoutFrameFromView:aView. |
|
880 |
|
881 (self aspectFor:#leftOffset) value:(layout leftOffset). |
|
882 (self aspectFor:#leftFraction) value:(layout leftFraction). |
|
883 (self aspectFor:#topOffset) value:(layout topOffset). |
|
884 (self aspectFor:#topFraction) value:(layout topFraction). |
|
885 (self aspectFor:#rightOffset) value:(layout rightOffset). |
|
886 (self aspectFor:#bottomOffset) value:(layout bottomOffset). |
|
887 (self aspectFor:#rightFraction) value:(layout rightFraction). |
|
888 (self aspectFor:#bottomFraction) value:(layout bottomFraction). |
|
889 |
|
890 ! |
|
891 |
|
892 layout |
|
893 "returns current layout as layoutFrame |
|
894 " |
|
895 |layout| |
|
896 |
|
897 layout := Smalltalk::LayoutFrame new. |
|
898 |
|
899 layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. |
|
900 layout rightOffset:((self aspectFor:#rightOffset) value) ? 0. |
|
901 layout topOffset:((self aspectFor:#topOffset) value) ? 0. |
|
902 layout bottomOffset:((self aspectFor:#bottomOffset) value) ? 0. |
|
903 layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. |
|
904 layout rightFraction:((self aspectFor:#rightFraction) value) ? 0. |
|
905 layout topFraction:((self aspectFor:#topFraction) value) ? 0. |
|
906 layout bottomFraction:((self aspectFor:#bottomFraction) value) ? 0. |
|
907 |
|
908 ^ layout |
|
909 |
|
910 ! ! |
|
911 |
|
912 !UILayoutTool::AlignmentOrigin class methodsFor:'interface specs'! |
|
913 |
|
914 windowSpec |
|
915 "this window spec was automatically generated by the ST/X UIPainter" |
|
916 |
|
917 "do not manually edit this - the painter/builder may not be able to |
|
918 handle the specification if its corrupted." |
|
919 |
|
920 " |
|
921 UIPainter new openOnClass:UILayoutTool::AlignmentOrigin andSelector:#windowSpec |
|
922 UILayoutTool::AlignmentOrigin new openInterface:#windowSpec |
|
923 " |
|
924 "UILayoutTool::AlignmentOrigin open" |
|
925 |
|
926 <resource: #canvas> |
|
927 |
|
928 ^ |
|
929 |
|
930 #(#FullSpec |
|
931 #'window:' |
|
932 #(#WindowSpec |
|
933 #'name:' 'uIPainterView' |
|
934 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
935 #'label:' 'AlignmentOrigin' |
|
936 #'bounds:' #(#Rectangle 0 0 268 205) |
|
937 ) |
|
938 #'component:' |
|
939 #(#SpecCollection |
|
940 #'collection:' |
|
941 #( |
|
942 #(#UISubSpecification |
|
943 #'name:' 'subSpecification' |
|
944 #'layout:' #(#LayoutOrigin 0 0 0 0) |
|
945 #'majorKey:' #'UILayoutTool::LayoutOrigin' |
|
946 #'minorKey:' #windowSpec |
|
947 ) |
|
948 #(#LabelSpec |
|
949 #'name:' 'label5' |
|
950 #'layout:' #(#AlignmentOrigin 84 0 106 0 1 0) |
|
951 #'label:' 'align H' |
|
952 #'adjust:' #right |
|
953 ) |
|
954 #(#LabelSpec |
|
955 #'name:' 'label6' |
|
956 #'layout:' #(#AlignmentOrigin 84 0 132 0 1 0) |
|
957 #'label:' 'align V' |
|
958 #'adjust:' #right |
|
959 ) |
|
960 #(#InputFieldSpec |
|
961 #'name:' 'editField5' |
|
962 #'layout:' #(#LayoutFrame 89 0 106 0 146 0 124 0) |
|
963 #'tabable:' true |
|
964 #'model:' #leftAlignmentFraction |
|
965 #'type:' #numberOrNil |
|
966 ) |
|
967 #(#InputFieldSpec |
|
968 #'name:' 'editField6' |
|
969 #'layout:' #(#LayoutFrame 89 0 132 0 146 0 150 0) |
|
970 #'tabable:' true |
|
971 #'model:' #topAlignmentFraction |
|
972 #'type:' #numberOrNil |
|
973 ) |
|
974 #(#DividerSpec |
|
975 #'name:' 'separator1' |
|
976 #'layout:' #(#Rectangle 175 111 224 114) |
|
977 #'orientation:' #horizontal |
|
978 ) |
|
979 #(#DividerSpec |
|
980 #'name:' 'separator2' |
|
981 #'layout:' #(#Rectangle 175 143 224 146) |
|
982 #'orientation:' #horizontal |
|
983 ) |
|
984 #(#DividerSpec |
|
985 #'name:' 'separator3' |
|
986 #'layout:' #(#Rectangle 171 118 174 139) |
|
987 #'orientation:' #vertical |
|
988 ) |
|
989 #(#DividerSpec |
|
990 #'name:' 'separator4' |
|
991 #'layout:' #(#Rectangle 226 118 229 139) |
|
992 #'orientation:' #vertical |
|
993 ) |
|
994 #(#ActionButtonSpec |
|
995 #'name:' 'alignBottomRight' |
|
996 #'layout:' #(#Rectangle 222 138 234 150) |
|
997 #'label:' '' |
|
998 #'model:' #alignBottomRight |
|
999 ) |
|
1000 #(#ActionButtonSpec |
|
1001 #'name:' 'alignTopLeft' |
|
1002 #'layout:' #(#Rectangle 166 107 178 119) |
|
1003 #'label:' '' |
|
1004 #'model:' #alignTopLeft |
|
1005 ) |
|
1006 #(#ActionButtonSpec |
|
1007 #'name:' 'alignTopRight' |
|
1008 #'layout:' #(#Rectangle 222 107 234 119) |
|
1009 #'label:' '' |
|
1010 #'model:' #alignTopRight |
|
1011 ) |
|
1012 #(#ActionButtonSpec |
|
1013 #'name:' 'alignBottomLeft' |
|
1014 #'layout:' #(#Rectangle 166 137 178 149) |
|
1015 #'label:' '' |
|
1016 #'model:' #alignBottomLeft |
|
1017 ) |
|
1018 #(#ActionButtonSpec |
|
1019 #'name:' 'alignTopCenter' |
|
1020 #'layout:' #(#Rectangle 194 107 206 119) |
|
1021 #'label:' '' |
|
1022 #'model:' #alignTopCenter |
|
1023 ) |
|
1024 #(#ActionButtonSpec |
|
1025 #'name:' 'alignBottomCenter' |
|
1026 #'layout:' #(#Rectangle 194 138 206 150) |
|
1027 #'label:' '' |
|
1028 #'model:' #alignBottomCenter |
|
1029 ) |
|
1030 #(#ActionButtonSpec |
|
1031 #'name:' 'alignLeftCenter' |
|
1032 #'layout:' #(#Rectangle 166 122 178 134) |
|
1033 #'label:' '' |
|
1034 #'model:' #alignLeftCenter |
|
1035 ) |
|
1036 #(#ActionButtonSpec |
|
1037 #'name:' 'alignRightCenter' |
|
1038 #'layout:' #(#Rectangle 222 122 234 134) |
|
1039 #'label:' '' |
|
1040 #'model:' #alignRightCenter |
|
1041 ) |
|
1042 #(#ActionButtonSpec |
|
1043 #'name:' 'alignCenter' |
|
1044 #'layout:' #(#Rectangle 194 122 206 134) |
|
1045 #'label:' '' |
|
1046 #'model:' #alignCenter |
|
1047 ) |
|
1048 ) |
|
1049 ) |
|
1050 ) |
|
1051 ! ! |
|
1052 |
|
1053 !UILayoutTool::AlignmentOrigin methodsFor:'accessing'! |
|
1054 |
|
1055 fetch:aView |
|
1056 "fetch alignmentOrigin |
|
1057 " |
|
1058 |layout type extent| |
|
1059 |
|
1060 type := UIPainterView layoutType:aView. |
|
1061 layout := aView geometryLayout. |
|
1062 |
|
1063 layout isLayout ifTrue:[ |
|
1064 (self aspectFor:#leftOffset) value:(layout leftOffset). |
|
1065 (self aspectFor:#leftFraction) value:(layout leftFraction). |
|
1066 (self aspectFor:#topOffset) value:(layout topOffset). |
|
1067 (self aspectFor:#topFraction) value:(layout topFraction). |
|
1068 |
|
1069 type == #AlignmentOrigin ifTrue:[ |
|
1070 (self aspectFor:#leftAlignmentFraction) value:(layout leftAlignmentFraction). |
|
1071 (self aspectFor:#topAlignmentFraction) value:(layout topAlignmentFraction). |
|
1072 ^ self |
|
1073 ] |
|
1074 ] ifFalse:[ |
|
1075 layout := aView computeOrigin. |
|
1076 |
|
1077 (self aspectFor:#leftOffset) value:(layout x). |
|
1078 (self aspectFor:#leftFraction) value:0. |
|
1079 (self aspectFor:#topOffset) value:(layout y). |
|
1080 (self aspectFor:#topFraction) value:0. |
|
1081 ]. |
|
1082 (self aspectFor:#leftAlignmentFraction) value:0. |
|
1083 (self aspectFor:#topAlignmentFraction) value:0. |
|
1084 |
|
1085 |
|
1086 ! |
|
1087 |
|
1088 layout |
|
1089 "returns current layout as alignmentOrigin |
|
1090 " |
|
1091 |layout| |
|
1092 |
|
1093 layout := Smalltalk::AlignmentOrigin new. |
|
1094 |
|
1095 layout leftOffset:((self aspectFor:#leftOffset) value) ? 0. |
|
1096 layout topOffset:((self aspectFor:#topOffset) value) ? 0. |
|
1097 layout leftFraction:((self aspectFor:#leftFraction) value) ? 0. |
|
1098 layout topFraction:((self aspectFor:#topFraction) value) ? 0. |
|
1099 |
|
1100 layout leftAlignmentFraction:((self aspectFor:#leftAlignmentFraction) value) ? 0. |
|
1101 layout topAlignmentFraction:((self aspectFor:#topAlignmentFraction) value) ? 0. |
|
1102 |
|
1103 ^ layout |
|
1104 ! ! |
|
1105 |
|
1106 !UILayoutTool::AlignmentOrigin methodsFor:'alignment'! |
|
1107 |
|
1108 alignBottomCenter |
|
1109 self makeAlignLeft:0.5 top:1 |
|
1110 |
|
1111 |
|
1112 ! |
|
1113 |
|
1114 alignBottomLeft |
|
1115 self makeAlignLeft:0 top:1 |
|
1116 |
|
1117 |
|
1118 ! |
|
1119 |
|
1120 alignBottomRight |
|
1121 self makeAlignLeft:1 top:1 |
|
1122 |
|
1123 |
|
1124 ! |
|
1125 |
|
1126 alignCenter |
|
1127 self makeAlignLeft:0.5 top:0.5 |
|
1128 |
|
1129 |
|
1130 ! |
|
1131 |
|
1132 alignLeftCenter |
|
1133 self makeAlignLeft:0 top:0.5 |
|
1134 |
|
1135 |
|
1136 ! |
|
1137 |
|
1138 alignRightCenter |
|
1139 self makeAlignLeft:1 top:0.5 |
|
1140 |
|
1141 |
|
1142 ! |
|
1143 |
|
1144 alignTopCenter |
|
1145 self makeAlignLeft:0.5 top:0 |
|
1146 |
|
1147 |
|
1148 ! |
|
1149 |
|
1150 alignTopLeft |
|
1151 self makeAlignLeft:0 top:0 |
|
1152 |
|
1153 |
|
1154 ! |
|
1155 |
|
1156 alignTopRight |
|
1157 self makeAlignLeft:1 top:0 |
|
1158 |
|
1159 |
|
1160 ! |
|
1161 |
|
1162 makeAlignLeft:leftAlignmentFraction top:topAlignmentFraction |
|
1163 |lAF tAF lO tO ext| |
|
1164 |
|
1165 lAF := (self aspectFor:#leftAlignmentFraction) value ? 0. |
|
1166 tAF := (self aspectFor:#topAlignmentFraction) value ? 0. |
|
1167 ext := (self aspectFor:#layoutView) computeExtent. |
|
1168 |
|
1169 (self aspectFor:#leftAlignmentFraction) value:leftAlignmentFraction. |
|
1170 (self aspectFor:#topAlignmentFraction) value:topAlignmentFraction. |
|
1171 |
|
1172 lO := (self aspectFor:#leftOffset) value ? 0. |
|
1173 tO := (self aspectFor:#topOffset) value ? 0. |
|
1174 |
|
1175 lO := lO + (ext x * (leftAlignmentFraction - lAF)). |
|
1176 tO := tO + (ext y * (topAlignmentFraction - tAF)). |
|
1177 |
|
1178 (self aspectFor:#leftOffset) value:(lO rounded). |
|
1179 (self aspectFor:#topOffset) value:(tO rounded). |
|
1180 |
|
1181 ! |
|
1182 |
|
1183 makeAlignTopRight |
|
1184 self makeAlignLeft:1 top:0 |
|
1185 |
|
1186 |
|
1187 ! ! |
|
1188 |
|
1189 !UILayoutTool::Extent class methodsFor:'interface specs'! |
|
1190 |
|
1191 windowSpec |
|
1192 "this window spec was automatically generated by the ST/X UIPainter" |
|
1193 |
|
1194 "do not manually edit this - the painter/builder may not be able to |
|
1195 handle the specification if its corrupted." |
|
1196 |
|
1197 " |
|
1198 UIPainter new openOnClass:UILayoutTool::Extent andSelector:#windowSpec |
|
1199 UILayoutTool::Extent new openInterface:#windowSpec |
|
1200 " |
|
1201 "UILayoutTool::Extent open" |
|
1202 |
|
1203 <resource: #canvas> |
|
1204 |
|
1205 ^ |
|
1206 |
|
1207 #(#FullSpec |
|
1208 #'window:' |
|
1209 #(#WindowSpec |
|
1210 #'name:' 'uIPainterView' |
|
1211 #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0) |
|
1212 #'label:' 'unnamed' |
|
1213 #'bounds:' #(#Rectangle 0 0 226 86) |
|
1214 ) |
|
1215 #'component:' |
|
1216 #(#SpecCollection |
|
1217 #'collection:' |
|
1218 #( |
|
1219 #(#LabelSpec |
|
1220 #'name:' 'labelHorizontal' |
|
1221 #'layout:' #(#AlignmentOrigin 73 0 25 0 1 0) |
|
1222 #'label:' 'horizontal:' |
|
1223 #'adjust:' #left |
|
1224 ) |
|
1225 #(#InputFieldSpec |
|
1226 #'name:' 'fieldLeftOffset' |
|
1227 #'layout:' #(#LayoutFrame 78 0 25 0 171 0 43 0) |
|
1228 #'tabable:' true |
|
1229 #'model:' #leftOffset |
|
1230 #'type:' #numberOrNil |
|
1231 ) |
|
1232 #(#LabelSpec |
|
1233 #'name:' 'labelVertical' |
|
1234 #'layout:' #(#AlignmentOrigin 73 0 52 0 1 0) |
|
1235 #'label:' 'vertical:' |
|
1236 #'adjust:' #left |
|
1237 ) |
|
1238 #(#InputFieldSpec |
|
1239 #'name:' 'fieldRightOffset' |
|
1240 #'layout:' #(#LayoutFrame 78 0 52 0 171 0 70 0) |
|
1241 #'tabable:' true |
|
1242 #'model:' #rightOffset |
|
1243 #'type:' #numberOrNil |
|
1244 ) |
|
1245 ) |
|
1246 ) |
|
1247 ) |
|
1248 ! ! |
|
1249 |
|
1250 !UILayoutTool::Extent methodsFor:'accessing'! |
|
1251 |
|
1252 fetch:aView |
|
1253 "fetch extent |
|
1254 " |
|
1255 |extent| |
|
1256 |
|
1257 extent := aView computeExtent. |
|
1258 |
|
1259 (self aspectFor:#leftOffset) value:(extent x). |
|
1260 (self aspectFor:#rightOffset) value:(extent y). |
|
1261 |
|
1262 |
|
1263 ! |
|
1264 |
|
1265 layout |
|
1266 "returns current extent |
|
1267 " |
|
1268 ^ Smalltalk::Point x:(((self aspectFor:#leftOffset) value) ? 0) |
|
1269 y:(((self aspectFor:#rightOffset) value) ? 0) |
|
1270 |
|
1271 ! ! |
|
1272 |
|
1273 !UILayoutTool class methodsFor:'documentation'! |
|
1274 |
|
1275 version |
|
1276 ^ '$Header$' |
|
1277 ! ! |