UIPainter can now resize subviews of PanelViews
authorStefan Vogel <sv@exept.de>
Wed, 25 Mar 2009 14:05:57 +0100
changeset 2481 b8999543e2b4
parent 2480 6effcbfba4e3
child 2482 62831852b487
UIPainter can now resize subviews of PanelViews
UIObjectView.st
--- a/UIObjectView.st	Wed Mar 25 12:58:07 2009 +0100
+++ b/UIObjectView.st	Wed Mar 25 14:05:57 2009 +0100
@@ -1288,6 +1288,21 @@
   ^ 1
 !
 
+resizableSelection
+    "checks whether the selection is not empty and all selected instances
+     can be resized. If true the selection is returned otherwise nil
+    "
+    |coll|
+
+    self hasSelection ifTrue:[
+        coll := self selection.        
+        (self canResize:coll) ifTrue:[
+            ^ coll
+        ]
+    ].
+    ^ nil
+!
+
 selectNextUpInHierarchy
     self halt:#ca.
 !
@@ -1437,48 +1452,7 @@
     relOrgX := relOrg x - bwWidth.
     relOrgY := relOrg y - bwWidth.
     width   := aView width  + bwWidth + bwWidth.
-    height  := aView height + bwWidth + bwWidth.
-
-    size to:1 by:-1 do:[:anIndex|
-        damage := theDamages at:anIndex.
-
-        "/ compute the rectangle into the view
-        y := damage top  - relOrgY.
-        x := damage left - relOrgX.
-        w := damage width.
-        h := damage height.
-
-        isRepaired := true.
-
-        x     < 0      ifTrue:[ w := w + x. x := 0. isRepaired := false ].
-        y     < 0      ifTrue:[ h := h + y. y := 0. isRepaired := false ].
-        x + w > width  ifTrue:[ w := width  - x.    isRepaired := false ].
-        y + h > height ifTrue:[ h := height - y.    isRepaired := false ].
-
-        (w > 0 and:[h > 0]) ifTrue:[
-            bwWidth ~~ 0 ifTrue:[
-                color isNil ifTrue:[
-                    "/ must force redraw of border
-                    color := aView borderColor.
-                    aView borderColor:(Color colorId:1).
-                    aView borderColor:color.
-                ].
-                w := w - bwWidth.
-                h := h - bwWidth.
-
-                (x := x - bwWidth) < 0 ifTrue:[w := w + x. x := 0].
-                (y := y - bwWidth) < 0 ifTrue:[h := h + y. y := 0].
-
-                (w > 0 and:[h > 0])  ifFalse:[w := 0].
-            ].
-
-            w > 0 ifTrue:[
-                aView clearRectangleX:x y:y width:w height:h.
-                aView exposeX:x y:y width:w height:h
-            ].
-            isRepaired ifTrue:[ theDamages removeIndex:anIndex ].
-        ]
-    ].
+    height  := aView height + bwWidth + bwWid
 !
 
 selection
@@ -2177,7 +2151,7 @@
     "
     |lmost rmost sel|
 
-    (sel := self moveableSelection) notNil ifTrue:[
+    (sel := self resizableSelection) notNil ifTrue:[
         self withSelectionHiddenDo:[
             self numberOfSelections > 1 ifTrue:[
                 lmost := (sel first) computeOrigin x.
@@ -2185,18 +2159,26 @@
 
                 self transaction:#alignLeftRight selectionDo:[:aView|
                     |layout|
-                    layout := self class asLayoutFrameFromView:aView.
-
-                    layout notNil ifTrue:[
+
+                    aView superView isLayoutWrapper ifTrue:[
+                        "change size only"
                         self createUndoLayout:aView.
-                        aView geometryLayout:layout.
-
-                        undoHistory withoutTransactionDo:[
-                            self shiftLayout:aView left:(lmost - (aView computeOrigin x))
-                                                  right:(rmost - (aView computeCorner x)).
+                        aView width:sel first width.
+                        self elementChangedSize:aView
+                    ] ifFalse:[
+                        layout := self class asLayoutFrameFromView:aView.
+
+                        layout notNil ifTrue:[
+                            self createUndoLayout:aView.
+                            aView geometryLayout:layout.
+
+                            undoHistory withoutTransactionDo:[
+                                self shiftLayout:aView left:(lmost - (aView computeOrigin x))
+                                                      right:(rmost - (aView computeCorner x)).
+                            ].
+                            self elementChangedSize:aView
                         ].
-                        self elementChangedSize:aView
-                    ]
+                    ].
                 ]
             ] ifFalse:[
                 self extentToFrame:#LeftRight do:[:aLayout|
@@ -2273,7 +2255,7 @@
     "
     |tmost bmost sel|
 
-    (sel := self moveableSelection) notNil ifTrue:[
+    (sel := self resizableSelection) notNil ifTrue:[
         self withSelectionHiddenDo:[
             self numberOfSelections > 1 ifTrue:[
                 tmost := (sel first) computeOrigin y.
@@ -2281,18 +2263,25 @@
 
                 self transaction:#alignTopBottom selectionDo:[:aView|
                     |layout|
-                    layout := self class asLayoutFrameFromView:aView.
-
-                    layout notNil ifTrue:[
+                    aView superView isLayoutWrapper ifTrue:[
+                        "change size only"
                         self createUndoLayout:aView.
-                        aView geometryLayout:layout.
-
-                        undoHistory withoutTransactionDo:[
-                            self shiftLayout:aView top:(tmost - (aView computeOrigin y))
-                                                bottom:(bmost - (aView computeCorner y)).
+                        aView height:sel first height.
+                        self elementChangedSize:aView
+                    ] ifFalse:[
+                        layout := self class asLayoutFrameFromView:aView.
+
+                        layout notNil ifTrue:[
+                            self createUndoLayout:aView.
+                            aView geometryLayout:layout.
+
+                            undoHistory withoutTransactionDo:[
+                                self shiftLayout:aView top:(tmost - (aView computeOrigin y))
+                                                    bottom:(bmost - (aView computeCorner y)).
+                            ].
+                            self elementChangedSize:aView
                         ].
-                        self elementChangedSize:aView
-                    ]
+                    ].
                 ]
             ] ifFalse:[
                 self extentToFrame:#TopBottom do:[:aLayout|