# HG changeset patch # User Claus Gittinger # Date 950100304 -3600 # Node ID 3c1a528c50db4c5df432f4ca2b09363f31119dd6 # Parent 546e42b47b41a398073d0322c119d72ae12f438c added paste-keeping-absolute-position function diff -r 546e42b47b41 -r 3c1a528c50db UIPainter.st --- a/UIPainter.st Tue Feb 08 22:28:19 2000 +0100 +++ b/UIPainter.st Wed Feb 09 13:45:04 2000 +0100 @@ -1438,6 +1438,13 @@ #enabled: #valueOfCanPasteWithKeepingLayout ) #(#MenuItem + #label: 'Paste Keeping Absolute Position' + #translateLabel: true + #value: #pasteKeepingPosition + #activeHelpKey: #editPaste + #enabled: #valueOfCanPasteWithKeepingLayout + ) + #(#MenuItem #label: '-' ) #(#MenuItem @@ -1640,123 +1647,123 @@ #(#Menu - #( - #(#MenuItem - #label: 'Start' - #isButton: true - #value: #doStartApplication - #activeHelpKey: #testStartApplication - #labelImage: #(#ResourceRetriever #Icon #startIcon) - ) - #(#MenuItem - #label: '' - ) - #(#MenuItem - #label: 'New' - #isButton: true - #value: #doNew - #activeHelpKey: #fileNew - #labelImage: #(#ResourceRetriever #Icon #newIcon) - ) - #(#MenuItem - #label: 'Load' - #isButton: true - #value: #doLoad - #activeHelpKey: #fileLoad - #labelImage: #(#ResourceRetriever #Icon #loadIcon) - ) - #(#MenuItem - #label: 'Save' - #isButton: true - #value: #doSave - #activeHelpKey: #fileSave - #labelImage: #(#ResourceRetriever #Icon #saveIcon) - ) - #(#MenuItem - #label: '' - ) - #(#MenuItem - #label: 'Cut' - #isButton: true - #value: #deleteSelection - #activeHelpKey: #editCut - #enabled: #valueOfCanCut - #labelImage: #(#ResourceRetriever #Icon #cutIcon) - ) - #(#MenuItem - #label: 'Copy' - #isButton: true - #value: #copySelection - #activeHelpKey: #editCopy - #enabled: #valueOfCanCopy - #labelImage: #(#ResourceRetriever #Icon #copyIcon) - ) - #(#MenuItem - #label: 'Paste With Layout' - #isButton: true - #value: #pasteWithLayout - #activeHelpKey: #editPaste - #enabled: #valueOfCanPasteWithKeepingLayout - #labelImage: #(#ResourceRetriever #Icon #pasteIcon) - ) - #(#MenuItem - #label: 'Delete' - #isButton: true - #value: #deleteTotalSelection - #activeHelpKey: #editDelete - #enabled: #valueOfCanCut - #labelImage: #(#ResourceRetriever #Icon #deleteIcon) - ) - #(#MenuItem - #label: '' - ) - #(#MenuItem - #label: 'Move Up' - #isButton: true - #value: #doStepUp - #activeHelpKey: #moveWidgetUp - #enabled: #canChangeOrderInContainer - #labelImage: #(#ResourceRetriever #Icon #upIcon) - ) - #(#MenuItem - #label: 'Move Down' - #isButton: true - #value: #doStepDown - #activeHelpKey: #moveWidgetDown - #enabled: #canChangeOrderInContainer - #labelImage: #(#ResourceRetriever #Icon #downIcon) - ) - #(#MenuItem - #label: 'Move Into' - #isButton: true - #value: #doStepIn - #activeHelpKey: #moveWidgetInto - #enabled: #canMoveSelectionIntoContainer - #labelImage: #(#ResourceRetriever #Icon #downRightIcon) - ) - #(#MenuItem - #label: 'Move Out' - #isButton: true - #value: #doStepOut - #activeHelpKey: #moveWidgetOut - #enabled: #canMoveSelectionOutOfContainer - #labelImage: #(#ResourceRetriever #Icon #leftDownIcon) - ) - #(#MenuItem - #label: '' - ) - #(#MenuItem - #label: 'Canvas' - #activeHelpKey: #settingsCanvas - #indication: #painterShown - ) - #(#MenuItem - #label: 'Gallery' - #activeHelpKey: #settingsGallery - #indication: #galleryShown - ) - ) nil - nil + #( + #(#MenuItem + #label: 'Start' + #isButton: true + #value: #doStartApplication + #activeHelpKey: #testStartApplication + #labelImage: #(#ResourceRetriever #Icon #startIcon) + ) + #(#MenuItem + #label: '' + ) + #(#MenuItem + #label: 'New' + #isButton: true + #value: #doNew + #activeHelpKey: #fileNew + #labelImage: #(#ResourceRetriever #Icon #newIcon) + ) + #(#MenuItem + #label: 'Load' + #isButton: true + #value: #doLoad + #activeHelpKey: #fileLoad + #labelImage: #(#ResourceRetriever #Icon #loadIcon) + ) + #(#MenuItem + #label: 'Save' + #isButton: true + #value: #doSave + #activeHelpKey: #fileSave + #labelImage: #(#ResourceRetriever #Icon #saveIcon) + ) + #(#MenuItem + #label: '' + ) + #(#MenuItem + #label: 'Cut' + #isButton: true + #value: #deleteSelection + #activeHelpKey: #editCut + #enabled: #valueOfCanCut + #labelImage: #(#ResourceRetriever #Icon #cutIcon) + ) + #(#MenuItem + #label: 'Copy' + #isButton: true + #value: #copySelection + #activeHelpKey: #editCopy + #enabled: #valueOfCanCopy + #labelImage: #(#ResourceRetriever #Icon #copyIcon) + ) + #(#MenuItem + #label: 'Paste With Layout' + #isButton: true + #value: #pasteWithLayout + #activeHelpKey: #editPaste + #enabled: #valueOfCanPasteWithKeepingLayout + #labelImage: #(#ResourceRetriever #Icon #pasteIcon) + ) + #(#MenuItem + #label: 'Delete' + #isButton: true + #value: #deleteTotalSelection + #activeHelpKey: #editDelete + #enabled: #valueOfCanCut + #labelImage: #(#ResourceRetriever #Icon #deleteIcon) + ) + #(#MenuItem + #label: '' + ) + #(#MenuItem + #label: 'Move Up' + #isButton: true + #value: #doStepUp + #activeHelpKey: #moveWidgetUp + #enabled: #canChangeOrderInContainer + #labelImage: #(#ResourceRetriever #Icon #upIcon) + ) + #(#MenuItem + #label: 'Move Down' + #isButton: true + #value: #doStepDown + #activeHelpKey: #moveWidgetDown + #enabled: #canChangeOrderInContainer + #labelImage: #(#ResourceRetriever #Icon #downIcon) + ) + #(#MenuItem + #label: 'Move Into' + #isButton: true + #value: #doStepIn + #activeHelpKey: #moveWidgetInto + #enabled: #canMoveSelectionIntoContainer + #labelImage: #(#ResourceRetriever #Icon #downRightIcon) + ) + #(#MenuItem + #label: 'Move Out' + #isButton: true + #value: #doStepOut + #activeHelpKey: #moveWidgetOut + #enabled: #canMoveSelectionOutOfContainer + #labelImage: #(#ResourceRetriever #Icon #leftDownIcon) + ) + #(#MenuItem + #label: '' + ) + #(#MenuItem + #label: 'Canvas' + #activeHelpKey: #settingsCanvas + #indication: #painterShown + ) + #(#MenuItem + #label: 'Gallery' + #activeHelpKey: #settingsGallery + #indication: #galleryShown + ) + ) nil + nil ) ! diff -r 546e42b47b41 -r 3c1a528c50db UIPainterView.st --- a/UIPainterView.st Tue Feb 08 22:28:19 2000 +0100 +++ b/UIPainterView.st Wed Feb 09 13:45:04 2000 +0100 @@ -311,6 +311,24 @@ ! +pasteKeepingPosition + "add the objects in the paste-buffer to the object view; + translate the layout as appropriate, to position the component + at the same absolute position (relative to topView) as before + " + |sel| + + sel := self + pasteSpecifications:(self getSelection) + keepLayout:true + keepPosition:true + at:nil. + + sel notNil ifTrue:[ + self select:sel. + ]. +! + pasteSpecifications:aSpecificationOrList keepLayout:keepLayout "add the specs to the object view; returns list of pasted components " @@ -326,6 +344,17 @@ pasteSpecifications:aSpecificationOrList keepLayout:keepLayout at:aPointOrNil "add the specs to the object view; returns list of pasted components " + self + pasteSpecifications:aSpecificationOrList + keepLayout:keepLayout + keepPosition:false + at:aPointOrNil + +! + +pasteSpecifications:aSpecificationOrList keepLayout:keepLayout keepPosition:keepPosition at:aPointOrNil + "add the specs to the object view; returns list of pasted components + " |paste frame pasteOrigin pasteOffset builder newSel bounds| (self canPaste:aSpecificationOrList) ifFalse:[ @@ -340,6 +369,7 @@ (frame := self singleSelection) isNil ifTrue:[ frame := self ]. + self selection:nil. newSel := OrderedCollection new. @@ -349,36 +379,46 @@ builder applicationClass:(self resolveName:className) ]. - keepLayout ifFalse:[ + (keepLayout not or:[keepPosition]) ifTrue:[ pasteOffset := 0@0. - aPointOrNil isNil ifTrue:[ - pasteOrigin := self sensor mousePoint. - pasteOrigin := device translatePoint:pasteOrigin - from:device rootView id - to:frame id. - ] ifFalse:[ - pasteOrigin := device translatePoint:aPointOrNil + keepPosition ifTrue:[ + pasteOrigin := device translatePoint:0@0 from:self id to:frame id. - ] - ]. - keepLayout ifFalse:[ + ] ifFalse:[ + aPointOrNil isNil ifTrue:[ + pasteOrigin := self sensor mousePoint. + pasteOrigin := device translatePoint:pasteOrigin + from:device rootView id + to:frame id. + ] ifFalse:[ + pasteOrigin := device translatePoint:aPointOrNil + from:self id + to:frame id. + ] + ]. + bounds := Rectangle origin:0@0 extent:(frame bounds extent) ]. paste do:[:aSpec| - |view| + |view newOrigin| view := self addSpec:aSpec builder:builder in:frame. - keepLayout ifFalse:[ - (bounds containsPoint:pasteOrigin) ifFalse:[ - self moveObject:view to:pasteOffset. - ] ifTrue:[ - self moveObject:view to:pasteOrigin + pasteOffset. + keepPosition ifTrue:[ + self moveObject:view to:(view origin + pasteOrigin). + ] ifFalse:[ + keepLayout ifFalse:[ + (bounds containsPoint:pasteOrigin) ifFalse:[ + newOrigin := pasteOffset. + ] ifTrue:[ + newOrigin := pasteOrigin + pasteOffset. + ]. + self moveObject:view to:newOrigin. + pasteOffset := pasteOffset + 4 ]. - pasteOffset := pasteOffset + 4 ]. view realize. newSel add:view.