--- 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 $'
! !