--- a/MenuEditor.st Thu Jul 17 12:08:15 1997 +0200
+++ b/MenuEditor.st Thu Jul 17 18:46:03 1997 +0200
@@ -13,25 +13,25 @@
ApplicationModel subclass:#MenuEditor
- instanceVariableNames:'specClass tabSelection aspects slices activeHelpTool'
- classVariableNames:''
- poolDictionaries:''
- category:'Interface-UIPainter'
+ instanceVariableNames:'specClass tabSelection aspects slices activeHelpTool'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Interface-UIPainter'
!
Object subclass:#Item
- instanceVariableNames:'activeHelpKey enabled label value nameKey indication shortcutKey
- accessCharaterPos retriever icon iconAndLabel submenuChannel'
- classVariableNames:''
- poolDictionaries:''
- privateIn:MenuEditor
+ instanceVariableNames:'activeHelpKey enabled label value nameKey indication shortcutKey
+ accessCharaterPos retriever icon iconAndLabel submenuChannel'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:MenuEditor
!
SelectionInTreeView subclass:#Painter
- instanceVariableNames:'imageDirSelect'
- classVariableNames:'CopyBuffer'
- poolDictionaries:''
- privateIn:MenuEditor
+ instanceVariableNames:'imageMenuLink imageSeparator'
+ classVariableNames:'CopyBuffer ImageMenuLink ImageSeparator'
+ poolDictionaries:''
+ privateIn:MenuEditor
!
!MenuEditor class methodsFor:'documentation'!
@@ -75,6 +75,26 @@
!MenuEditor class methodsFor:'icons'!
+iconCreateItem
+ ^ Painter imageItem
+
+!
+
+iconCreateLink
+ ^ Painter imageMenuLink
+
+!
+
+iconCreateMenu
+ ^ Painter imageClosed
+
+!
+
+iconCreateSep
+ ^ Painter imageSeparator
+
+!
+
iconStepDown
^ ((Image fromFile:'stepOver.xpm') rotated:90) flipHorizontal
!
@@ -268,6 +288,104 @@
)
!
+menuButtons
+ "this window spec was automatically generated by the ST/X MenuEditor"
+
+ "do not manually edit this - the builder may not be able to
+ handle the specification if its corrupted."
+
+ "
+ MenuEditor new openOnClass:MenuEditor andSelector:#menuButtons
+ (Menu new fromLiteralArrayEncoding:(MenuEditor menuButtons)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+
+ #(#Menu
+
+ #(
+ #(#MenuItem
+ #'label:' 'createMenu'
+ #'value:' #doCreateMenu
+ #'enabled:' #hasAnySingleSelection
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateMenu
+ )
+ )
+ #(#MenuItem
+ #'label:' 'createLink'
+ #'value:' #doCreateLink
+ #'enabled:' #hasAnySingleSelection
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateLink
+ )
+ )
+ #(#MenuItem
+ #'label:' 'createItem'
+ #'value:' #doCreateItem
+ #'enabled:' #hasAnySingleSelection
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateItem
+ )
+ )
+ #(#MenuItem
+ #'label:' 'createSeparator'
+ #'value:' #doCreateSep
+ #'enabled:' #hasAnySingleSelection
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateSep
+ )
+ )
+ #(#MenuItem
+ #'label:' ''
+ )
+ #(#MenuItem
+ #'label:' 'stepUp'
+ #'value:' #doStepUp
+ #'enabled:' #enabledStepOver
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconStepUp
+ )
+ )
+ #(#MenuItem
+ #'label:' 'stepDown'
+ #'value:' #doStepDown
+ #'enabled:' #enabledStepOver
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconStepDown
+ )
+ )
+ #(#MenuItem
+ #'label:' 'stepIn'
+ #'value:' #doStepIn
+ #'enabled:' #enabledStepIn
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconStepIn
+ )
+ )
+ #(#MenuItem
+ #'label:' 'stepOut'
+ #'value:' #doStepOut
+ #'enabled:' #enabledStepOut
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconStepOut
+ )
+ )
+ ) nil
+ nil
+ )
+!
+
menuDefaultLink
"this window spec was automatically generated by the ST/X MenuEditor"
@@ -294,6 +412,97 @@
)
!
+menuPainter
+ "this window spec was automatically generated by the ST/X MenuEditor"
+
+ "do not manually edit this - the builder may not be able to
+ handle the specification if its corrupted."
+
+ "
+ MenuEditor new openOnClass:MenuEditor andSelector:#menuPainter
+ (Menu new fromLiteralArrayEncoding:(MenuEditor menuPainter)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+
+ #(#Menu
+
+ #(
+ #(#MenuItem
+ #'label:' 'copy'
+ #'value:' #doCopy
+ #'enabled:' #hasValidSelection
+ )
+ #(#MenuItem
+ #'label:' 'cut'
+ #'value:' #doCut
+ #'enabled:' #hasValidSelection
+ )
+ #(#MenuItem
+ #'label:' 'paste'
+ #'value:' #doPaste
+ #'enabled:' #hasAnySingleSelection
+ )
+ #(#MenuItem
+ #'label:' '-'
+ )
+ #(#MenuItem
+ #'label:' 'create'
+ #'enabled:' #hasAnySingleSelection
+ #'submenu:'
+ #(#Menu
+
+ #(
+ #(#MenuItem
+ #'label:' 'submenu static'
+ #'value:' #doCreateMenu
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateMenu
+ 'submenu static'
+ )
+ )
+ #(#MenuItem
+ #'label:' 'submenu dynamic'
+ #'value:' #doCreateLink
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateLink
+ 'submenu dynamic'
+ )
+ )
+ #(#MenuItem
+ #'label:' '-'
+ )
+ #(#MenuItem
+ #'label:' 'item'
+ #'value:' #doCreateItem
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateItem
+ 'item'
+ )
+ )
+ #(#MenuItem
+ #'label:' 'separator'
+ #'value:' #doCreateSep
+ #'labelImage:'
+ #(#ResourceRetriever
+ #MenuEditor #iconCreateSep
+ 'separator'
+ )
+ )
+ ) nil
+ nil
+ )
+ )
+ ) nil
+ nil
+ )
+!
+
menuPullDown
"this window spec was automatically generated by the ST/X MenuEditor"
@@ -383,66 +592,6 @@
#'label:' 'test'
#'submenuChannel:' #submenuTest
)
- #(#MenuItem
- #'label:' ''
- )
- #(#MenuItem
- #'label:' '-'
- )
- #(#MenuItem
- #'label:' 'stepUp'
- #'value:' #doStepUp
- #'enabled:' #enabledStepOver
- #'labelImage:'
- #(#ResourceRetriever
- #MenuEditor #iconStepUp
- )
- )
- #(#MenuItem
- #'label:' '-'
- )
- #(#MenuItem
- #'label:' 'stepDown'
- #'value:' #doStepDown
- #'enabled:' #enabledStepOver
- #'labelImage:'
- #(#ResourceRetriever
- #MenuEditor #iconStepDown
- )
- )
- #(#MenuItem
- #'label:' '-'
- )
- #(#MenuItem
- #'label:' ''
- )
- #(#MenuItem
- #'label:' '-'
- )
- #(#MenuItem
- #'label:' 'stepIn'
- #'value:' #doStepIn
- #'enabled:' #enabledStepIn
- #'labelImage:'
- #(#ResourceRetriever
- #MenuEditor #iconStepIn
- )
- )
- #(#MenuItem
- #'label:' '-'
- )
- #(#MenuItem
- #'label:' 'stepOut'
- #'value:' #doStepOut
- #'enabled:' #enabledStepOut
- #'labelImage:'
- #(#ResourceRetriever
- #MenuEditor #iconStepOut
- )
- )
- #(#MenuItem
- #'label:' '-'
- )
) nil
nil
)
@@ -478,17 +627,17 @@
#(
#(#ArbitraryComponentSpec
#'name:' 'painterView'
- #'layout:' #(#LayoutFrame 0 0.0 25 0.0 0 0.5 0 1.0)
- #'component:' #painter
+ #'layout:' #(#LayoutFrame 0 0.0 57 0 0 0.5 0 1.0)
+ #'menu:' #menuPainter
#'hasHorizontalScrollBar:' true
#'hasVerticalScrollBar:' true
+ #'component:' #painter
#'hasBorder:' false
- #'miniScrollerHorizontal:' false
- #'miniScrollerVertical:' false
)
#(#NoteBookViewSpec
#'name:' 'specificationView'
- #'layout:' #(#LayoutFrame 0 0.5 25 0.0 0 1.0 -25 1.0)
+ #'layout:' #(#LayoutFrame 0 0.5 0 0.0 0 1.0 -25 1.0)
+ #'tabable:' true
#'menu:' #tabList
#'model:' #tabModel
#'tabWidget:' #Window
@@ -525,9 +674,16 @@
)
#(#MenuPanelSpec
#'name:' 'pullDownMenu'
- #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 24 0)
+ #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 0.5 24 0)
+ #'tabable:' true
#'menu:' #menuPullDown
)
+ #(#MenuPanelSpec
+ #'name:' 'menuPanel1'
+ #'layout:' #(#LayoutFrame 0 0 28 0 0 0.5 53 0)
+ #'menu:' #menuButtons
+ #'showSeparatingLines:' true
+ )
)
)
)
@@ -1058,6 +1214,24 @@
^ menu
! !
+!MenuEditor methodsFor:'accessing menu'!
+
+menuButtons
+ "this window spec was automatically generated by the ST/X MenuEditor"
+
+ ^ self class menuButtons
+
+
+!
+
+menuPainter
+ "this window spec was automatically generated by the ST/X MenuEditor"
+
+ ^ self class menuPainter
+
+
+! !
+
!MenuEditor methodsFor:'actions'!
accept
@@ -1154,6 +1328,36 @@
^ holder
!
+hasAnySingleSelection
+ |holder|
+
+ (holder := builder bindingAt:#hasAnySingleSelection) isNil ifTrue:[
+ builder aspectAt:#hasAnySingleSelection put:(holder := false asValue).
+ ].
+ ^ holder
+
+!
+
+hasValidSelection
+ |holder|
+
+ (holder := builder bindingAt:#hasValidSelection) isNil ifTrue:[
+ builder aspectAt:#hasValidSelection put:(holder := false asValue).
+ ].
+ ^ holder
+
+!
+
+hasValidSingleSelection
+ |holder|
+
+ (holder := builder bindingAt:#hasValidSingleSelection) isNil ifTrue:[
+ builder aspectAt:#hasValidSingleSelection put:(holder := false asValue).
+ ].
+ ^ holder
+
+!
+
menuPullDown
|menu|
@@ -1222,20 +1426,51 @@
updateEnabledChannels
"update enabled channels
"
- |node parent next|
-
- node := self painter selectedNode.
-
- (node notNil and:[(parent := node parent) notNil]) ifTrue:[
- next := parent childAt:((parent indexOfChild:node) + 1).
- self enabledStepIn value:(next notNil and:[next hasChildren]).
- self enabledStepOver value:(parent children size > 1).
- self enabledStepOut value:(parent parent notNil).
+ |node parent next painter state|
+
+ painter := self painter.
+ node := painter selectedNode.
+ state := false.
+
+ node notNil ifTrue:[
+ self hasAnySingleSelection value:true.
+
+ (parent := node parent) notNil ifTrue:[
+ next := parent childAt:((parent indexOfChild:node) + 1).
+ self enabledStepIn value:(next notNil and:[next hasChildren]).
+ self enabledStepOver value:(parent children size > 1).
+ self enabledStepOut value:(parent parent notNil).
+ self hasValidSingleSelection value:true.
+ self hasValidSelection value:true.
+ ^ self
+ ]
] ifFalse:[
- self enabledStepOver value:false.
- self enabledStepIn value:false.
- self enabledStepOut value:false.
- ]
+ self hasAnySingleSelection value:false.
+
+ painter numberOfSelections ~~ 0 ifTrue:[
+ state := (painter isInSelection:1) not
+ ]
+ ].
+ self enabledStepOver value:false.
+ self enabledStepIn value:false.
+ self enabledStepOut value:false.
+ self hasValidSingleSelection value:false.
+ self hasValidSelection value:state.
+! !
+
+!MenuEditor methodsFor:'event handling'!
+
+doesNotUnderstand:aMessage
+ |painter|
+
+ painter := self painter.
+
+ (painter respondsTo:(aMessage selector)) ifTrue:[
+ ^ aMessage sendTo:painter
+ ].
+ super doesNotUnderstand:aMessage
+
+
! !
!MenuEditor methodsFor:'queries'!
@@ -1792,6 +2027,30 @@
^ self separatorType notNil
! !
+!MenuEditor::Painter class methodsFor:'constants'!
+
+imageMenuLink
+ ImageMenuLink isNil ifTrue:[
+ ImageMenuLink := Image fromFile:('xpmBitmaps/document_images/tiny_yellow_dir_link.xpm').
+ ].
+ ^ ImageMenuLink
+"
+ImageMenuLink := nil
+"
+
+!
+
+imageSeparator
+ ImageSeparator isNil ifTrue:[
+ ImageSeparator := Image fromFile:('xpmBitmaps/document_images/tiny_file_exec.xpm').
+ ].
+ ^ ImageSeparator
+"
+ImageSeparator := nil
+"
+
+! !
+
!MenuEditor::Painter class methodsFor:'defaults'!
defaultMenuMessage
@@ -1963,14 +2222,26 @@
figureFor:aNode
"access figure for a node
"
- (aNode hasChildren or:[aNode contents submenuChannel isNil]) ifTrue:[
- ^ super figureFor:aNode
+ |item|
+
+ aNode hasChildren ifFalse:[
+ item := aNode contents.
+
+ item submenuChannel notNil ifTrue:[
+ imageMenuLink isNil ifTrue:[
+ imageMenuLink := (self class imageMenuLink) onDevice:device.
+ ].
+ ^ imageMenuLink
+ ].
+
+ item isSeparator ifTrue:[
+ imageSeparator isNil ifTrue:[
+ imageSeparator := (self class imageSeparator) onDevice:device.
+ ].
+ ^ imageSeparator
+ ]
].
- imageDirSelect isNil ifTrue:[
- imageDirSelect := Image fromFile:('xpmBitmaps/document_images/tiny_yellow_dir_link.xpm').
- imageDirSelect := imageDirSelect onDevice:device.
- ].
- ^ imageDirSelect
+ ^ super figureFor:aNode
! !
!MenuEditor::Painter methodsFor:'initialization'!
@@ -2032,7 +2303,7 @@
(CopyBuffer notNil and:[self selectedNode notNil]) ifTrue:[
self addElement:(CopyBuffer collect:[:el| el copy])
- ]
+ ].
!
doStepIn
@@ -2106,41 +2377,6 @@
model add:node beforeIndex:idx below:parent.
self selectNode:node.
]
-!
-
-menu
- |menu subm sz inclRoot|
-
- (sz := self numberOfSelections) == 0 ifTrue:[
- ^ 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.
-
- inclRoot ifTrue:[
- menu disable:#doCopy.
- menu disable:#doCut.
- ].
- subm := PopUpMenu labels:#( 'menu static' 'menu dynamic' '-' 'item' '-' 'separator' )
- selectors:#( #doCreateMenu #doCreateLink nil #doCreateItem nil #doCreateSep )
- receiver:self.
-
- menu subMenuAt:#create put:subm.
- ^ menu.
-
- "Modified: 6.7.1997 / 12:51:28 / cg"
! !
!MenuEditor::Painter methodsFor:'private'!