--- a/MenuEditor.st Thu Dec 29 14:38:58 2011 +0100
+++ b/MenuEditor.st Wed Jan 18 11:36:38 2012 +0100
@@ -1999,34 +1999,38 @@
!
updateChannels
- "update all channels
- "
- |selection sizeOfSel selectedItem|
+ "update all channels"
+
+ |selection sizeOfSel selectedItem hasSelection|
super updateChannels.
selection := selectionHolder value.
sizeOfSel := selection size.
+ hasSelection := sizeOfSel ~~ 0.
sizeOfSel == 1 ifTrue:[selectedItem := selection at:1]
- ifFalse:[selectedItem := nil].
-
- self hasSelectionChannel value:(sizeOfSel ~~ 0).
+ ifFalse:[selectedItem := nil].
+
+ self hasSelectionChannel value:hasSelection.
self hasSingleSelectionChannel value:(selectedItem notNil).
selectedItem isNil ifTrue:[
- self enableMovingInHolder value:false.
- self enableMovingOutHolder value:false.
- self enableMovingUpOrDownHolder value:false.
- self enableMovingInAboveHolder value:false.
- self canCreateDelayedMenuChannel value:false.
+"/ self enableMovingUpOrDownHolder value:false.
+ self enableMovingInHolder value:false.
+ self enableMovingOutHolder value:false.
+ self enableMovingInAboveHolder value:false.
+ self canCreateDelayedMenuChannel value:false.
] ifFalse:[
- self enableMovingUpOrDownHolder value:(selectedItem canMoveUpOrDown).
- self enableMovingOutHolder value:(selectedItem canMoveOut).
- self enableMovingInHolder value:(selectedItem canMoveInNext).
- self enableMovingInAboveHolder value:(selectedItem canMoveInAbove).
- self canCreateDelayedMenuChannel value:(selectedItem canAddDelayedMenu).
+"/ self enableMovingUpOrDownHolder value:(selectedItem canMoveUpOrDown).
+ self enableMovingInHolder value:(selectedItem canMoveInNext).
+ self enableMovingOutHolder value:(selectedItem canMoveOut).
+ self enableMovingInAboveHolder value:(selectedItem canMoveInAbove).
+ self canCreateDelayedMenuChannel value:(selectedItem canAddDelayedMenu).
].
+ self enableMovingUpOrDownHolder value:(selection conform:[:i | i canMoveUpOrDown]).
+
+ "Modified (comment): / 18-01-2012 / 11:24:07 / cg"
! !
!MenuEditor methodsFor:'drag & drop'!
@@ -2512,13 +2516,15 @@
!
selectedItem
- "returns the selected item or nil (none or multiple selected)
- "
+ "returns the selected item or nil (none or multiple selected)"
+
|selection|
selection := selectionHolder value.
selection size == 1 ifTrue:[ ^ selection first ].
- ^ nil
+ ^ nil
+
+ "Modified: / 18-01-2012 / 11:33:42 / cg"
!
selectedItem:anItem
@@ -2530,6 +2536,22 @@
ifFalse:[ selection := #() ].
selectionHolder value:selection.
+!
+
+selectedItems
+ "returns the selected items or an empty collection"
+
+ ^ selectionHolder value.
+
+ "Created: / 18-01-2012 / 11:32:20 / cg"
+!
+
+selectedItems:aCollectionOfItems
+ "set the selected items"
+
+ selectionHolder value:aCollectionOfItems.
+
+ "Created: / 18-01-2012 / 11:32:37 / cg"
! !
!MenuEditor methodsFor:'user actions-aspects'!
@@ -3092,36 +3114,47 @@
self doMoveUpOrDown:#up
!
-doMoveUpOrDown:aDirection
- "move selected item up (#up) or down (#down)
- "
- |item index parent children|
-
- item := self selectedItem.
- item isNil ifTrue:[^ self].
- item canMoveUpOrDown ifFalse:[^ self].
+doMoveUpOrDown:aDirectionSymbol
+ "move selected item up (#up) or down (#down)"
+
+ |items itemsSortedByIndex index parent children|
+
+ items := self selectedItems.
+ items isEmptyOrNil ifTrue:[^ self].
+ (items conform:[:i | i canMoveUpOrDown]) ifFalse:[^ self].
self askForItemModification ifFalse:[ ^ self ].
self withoutNotifyDo:[
- parent := item parent.
- children := parent children.
- index := children identityIndexOf:item.
-
- selectionHolder setValue:#().
- children removeIndex:index.
-
- aDirection == #up ifTrue:[
- index == 1 ifTrue:[ children add:item ]
- ifFalse:[ children add:item beforeIndex:index - 1 ]
- ] ifFalse:[
- index > children size ifTrue:[ children addFirst:item ]
- ifFalse:[ children add:item afterIndex:index ]
- ].
- parent childrenOrderChanged.
+ itemsSortedByIndex := items copy.
+ (items collect:[:i | listOfItems identityIndexOf:i])
+ sortWith:itemsSortedByIndex.
+
+ aDirectionSymbol == #down ifTrue:[
+ itemsSortedByIndex := itemsSortedByIndex reversed
+ ].
+ itemsSortedByIndex do:[:item |
+ parent := item parent.
+ children := parent children.
+ index := children identityIndexOf:item.
+
+ selectionHolder setValue:#().
+ children removeIndex:index.
+
+ aDirectionSymbol == #up ifTrue:[
+ index == 1 ifTrue:[ children add:item ]
+ ifFalse:[ children add:item beforeIndex:index - 1 ]
+ ] ifFalse:[
+ index > children size ifTrue:[ children addFirst:item ]
+ ifFalse:[ children add:item afterIndex:index ]
+ ].
+ parent childrenOrderChanged.
+ ]
].
- self selectedItem:item.
+ self selectedItems:items.
self setModified.
+
+ "Modified: / 18-01-2012 / 11:35:38 / cg"
! !
!MenuEditor::Item class methodsFor:'defaults'!