MenuEditor.st
changeset 1633 24748704c741
parent 1632 1f0a0d241ff8
child 1634 1dd4cd7ea43b
equal deleted inserted replaced
1632:1f0a0d241ff8 1633:24748704c741
    40 	classVariableNames:''
    40 	classVariableNames:''
    41 	poolDictionaries:''
    41 	poolDictionaries:''
    42 	privateIn:MenuEditor
    42 	privateIn:MenuEditor
    43 !
    43 !
    44 
    44 
    45 MenuEditor::Item subclass:#MenuItem
    45 MenuEditor::Item subclass:#RegularMenuItem
    46 	instanceVariableNames:''
    46 	instanceVariableNames:''
    47 	classVariableNames:''
    47 	classVariableNames:''
    48 	poolDictionaries:''
    48 	poolDictionaries:''
    49 	privateIn:MenuEditor
    49 	privateIn:MenuEditor
    50 !
    50 !
    62 	classVariableNames:''
    62 	classVariableNames:''
    63 	poolDictionaries:''
    63 	poolDictionaries:''
    64 	privateIn:MenuEditor
    64 	privateIn:MenuEditor
    65 !
    65 !
    66 
    66 
    67 MenuEditor::MenuItem subclass:#RootItem
    67 MenuEditor::RegularMenuItem subclass:#RootItem
    68 	instanceVariableNames:''
    68 	instanceVariableNames:''
    69 	classVariableNames:''
    69 	classVariableNames:''
    70 	poolDictionaries:''
    70 	poolDictionaries:''
    71 	privateIn:MenuEditor
    71 	privateIn:MenuEditor
    72 !
    72 !
  1953     objects := aContext dropObjects.
  1953     objects := aContext dropObjects.
  1954     objects isEmpty ifTrue:[ ^ self ].  "/ nothing to drop ???
  1954     objects isEmpty ifTrue:[ ^ self ].  "/ nothing to drop ???
  1955 
  1955 
  1956     "/ test whether all objects are dropable (kind of MenuItem)
  1956     "/ test whether all objects are dropable (kind of MenuItem)
  1957     objects do:[:el|
  1957     objects do:[:el|
  1958         el theObject class == MenuItem ifFalse:[
  1958         (el theObject askFor:#isMenuItem) ifFalse:[
  1959             "/ contains none-dropable objects
  1959             "/ contains none-dropable objects
  1960             ^ self
  1960             ^ self
  1961         ].
  1961         ].
  1962     ].
  1962     ].
  1963 
  1963 
  2441     selectedItem ifNil:[^ self].
  2441     selectedItem ifNil:[^ self].
  2442 
  2442 
  2443     selectedItem canAddDelayedMenu      ifFalse:[ ^ self ].
  2443     selectedItem canAddDelayedMenu      ifFalse:[ ^ self ].
  2444     self askForItemModification ifFalse:[ ^ self ].
  2444     self askForItemModification ifFalse:[ ^ self ].
  2445 
  2445 
  2446     what == #menu ifTrue:[ delayedItem := MenuItem new ]
  2446     what == #menu ifTrue:[ delayedItem := RegularMenuItem new ]
  2447                  ifFalse:[ delayedItem := LinkedMenuItem new ].
  2447                  ifFalse:[ delayedItem := LinkedMenuItem new ].
  2448 
  2448 
  2449     delayedItem setExpanded:true.
  2449     delayedItem setExpanded:true.
  2450     delayedItem := selectedItem add:delayedItem.
  2450     delayedItem := selectedItem add:delayedItem.
  2451 
  2451 
  2468 
  2468 
  2469 doCreateMenu
  2469 doCreateMenu
  2470     "create a new Menu
  2470     "create a new Menu
  2471     "
  2471     "
  2472     self addAndSelect:[ |item|
  2472     self addAndSelect:[ |item|
  2473         item := MenuItem new.
  2473         item := RegularMenuItem new.
  2474         item expand.
  2474         item expand.
  2475         item
  2475         item
  2476     ].
  2476     ].
  2477 !
  2477 !
  2478 
  2478 
  2484 
  2484 
  2485 doCreateStandardEditMenu
  2485 doCreateStandardEditMenu
  2486     "create a standart edit menu
  2486     "create a standart edit menu
  2487     "
  2487     "
  2488     self addAndSelect:[
  2488     self addAndSelect:[
  2489         MenuItem menu:(self class standardEditMenu) labeled:'Edit' translateLabel:true
  2489         RegularMenuItem menu:(self class standardEditMenu) labeled:'Edit' translateLabel:true
  2490     ].
  2490     ].
  2491 !
  2491 !
  2492 
  2492 
  2493 doCreateStandardFileMenu
  2493 doCreateStandardFileMenu
  2494     "create a standart file menu
  2494     "create a standart file menu
  2495     "
  2495     "
  2496     self addAndSelect:[
  2496     self addAndSelect:[
  2497         MenuItem menu:(self class standardFileMenu) labeled:'File' translateLabel:true
  2497         RegularMenuItem menu:(self class standardFileMenu) labeled:'File' translateLabel:true
  2498     ].
  2498     ].
  2499 !
  2499 !
  2500 
  2500 
  2501 doCreateStandardHelpMenu
  2501 doCreateStandardHelpMenu
  2502     "create a standart help menu
  2502     "create a standart help menu
  2503     "
  2503     "
  2504     |item|
  2504     |item|
  2505 
  2505 
  2506     self addAndSelect:[
  2506     self addAndSelect:[
  2507         item := MenuItem menu:(self class standardHelpMenu) labeled:'Help' translateLabel:true.
  2507         item := RegularMenuItem menu:(self class standardHelpMenu) labeled:'Help' translateLabel:true.
  2508         item aspectAt:#startGroup put:#right.
  2508         item aspectAt:#startGroup put:#right.
  2509         item
  2509         item
  2510     ].
  2510     ].
  2511 ! !
  2511 ! !
  2512 
  2512 
  2590     item := self selectedItem.
  2590     item := self selectedItem.
  2591     item ifNil:[ ^ self ].
  2591     item ifNil:[ ^ self ].
  2592 
  2592 
  2593     loMenuItems := OrderedCollection new.
  2593     loMenuItems := OrderedCollection new.
  2594     aCollection do:[:el|
  2594     aCollection do:[:el|
  2595 	el class == MenuItem ifTrue:[ loMenuItems add:el ].
  2595         (el askFor:#isMenuItem) ifTrue:[ loMenuItems add:el ].
  2596     ].
  2596     ].
  2597     loMenuItems isEmpty ifTrue:[ ^ self ].
  2597     loMenuItems isEmpty ifTrue:[ ^ self ].
  2598 
  2598 
  2599     self addAndSelect:[
  2599     self addAndSelect:[
  2600 	loMenuItems collect:[:el| Item menuItem:el ]
  2600         loMenuItems collect:[:el| Item menuItem:el ]
  2601     ].
  2601     ].
  2602 ! !
  2602 ! !
  2603 
  2603 
  2604 !MenuEditor methodsFor:'user actions - hierarchy'!
  2604 !MenuEditor methodsFor:'user actions - hierarchy'!
  2605 
  2605 
  2828 classFor:aMenuItem
  2828 classFor:aMenuItem
  2829 
  2829 
  2830     aMenuItem isNil ifTrue:[ ^ nil ].
  2830     aMenuItem isNil ifTrue:[ ^ nil ].
  2831 
  2831 
  2832     aMenuItem itemValue isNil ifTrue:[
  2832     aMenuItem itemValue isNil ifTrue:[
  2833         aMenuItem submenu        notNil ifTrue:[ ^ MenuEditor::MenuItem ].
  2833         aMenuItem submenu        notNil ifTrue:[ ^ MenuEditor::RegularMenuItem ].
  2834         aMenuItem submenuChannel notNil ifTrue:[ ^ MenuEditor::LinkedMenuItem ].
  2834         aMenuItem submenuChannel notNil ifTrue:[ ^ MenuEditor::LinkedMenuItem ].
  2835 
  2835 
  2836         (self separatorTypeOf:(aMenuItem rawLabel)) notNil ifTrue:[
  2836         (self separatorTypeOf:(aMenuItem rawLabel)) notNil ifTrue:[
  2837             ^ MenuEditor::SeparatorItem
  2837             ^ MenuEditor::SeparatorItem
  2838         ]
  2838         ]
  3087     |value|
  3087     |value|
  3088 
  3088 
  3089     menuItem := MenuItem labeled:(self rawLabel).
  3089     menuItem := MenuItem labeled:(self rawLabel).
  3090 
  3090 
  3091     MenuEditor aspects do:[:aKey|
  3091     MenuEditor aspects do:[:aKey|
  3092 	value := aMenuItem perform:aKey.
  3092         value := aMenuItem perform:aKey.
  3093 	value ifNotNil:[ self aspectAt:aKey put:value ]
  3093         value ifNotNil:[ self aspectAt:aKey put:value ]
  3094     ].
  3094     ].
  3095 !
  3095 !
  3096 
  3096 
  3097 rawLabel
  3097 rawLabel
  3098     "returns the label assigned to the item
  3098     "returns the label assigned to the item
  3224 
  3224 
  3225 isKindOfMenu
  3225 isKindOfMenu
  3226     "returns true if the item is a Linked Menu or Menu
  3226     "returns true if the item is a Linked Menu or Menu
  3227     "
  3227     "
  3228     ^ false
  3228     ^ false
       
  3229 !
       
  3230 
       
  3231 isMenuEditItem
       
  3232     ^ true
  3229 !
  3233 !
  3230 
  3234 
  3231 isRootItem
  3235 isRootItem
  3232     "returns true if the item is the root item
  3236     "returns true if the item is the root item
  3233     "
  3237     "
  3618 
  3622 
  3619     super menuItem:anItem.
  3623     super menuItem:anItem.
  3620     submenu := anItem submenu.
  3624     submenu := anItem submenu.
  3621 
  3625 
  3622     submenu notNil ifTrue:[
  3626     submenu notNil ifTrue:[
  3623         item := MenuEditor::MenuItem new
  3627         item := MenuEditor::RegularMenuItem new
  3624     ] ifFalse:[
  3628     ] ifFalse:[
  3625         anItem submenuChannel isNil ifTrue:[
  3629         anItem submenuChannel isNil ifTrue:[
  3626             ^ self
  3630             ^ self
  3627         ].
  3631         ].
  3628         item := MenuEditor::LinkedMenuItem new
  3632         item := MenuEditor::LinkedMenuItem new
  3996 
  4000 
  3997 isKindOfMenu
  4001 isKindOfMenu
  3998     ^ true
  4002     ^ true
  3999 ! !
  4003 ! !
  4000 
  4004 
  4001 !MenuEditor::MenuItem class methodsFor:'defaults'!
  4005 !MenuEditor::RegularMenuItem class methodsFor:'defaults'!
  4002 
  4006 
  4003 defaultDelayedLabel
  4007 defaultDelayedLabel
  4004     ^ 'delayed'
  4008     ^ 'delayed'
  4005 !
  4009 !
  4006 
  4010 
  4007 defaultLabel
  4011 defaultLabel
  4008     ^ 'Menu'
  4012     ^ 'Menu'
  4009 ! !
  4013 ! !
  4010 
  4014 
  4011 !MenuEditor::MenuItem class methodsFor:'instance creation'!
  4015 !MenuEditor::RegularMenuItem class methodsFor:'instance creation'!
  4012 
  4016 
  4013 menu:aMenu labeled:aString
  4017 menu:aMenu labeled:aString
  4014     |item|
  4018     |item|
  4015 
  4019 
  4016     item := self new.
  4020     item := self new.
  4025     item menu:aMenu labeled:aString.
  4029     item menu:aMenu labeled:aString.
  4026     item translateLabel:translateLabel.
  4030     item translateLabel:translateLabel.
  4027     ^ item
  4031     ^ item
  4028 ! !
  4032 ! !
  4029 
  4033 
  4030 !MenuEditor::MenuItem class methodsFor:'interface - specs'!
  4034 !MenuEditor::RegularMenuItem class methodsFor:'interface - specs'!
  4031 
  4035 
  4032 basicsEditSpec
  4036 basicsEditSpec
  4033     "This resource specification was automatically generated
  4037     "This resource specification was automatically generated
  4034      by the UIPainter of ST/X."
  4038      by the UIPainter of ST/X."
  4035 
  4039 
  4138          
  4142          
  4139         )
  4143         )
  4140       )
  4144       )
  4141 ! !
  4145 ! !
  4142 
  4146 
  4143 !MenuEditor::MenuItem methodsFor:'accessing'!
  4147 !MenuEditor::RegularMenuItem methodsFor:'accessing'!
  4144 
  4148 
  4145 argument:aValue
  4149 argument:aValue
  4146     "/ ignorred.
  4150     "/ ignorred.
  4147 !
  4151 !
  4148 
  4152 
  4220 	children do:[:el| menu addItem:(el menuItem) ].
  4224 	children do:[:el| menu addItem:(el menuItem) ].
  4221     ].
  4225     ].
  4222     ^ menu
  4226     ^ menu
  4223 ! !
  4227 ! !
  4224 
  4228 
  4225 !MenuEditor::MenuItem methodsFor:'aspects'!
  4229 !MenuEditor::RegularMenuItem methodsFor:'aspects'!
  4226 
  4230 
  4227 getDelayedAttributesFrom:aMenuItem
  4231 getDelayedAttributesFrom:aMenuItem
  4228 
  4232 
  4229     self menu:(aMenuItem submenu) labeled:nil.
  4233     self menu:(aMenuItem submenu) labeled:nil.
  4230     menuItem horizontalLayout:(aMenuItem horizontalLayout).
  4234     menuItem horizontalLayout:(aMenuItem horizontalLayout).
  4233 setDelayedAttributesTo:aMenuItem
  4237 setDelayedAttributesTo:aMenuItem
  4234     aMenuItem          submenu:(self submenu).
  4238     aMenuItem          submenu:(self submenu).
  4235     aMenuItem horizontalLayout:(menuItem horizontalLayout).
  4239     aMenuItem horizontalLayout:(menuItem horizontalLayout).
  4236 ! !
  4240 ! !
  4237 
  4241 
  4238 !MenuEditor::MenuItem methodsFor:'displaying'!
  4242 !MenuEditor::RegularMenuItem methodsFor:'displaying'!
  4239 
  4243 
  4240 displayLabel
  4244 displayLabel
  4241     "returns the label dependent on is delayed or not
  4245     "returns the label dependent on is delayed or not
  4242     "
  4246     "
  4243     self isDelayedMenu ifTrue:[ ^ self class defaultDelayedLabel ].
  4247     self isDelayedMenu ifTrue:[ ^ self class defaultDelayedLabel ].
  4247 icon
  4251 icon
  4248     self isDelayedMenu ifTrue:[ ^ self class iconDelayedMenu ].
  4252     self isDelayedMenu ifTrue:[ ^ self class iconDelayedMenu ].
  4249   ^ self class iconMenu
  4253   ^ self class iconMenu
  4250 ! !
  4254 ! !
  4251 
  4255 
  4252 !MenuEditor::MenuItem methodsFor:'queries'!
  4256 !MenuEditor::RegularMenuItem methodsFor:'queries'!
  4253 
  4257 
  4254 canAddChildren
  4258 canAddChildren
  4255     "children can be added
  4259     "children can be added
  4256     "
  4260     "
  4257     ^ true
  4261     ^ true