# HG changeset patch # User Claus Gittinger # Date 1326882998 -3600 # Node ID aa4cdac32055d6bba304a3233d5f64dba847bfde # Parent 8a4d46fd157ce5a5324efd65a7e20f0cc8f56089 changed: #doMoveUpOrDown: can now move a group of items up/down diff -r 8a4d46fd157c -r aa4cdac32055 MenuEditor.st --- 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'!