--- a/MenuEditor.st Fri Jul 04 23:50:04 1997 +0200
+++ b/MenuEditor.st Sat Jul 05 14:59:38 1997 +0200
@@ -863,6 +863,12 @@
!MenuEditor class methodsFor:'startup'!
+openModalOnClass:aClass andSelector:aSelector
+ ^ self new openModalOnClass:aClass andSelector:aSelector
+
+
+!
+
openOnClass:aClass andSelector:aSelector
^ self new openOnClass:aClass andSelector:aSelector
@@ -1103,13 +1109,28 @@
!
+openModalOnClass:aClass andSelector:aSelector
+ specClass := Association key:aClass value:aSelector.
+ super openInterfaceModal.
+
+!
+
openOnClass:aClass andSelector:aSelector
+ specClass := Association key:aClass value:aSelector.
super openInterface.
self buildFrom:aClass andSelector:aSelector.
+
!
postBuildWith:builder
- self buildFrom:nil andSelector:nil.
+ |cls sel|
+
+ specClass isAssociation ifTrue:[
+ cls := specClass key.
+ sel := specClass value.
+ ].
+ specClass := nil.
+ self buildFrom:cls andSelector:sel.
! !
!MenuEditor methodsFor:'user interactions'!
@@ -1283,11 +1304,11 @@
documentation
"
- implements the contents assigned to a HierarchyNode. An instance
+ implements the contents assigned to a TreeItem. An instance
is associated with one item and keeps all its information
[see also:]
- HierarchyNode
+ TreeItem
MenuEditor
[author:]
@@ -1461,8 +1482,8 @@
[see also:]
SelectionInTreeView
- SelectionInHierarchy
- HierarchyNode
+ SelectionInTree
+ TreeItem
[author:]
Claus Atzkern
@@ -1496,20 +1517,20 @@
].
spec isNil ifFalse:[
menu := Menu new fromLiteralArrayEncoding:spec.
- node := self nodeLabel:(aSelector asString) level:1.
+ node := self nodeLabel:(aSelector asString).
self subMenu:menu parent:node.
] ifTrue:[
aSelector notNil ifTrue:[cls := aSelector asString]
ifFalse:[cls := 'menu'].
- node := self nodeLabel:cls level:1.
+ node := self nodeLabel:cls.
].
node hasChildren ifFalse:[
- node addChild:(self nodeLabel:'undefined' level:1)
+ node add:(self nodeLabel:'undefined')
].
+ node expand.
model root:node.
- model setHideToChildren:true startingAt:node.
!
@@ -1517,25 +1538,24 @@
|spec cls node|
- node := self nodeLabel:'menu' level:1.
+ node := self nodeLabel:'menu'.
self subMenu:aMenu parent:node.
node hasChildren ifFalse:[
- node addChild:(self nodeLabel:'undefined' level:1)
+ node add:(self nodeLabel:'undefined')
].
+ node expand.
model root:node.
- model setHideToChildren:true startingAt:node.
!
-item:anItem level:aLevel
+menuItem:anItem
|level node submenu grp ctr sep|
- node := self nodeLabel:(anItem label) level:aLevel.
+ node := self nodeLabel:(anItem label).
node contents buildFromMenuItem:anItem.
node name:(node contents label).
- node hide:true.
self subMenu:(anItem submenu) parent:node.
^ node.
@@ -1543,21 +1563,18 @@
!
subMenu:aMenu parent:aParent
- |lvl grp sep|
+ |idx grp|
aMenu isNil ifFalse:[
- lvl := (aParent level) + 1.
grp := aMenu groupSizes.
-
- aMenu itemsDo:[:i| aParent addChild:(self item:i level:lvl)].
+ aMenu itemsDo:[:i| aParent add:(self menuItem:i)].
grp notNil ifTrue:[
- sep := self nodeLabel:nil level:lvl.
- lvl := 0.
+ idx := 0.
grp do:[:i|
- lvl := lvl + i + 1.
- aParent addChildAndSubChildren:sep at:lvl
+ idx := idx + i + 1.
+ aParent add:(self nodeLabel:nil) beforeIndex:idx.
]
]
]
@@ -1616,61 +1633,75 @@
initialize
super initialize.
- super model:(SelectionInHierarchy new).
-
+ self multipleSelectOk:true.
+ self model:(SelectionInTree new).
! !
!MenuEditor::Painter methodsFor:'menus'!
doCopy
- CopyBuffer := listOfNodes at:selection.
-
-
+ self hasSelection ifTrue:[
+ CopyBuffer := OrderedCollection new.
+ self selectionDo:[:i| CopyBuffer add:((listOfNodes at:i) copy)]
+ ]
!
doCreateItem
- self addNode:(self nodeLabel:'undefined' level:1)
+ self addElement:(self nodeLabel:'undefined')
!
doCreateMenu
|node|
- node := self nodeLabel:'undefined' level:1.
- node addChild:(self nodeLabel:'undefined' level:2).
- self addNode:node
+ node := self nodeLabel:'undefined'.
+ node add:(self nodeLabel:'undefined').
+ self addElement:node
!
doCreateSep
- self addNode:(self nodeLabel:nil level:1)
+ self addElement:(self nodeLabel:nil)
!
doCut
self doCopy.
- model removeIndex:selection.
+ model removeSelection.
self selection:nil.
!
doPaste
- self addNode:CopyBuffer
+
+ (CopyBuffer notNil and:[self selectedNode notNil]) ifTrue:[
+ self addElement:(CopyBuffer collect:[:el| el copy])
+ ]
!
menu
- |menu subm|
+ |menu subm sz inclRoot|
+
+ (sz := self numberOfSelections) == 0 ifTrue:[
+ ^ self
+ ].
- selection isNumber ifFalse:[
- ^ nil
+ inclRoot := self isInSelection:1.
+
+ sz > 1 ifTrue:[
+ inclRoot ifTrue:[^ nil ].
+
+ ^ PopUpMenu labels:#( 'copy' 'cut' )
+ selectors:#( #doCopy #doCut )
+ receiver:self.
].
menu := PopUpMenu labels:#( 'copy' 'cut' 'paste' '-' 'create' )
selectors:#( #doCopy #doCut #doPaste nil #create )
receiver:self.
- selection == 1 ifTrue:[
+ inclRoot ifTrue:[
menu disable:#doCopy.
menu disable:#doCut.
].
@@ -1679,52 +1710,45 @@
receiver:self.
menu subMenuAt:#create put:subm.
-
^ menu.
-
-
! !
!MenuEditor::Painter methodsFor:'private'!
-addNode:aNode
- |node parent|
-
- (aNode notNil and:[(node := self selectedNode) notNil]) ifFalse:[
- ^ self
- ].
+addElement:something
+ "add something after selection
+ "
+ |node parent index|
- (node isCollapsable or:[node parent isNil]) ifTrue:[
- model addChildAndSubChildren:aNode below:node at:1
- ] ifFalse:[
- model addChildAndSubChildren:aNode below:(node parent) after:node
+ (node := self selectedNode) notNil ifTrue:[
+ node parent notNil ifTrue:[
+ node isCollapsable ifTrue:[
+ model add:something beforeIndex:1 below:node
+ ] ifFalse:[
+ model add:something after:node
+ ]
+ ] ifFalse:[
+ model add:something beforeIndex:1 below:(self root)
+ ]
]
-
-
!
-nodeLabel:aLabel level:aLevel
- |node|
-
- node := HierarchyNode new.
- node childCollectionClass:OrderedCollection.
- node name:aLabel.
- node level:aLevel.
- node contents:(MenuEditor::Item new label:aLabel).
- ^ node
+nodeLabel:aLabel
+ ^ TreeItem name:aLabel contents:(MenuEditor::Item new label:aLabel).
! !
!MenuEditor::Painter methodsFor:'selection'!
selectedNodeChanged
- |node name|
+ |node name index|
- (node := self selectedNode) isNil ifTrue:[^ self].
- name := node contents label.
-
- list at:selection put:name.
- node name:name.
- self redrawLine:selection.
+ (index := self selectedIndex) ~~ 0 ifTrue:[
+ node := listOfNodes at:index.
+ name := node contents label.
+ list at:index put:name.
+ node name:name.
+ self redrawLine:index.
+ ]
! !
!MenuEditor class methodsFor:'documentation'!