282 |
282 |
283 (self canPaste:aSpecificationOrList) ifFalse:[ |
283 (self canPaste:aSpecificationOrList) ifFalse:[ |
284 ^ nil |
284 ^ nil |
285 ]. |
285 ]. |
286 |
286 |
287 treeView cvsSetupListDo:[ |
287 aSpecificationOrList isCollection ifTrue:[ |
288 aSpecificationOrList isCollection ifTrue:[ |
288 paste := aSpecificationOrList |
289 paste := aSpecificationOrList |
289 ] ifFalse:[ |
|
290 paste := Array with:aSpecificationOrList |
|
291 ]. |
|
292 (frame := self singleSelection) isNil ifTrue:[ |
|
293 frame := self |
|
294 ]. |
|
295 self selection:nil. |
|
296 |
|
297 newSel := OrderedCollection new. |
|
298 builder := UIBuilder new isEditing:true. |
|
299 |
|
300 className notNil ifTrue:[ |
|
301 builder applicationClass:(self resolveName:className) |
|
302 ]. |
|
303 |
|
304 keepLayout ifFalse:[ |
|
305 pasteOffset := 0@0. |
|
306 |
|
307 aPointOrNil isNil ifTrue:[ |
|
308 pasteOrigin := self sensor mousePoint. |
|
309 pasteOrigin := device translatePoint:pasteOrigin |
|
310 from:device rootView id |
|
311 to:frame id. |
290 ] ifFalse:[ |
312 ] ifFalse:[ |
291 paste := Array with:aSpecificationOrList |
313 pasteOrigin := device translatePoint:aPointOrNil |
|
314 from:self id |
|
315 to:frame id. |
|
316 ] |
|
317 ]. |
|
318 keepLayout ifFalse:[ |
|
319 bounds := Rectangle origin:0@0 extent:(frame bounds extent) |
|
320 ]. |
|
321 |
|
322 paste do:[:aSpec| |
|
323 |view| |
|
324 |
|
325 view := self addSpec:aSpec builder:builder in:frame. |
|
326 |
|
327 keepLayout ifFalse:[ |
|
328 (bounds containsPoint:pasteOrigin) ifFalse:[ |
|
329 self moveObject:view to:pasteOffset. |
|
330 ] ifTrue:[ |
|
331 self moveObject:view to:pasteOrigin + pasteOffset. |
|
332 ]. |
|
333 pasteOffset := pasteOffset + 4 |
292 ]. |
334 ]. |
293 (frame := self singleSelection) isNil ifTrue:[ |
335 view realize. |
294 frame := self |
336 newSel add:view. |
295 ]. |
337 ]. |
296 self setSelection:nil withRedraw:true. |
338 |
297 |
339 self withinTransaction:#paste objects:newSel do:[ |
298 newSel := OrderedCollection new. |
340 undoHistory addUndoSelector:#undoCreate: |
299 builder := UIBuilder new isEditing:true. |
341 withArgs:(newSel collect:[:v|(self propertyOfView:v) identifier]) |
300 |
342 ]. |
301 className notNil ifTrue:[ |
343 |
302 builder applicationClass:(self resolveName:className) |
344 self realizeAllSubViews. |
303 ]. |
345 newSel do:[:v| v raise]. |
304 |
346 inputView raise. |
305 keepLayout ifFalse:[ |
347 self elementChangedSize:frame. |
306 pasteOffset := 0@0. |
348 |
307 |
349 newSel size == 1 ifTrue:[newSel := newSel at:1]. |
308 aPointOrNil isNil ifTrue:[ |
|
309 pasteOrigin := self sensor mousePoint. |
|
310 pasteOrigin := device translatePoint:pasteOrigin |
|
311 from:device rootView id |
|
312 to:frame id. |
|
313 ] ifFalse:[ |
|
314 pasteOrigin := device translatePoint:aPointOrNil |
|
315 from:self id |
|
316 to:frame id. |
|
317 ] |
|
318 ]. |
|
319 keepLayout ifFalse:[ |
|
320 bounds := Rectangle origin:0@0 extent:(frame bounds extent) |
|
321 ]. |
|
322 |
|
323 paste do:[:aSpec| |
|
324 |view| |
|
325 |
|
326 view := self addSpec:aSpec builder:builder in:frame. |
|
327 |
|
328 keepLayout ifFalse:[ |
|
329 (bounds containsPoint:pasteOrigin) ifFalse:[ |
|
330 self moveObject:view to:pasteOffset. |
|
331 ] ifTrue:[ |
|
332 self moveObject:view to:pasteOrigin + pasteOffset. |
|
333 ]. |
|
334 pasteOffset := pasteOffset + 4 |
|
335 ]. |
|
336 view realize. |
|
337 newSel add:view. |
|
338 ]. |
|
339 |
|
340 self withinTransaction:#paste objects:newSel do:[ |
|
341 undoHistory addUndoSelector:#undoCreate: |
|
342 withArgs:(newSel collect:[:v|(self propertyOfView:v) identifier]) |
|
343 ]. |
|
344 |
|
345 self realizeAllSubViews. |
|
346 newSel do:[:v| v raise]. |
|
347 inputView raise. |
|
348 self elementChangedSize:frame. |
|
349 |
|
350 newSel size == 1 ifTrue:[newSel := newSel at:1]. |
|
351 ]. |
|
352 ^ newSel |
350 ^ newSel |
353 ! |
351 ! |
354 |
352 |
355 pasteWithLayout |
353 pasteWithLayout |
356 "add the objects in the paste-buffer to the object view; don't change the |
354 "add the objects in the paste-buffer to the object view; don't change the |
954 ! |
952 ! |
955 |
953 |
956 setupFromSpec:specOrSpecArray |
954 setupFromSpec:specOrSpecArray |
957 |spec builder| |
955 |spec builder| |
958 |
956 |
959 treeView cvsSetupListDo:[ |
957 self removeAll. |
960 self removeAll. |
958 spec := UISpecification from:specOrSpecArray. |
961 spec := UISpecification from:specOrSpecArray. |
959 builder := UIBuilder new isEditing:true. |
962 builder := UIBuilder new isEditing:true. |
960 "set applicationClass, in order that subspecifications may be resolved" |
963 "set applicationClass, in order that subspecifications may be resolved" |
961 className notNil ifTrue:[ |
964 className notNil ifTrue:[ |
962 builder applicationClass:(self resolveName:className). |
965 builder applicationClass:(self resolveName:className). |
963 ]. |
966 ]. |
964 spec window setupView:self topView for:builder. |
967 spec window setupView:self topView for:builder. |
965 self addSpec:(spec component) builder:builder in:self. |
968 self addSpec:(spec component) builder:builder in:self. |
966 self realizeAllSubViews. |
969 self realizeAllSubViews. |
967 inputView raise. |
970 inputView raise. |
968 treeView setAttributesFromWindowSpec:(spec window). |
971 treeView setAttributesFromWindowSpec:(spec window). |
|
972 ] |
|
973 |
|
974 "Modified: / 5.2.1998 / 11:42:39 / stefan" |
|
975 ! |
969 ! |
976 |
970 |
977 treeView:aTreeView |
971 treeView:aTreeView |
978 treeView := aTreeView. |
972 treeView := aTreeView. |
979 |
973 |