added exchangeLayouts function
authorClaus Gittinger <cg@exept.de>
Wed, 22 Sep 1999 20:11:46 +0200
changeset 1230 23e5d0c133e8
parent 1229 49777692d309
child 1231 7d025840ea10
added exchangeLayouts function
UIObjectView.st
UIPainter.st
UIPainterView.st
--- a/UIObjectView.st	Wed Sep 22 18:59:10 1999 +0200
+++ b/UIObjectView.st	Wed Sep 22 20:11:46 1999 +0200
@@ -1344,6 +1344,21 @@
     ]
 !
 
+twoElementSelection
+    "checks whether exactly two elements are selected; 
+     in this case, return the selection collection.
+     otherwise return nil
+    "
+    |coll|
+
+    (coll := self selection) isCollection ifFalse:[
+        ^ nil "/ single
+    ].
+
+    coll size == 2 ifTrue:[ ^ coll].
+    ^ nil
+!
+
 unselect
     "clear selection
     "
@@ -1523,6 +1538,32 @@
 
 !
 
+exchangeLayouts
+    "exchange the layout of two elements 
+     (useful to change the order of radiobuttons or checkBoxes)
+    "
+    |objects l1 l2|
+
+    objects := self twoElementSelection.
+
+    objects notNil ifTrue:[
+        l1 := (objects at:1) geometryLayout copy.
+        l2 := (objects at:2) geometryLayout copy.
+        self transaction:#exchangeLayout dimensionDo:[:v|
+            v == (objects at:1) ifTrue:[
+                v geometryLayout:(l2 copy)
+            ] ifFalse:[
+                v geometryLayout:(l1 copy).
+            ]
+        ]    
+    ] ifFalse:[    
+        self warn:'exactly two elements must be selected'.
+    ]
+
+
+
+!
+
 pasteExtent
     "paste the copied extent to all objects in the selection
     "
--- a/UIPainter.st	Wed Sep 22 18:59:10 1999 +0200
+++ b/UIPainter.st	Wed Sep 22 20:11:46 1999 +0200
@@ -1336,178 +1336,185 @@
      
        #(#Menu
           
-	   #(
-	     #(#MenuItem
-		#label: 'Undo'
-		#translateLabel: true
-		#nameKey: #undo
-		#value: #undoLast
-		#activeHelpKey: #editUndo
-		#enabled: #hasUndoHistory
-		#shortcutKeyCharacter: #Cmdu
-	    )
-	     #(#MenuItem
-		#label: '-'
-	    )
-	     #(#MenuItem
-		#label: 'Cut'
-		#translateLabel: true
-		#value: #deleteSelection
-		#activeHelpKey: #editCut
-		#enabled: #valueOfCanCut
-		#shortcutKeyCharacter: #Cut
-	    )
-	     #(#MenuItem
-		#label: 'Copy'
-		#translateLabel: true
-		#value: #copySelection
-		#activeHelpKey: #editCopy
-		#enabled: #valueOfCanCopy
-		#shortcutKeyCharacter: #Copy
-	    )
-	     #(#MenuItem
-		#label: 'Paste'
-		#translateLabel: true
-		#value: #pasteBuffer
-		#activeHelpKey: #pasteBuffer
-		#enabled: #valueOfCanPaste
-		#shortcutKeyCharacter: #Paste
-	    )
-	     #(#MenuItem
-		#label: 'Delete'
-		#translateLabel: true
-		#value: #deleteTotalSelection
-		#activeHelpKey: #editDelete
-		#enabled: #valueOfCanCut
-		#shortcutKeyCharacter: #Delete
-	    )
-	     #(#MenuItem
-		#label: '-'
-	    )
-	     #(#MenuItem
-		#label: 'Paste With Layout'
-		#translateLabel: true
-		#value: #pasteWithLayout
-		#activeHelpKey: #pasteWithLayout
-		#enabled: #valueOfCanPasteWithKeepingLayout
-	    )
-	     #(#MenuItem
-		#label: '-'
-	    )
-	     #(#MenuItem
-		#label: 'Move'
-		#translateLabel: true
-		#enabled: #canMoveSelection
-		#submenuChannel: #menuMove
-	    )
-	     #(#MenuItem
-		#label: 'Dimension'
-		#translateLabel: true
-		#enabled: #hasSelection
-		#submenu: 
-		 #(#Menu
+           #(
+             #(#MenuItem
+                #label: 'Undo'
+                #translateLabel: true
+                #nameKey: #undo
+                #value: #undoLast
+                #activeHelpKey: #editUndo
+                #enabled: #hasUndoHistory
+                #shortcutKeyCharacter: #Cmdu
+            )
+             #(#MenuItem
+                #label: '-'
+            )
+             #(#MenuItem
+                #label: 'Cut'
+                #translateLabel: true
+                #value: #deleteSelection
+                #activeHelpKey: #editCut
+                #enabled: #valueOfCanCut
+                #shortcutKeyCharacter: #Cut
+            )
+             #(#MenuItem
+                #label: 'Copy'
+                #translateLabel: true
+                #value: #copySelection
+                #activeHelpKey: #editCopy
+                #enabled: #valueOfCanCopy
+                #shortcutKeyCharacter: #Copy
+            )
+             #(#MenuItem
+                #label: 'Paste'
+                #translateLabel: true
+                #value: #pasteBuffer
+                #activeHelpKey: #pasteBuffer
+                #enabled: #valueOfCanPaste
+                #shortcutKeyCharacter: #Paste
+            )
+             #(#MenuItem
+                #label: 'Delete'
+                #translateLabel: true
+                #value: #deleteTotalSelection
+                #activeHelpKey: #editDelete
+                #enabled: #valueOfCanCut
+                #shortcutKeyCharacter: #Delete
+            )
+             #(#MenuItem
+                #label: '-'
+            )
+             #(#MenuItem
+                #label: 'Paste With Layout'
+                #translateLabel: true
+                #value: #pasteWithLayout
+                #activeHelpKey: #pasteWithLayout
+                #enabled: #valueOfCanPasteWithKeepingLayout
+            )
+             #(#MenuItem
+                #label: '-'
+            )
+             #(#MenuItem
+                #label: 'Move'
+                #translateLabel: true
+                #enabled: #canMoveSelection
+                #submenuChannel: #menuMove
+            )
+             #(#MenuItem
+                #label: 'Dimension'
+                #translateLabel: true
+                #enabled: #hasSelection
+                #submenu: 
+                 #(#Menu
                     
-		     #(
-		       #(#MenuItem
-			  #label: 'Default Extent'
-			  #translateLabel: true
-			  #value: #setToDefaultExtent
-			  #activeHelpKey: #editDimensionDefaultExtent
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		       #(#MenuItem
-			  #label: 'Default Width'
-			  #translateLabel: true
-			  #value: #setToDefaultWidth
-			  #activeHelpKey: #editDimensionDefaultWidth
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		       #(#MenuItem
-			  #label: 'Default Height'
-			  #translateLabel: true
-			  #value: #setToDefaultHeight
-			  #activeHelpKey: #editDimensionDefaultHeight
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		       #(#MenuItem
-			  #label: '-'
-		      )
-		       #(#MenuItem
-			  #label: 'Copy Layout'
-			  #translateLabel: true
-			  #value: #copyLayout
-			  #activeHelpKey: #editDimensionCopyLayout
-			  #enabled: #hasSingleSelection
-		      )
-		       #(#MenuItem
-			  #label: 'Copy Extent'
-			  #translateLabel: true
-			  #value: #copyExtent
-			  #activeHelpKey: #editDimensionCopyExtent
-			  #enabled: #hasSingleSelection
-		      )
-		       #(#MenuItem
-			  #label: '-'
-		      )
-		       #(#MenuItem
-			  #label: 'Paste Layout'
-			  #translateLabel: true
-			  #value: #pasteLayout
-			  #activeHelpKey: #editDimensionPasteLayout
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		       #(#MenuItem
-			  #label: 'Paste Extent'
-			  #translateLabel: true
-			  #value: #pasteExtent
-			  #activeHelpKey: #editDimensionPasteExtent
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		       #(#MenuItem
-			  #label: 'Paste Width'
-			  #translateLabel: true
-			  #value: #pasteWidth
-			  #activeHelpKey: #editDimensionPasteWidth
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		       #(#MenuItem
-			  #label: 'Paste Height'
-			  #translateLabel: true
-			  #value: #pasteHeight
-			  #activeHelpKey: #editDimensionPasteHeight
-			  #enabled: #canMoveOrAlignSelection
-		      )
-		    ) nil
-		    nil
-		)
-	    )
-	     #(#MenuItem
-		#label: '-'
-	    )
-	     #(#MenuItem
-		#label: 'Open Widget Documentation'
-		#translateLabel: true
-		#value: #doOpenWidgetDocumentation
-		#activeHelpKey: #editOpenSpecDocumentation
-	    )
-	     #(#MenuItem
-		#label: '-'
-	    )
-	     #(#MenuItem
-		#label: 'Inspect View'
-		#translateLabel: true
-		#value: #doInspectView
-		#activeHelpKey: #editInspectView
-		#enabled: #hasOneSelectionOtherThanCanvas
-	    )
-	     #(#MenuItem
-		#label: 'Inspect Spec'
-		#translateLabel: true
-		#value: #doInspectSpec
-		#activeHelpKey: #editInspectSpec
-	    )
-	  ) nil
-	  nil
+                     #(
+                       #(#MenuItem
+                          #label: 'Default Extent'
+                          #translateLabel: true
+                          #value: #setToDefaultExtent
+                          #activeHelpKey: #editDimensionDefaultExtent
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Default Width'
+                          #translateLabel: true
+                          #value: #setToDefaultWidth
+                          #activeHelpKey: #editDimensionDefaultWidth
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Default Height'
+                          #translateLabel: true
+                          #value: #setToDefaultHeight
+                          #activeHelpKey: #editDimensionDefaultHeight
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                       #(#MenuItem
+                          #label: '-'
+                      )
+                       #(#MenuItem
+                          #label: 'Copy Layout'
+                          #translateLabel: true
+                          #value: #copyLayout
+                          #activeHelpKey: #editDimensionCopyLayout
+                          #enabled: #hasSingleSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Paste Layout'
+                          #translateLabel: true
+                          #value: #pasteLayout
+                          #activeHelpKey: #editDimensionPasteLayout
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Exchange Layouts'
+                          #translateLabel: true
+                          #value: #exchangeLayouts
+                          #activeHelpKey: #editDimensionExchangeLayouts
+                          #enabled: #canExchangeSelectionLayouts
+                      )
+                       #(#MenuItem
+                          #label: '-'
+                      )
+                       #(#MenuItem
+                          #label: 'Copy Extent'
+                          #translateLabel: true
+                          #value: #copyExtent
+                          #activeHelpKey: #editDimensionCopyExtent
+                          #enabled: #hasSingleSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Paste Extent'
+                          #translateLabel: true
+                          #value: #pasteExtent
+                          #activeHelpKey: #editDimensionPasteExtent
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Paste Width'
+                          #translateLabel: true
+                          #value: #pasteWidth
+                          #activeHelpKey: #editDimensionPasteWidth
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                       #(#MenuItem
+                          #label: 'Paste Height'
+                          #translateLabel: true
+                          #value: #pasteHeight
+                          #activeHelpKey: #editDimensionPasteHeight
+                          #enabled: #canMoveOrAlignSelection
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
+                #label: '-'
+            )
+             #(#MenuItem
+                #label: 'Open Widget Documentation'
+                #translateLabel: true
+                #value: #doOpenWidgetDocumentation
+                #activeHelpKey: #editOpenSpecDocumentation
+            )
+             #(#MenuItem
+                #label: '-'
+            )
+             #(#MenuItem
+                #label: 'Inspect View'
+                #translateLabel: true
+                #value: #doInspectView
+                #activeHelpKey: #editInspectView
+                #enabled: #hasOneSelectionOtherThanCanvas
+            )
+             #(#MenuItem
+                #label: 'Inspect Spec'
+                #translateLabel: true
+                #value: #doInspectSpec
+                #activeHelpKey: #editInspectSpec
+            )
+          ) nil
+          nil
       )
 
     "Modified: / 20.5.1998 / 01:46:00 / cg"
@@ -1791,6 +1798,15 @@
     ^ builder booleanValueAspectFor:#canChangeOrderInContainer
 !
 
+canExchangeSelectionLayouts
+    "returns a boolean value holder which is true in case that the selection 
+     consists of exactly 2 components
+     and all widgets in the selection can change its layout through to a move or
+     align operation"
+
+    ^ builder booleanValueAspectFor:#canExchangeSelectionLayouts
+!
+
 canMoveOrAlignSelection
     "returns a boolean value holder which is true in case that any selection exists
      and all widgets in the selection can change its layout through to a move or
@@ -2215,6 +2231,7 @@
     |canCutOrCopy canPaste clipboard sel treeSelection|
 
     self canMoveOrAlignSelection        value:(treeView canMoveOrAlignSelection).
+    self canExchangeSelectionLayouts    value:(treeView canExchangeSelectionLayouts).
     self canChangeOrderInContainer      value:(treeView canChangeOrderInContainer).
     self canMoveSelectionIntoContainer  value:(treeView canMoveSelectionIntoContainer).
     self canMoveSelectionOutOfContainer value:(treeView canMoveSelectionOutOfContainer).
@@ -2223,18 +2240,18 @@
     treeView notNil
     ifTrue:
     [
-	treeSelection := treeView selection.
-	"/ the top-node cannot be cut, copied or pasted.
-	canCutOrCopy := treeSelection size >= 1 and:[treeSelection first ~~ 1].
-	clipboard := self getSelection.
-
-	clipboard isCollection ifTrue:[clipboard notEmpty ifTrue:[sel := clipboard first]]
-			      ifFalse:[sel := clipboard].
-
-	canPaste := (sel isKindOf:UISpecification) and: 
-		    [treeSelection size  = 1 
-		    and:[treeSelection first == 1 
-		    or: [self canPasteInto: treeView selectedNode contents view]]]
+        treeSelection := treeView selection.
+        "/ the top-node cannot be cut, copied or pasted.
+        canCutOrCopy := treeSelection size >= 1 and:[treeSelection first ~~ 1].
+        clipboard := self getSelection.
+
+        clipboard isCollection ifTrue:[clipboard notEmpty ifTrue:[sel := clipboard first]]
+                              ifFalse:[sel := clipboard].
+
+        canPaste := (sel isKindOf:UISpecification) and: 
+                    [treeSelection size  = 1 
+                    and:[treeSelection first == 1 
+                    or: [self canPasteInto: treeView selectedNode contents view]]]
     ].
 
     self valueOfCanCut value: canCutOrCopy.
@@ -4023,6 +4040,17 @@
 
 !
 
+canExchangeSelectionLayouts 
+    "returns true if the selections size is exactly 2
+     and all widgets in the selection
+     can change their layout through to a move or align operation"
+
+    selection size == 2 ifFalse:[
+        ^ false
+    ].
+    ^ self canMoveOrAlignSelection
+!
+
 canMoveOrAlignSelection
     "returns true if any selection exists and all widgets in the selection
      can change their layout through to a move or align operation"
--- a/UIPainterView.st	Wed Sep 22 18:59:10 1999 +0200
+++ b/UIPainterView.st	Wed Sep 22 20:11:46 1999 +0200
@@ -1762,6 +1762,17 @@
     ^ (prnt parent isNil or:[prnt contents spec class isLayoutContainer not])
 !
 
+canExchangeSelectionLayouts
+    "returns true if the selection size is exactly 2
+     and all elements in the selection can be moved or aligned
+    "
+    selection size == 2 ifFalse:[
+        ^ false
+    ].
+    ^ self canMoveOrAlignSelection
+
+!
+
 canKeepLayoutInSelection
     "returns true if layout can be kept during a paste operation
     "