new adjusts: #leftRight and #rightLeft (sounds wierd - mhmh)
authorClaus Gittinger <cg@exept.de>
Sun, 04 Feb 1996 21:40:21 +0100
changeset 318 73ea409232c0
parent 317 f23de8b78f5e
child 319 d78f5fbdee27
new adjusts: #leftRight and #rightLeft (sounds wierd - mhmh)
Label.st
--- a/Label.st	Wed Jan 31 02:53:04 1996 +0100
+++ b/Label.st	Sun Feb 04 21:40:21 1996 +0100
@@ -67,8 +67,9 @@
 
 	aLabel adjust:how
 
-    where how is one of the symbols left, #right, #center, #centerLeft or
-    #centerRight (see the comment in Label>>adjust:). The default is #center.
+    where how is one of the symbols left, #right, #center, #centerLeft,
+    #centerRight, #leftRight or #rightLeft (see the comment in Label>>adjust:). 
+    The default is #center.
 
     model-less operation (ok for static labels):
       if no model is set, the labels contents is set with:
@@ -147,321 +148,368 @@
 
 
     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|
+    different adjusts (resize to see):    
+	|top l|
 
-        top := StandardSystemView new.
-        top extent:(200 @ 200).
+	top := StandardSystemView new.
+	top extent:(300 @ 250).
+	top label:'make me smaller'.
+
+	l := Label in:top.
+	l borderWidth:1.
+	l label:'default - #centered'.
+	l origin:0.1@40.
+	l width:0.8.
 
-        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.1@70.
+	l width:0.8.
 
-        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:#right.
+	l label:'#right adjust'.
+	l origin:0.1@100.
+	l width:0.8.
 
-        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 with a long text'.
+	l origin:0.1@130.
+	l width:0.8.
+
+	l := Label in:top.
+	l borderWidth:1.
+	l adjust:#centerRight.
+	l label:'#centerRight adjust with a long text'.
+	l origin:0.1@160.
+	l width:0.8.
 
-        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:#leftRight.
+	l label:'#leftRight adjust with a long text'.
+	l origin:0.1@190.
+	l width:0.8.
 
-        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:#rightLeft.
+	l label:'#rightLeft adjust with a long text'.
+	l origin:0.1@220.
+	l width:0.8.
 
-        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.1 @ 0.0 
+			corner:0.9 @ 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 
+     that even works with #fit:
+
+	|top l|
+
+	top := StandardSystemView new.
+	top extent:(200 @ 200).
+
+	l := Label in:top.
+	l adjust:#fit.
+	l level:-1.
+	l label:(Image fromFile:'bitmaps/garfield.gif').
+	l origin:0.2@0.2 corner:0.8@0.8.
+
+	top open
+
+
+     notice, that Buttons inherit from Label; thus:
+
+	|top b|
+
+	top := StandardSystemView new.
+	top extent:(200 @ 200).
+
+	b := Button in:top.
+	b adjust:#fit.
+	b label:(Image fromFile:'bitmaps/garfield.gif').
+	b origin:0.2@0.2 corner:0.8@0.8.
+	b action:[Transcript showCr:'wow'].
+
+	top open
+
+
+     Channel operation (controlling gf, bg and labelText via ValueHolders)
      -----------------
 
-        |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 +517,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 printString
-            ].
-            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').
 "
 ! !
 
@@ -705,11 +753,11 @@
 updateStyleCache
     DefaultForegroundColor := StyleSheet colorAt:'labelForegroundColor'.
     DefaultForegroundColor isNil ifTrue:[
-        DefaultForegroundColor := StyleSheet colorAt:'foregroundColor' default:Black.
+	DefaultForegroundColor := StyleSheet colorAt:'foregroundColor' default:Black.
     ].
     DefaultBackgroundColor := StyleSheet colorAt:'labelBackgroundColor'.
     DefaultBackgroundColor isNil ifTrue:[
-        DefaultBackgroundColor := StyleSheet colorAt:'backgroundColor'.
+	DefaultBackgroundColor := StyleSheet colorAt:'backgroundColor'.
     ].
     DefaultFont := StyleSheet fontAt:'labelFont'.
 
@@ -776,8 +824,8 @@
     "set the background color"
 
     aColor ~~ bgColor ifTrue:[
-        bgColor := aColor on:device.
-        shown ifTrue:[self redraw]
+	bgColor := aColor on:device.
+	shown ifTrue:[self redraw]
     ]
 
     "Modified: 17.12.1995 / 15:09:03 / cg"
@@ -793,8 +841,8 @@
     "set the foreground color"
 
     aColor ~~ fgColor ifTrue:[
-        fgColor := aColor on:device.
-        shown ifTrue:[self redraw]
+	fgColor := aColor on:device.
+	shown ifTrue:[self redraw]
     ].
 
     "Modified: 17.12.1995 / 15:09:15 / cg"
@@ -886,12 +934,23 @@
      #left        -> left adjust logo
      #right       -> right adjust logo
      #center      -> center logo
-     #centerRight -> center logo; if no fit, right adjust
+
+     #centerRight -> center logo if it fits; 
+		     if it does not fit, right adjust
 		     (use with filenames, where the interesting part is
 		      at the right if the label is too small)
-     #centerLeft  -> center logo; if it does not fit, left adjust it
+     #centerLeft  -> center logo if it fits; 
+		     if it does not fit, left adjust it
 		     (use with strings where the interesting part is at the
 		      left if the label is too small)
+
+     #leftRight   -> left adjust logo if it fits
+		     if it does not fit, right adjust
+		     (use with filenames, where the interesting part is
+		      at the right if the label is too small)
+
+     #rightLeft   -> right adjust logo if it fits
+		     if it does not fit, left adjust
     "
 
     (adjust ~~ how) ifTrue:[
@@ -1100,9 +1159,9 @@
 !Label methodsFor:'private'!
 
 computeLabelOrigin
-    "(re)compute the origin of the label whenever label or font changes"
+    "(re)compute the origin of the label whenever label, font or view-size changes"
 
-    |x y|
+    |x y a|
 
     labelHeight isNil ifTrue:[^ self].
 
@@ -1113,7 +1172,7 @@
 
     "if it does not fit, should we make the origin visible,
      or the center (for text, the center seems better. For images,
-     I dont really know ehich is better ...
+     I dont really know which is better ...
      The commented code below makes the origin visible
    "
 "/    (labelHeight < height) ifTrue:[
@@ -1127,29 +1186,43 @@
 
     labelOriginY := y.
 
-    (((adjust == #center) 
-     or:[adjust == #centerRight])
-     or:[adjust == #centerLeft]) ifTrue:[
-	" center text/form in button "
-	x := (width - labelWidth) // 2.
-	(width < labelWidth) ifTrue:[
-	    "no fit"
-	    (adjust == #centerLeft) ifTrue:[
-		x := margin
+    a := adjust.
+    (width < labelWidth) ifTrue:[
+	((adjust == #centerRight) or:[adjust == #leftRight]) ifTrue:[
+	    a := #right
+	] ifFalse:[
+	    ((adjust == #centerLeft) or:[adjust == #rightLeft]) ifTrue:[
+		a := #left
+	    ].
+	]
+    ] ifFalse:[
+	((adjust == #centerRight) or:[adjust == #centerLeft]) ifTrue:[
+	    a := #center
+	] ifFalse:[
+	    adjust == #leftRight ifTrue:[
+		a := #left
 	    ] ifFalse:[
-		(adjust == #centerRight) ifTrue:[
-		    x := width - labelWidth - margin
+		adjust == #rightLeft ifTrue:[
+		    a := #right
 		]
 	    ]
 	]
+    ].
+
+    (a == #center) ifTrue:[
+	" center text/form in button "
+	x := (width - labelWidth) // 2.
     ] ifFalse:[
-	(adjust == #left) ifTrue:[
+	(a == #left) ifTrue:[
 	    x := margin
 	] ifFalse:[
+	    "/ #right
 	    x := width - labelWidth - margin
 	]
     ].
     labelOriginX := x
+
+    "Modified: 4.2.1996 / 21:03:17 / cg"
 !
 
 computeLabelSize
@@ -1228,12 +1301,12 @@
     |extra|
 
     logo isNil ifTrue:[
-        self label:''
+	self label:''
     ].
 
     logo notNil ifTrue:[
-        extra := margin * 2.
-        ^ (labelWidth + extra + hSpace) @ (labelHeight + extra + vSpace)
+	extra := margin * 2.
+	^ (labelWidth + extra + hSpace) @ (labelHeight + extra + vSpace)
     ]. 
         
     ^ super preferredExtent
@@ -1378,5 +1451,5 @@
 !Label class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg/Label.st,v 1.44 1996-01-26 17:32:04 ah Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg/Label.st,v 1.45 1996-02-04 20:40:21 cg Exp $'
 ! !