component handling
authorClaus Gittinger <cg@exept.de>
Wed, 13 May 2009 18:40:04 +0200
changeset 2523 1f315c18f4da
parent 2522 45f29cf0cc5e
child 2524 759b4b908fcb
component handling
UIPainter.st
--- a/UIPainter.st	Wed May 13 14:59:09 2009 +0200
+++ b/UIPainter.st	Wed May 13 18:40:04 2009 +0200
@@ -6489,15 +6489,16 @@
 
 doStepIn
     "move the currently selected widget into the next available container below"
-
+    
     |item oldParentItem newParentItem idx|
 
     item := self selectedNode.
     (item notNil and:[(oldParentItem := item parent) notNil]) ifTrue:[
         idx := (oldParentItem indexOfChild:item) + 1.
-        newParentItem := oldParentItem children detect:[:eachChild|
-            eachChild contents spec class supportsSubComponents
-        ] startingAt:idx ifNone:nil.
+        newParentItem := oldParentItem children 
+                    detect:[:eachChild | eachChild contents spec class supportsSubComponents]
+                    startingAt:idx
+                    ifNone:nil.
         newParentItem notNil ifTrue:[
             self doChangeParentOfSelectedItemTo:newParentItem
         ].
@@ -6516,17 +6517,18 @@
 doStepOver:anIndex
     "moves child 'anIndex' forward or backward in list of children"
 
-    |item idx size prnt spVw view canvas|
+    |item idx size parentItem parentItemsView itemsView canvas|
 
     self askForSelectionChangeAllowed ifFalse:[^ self].
 
     (    (item := self selectedNode) isNil
-     or:[(prnt := item parent) isNil
-     or:[(size := prnt children size) < 2
-     or:[(idx  := prnt indexOfChild:item) == 0]]]
+     or:[(parentItem := item parent) isNil
+     or:[(size := parentItem children size) < 2
+     or:[(idx  := parentItem indexOfChild:item) == 0]]]
     ) ifTrue:[
         ^ self
     ].
+
     idx := idx + anIndex.
 
     idx < 1 ifTrue:[idx := size]
@@ -6534,20 +6536,28 @@
 
     self setSelection:nil.
     model remove:item.
-    model add:item beforeIndex:idx below:prnt.
-
-    idx    := prnt indexOfChild:item.
-    view   := item contents view.
-    spVw   := prnt contents view.
+    model add:item beforeIndex:idx below:parentItem.
+
+    idx := parentItem indexOfChild:item.
+    itemsView := item contents view.
+    parentItemsView := parentItem contents view.
+
     canvas := self canvas.
-
     canvas hideSelection.
 
-    spVw changeSequenceOrderFor:view to:idx.
-
-    spVw specClass isLayoutContainer ifFalse:[
+    itemsView isView ifFalse:[
+        "/ a component - has its own collection (and therefore indexing) - sigh
+        idx := idx - ((1 to:idx-1) count:[:i | (parentItem children at:i) contents view isView]).
+        parentItemsView changeSequenceOrderFor:itemsView to:idx.
+    ] ifTrue:[
+        "/ a view - has its own collection (and therefore indexing) - sigh
+        idx := idx - ((1 to:idx-1) count:[:i | (parentItem children at:i) contents view isView not]).
+        parentItemsView changeSequenceOrderFor:itemsView to:idx.
+    ].
+
+    parentItemsView specClass isLayoutContainer ifFalse:[
         "/ spVw components notEmptyOrNil ifTrue:[ self halt ].
-        spVw subViews do:[:v| v raise ].
+        parentItemsView subViews do:[:v| v raise ].
     ].
     canvas showSelection.
     self selectNode:item.