--- a/UIPainterView.st Wed Apr 07 16:24:03 2004 +0200
+++ b/UIPainterView.st Wed Apr 07 16:33:10 2004 +0200
@@ -302,6 +302,22 @@
self deleteSelectionBuffered: false
!
+getSelectedViewsAndSpecs
+ "return an array filed with selected views and corresponding specs.
+ Nil if there is none.
+ "
+ |specs coll sel|
+
+ sel := treeView selection.
+
+ coll := self minSetOfSuperViews:(self selection).
+
+ coll isNil ifTrue:[^ nil].
+
+ specs := coll collect:[:aView| self fullSpecFor:aView ].
+ ^ Array with: coll with: specs
+!
+
pasteBuffer
"add the objects in the paste-buffer to the object view
"
@@ -1448,6 +1464,117 @@
! !
+!UIPainterView methodsFor:'group & ungroup'!
+
+group
+
+ self groupSelectionWithLayout: false
+!
+
+groupSelectionWithLayout: withLayout
+ | spec rect views box layout specs canvas view oldSelection cS nViews menu item xOffset yOffset |
+
+ menu := Menu new.
+ menu receiver: self.
+ item := MenuItem label:'Box' value:[spec := ViewSpec new].
+ menu addItem: item.
+ item := MenuItem label:'TBox' value:[spec := TBoxSpec new].
+ menu addItem: item.
+ item := MenuItem label:'FramedBox' value:[spec := FramedBoxSpec new].
+ menu addItem: item.
+ item := MenuItem label:'HorizontalPanel' value:[spec := HorizontalPanelViewSpec new].
+ menu addItem: item.
+ item := MenuItem label:'VerticalPanel' value:[spec := VerticalPanelViewSpec new].
+ menu addItem: item.
+ (MenuPanel menu: menu) startUp.
+ canvas := self painter.
+ cS := canvas getSelectedViewsAndSpecs.
+ cS isNil ifTrue:[^self].
+ views := cS first.
+ specs := cS last.
+ rect := views first frame.
+ 2 to: views size do:[:i| rect := rect merge: (views at: i) frame].
+ layout := LayoutFrame leftFraction:0.0 offset: rect origin x
+ rightFraction:0.0 offset: rect corner x + 1
+ topFraction:0.0 offset: rect origin y
+ bottomFraction:0.0 offset:rect corner y + 1.
+ oldSelection := canvas selection.
+ canvas select: views first superView.
+ spec layout: layout.
+ spec class == VerticalPanelViewSpec ifTrue:[
+ spec verticalLayout: #topSpace.
+ spec horizontalLayout: #fit.
+ ].
+ spec class == HorizontalPanelViewSpec ifTrue:[
+ spec verticalLayout: #fit.
+ spec horizontalLayout: #leftSpace.
+ ].
+
+ box := self pasteSpecifications:spec keepLayout:true at:nil.
+
+ xOffset := box origin x.
+ yOffset := box origin y.
+ withLayout ifFalse:[
+ 1 to: specs size do:[:i|
+ view := views at: i.
+ layout := LayoutFrame leftFraction:0.0 offset: (view origin x - xOffset)
+ rightFraction:0.0 offset: (view corner x - xOffset + 1)
+ topFraction:0.0 offset: (view origin y - yOffset )
+ bottomFraction:0.0 offset: (view corner y - yOffset + 1).
+ (specs at: i) layout: layout.
+ ].
+ ].
+ canvas selection: oldSelection.
+ canvas deleteSelection.
+ canvas selection:box.
+ nViews := canvas pasteSpecifications:specs keepLayout:true.
+ canvas selection: box.
+!
+
+groupWithLayout
+
+ self groupSelectionWithLayout: true
+!
+
+ungroup
+
+ self ungroupSelectionWithLayout: false
+!
+
+ungroupSelectionWithLayout: withLayout
+
+ | canvas cS views specs frame view layout superView|
+
+ canvas := self painter.
+ cS := canvas getSelectedViewsAndSpecs.
+ cS isNil ifTrue:[^self].
+ views := cS first first subViews copy.
+ superView := cS first first superView.
+ cS last first component isNil ifTrue:[^self].
+ cS last first component collection isEmpty ifTrue:[^self].
+ specs := cS last first component collection copy.
+ frame := cS first first frame.
+ canvas deleteSelection.
+ withLayout ifFalse:[
+ 1 to: specs size do:[:i|
+ view := views at: i.
+ layout := LayoutFrame leftFraction:0.0 offset: (view origin x + frame origin x)
+ rightFraction:0.0 offset: (view corner x + frame origin x + 1)
+ topFraction:0.0 offset: (view origin y + frame origin y )
+ bottomFraction:0.0 offset: (view corner y + frame origin y + 1).
+ (specs at: i) layout: layout.
+ ].
+ ].
+ canvas selection: superView.
+ canvas pasteSpecifications:specs keepLayout:true.
+ canvas selection: superView.
+!
+
+ungroupWithLayout
+
+ self ungroupSelectionWithLayout: true
+! !
+
!UIPainterView methodsFor:'initialization'!
create
@@ -1539,6 +1666,10 @@
!UIPainterView methodsFor:'private-handles'!
+painter
+ ^ treeView canvas
+!
+
showSelected:aComponent
"show object selected
"
@@ -1953,12 +2084,15 @@
v := aSpec buildViewWithLayoutFor:builder in:(self findContainerOfView:aView).
v realize.
aView destroy.
- device flush "sync" .
+ device sync.
+ device flush.
aView becomeSameAs:v.
+ inputView raise.
] ifFalse:[
aSpec setAttributesIn:aView with:builder.
self elementChangedSize:aView.
].
+
!
specFor:anObject