--- a/UIPainter.st Thu Aug 29 20:56:11 2013 +0200
+++ b/UIPainter.st Wed Sep 04 21:52:31 2013 +0200
@@ -5009,6 +5009,52 @@
UserPreferences current systemBrowserClass openInClass:cls selector:aspect
!
+doBrowseAspectClass:aspectSelector
+ "browse the class as entered in the field (can be called by buttons in a subspec)"
+
+ self doBrowseAspectClassAndSelector:{ aspectSelector . nil }
+!
+
+doBrowseAspectClassAndSelector:classAndSelectorPair
+ "browse the class as entered in the field (can be called by buttons in a subspec)"
+
+ |spec classAspect selectorAspect className selector class |
+
+ classAspect := classAndSelectorPair first.
+ selectorAspect := classAndSelectorPair second.
+
+ "/ wrong: the code below uses the spec's aspect values;
+ "/ but the spec is only valid after accepting.
+
+ "/ spec := painter specForSelection.
+ "/ spec isNil ifTrue:[^ self].
+ "/ className := spec perform:classAspect.
+ "/
+ "/ selectorAspect notNil ifTrue:[
+ "/ selector := spec perform:selectorAspect.
+ "/ ].
+
+ "/ we have to take the current value from the widget's value,
+ "/ which is in the listOfAspects!!
+ className := (specTool aspectFor:classAspect) value.
+ selector := (specTool aspectFor:selectorAspect) value.
+
+ (className isEmptyOrNil or:[(selectorAspect notNil and:[selector isEmptyOrNil])]) ifTrue:[
+ Dialog information:(resources
+ string:'Class and/or selector missing (for "%1 / %2")'
+ with:classAspect with:selectorAspect).
+ ^ self
+ ].
+ class := Smalltalk classNamed:className.
+ class isBehavior ifFalse:[
+ Dialog information:(resources
+ string:'"%1" does not refer to a valid class (in "%2")'
+ with:className with:classAspect).
+ ^ self
+ ].
+ UserPreferences current systemBrowserClass openInClass:class selector:selector
+!
+
doBrowseAspectMethod:aspectSelector
"browse or create the aspect method as entered in the field (button beside input fieled pressed)"
@@ -5906,14 +5952,63 @@
!UIPainter::TreeView class methodsFor:'documentation'!
-documentation
-"
- selection in tree view; only used by the UIPainter
-
- [see also:]
- SelectionInTreeView
- SelectionInTree
- TreeItem
+erarchy"
+
+ treeView doStepOver:-1
+! !
+
+!UIPainter::TreeView methodsFor:'accessing'!
+
+ditToolbar
+ self editToolBarVisibleHolder value:false
+!
+
+BarVisibleHolder value:false
+!
+
+Spec newSpec|
+
+ (aSpecOrWidgetClass isSubclassOf:UISpecification) ifTrue:[
+ newSpecClass := aSpecOrWidgetClass.
+ ] ifFalse:[
+ (aSpecOrWidgetClass isSubclassOf:View) ifTrue:[
+ newSpecClass := aSpecOrWidgetClass basicNew specClass.
+ ] ifFalse:[
+ newSpecClass := nil
+ ].
+ ].
+ newSpecClass isNil ifTrue:[
+ Dialog warn:'Invalid Spec- or View-Class: ' , aSpecOrWidgetClass name.
+ ^ self.
+ ].
+
+ treeView isCanvasSelected ifTrue:[
+ ^ self
+ ].
+ oldSpec := self selectedSpec.
+ newSpec := newSpecClass cloneFrom:oldSpec.
+
+ self painter replaceSelectionBy:newSpec.
+
+ "Modified: / 05-09-2012 / 19:24:40 / cg"
+!
+
+og warn:'Invalid Spec- or View-Class: ' , aSpecOrWidgetClass name.
+ ^ self.
+ ].
+
+ treeView isCanvasSelected ifTrue:[
+ ^ self
+ ].
+ oldSpec := self selectedSpec.
+ newSpec := newSpecClass cloneFrom:oldSpec.
+
+ self painter replaceSelectionBy:newSpec.
+
+ "Modified: / 05-09-2012 / 19:24:40 / cg"
+!
+
+TreeItem
UIPainter
[author:]
@@ -5921,30 +6016,14 @@
"
-! !
-
-!UIPainter::TreeView methodsFor:'accessing'!
-
-canvas
- "returns the canvas (UIPainterView)"
-
- ^ model root contents view
-
-
-!
-
-canvas:aCanvas
- "install canvas (UIPainterView)"
+!
+
+ew)"
self canvas:aCanvas specName:nil
!
-canvas:aCanvas specName:nameOfSpec
- "install canvas (UIPainterView)"
-
- |props|
-
- props := UIPainterView::ViewProperty new.
+props := UIPainterView::ViewProperty new.
props view:aCanvas.
model root:(TreeItem
@@ -5955,7 +6034,11 @@
self enableChannel:(aCanvas enableChannel).
!
-canvasSpec
+model root expand.
+ self enableChannel:(aCanvas enableChannel).
+!
+
+pec
"returns spec assigned to canvas"
|spec list cls canvas|
@@ -5996,31 +6079,193 @@
^ spec
!
-canvasSpec:aSpec
- "update canvas from spec"
-
- |spec|
-
- self setAttributesFromWindowSpec:aSpec.
- spec := aSpec copy.
- spec menu:nil.
- spec flags:nil.
-
- spec setAttributesIn:(self canvas "topView") with:(UIBuilder new isEditing:true).
-!
-
-exportedAspects
- "returns spec assigned to canvas"
-
- windowSpec isNil ifTrue:[^ #()].
- ^ windowSpec exportedAspects ? #()
-
-!
-
-itemOfView:aView
- "returns item assigned to view or nil"
-
- aView notNil ifTrue:[
+igned to canvas"
+
+ |spec list cls canvas|
+
+ spec := self windowSpecClass new.
+ canvas := self canvas.
+
+ spec fromView:(canvas topView) callBack:nil.
+
+ windowSpec notNil ifTrue:[
+ spec copyValuesFromSpec:windowSpec.
+ ].
+
+ spec exportedAspects isNil ifTrue:[
+ ( (cls := canvas className) notNil
+ and:[(cls := canvas resolveName:cls) notNil]
+ ) ifTrue:[
+ list := cls perform:#aspectSelectors ifNotUnderstood:nil.
+ ].
+ spec setExportedAspectsFrom:list.
+ windowSpec notNil ifTrue:[
+ windowSpec exportedAspects:(spec exportedAspects).
+ ]
+ ].
+
+ self propertiesDo:[:aProp|
+ |propsSpec|
+
+ spec exportedAspectsAddKey:(aProp model) type:nil.
+ propsSpec := aProp spec.
+ propsSpec aspectSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:nil].
+ propsSpec actionSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+!
+
+spec := self windowSpecClass new.
+ canvas := self canvas.
+
+ spec fromView:(canvas topView) callBack:nil.
+
+ windowSpec notNil ifTrue:[
+ spec copyValuesFromSpec:windowSpec.
+ ].
+
+ spec exportedAspects isNil ifTrue:[
+ ( (cls := canvas className) notNil
+ and:[(cls := canvas resolveName:cls) notNil]
+ ) ifTrue:[
+ list := cls perform:#aspectSelectors ifNotUnderstood:nil.
+ ].
+ spec setExportedAspectsFrom:list.
+ windowSpec notNil ifTrue:[
+ windowSpec exportedAspects:(spec exportedAspects).
+ ]
+ ].
+
+ self propertiesDo:[:aProp|
+ |propsSpec|
+
+ spec exportedAspectsAddKey:(aProp model) type:nil.
+ propsSpec := aProp spec.
+ propsSpec aspectSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:nil].
+ propsSpec actionSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+!
+
+l.
+
+ windowSpec notNil ifTrue:[
+ spec copyValuesFromSpec:windowSpec.
+ ].
+
+ spec exportedAspects isNil ifTrue:[
+ ( (cls := canvas className) notNil
+ and:[(cls := canvas resolveName:cls) notNil]
+ ) ifTrue:[
+ list := cls perform:#aspectSelectors ifNotUnderstood:nil.
+ ].
+ spec setExportedAspectsFrom:list.
+ windowSpec notNil ifTrue:[
+ windowSpec exportedAspects:(spec exportedAspects).
+ ]
+ ].
+
+ self propertiesDo:[:aProp|
+ |propsSpec|
+
+ spec exportedAspectsAddKey:(aProp model) type:nil.
+ propsSpec := aProp spec.
+ propsSpec aspectSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:nil].
+ propsSpec actionSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+! !
+
+!UIPainter::TreeView methodsFor:'accessing-property'!
+
+as className) notNil
+ and:[(cls := canvas resolveName:cls) notNil]
+ ) ifTrue:[
+ list := cls perform:#aspectSelectors ifNotUnderstood:nil.
+ ].
+ spec setExportedAspectsFrom:list.
+ windowSpec notNil ifTrue:[
+ windowSpec exportedAspects:(spec exportedAspects).
+ ]
+ ].
+
+ self propertiesDo:[:aProp|
+ |propsSpec|
+
+ spec exportedAspectsAddKey:(aProp model) type:nil.
+ propsSpec := aProp spec.
+ propsSpec aspectSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:nil].
+ propsSpec actionSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+!
+
+stood:nil.
+ ].
+ spec setExportedAspectsFrom:list.
+ windowSpec notNil ifTrue:[
+ windowSpec exportedAspects:(spec exportedAspects).
+ ]
+ ].
+
+ self propertiesDo:[:aProp|
+ |propsSpec|
+
+ spec exportedAspectsAddKey:(aProp model) type:nil.
+ propsSpec := aProp spec.
+ propsSpec aspectSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:nil].
+ propsSpec actionSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+!
+
+esDo:[:aProp|
+ |propsSpec|
+
+ spec exportedAspectsAddKey:(aProp model) type:nil.
+ propsSpec := aProp spec.
+ propsSpec aspectSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:nil].
+ propsSpec actionSelectors
+ select:[:a | a isString or:[a isSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+! !
+
+!UIPainter::TreeView methodsFor:'adding & removing'!
+
+sSymbol]]
+ thenDo:[:aKey|spec exportedAspectsAddKey:aKey type:#action].
+ ].
+ ^ spec
+!
+
+spec
+!
+
+aView notNil ifTrue:[
self allItemsDo:[:anItem|
(anItem contents view == aView) ifTrue:[^ anItem]
]
@@ -6030,45 +6275,15 @@
!
-lastDrawnMaster
- "returns the lastDrawnMaster"
-
- ^ lastDrawnMaster
-
-
-!
-
-painter
- ^ painter
-!
-
-painter:something
- painter := something.
-!
-
-windowSpecClass
- "returns the default windowSpecClass (WindowSpec)"
-
- ^ windowSpecClass ? WindowSpec
-!
-
-windowSpecClass:aClass
+ass
"set the default windowSpecClass"
^ windowSpecClass := aClass
! !
-!UIPainter::TreeView methodsFor:'accessing-property'!
-
-propertiesDo:aOneArgBlock
- "evaluates the argument a block on each property"
-
- self allItemsDo:[:anItem| aOneArgBlock value:(anItem contents)]
-
-
-!
-
-propertyDetect:aOneArgBlock
+!UIPainter::TreeView methodsFor:'building'!
+
+yDetect:aOneArgBlock
"evaluates the block on each property"
self allItemsDo:[:anItem|
@@ -6078,30 +6293,7 @@
!
-propertySelected
- "returns current selected property or nil in case of multi selection
- or empty selection "
-
- |idx|
-
- selection size == 1 ifTrue:[
- (idx := selection first) ~~ 1 ifTrue:[ "canvas: not yet supported"
- ^ (listOfNodes at:idx) contents
- ]
- ].
- ^ nil
-
-! !
-
-!UIPainter::TreeView methodsFor:'adding & removing'!
-
-addProperty:aProperty
- "adds a new item"
-
- ^ self addProperty:aProperty beforeIndex:nil.
-!
-
-addProperty:aProperty beforeIndex:anIndex
+y beforeIndex:anIndex
"adds a new item"
|parent treeItem index|
@@ -6117,15 +6309,11 @@
].
model add:treeItem beforeIndex:index below:parent.
^ treeItem
-!
-
-removeAll
- "removes all items other than canvas"
-
- lastDrawnMaster := nil.
- windowSpec := nil.
-
- self canvas components copy do:[:aView|
+! !
+
+!UIPainter::TreeView methodsFor:'canvas selection'!
+
+copy do:[:aView|
aView destroy
].
self canvas subViews copy do:[:aView|
@@ -6136,23 +6324,7 @@
model removeAllOtherThanRoot.
!
-removeView:aView
- "removes a view"
-
- |item prnt|
-
- ((item := self itemOfView:aView) notNil and:[(prnt := item parent) notNil]) ifTrue:[
- aView destroy.
- prnt contents view sizeChanged:nil.
- model remove:item
- ]
-
-
-! !
-
-!UIPainter::TreeView methodsFor:'building'!
-
-generateFullSpecForComponents:aSpecArray named:specNameSymbol
+orComponents:aSpecArray named:specNameSymbol
"generates a full spec from aSpecArray"
|fullSpec winSpec|
@@ -6176,11 +6348,18 @@
^ fullSpec.
!
-setAttributesFromWindowSpec:aWindowSpec
- "sets a window spec from aWindowSpec and applies some attributes
- to the canvas."
-
- |name canvasView builder|
+wSpec (which should not)
+ self canvas gridShown ifTrue:[
+ fullSpec window backgroundColor:nil.
+ ].
+ ] ifFalse:[
+ winSpec copyValuesFromSpec:windowSpec.
+ ].
+ winSpec name: winSpec label.
+ ^ fullSpec.
+!
+
+|name canvasView builder|
windowSpec := (self windowSpecClass) new copyValuesFromSpec:aWindowSpec.
canvasView := self canvas.
@@ -6194,18 +6373,15 @@
self application treeSelectionChanged.
! !
-!UIPainter::TreeView methodsFor:'canvas selection'!
-
-canvasSelection:aSelection
- "canvas changed its selection
- "
- |sel list size|
-
- ((sel := aSelection) isNil or:[sel isCollection]) ifFalse:[
- sel := Array with:sel
- ].
-
- (size := sel size) ~~ 0 ifTrue:[
+!UIPainter::TreeView methodsFor:'change & update'!
+
+:= aWindowSpec label.
+ canvasView topView name:name.
+ self canvasNameChanged:name.
+ self application treeSelectionChanged.
+!
+
+True:[
list := OrderedCollection new:size.
sel do:[:aView|
@@ -6221,41 +6397,16 @@
self canvasEventsDisabledDo:[ self selection:sel ].
!
-canvasSelectionAdd:aView
- "canvas adds a view to current selection
- "
- |item index oldSel|
-
- item := self itemOfView:aView.
-
- item notNil ifTrue:[
- model doMakeVisible:item.
-
- (index := self indexOfNode:item) ~~ 0 ifTrue:[
- oldSel := selection copy.
- self addToSelection:index.
- self selectionChangedFrom:oldSel
- ]
- ]
-!
-
-canvasSelectionRemove:aView
- "canvas removes a view from current selection
- "
- |item index oldSel|
-
- ( (item := self itemOfView:aView) notNil
- and:[(index := self indexOfNode:item) ~~ 0
- and:[self isInSelection:index]]
- ) ifTrue:[
- oldSel := selection copy.
- self removeFromSelection:index.
- self selectionChangedFrom:oldSel.
- ].
-!
-
-selectedViews
- ^ self selection
+]
+ ].
+ sel := list collect:[:anItem| self indexOfNode:anItem ].
+ ].
+ self canvasEventsDisabledDo:[ self selection:sel ].
+! !
+
+!UIPainter::TreeView methodsFor:'drag & drop'!
+
+election
collect:[:index |
|node view|
@@ -6263,16 +6414,13 @@
view := node contents view.
view
]
-! !
-
-!UIPainter::TreeView methodsFor:'change & update'!
-
-canvasNameChanged:aName
- "called if identification name assigned to window (canvas) changed
- "
- |name node|
-
- node := listOfNodes at:1.
+!
+
+view
+ ]
+!
+
+fNodes at:1.
( aName size ~~ 0
and:[(name := aName string withoutSeparators) size ~~ 0
@@ -6284,9 +6432,14 @@
].
!
-layoutChanged
- "layout of any component changed; in case of single selection, the
- application will be informed to update its layout
+]]
+ ) ifTrue:[
+ node name: name asBoldText.
+ node changed.
+ ].
+!
+
+d to update its layout
"
selection size == 1 ifTrue:[
self application layoutChanged
@@ -6295,8 +6448,7 @@
!
-propertyChanged:aProperty
- "property of view derived from argument a property changed
+perty changed
"
|item idx end|
@@ -6329,19 +6481,83 @@
].
+!
+
+ame = aProperty name ifFalse:[
+ idx := self firstLineShown.
+
+ (end := self lastLineShown) > listOfNodes size ifTrue:[
+ end := listOfNodes size
+ ].
+ item changed.
+
+ [idx <= end] whileTrue:[
+ (listOfNodes at:idx) == item ifTrue:[
+ self redrawLine:idx. "/ is visible; redraw line
+ end := 0
+ ] ifFalse:[
+ idx := idx + 1
+ ]
+ ]
+ ].
+
+ self selectedNode == item ifTrue:[ "/ inform application
+ self application propertyChanged
+ ]
+ ].
+
+
+!
+
+].
+ item changed.
+
+ [idx <= end] whileTrue:[
+ (listOfNodes at:idx) == item ifTrue:[
+ self redrawLine:idx. "/ is visible; redraw line
+ end := 0
+ ] ifFalse:[
+ idx := idx + 1
+ ]
+ ]
+ ].
+
+ self selectedNode == item ifTrue:[ "/ inform application
+ self application propertyChanged
+ ]
+ ].
+
+
! !
-!UIPainter::TreeView methodsFor:'drag & drop'!
-
-canDrop:aDropContext
- "can drop ? -> delegate to canvas"
-
- ^ self canvas canDrop:aDropContext
-
- "Modified: / 13-10-2006 / 16:08:43 / cg"
-!
-
-canDrop:aDropContext at:aPoint
+!UIPainter::TreeView methodsFor:'enumerating'!
+
+end := 0
+ ] ifFalse:[
+ idx := idx + 1
+ ]
+ ]
+ ].
+
+ self selectedNode == item ifTrue:[ "/ inform application
+ self application propertyChanged
+ ]
+ ].
+
+
+! !
+
+!UIPainter::TreeView methodsFor:'event handling'!
+
+rm application
+ self application propertyChanged
+ ]
+ ].
+
+
+!
+
+ntext at:aPoint
"can drop ? -> delegate to canvas"
^ self canvas canDrop:aDropContext at:aPoint
@@ -6350,155 +6566,43 @@
"Modified: / 13-10-2006 / 16:08:46 / cg"
!
-canDropObjects:aCollectionOfDropObjects
- "can drop ? -> delegate to canvas"
-
- ^ self canvas canDropObjects:aCollectionOfDropObjects
-
- "Created: / 13-10-2006 / 16:08:31 / cg"
-!
-
-canDropObjects:aCollectionOfDropObjects at:aPoint
- "can drop ? -> delegate to canvas"
-
- ^ self canvas canDropObjects:aCollectionOfDropObjects at:aPoint
-
- "Created: / 13-10-2006 / 16:08:35 / cg"
-!
-
-drop:aDropContext
- "drop objects -> delegate to canvas"
-
- self canvas drop:aDropContext
-
- "Created: / 13-10-2006 / 12:35:59 / cg"
+/ cg"
+ "Modified: / 13-10-2006 / 16:08:46 / cg"
+! !
+
+!UIPainter::TreeView methodsFor:'initialization'!
+
+cg"
"Modified: / 13-10-2006 / 16:09:04 / cg"
!
-drop:aDropContext at:aPoint
- "drop objects -> delegate to canvas"
-
- self canvas drop:aDropContext at:nil
-
- "Modified: / 13-10-2006 / 16:09:07 / cg"
-!
-
-dropObjects:aCollectionOfDropObjects
- "drop objects -> delegate to canvas"
-
- self canvas dropObjects:aCollectionOfDropObjects
-
- "Created: / 13-10-2006 / 16:08:51 / cg"
-!
-
-dropObjects:aCollectionOfDropObjects at:aPoint
- "drop objects -> delegate to canvas"
-
- self canvas dropObjects:aCollectionOfDropObjects at:nil
-
- "Created: / 13-10-2006 / 16:08:56 / cg"
+"Modified: / 13-10-2006 / 16:09:07 / cg"
+!
+
+: / 13-10-2006 / 16:08:56 / cg"
! !
-!UIPainter::TreeView methodsFor:'enumerating'!
-
-allItemsDo:aOneArgBlock
- "evaluates the argument a block on each item other than the canvas"
-
- model root allChildrenDo:aOneArgBlock
+!UIPainter::TreeView methodsFor:'private'!
+
+ock
+
+
+!
+
+Clicked
+ ]
! !
-!UIPainter::TreeView methodsFor:'event handling'!
-
-canvasEventsDisabledDo:aBlock
- "evaluates the block without raising selection changed notifications to canvas"
-
- |restoreCanvasEvents|
-
- restoreCanvasEvents := canvasEventsDisabled.
- canvasEventsDisabled := true.
- aBlock value.
- canvasEventsDisabled := restoreCanvasEvents.
-!
-
-doubleClicked
- "disables collapsing of the root item"
-
- self selectedNode == model root ifFalse:[
- super doubleClicked
- ]
-
-
-!
-
-redrawLabelAt:x y:yTop index:anIndex
- "draws a tiny rectangle for indicating the master node (first selected node)"
-
- |dX|
-
- super redrawLabelAt:x y:yTop index:anIndex.
-
- ((selection size > 1) and: [selection first == anIndex]) ifTrue:[
- dX := textInset - 1.
- self paint:(Color red). "/ self application painter handleMasterColor.
- self fillRectangleX:(x - dX - 2)
- y:yTop + ((fontHeight - dX) // 2)
- width:dX
- height:dX
- ]
-! !
-
-!UIPainter::TreeView methodsFor:'initialization'!
-
-iconForNode:aNode
- |spec|
-
- spec := aNode contents spec.
- spec isNil ifTrue: [
- ^ WindowSpec icon
- ] ifFalse:[
- ^ spec icon
- ]
-!
-
-initialize
- "initialize the tree view; multiple select and tree item actions"
-
- super initialize.
-
- self multipleSelectOk:true.
- canvasEventsDisabled := false.
- self showDirectoryIndicator: true.
- self showDirectoryIndicatorForRoot: false.
-
- self model
- iconAction:[:aNode| self iconForNode:aNode];
- labelAction: [:aNode | self labelForNode:aNode].
-!
-
-labelForNode:aNode
- |spec|
-
- spec := aNode contents spec.
- spec notNil ifTrue: [
- ^ self nameForSpecInList:spec
- ] ifFalse:[
+!UIPainter::TreeView methodsFor:'queries'!
+
+[
^ aNode name
]
-! !
-
-!UIPainter::TreeView methodsFor:'private'!
-
-nameForSpecInList:aSpec
- "returns the tree item label for aSpec"
-
- |aspect aspectPrefix nameString viewClassString|
-
- nameString := aSpec name ? ''.
- viewClassString := '[',aSpec viewClass name,']' .
-
- aspect := aSpec nameOfMainAspect.
+!
+
+aspect := aSpec nameOfMainAspect.
aspect notNil ifTrue:[
aspectPrefix := '(',aspect allBold ,') '
] ifFalse:[
@@ -6510,7 +6614,7 @@
"Modified: / 17-08-2011 / 09:10:31 / cg"
!
-selectionChangedFrom:oldSelection
+m:oldSelection
"selection has changed. update master selection and raise notification
to canvas in case of enabled cvs events
"
@@ -6547,13 +6651,38 @@
ifFalse: [
lastDrawnMaster := nil
]
-! !
-
-!UIPainter::TreeView methodsFor:'queries'!
-
-canChangeOrderInContainer
- "returns true if any selection exists and all widgets in the selection
- can change their layout through to a move or align operation"
+!
+
+].
+ size = 1 ifTrue:[
+ oldSelection size > 1 ifTrue: [
+ (listOfNodes at:lastDrawnMaster) retrieveLabel.
+ self redrawLine: lastDrawnMaster.
+ lastDrawnMaster := selection first
+ ]
+ ].
+ size > 1 ifTrue:[
+ selection first ~~ lastDrawnMaster ifTrue: [
+ (listOfNodes at:selection first) retrieveLabel.
+ lastDrawnMaster notNil ifTrue: [(listOfNodes at:lastDrawnMaster) retrieveLabel].
+ self redrawLine: lastDrawnMaster.
+ self redrawLine: (lastDrawnMaster := selection first)
+ ]
+ ]
+ ifFalse: [
+ lastDrawnMaster := nil
+ ]
+!
+
+er := selection first)
+ ]
+ ]
+ ifFalse: [
+ lastDrawnMaster := nil
+ ]
+!
+
+on"
^(selection size == 1) and:
[(selection at: 1) ~~ 1 and:
@@ -6562,18 +6691,7 @@
!
-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
+AlignSelection
"returns true if any selection exists and all widgets in the selection
can change their layout through to a move or align operation"
@@ -6597,7 +6715,40 @@
^ true
!
-canMoveSelectionIntoContainer
+tyOrNil ifTrue:[
+ ^ false
+ ].
+
+ selection do:[:i|
+ |node view|
+
+ i == 1 ifTrue:[
+ "/ the tree node for the canvas itself.
+ ^ false
+ ].
+ node := listOfNodes at:i.
+ view := node contents view.
+ (self canvas canChangeLayoutOfView:view) ifFalse:[
+ ^ false
+ ]
+ ].
+ ^ true
+!
+
+^ false
+ ].
+ node := listOfNodes at:i.
+ view := node contents view.
+ (self canvas canChangeLayoutOfView:view) ifFalse:[
+ ^ false
+ ]
+ ].
+ ^ true
+! !
+
+!UIPainter::TreeView methodsFor:'searching'!
+
+ectionIntoContainer
"returns true in case that one widget is selected and can change its container
widget to an element below"
@@ -6613,10 +6764,18 @@
].
^ false
-!
-
-canMoveSelectionOutOfContainer
- "returns true in case that one widget is selected which is contained within
+! !
+
+!UIPainter::TreeView methodsFor:'user interaction'!
+
+] startingAt:idx ifNone:nil.
+ ^ newParentItem notNil.
+ ].
+
+ ^ false
+!
+
+rue in case that one widget is selected which is contained within
another widget"
|item prnt|
@@ -6630,9 +6789,7 @@
^ true
!
-canResizeSelectedWidget
- "returns true in case of one widget selected and is contained
- within a widget which allows to resize sub components"
+within a widget which allows to resize sub components"
|selectedNode|
@@ -6644,74 +6801,14 @@
^ false
!
-canResizeSelection
- "returns true if all selected widgets can be resized"
-
- selection isEmptyOrNil ifTrue:[ ^ false ].
- ^ self canvas canResize:(self selectedViews)
-!
-
-hasOneSelectionOtherThanCanvas
- "returns true in case that one selection exists other than the canvas"
-
- ^ selection size == 1 and:[selection first ~~ 1]
-!
-
-isCanvasSelected
- "returns true in case of a single selection and the
- selection is the canvas (index 1)"
-
- ^ selection size == 1 and:[self isInSelection:1]
-! !
-
-!UIPainter::TreeView methodsFor:'searching'!
-
-detectItemCorespondingToView:aView
- "detects the item coresponding to the view. The item of the view or the first
- subview providing the item is returned. If no property is detected nil is
- returned"
-
- |view item|
-
- (view := aView) isNil ifTrue:[ ^ nil ].
-
- [(item := self itemOfView:view) isNil] whileTrue:[
- (view := view superView) isNil ifTrue:[^ listOfNodes at:1]
- ].
- ^ item
-! !
-
-!UIPainter::TreeView methodsFor:'user interaction'!
-
-askForSelectionChangeAllowed
+ctionChangeAllowed
selectConditionBlock notNil ifTrue:[
^ selectConditionBlock value:nil
].
^ true
!
-doChangeParentOfSelectedItemTo:newParentItem
-
- |canvas|
-
- newParentItem isNil ifTrue:[
- ^ self
- ].
- self askForSelectionChangeAllowed ifFalse:[^ self].
- self setSelection:nil.
-
- canvas := self canvas.
- canvas deleteSelection.
- canvas setSelection:(newParentItem contents view) withRedraw:false.
- canvas pasteWithLayout.
-!
-
-doSortItems
- "sort items by their top-left position"
-
- |selectedItems parent sortedItems newChildren itemList parentView|
-
- self askForSelectionChangeAllowed ifFalse:[^ self].
+kForSelectionChangeAllowed ifFalse:[^ self].
selectedItems := self selectedNodes.
selectedItems size <= 1 ifTrue:[^ self].
@@ -6749,80 +6846,37 @@
self selectNodes:itemList asOrderedCollection.
!
-doStepIn
- "move the currently selected widget into the next available container below"
-
- |item oldParentItem newParentItem idx|
-
- item := self selectedNode.
- (item notNil and:[(oldParentItem := item parent) notNil]) ifTrue:[
- idx := (oldParentItem indexOfChild:item) + 1.
- newParentItem := oldParentItem children
- detect:[:eachChild | eachChild contents spec class supportsSubComponents]
- startingAt:idx
- ifNone:nil.
- newParentItem notNil ifTrue:[
- self doChangeParentOfSelectedItemTo:newParentItem
+sNil or:[(selectedItems conform:[:e| e parent == parent]) not]) ifTrue:[^ self].
+
+ sortedItems := selectedItems sort:[:a :b|
+ a contents view origin isLeftOrAbove:(b contents view origin)].
+ itemList := selectedItems asIdentitySet.
+
+ newChildren := parent children collect:[:eachChild|
+ (itemList includes:eachChild) ifTrue:[
+ sortedItems removeFirst.
+ ] ifFalse:[
+ eachChild.
].
- ]
-!
-
-doStepOut
- |item|
-
- item := self selectedNode.
- (item notNil and:[(item := item parent) notNil]) ifTrue:[
- self doChangeParentOfSelectedItemTo:(item parent)
- ].
-!
-
-doStepOver:anIndex
- "moves child 'anIndex' forward or backward in list of children"
-
- |item idx size parentItem parentItemsView itemsView canvas|
-
- self askForSelectionChangeAllowed ifFalse:[^ self].
-
- ( (item := self selectedNode) isNil
- or:[(parentItem := item parent) isNil
- or:[(size := parentItem children size) < 2
- or:[(idx := parentItem indexOfChild:item) == 0]]]
- ) ifTrue:[
- ^ self
- ].
-
- idx := idx + anIndex.
-
- idx < 1 ifTrue:[idx := size]
- ifFalse:[idx > size ifTrue:[idx := 1]].
+ ].
self setSelection:nil.
- model remove:item.
- model add:item beforeIndex:idx below:parentItem.
-
- idx := parentItem indexOfChild:item.
- itemsView := item contents view.
- parentItemsView := parentItem contents view.
-
- canvas := self canvas.
- canvas hideSelection.
-
- itemsView isView ifFalse:[
- "/ a component - has its own collection (and therefore indexing) - sigh
- idx := idx - ((1 to:idx-1) count:[:i | (parentItem children at:i) contents view isView]).
- parentItemsView changeSequenceOrderFor:itemsView to:idx.
- ] ifTrue:[
- "/ a view - has its own collection (and therefore indexing) - sigh
- idx := idx - ((1 to:idx-1) count:[:i | (parentItem children at:i) contents view isView not]).
- parentItemsView changeSequenceOrderFor:itemsView to:idx.
- ].
-
- parentItemsView specClass isLayoutContainer ifFalse:[
- "/ spVw components notEmptyOrNil ifTrue:[ self halt ].
- parentItemsView subViews do:[:v| v raise ].
- ].
- canvas showSelection.
- self selectNode:item.
+ model remove:parent children.
+ model add:newChildren beforeIndex:1 below:parent.
+
+ parentView := parent contents view.
+
+ self canvas hideSelection.
+ newChildren keysAndValuesDo:[:idx :eachItem|
+ parentView changeSequenceOrderFor:eachItem contents view to:idx.
+ ].
+ parentView specClass isLayoutContainer ifFalse:[
+ parentView components notEmptyOrNil ifTrue:[ self halt ].
+ parentView subViews do:[:v| v raise ].
+ ].
+ self canvas showSelection.
+
+ self selectNodes:itemList asOrderedCollection.
! !
!UIPainter class methodsFor:'documentation'!