SelectionInTreeView.st
changeset 1972 d88252f4c668
parent 1887 b47b3cb2515b
child 2014 3052fe815bcb
--- a/SelectionInTreeView.st	Sat Apr 28 12:38:52 2001 +0200
+++ b/SelectionInTreeView.st	Thu May 17 13:10:34 2001 +0200
@@ -2218,6 +2218,25 @@
 
 !
 
+selectNodes:aCollectionOfNodes
+    |selIndexCollection|
+
+    selIndexCollection := aCollectionOfNodes collect:[:eachNode | listOfNodes identityIndexOf:eachNode].
+    selIndexCollection := selIndexCollection reject:[:eachIndex | eachIndex == 0].
+    self selection:selIndexCollection.
+
+"/    first := true.
+"/    aCollectionOfNodes do:[:eachNode |
+"/        first ifTrue:[
+"/            self selectNode:eachNode.
+"/            first := false.
+"/        ] ifFalse:[
+"/            self selectedNodeAdd:eachNode
+"/        ]
+"/    ].
+"/
+!
+
 selectedIndex
     "get single selected index or 0
     "
@@ -2237,6 +2256,15 @@
   ^ nil
 !
 
+selectedNodes
+    "get a collection of selected nodes
+    "
+    |selIndexCollection|
+
+    (selIndexCollection := self selection) size == 0 ifTrue:[^ #() ].
+    ^ selIndexCollection collect:[:eachIndex | listOfNodes at:eachIndex].
+!
+
 selectionChangedFrom:oldSelection
     "update selectionHolder if not nil
     "
@@ -2288,7 +2316,7 @@
 !
 
 selectedNodeBecomeChildOfNext
-    "become node a child of followd node
+    "make the selected node a child of the next node
     "
     |idx node cprt nprt|
 
@@ -2308,6 +2336,27 @@
     ]
 !
 
+selectedNodeBecomeChildOfPrevious
+    "make the selected node a child of the previous node
+    "
+    |idx node cprt nprt|
+
+    ((node := self selectedNode) isNil or:[(cprt := node parent) isNil]) ifFalse:[
+        idx := cprt indexOfChild:node.
+
+        idx == cprt children size ifFalse:[
+            nprt := cprt childAt:(idx - 1).
+
+            nprt notNil ifTrue:[
+                self  setSelection:nil.
+                model remove:node.
+                model add:node below:nprt.
+                self selectNode:node.
+            ]
+        ]
+    ]
+!
+
 selectedNodeBecomeSisterOfParent
     "become node a sister of its current parent
     "
@@ -2359,6 +2408,57 @@
     ]
 !
 
+selectedNodesBecomeChildrenOfNext
+    "make the selected nodes children of the next node
+    "
+    |indices maxIndex nodes parent newParent|
+
+    nodes := self selectedNodes.
+    nodes size == 0 ifTrue:[^ self].
+
+    indices := nodes collect:[:eachNode | listOfNodes identityIndexOf:eachNode].
+    maxIndex := indices max.
+
+    newParent := listOfNodes at:(maxIndex + 1) ifAbsent:nil.
+    newParent isNil ifTrue:[^ self].
+
+    indices sortWith:nodes.
+
+    nodes reverseDo:[:eachNodeToMove |
+        model remove:eachNodeToMove.
+        model add:eachNodeToMove beforeIndex:1 below:newParent.
+    ].
+    self selectNodes:nodes.
+!
+
+selectedNodesBecomeSistersOfParent
+    "move selected nodes up (out of their parent to their grandparent).
+     I.e. nodes become sisters of their current parent
+    "
+    |nodes parent grandParent indices|
+
+    nodes := self selectedNodes.
+    nodes size == 0 ifTrue:[^ self].
+
+    "/ common parent ?
+    parent := nodes first parent.
+    (nodes conform:[:eachNode | eachNode parent == parent]) ifFalse:[^ self].
+
+    "/ is there a grandparent ?
+    grandParent := parent parent.
+    grandParent isNil ifTrue:[^ self].
+
+    self  setSelection:nil.
+    indices := nodes collect:[:eachNode | listOfNodes identityIndexOf:eachNode].
+    indices sortWith:nodes.
+
+    nodes reverseDo:[:eachNodeToMove |
+        model remove:eachNodeToMove.
+        model add:eachNodeToMove afterIndex:(grandParent indexOfChild:parent) below:grandParent.
+    ].
+    self selectNodes:nodes.
+!
+
 selectedNodesRemove
     "remove selected nodes
     "
@@ -2372,5 +2472,5 @@
 !SelectionInTreeView class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/SelectionInTreeView.st,v 1.92 2000-11-20 13:54:05 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/SelectionInTreeView.st,v 1.93 2001-05-17 11:10:34 cg Exp $'
 ! !