--- a/Label.st Tue Jan 09 18:29:28 1996 +0100
+++ b/Label.st Tue Jan 09 19:16:58 1996 +0100
@@ -147,321 +147,321 @@
simple (default position is 0@0):
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l label:'hello world'.
+ l := Label in:top.
+ l label:'hello world'.
- top open
+ top open
there is also a creation message which sets the label:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label label:'hello world' in:top.
+ l := Label label:'hello world' in:top.
- top open
+ top open
placement:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l label:'hello world'.
- l origin:50@100.
+ l := Label in:top.
+ l label:'hello world'.
+ l origin:50@100.
- top open
+ top open
level:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:5.
- l label:'hello world'.
- l origin:50@100.
+ l := Label in:top.
+ l level:5.
+ l label:'hello world'.
+ l origin:50@100.
- top open
+ top open
another level:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:-1.
- l label:'hello world'.
- l origin:50@100.
+ l := Label in:top.
+ l level:-1.
+ l label:'hello world'.
+ l origin:50@100.
- top open
+ top open
colors & font:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:-1.
- l font:(Font family:'Times' size:18).
- l foregroundColor:Color yellow.
- l backgroundColor:Color red.
- l label:'hello world'.
- l origin:50@100.
+ l := Label in:top.
+ l level:-1.
+ l font:(Font family:'Times' size:18).
+ l foregroundColor:Color yellow.
+ l backgroundColor:Color red.
+ l label:'hello world'.
+ l origin:50@100.
- top open
+ top open
border & colors:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:0.
- l borderWidth:1.
- l borderColor:Color red.
- l foregroundColor:Color green darkened.
- l backgroundColor:Color green lightened.
- l label:'hello world'.
- l origin:50@100.
+ l := Label in:top.
+ l level:0.
+ l borderWidth:1.
+ l borderColor:Color red.
+ l foregroundColor:Color green darkened.
+ l backgroundColor:Color green lightened.
+ l label:'hello world'.
+ l origin:50@100.
- top open
+ top open
adjust (resize to see):
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l borderWidth:1.
- l label:'default - centered'.
- l origin:0.0@40.
- l width:1.0.
+ l := Label in:top.
+ l borderWidth:1.
+ l label:'default - centered'.
+ l origin:0.0@40.
+ l width:1.0.
- l := Label in:top.
- l borderWidth:1.
- l adjust:#left.
- l label:'left adjust'.
- l origin:0.0@70.
- l width:1.0.
+ l := Label in:top.
+ l borderWidth:1.
+ l adjust:#left.
+ l label:'left adjust'.
+ l origin:0.0@70.
+ l width:1.0.
- l := Label in:top.
- l borderWidth:1.
- l adjust:#centerLeft.
- l label:'centerLeft adjust and a bit too long'.
- l origin:0.0@100.
- l width:1.0.
+ l := Label in:top.
+ l borderWidth:1.
+ l adjust:#centerLeft.
+ l label:'centerLeft adjust and a bit too long'.
+ l origin:0.0@100.
+ l width:1.0.
- l := Label in:top.
- l borderWidth:1.
- l adjust:#right.
- l label:'right adjust'.
- l origin:0.0@130.
- l width:1.0.
+ l := Label in:top.
+ l borderWidth:1.
+ l adjust:#right.
+ l label:'right adjust'.
+ l origin:0.0@130.
+ l width:1.0.
- l := Label in:top.
- l borderWidth:1.
- l adjust:#centerRight.
- l label:'centerRight adjust and a bit too long'.
- l origin:0.0@160.
- l width:1.0.
+ l := Label in:top.
+ l borderWidth:1.
+ l adjust:#centerRight.
+ l label:'centerRight adjust and a bit too long'.
+ l origin:0.0@160.
+ l width:1.0.
- top open
+ top open
fitting-adjust (resize to see):
Warning: #fit is experimental and should not be used.
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label origin:0.25 @ 0.25 corner:0.75@0.75 in:top.
- l label:'stretch'.
- l level:-1.
- l adjust:#fit.
+ l := Label origin:0.25 @ 0.25 corner:0.75@0.75 in:top.
+ l label:'stretch'.
+ l level:-1.
+ l adjust:#fit.
- top open
+ top open
or:
Warning: #fit is experimental and should not be used.
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label origin:0.25 @ 0.25 corner:0.75@0.75 in:top.
- l label:(Image fromFile:'bitmaps/SBrowser.xbm').
- l level:-1.
- l adjust:#fit.
+ l := Label origin:0.25 @ 0.25 corner:0.75@0.75 in:top.
+ l label:(Image fromFile:'bitmaps/SBrowser.xbm').
+ l level:-1.
+ l adjust:#fit.
- top open
+ top open
just a reminder, that instead of doing placement manually
as in ...:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l borderWidth:1.
- l label:'default - centered'.
- l origin:0.1@70.
- l width:0.8.
+ l := Label in:top.
+ l borderWidth:1.
+ l label:'default - centered'.
+ l origin:0.1@70.
+ l width:0.8.
- l := Label in:top.
- l borderWidth:1.
- l adjust:#left.
- l label:'left adjust'.
- l origin:0.1@100.
- l width:0.8.
+ l := Label in:top.
+ l borderWidth:1.
+ l adjust:#left.
+ l label:'left adjust'.
+ l origin:0.1@100.
+ l width:0.8.
- l := Label in:top.
- l borderWidth:1.
- l adjust:#right.
- l label:'right adjust'.
- l origin:0.1@130.
- l width:0.8.
+ l := Label in:top.
+ l borderWidth:1.
+ l adjust:#right.
+ l label:'right adjust'.
+ l origin:0.1@130.
+ l width:0.8.
- top open
+ top open
... it is much easier, to use a geometry handler, such as
a VerticalPanel. Try:
- |top panel l|
+ |top panel l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- panel := VerticalPanelView
- origin:0.0 @ 0.0
- corner:1.0 @ 1.0
- in:top.
+ panel := VerticalPanelView
+ origin:0.0 @ 0.0
+ corner:1.0 @ 1.0
+ in:top.
- panel horizontalLayout:#fit.
- panel verticalLayout:#center.
+ panel horizontalLayout:#fit.
+ panel verticalLayout:#center.
- l := Label in:panel.
- l borderWidth:1.
- l label:'default - centered'.
+ l := Label in:panel.
+ l borderWidth:1.
+ l label:'default - centered'.
- l := Label in:panel.
- l borderWidth:1.
- l adjust:#left.
- l label:'left adjust'.
+ l := Label in:panel.
+ l borderWidth:1.
+ l adjust:#left.
+ l label:'left adjust'.
- l := Label in:panel.
- l borderWidth:1.
- l adjust:#right.
- l label:'right adjust'.
+ l := Label in:panel.
+ l borderWidth:1.
+ l adjust:#right.
+ l label:'right adjust'.
- top open
+ top open
labels with bitmaps or images:
- |top l|
+ |top l|
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:-1.
- l label:((Image fromFile:'bitmaps/garfield.gif') magnifyBy:0.2 @ 0.2).
- l origin:50@100.
+ l := Label in:top.
+ l level:-1.
+ l label:((Image fromFile:'bitmaps/garfield.gif') magnifyBy:0.2 @ 0.2).
+ l origin:50@100.
- top open
+ top open
Channel operation
-----------------
- |top panel logoChannel fgChannel bgChannel l b|
+ |top panel logoChannel fgChannel bgChannel l b|
- top := StandardSystemView new.
- top extent:(450 @ 200).
+ top := StandardSystemView new.
+ top extent:(450 @ 200).
- panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+ panel := HorizontalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
- l := Label in:panel.
- l level:-1.
- l label:'change my colors'.
- l origin:50@100.
- l sizeFixed:true.
+ l := Label in:panel.
+ l level:-1.
+ l label:'change my colors'.
+ l origin:50@100.
+ l sizeFixed:true.
- fgChannel := Color blue asValue.
- bgChannel := Color grey asValue.
- logoChannel := 'change me' asValue.
+ fgChannel := Color blue asValue.
+ bgChannel := Color grey asValue.
+ logoChannel := 'change me' asValue.
- b := Toggle label:'change fg' in:panel. b showLamp:false; onLevel:-2.
- b pressAction:[fgChannel value:Color red].
- b releaseAction:[fgChannel value:Color blue].
+ b := Toggle label:'change fg' in:panel. b showLamp:false; onLevel:-2.
+ b pressAction:[fgChannel value:Color red].
+ b releaseAction:[fgChannel value:Color blue].
- b := Toggle label:'change bg' in:panel.
- b pressAction:[bgChannel value:Color yellow].
- b releaseAction:[bgChannel value:Color grey].
+ b := Toggle label:'change bg' in:panel.
+ b pressAction:[bgChannel value:Color yellow].
+ b releaseAction:[bgChannel value:Color grey].
- b := Toggle label:'change text' in:panel.
- b pressAction:[logoChannel value:'wow'].
- b releaseAction:[logoChannel value:'not bad' ].
+ b := Toggle label:'change text' in:panel.
+ b pressAction:[logoChannel value:'wow'].
+ b releaseAction:[logoChannel value:'not bad' ].
- l labelChannel:logoChannel.
- l foregroundChannel:fgChannel.
- l backgroundChannel:bgChannel.
+ l labelChannel:logoChannel.
+ l foregroundChannel:fgChannel.
+ l backgroundChannel:bgChannel.
- top open
+ top open
multiple labels on one channel:
- |l1 l2 b conv|
+ |l1 l2 b conv|
- l1 := Label label:'label1'.
+ l1 := Label label:'label1'.
- l2 := Label label:'label2'.
+ l2 := Label label:'label2'.
- b := Button label:'change'.
- conv := (ConvertedValue new
- conversion:[:input |
- input ifTrue:[
- Color red
- ] ifFalse:[
- Color blue
- ]]).
- conv value:false.
+ b := Button label:'change'.
+ conv := (ConvertedValue new
+ conversion:[:input |
+ input ifTrue:[
+ Color red
+ ] ifFalse:[
+ Color blue
+ ]]).
+ conv value:false.
- b controller pressChannel:conv.
- l1 foregroundChannel:conv.
- l2 foregroundColor:Color white; backgroundChannel:conv.
+ b controller pressChannel:conv.
+ l1 foregroundChannel:conv.
+ l2 foregroundColor:Color white; backgroundChannel:conv.
- b open.
- l1 open.
- l2 open.
+ b open.
+ l1 open.
+ l2 open.
MVC operation
@@ -469,208 +469,208 @@
model provides the label):
(have to use a plug to simulate a model which responds to
- the #someAspect message):
+ the #someAspect message):
- |top l model|
+ |top l model|
- model := Plug new.
- model respondTo:#someAspect with:['models labelString'].
+ model := Plug new.
+ model respondTo:#someAspect with:['models labelString'].
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l model:model; labelMessage:#someAspect.
+ l := Label in:top.
+ l model:model; labelMessage:#someAspect.
- top open
- ...
+ top open
+ ...
- model changed:#someAspect
- ...
+ model changed:#someAspect
+ ...
concrete example (track a counters value):
(here, the default aspect #value is used both to notify the label about
changes and to aquire a new value from the model).
- |top l model|
+ |top l model|
- model := ValueHolder new.
- model value:0.
- [
- 1 to:20 do:[:i |
- (Delay forSeconds:1) wait.
- model value:i
- ].
- top destroy
- ] fork.
+ model := ValueHolder new.
+ model value:'0'.
+ [
+ 1 to:20 do:[:i |
+ (Delay forSeconds:1) wait.
+ model value:i printString
+ ].
+ top destroy
+ ] fork.
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:-1.
- l model:model; labelMessage:#value.
+ l := Label in:top.
+ l level:-1.
+ l model:model; labelMessage:#value.
- top open
+ top open
with a printConverter:
- |top l model|
+ |top l model|
- model := Date today asValue.
- [
- 1 to:50 do:[:i |
- (Delay forSeconds:1) wait.
- model value:(model value addDays:1)
- ].
- top destroy
- ] fork.
+ model := Date today asValue.
+ [
+ 1 to:50 do:[:i |
+ (Delay forSeconds:1) wait.
+ model value:(model value addDays:1)
+ ].
+ top destroy
+ ] fork.
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label in:top.
- l level:-1.
- l converter:(PrintConverter new initForDate).
- l model:model; labelMessage:#value.
+ l := Label in:top.
+ l level:-1.
+ l converter:(PrintConverter new initForDate).
+ l model:model; labelMessage:#value.
- top open
+ top open
model changes aspect after a while; two labels on the same model:
- |top l model|
+ |top l model|
- model := Plug new.
- model respondTo:#labelValue1 with:['models labelString1'].
- model respondTo:#labelValue2 with:['models labelString2'].
+ model := Plug new.
+ model respondTo:#labelValue1 with:['models labelString1'].
+ model respondTo:#labelValue2 with:['models labelString2'].
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
- l model:model; aspect:#someAspect; labelMessage:#labelValue1.
- l := Label origin:0.0@0.5 corner:1.0@1.0 in:top.
- l model:model; aspect:#someAspect; labelMessage:#labelValue2.
+ l := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
+ l model:model; aspect:#someAspect; labelMessage:#labelValue1.
+ l := Label origin:0.0@0.5 corner:1.0@1.0 in:top.
+ l model:model; aspect:#someAspect; labelMessage:#labelValue2.
- top open.
+ top open.
- (Delay forSeconds:5) wait.
- model respondTo:#labelValue1 with:['new string1'].
- model respondTo:#labelValue2 with:['new string2'].
+ (Delay forSeconds:5) wait.
+ model respondTo:#labelValue1 with:['new string1'].
+ model respondTo:#labelValue2 with:['new string2'].
- model changed:#someAspect
+ model changed:#someAspect
plugged MVC operation (getBlock returns the label):
- |top l model|
+ |top l model|
- model := PluggableAdaptor new
- getBlock:[:m | 'hello']
- putBlock:nil
- updateBlock:nil.
+ model := PluggableAdaptor new
+ getBlock:[:m | 'hello']
+ putBlock:nil
+ updateBlock:nil.
- top := StandardSystemView new.
- top extent:(200 @ 200).
+ top := StandardSystemView new.
+ top extent:(200 @ 200).
- l := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
- l model:model; labelMessage:#value.
+ l := Label origin:0.0@0.0 corner:1.0@0.5 in:top.
+ l model:model; labelMessage:#value.
- top open.
+ top open.
use different label-selectors to access fields of a complex model:
- |top panel model|
+ |top panel model|
- model := Plug new.
- model respondTo:#field1 with:['value1'].
- model respondTo:#field2 with:['value2'].
- model respondTo:#field3 with:['value3'].
- model respondTo:#field4 with:['value4'].
+ model := Plug new.
+ model respondTo:#field1 with:['value1'].
+ model respondTo:#field2 with:['value2'].
+ model respondTo:#field3 with:['value3'].
+ model respondTo:#field4 with:['value4'].
- top := StandardSystemView new.
+ top := StandardSystemView new.
- panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
- panel elementsChangeSize:true.
+ panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+ panel elementsChangeSize:true.
- panel addSubView:((Label on:model) labelMessage:#field1).
- panel addSubView:((Label on:model) labelMessage:#field2).
- panel addSubView:((Label on:model) labelMessage:#field3).
- panel addSubView:((Label on:model) labelMessage:#field4).
+ panel addSubView:((Label on:model) labelMessage:#field1).
+ panel addSubView:((Label on:model) labelMessage:#field2).
+ panel addSubView:((Label on:model) labelMessage:#field3).
+ panel addSubView:((Label on:model) labelMessage:#field4).
- top extent:(200 @ 200).
- top open.
+ top extent:(200 @ 200).
+ top open.
- (Delay forSeconds:5) wait.
+ (Delay forSeconds:5) wait.
- model respondTo:#field2 with:['new value2'].
- model changed:#value
+ model respondTo:#field2 with:['new value2'].
+ model changed:#value
same as above, using default aspects in the label, and an adaptor
to translate aspects:
- |top panel model v1|
+ |top panel model v1|
- model := Plug new.
- model respondTo:#field1 with:[v1].
- model respondTo:#field1: with:[:arg | v1 := arg. model changed:#field1].
- model respondTo:#field2 with:['value2'].
- model respondTo:#field2: with:[:arg |].
- model respondTo:#field3 with:['value3'].
- model respondTo:#field3: with:[:arg |].
- model respondTo:#field4 with:['value4'].
- model respondTo:#field4: with:[:arg |].
+ model := Plug new.
+ model respondTo:#field1 with:[v1].
+ model respondTo:#field1: with:[:arg | v1 := arg. model changed:#field1].
+ model respondTo:#field2 with:['value2'].
+ model respondTo:#field2: with:[:arg |].
+ model respondTo:#field3 with:['value3'].
+ model respondTo:#field3: with:[:arg |].
+ model respondTo:#field4 with:['value4'].
+ model respondTo:#field4: with:[:arg |].
- top := StandardSystemView new.
+ top := StandardSystemView new.
- panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
- panel elementsChangeSize:true.
+ panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+ panel elementsChangeSize:true.
- panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field1)) labelMessage:#value).
- panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field2)) labelMessage:#value).
- panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field3)) labelMessage:#value).
- panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field4)) labelMessage:#value).
+ panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field1)) labelMessage:#value).
+ panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field2)) labelMessage:#value).
+ panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field3)) labelMessage:#value).
+ panel addSubView:((Label on:((AspectAdaptor subject:model) forAspect:#field4)) labelMessage:#value).
- top extent:(200 @ 200).
- top open.
+ top extent:(200 @ 200).
+ top open.
- (Delay forSeconds:5) wait.
+ (Delay forSeconds:5) wait.
- model field1:'new value1'.
+ model field1:'new value1'.
use an adapter to access fields of a complex model:
- |top l panel model|
+ |top l panel model|
- model := #('one' 'two' 'three') asValue.
+ model := #('one' 'two' 'three') asValue.
- top := StandardSystemView new.
+ top := StandardSystemView new.
- panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
- panel elementsChangeSize:true.
+ panel := VerticalPanelView origin:0.0@0.0 corner:1.0@1.0 in:top.
+ panel elementsChangeSize:true.
- panel addSubView:((Label on:(ProtocolAdaptor
- subjectChannel:model
- accessPath:#(1))) labelMessage:#value).
- panel addSubView:((Label on:(ProtocolAdaptor
- subjectChannel:model
- accessPath:#(2))) labelMessage:#value).
- panel addSubView:((Label on:(ProtocolAdaptor
- subjectChannel:model
- accessPath:#(3))) labelMessage:#value).
+ panel addSubView:((Label on:(ProtocolAdaptor
+ subjectChannel:model
+ accessPath:#(1))) labelMessage:#value).
+ panel addSubView:((Label on:(ProtocolAdaptor
+ subjectChannel:model
+ accessPath:#(2))) labelMessage:#value).
+ panel addSubView:((Label on:(ProtocolAdaptor
+ subjectChannel:model
+ accessPath:#(3))) labelMessage:#value).
- top extent:(200 @ 200).
- top open.
+ top extent:(200 @ 200).
+ top open.
- (Delay forSeconds:5) wait.
+ (Delay forSeconds:5) wait.
- model value:#('oneone' 'twotwo' 'threethree').
+ model value:#('oneone' 'twotwo' 'threethree').
"
! !
@@ -1374,5 +1374,5 @@
!Label class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg/Label.st,v 1.41 1995-12-17 14:48:40 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg/Label.st,v 1.42 1996-01-09 18:16:58 cg Exp $'
! !