--- a/MenuEditor.st Sat Jan 10 12:06:28 1998 +0100
+++ b/MenuEditor.st Sat Jan 10 12:12:09 1998 +0100
@@ -75,6 +75,13 @@
! !
+!MenuEditor class methodsFor:'initialization'!
+
+initialize
+
+ Painter initialize
+! !
+
!MenuEditor class methodsFor:'code generation'!
generateCodeFor:aClass menuSelector:aSelector
@@ -222,96 +229,6 @@
!MenuEditor class methodsFor:'interface specs'!
-classAndMethodSpec
- "this window spec was automatically generated by the ST/X UIPainter"
-
- "do not manually edit this - the painter/builder may not be able to
- handle the specification if its corrupted."
-
- "
- UIPainter new openOnClass:MenuEditor andSelector:#classAndMethodSpec
- MenuEditor new openInterface:#classAndMethodSpec
- "
-
- <resource: #canvas>
-
- ^
-
- #(#FullSpec
- #'window:'
- #(#WindowSpec
- #'name:' 'MenuEditor'
- #'layout:' #(#LayoutFrame 197 0 172 0 552 0 258 0)
- #'label:' 'MenuEditor'
- #'min:' #(#Point 10 10)
- #'max:' #(#Point 1152 900)
- #'bounds:' #(#Rectangle 197 172 553 259)
- #'usePreferredExtent:' false
- )
- #'component:'
- #(#SpecCollection
- #'collection:'
- #(
- #(#LabelSpec
- #'name:' 'classLabel'
- #'layout:' #(#LayoutFrame 0 0.0 4 0 150 0 21 0)
- #'label:' 'Class for menu code:'
- #'adjust:' #right
- #'resizeForLabel:' true
- )
- #(#LabelSpec
- #'name:' 'selectorLabel'
- #'layout:' #(#LayoutFrame 0 0.0 29 0 150 0 46 0)
- #'label:' 'Selector for menu code:'
- #'adjust:' #right
- #'resizeForLabel:' true
- )
- #(#InputFieldSpec
- #'name:' 'methodNameField'
- #'layout:' #(#LayoutFrame 155 0 27 0 0 1.0 49 0)
- #'tabable:' true
- #'model:' #methodNameChannel
- )
- #(#InputFieldSpec
- #'name:' 'classNameField'
- #'layout:' #(#LayoutFrame 155 0 2 0 0 1.0 24 0)
- #'tabable:' true
- #'model:' #classNameChannel
- )
- #(#HorizontalPanelViewSpec
- #'name:' 'commitPanel'
- #'layout:' #(#LayoutFrame 10 0.0 -29 1.0 -10 1.0 -5 1.0)
- #'component:'
- #(#SpecCollection
- #'collection:'
- #(
- #(#ActionButtonSpec
- #'name:' 'button1'
- #'label:' 'cancel'
- #'tabable:' true
- #'model:' #cancel
- #'extent:' #(#Point 163 24)
- )
- #(#ActionButtonSpec
- #'name:' 'button2'
- #'label:' 'ok'
- #'tabable:' true
- #'model:' #accept
- #'isDefault:' true
- #'extent:' #(#Point 164 24)
- )
- )
- )
- #'horizontalLayout:' #fitSpace
- #'verticalLayout:' #fit
- #'horizontalSpace:' 3
- #'verticalSpace:' 3
- )
- )
- )
- )
-!
-
classDefineSpec
"this window spec was automatically generated by the ST/X UIPainter"
@@ -427,18 +344,18 @@
#'value:' #doNew
)
#(#MenuItem
+ #'label:' '-'
+ )
+ #(#MenuItem
#'label:' 'Load From Class...'
#'translateLabel:' true
#'value:' #doFromClass
#'enabled:' #isStandAlone
)
#(#MenuItem
- #'label:' '-'
- )
- #(#MenuItem
- #'label:' 'Pick A Menu'
- #'value:' #doPickAMenu
- #'enabled:' #isStandAlone
+ #'label:' 'Load From Class With Superclass...'
+ #'translateLabel:' true
+ #'value:' #loadFromClassWithSuperclass
)
#(#MenuItem
#'label:' '-'
@@ -456,12 +373,17 @@
#'label:' '-'
)
#(#MenuItem
+ #'label:' 'Pick A Menu'
+ #'value:' #doPickAMenu
+ #'enabled:' #isStandAlone
+ )
+ #(#MenuItem
#'label:' 'Define Class...'
#'value:' #doDefineClass
#'enabled:' #isStandAlone
)
#(#MenuItem
- #'label:' 'Browse Application Class'
+ #'label:' 'Browse Class'
#'value:' #doBrowseAppClass
)
#(#MenuItem
@@ -719,11 +641,11 @@
#'window:'
#(#WindowSpec
#'name:' 'Menu Builder'
- #'layout:' #(#LayoutFrame 102 0 166 0 681 0 549 0)
+ #'layout:' #(#LayoutFrame 227 0 195 0 806 0 578 0)
#'label:' 'Menu Builder'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1152 900)
- #'bounds:' #(#Rectangle 102 166 682 550)
+ #'bounds:' #(#Rectangle 227 195 807 579)
#'menu:' #menu
#'usePreferredExtent:' false
)
@@ -805,14 +727,14 @@
)
#(#LabelSpec
#'name:' 'infoLabel'
- #'layout:' #(#LayoutFrame 0 0.0 -22 1 -65 1.0 0 1.0)
+ #'layout:' #(#LayoutFrame 0 0.0 -22 1 -80 1.0 0 1.0)
#'labelChannel:' #valueOfInfoLabel
#'level:' 1
#'adjust:' #left
)
#(#LabelSpec
#'name:' 'timeLabel'
- #'layout:' #(#LayoutFrame -65 1 -22 1 0 1.0 0 1.0)
+ #'layout:' #(#LayoutFrame -80 1 -22 1 0 1.0 0 1.0)
#'labelChannel:' #valueOfTimeLabel
#'level:' 1
#'adjust:' #right
@@ -886,11 +808,11 @@
#'window:'
#(#WindowSpec
#'name:' 'unnamed canvas'
- #'layout:' #(#LayoutFrame 197 0 172 0 463 0 490 0)
+ #'layout:' #(#LayoutFrame 454 0 288 0 720 0 606 0)
#'label:' 'unnamed canvas'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1160 870)
- #'bounds:' #(#Rectangle 197 172 464 491)
+ #'bounds:' #(#Rectangle 454 288 721 607)
#'usePreferredExtent:' false
)
#'component:'
@@ -899,14 +821,14 @@
#(
#(#LabelSpec
#'name:' 'nameKeyLabel'
- #'layout:' #(#AlignmentOrigin 87 0 26 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 26 0 1 0.5)
#'label:' 'NameKey:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'nameKeyField'
- #'layout:' #(#LayoutFrame 90 0 15 0 0 1.0 37 0)
+ #'layout:' #(#LayoutFrame 110 0 15 0 0 1.0 37 0)
#'activeHelpKey:' #nameKey
#'tabable:' true
#'model:' #nameKey
@@ -914,28 +836,28 @@
)
#(#LabelSpec
#'name:' 'labelLabel'
- #'layout:' #(#AlignmentOrigin 87 0 51 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 51 0 1 0.5)
#'label:' 'Label:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'labelField'
- #'layout:' #(#LayoutFrame 90 0 40 0 0 1.0 62 0)
+ #'layout:' #(#LayoutFrame 110 0 40 0 0 1.0 62 0)
#'activeHelpKey:' #label
#'tabable:' true
#'model:' #label
)
#(#LabelSpec
#'name:' 'valueLabel'
- #'layout:' #(#AlignmentOrigin 87 0 90 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 90 0 1 0.5)
#'label:' 'Value:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'valueField'
- #'layout:' #(#LayoutFrame 90 0 79 0 0 1.0 101 0)
+ #'layout:' #(#LayoutFrame 110 0 79 0 0 1.0 101 0)
#'activeHelpKey:' #value
#'tabable:' true
#'model:' #value
@@ -943,14 +865,14 @@
)
#(#LabelSpec
#'name:' 'argumentLabel'
- #'layout:' #(#AlignmentOrigin 87 0 115 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 115 0 1 0.5)
#'label:' 'Argument:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'argumentField'
- #'layout:' #(#LayoutFrame 90 0 104 0 0 1.0 126 0)
+ #'layout:' #(#LayoutFrame 110 0 104 0 0 1.0 126 0)
#'activeHelpKey:' #argument
#'tabable:' true
#'model:' #argument
@@ -958,14 +880,14 @@
)
#(#LabelSpec
#'name:' 'indicationLabel'
- #'layout:' #(#AlignmentOrigin 87 0 155 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 155 0 1 0.5)
#'label:' 'Indication:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'indicationField'
- #'layout:' #(#LayoutFrame 90 0 144 0 0 1.0 166 0)
+ #'layout:' #(#LayoutFrame 110 0 144 0 0 1.0 166 0)
#'activeHelpKey:' #indication
#'tabable:' true
#'model:' #indication
@@ -1009,11 +931,11 @@
#'window:'
#(#WindowSpec
#'name:' 'unnamed canvas'
- #'layout:' #(#LayoutFrame 197 0 172 0 463 0 490 0)
+ #'layout:' #(#LayoutFrame 585 0 331 0 851 0 649 0)
#'label:' 'unnamed canvas'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1280 1024)
- #'bounds:' #(#Rectangle 197 172 464 491)
+ #'bounds:' #(#Rectangle 585 331 852 650)
#'usePreferredExtent:' false
)
#'component:'
@@ -1022,7 +944,7 @@
#(
#(#LabelSpec
#'name:' 'nameKeyLabel'
- #'layout:' #(#AlignmentOrigin 87 0 26 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 26 0 1 0.5)
#'activeHelpKey:' #nameKey
#'label:' 'NameKey:'
#'adjust:' #right
@@ -1030,7 +952,7 @@
)
#(#InputFieldSpec
#'name:' 'nameKeyField'
- #'layout:' #(#LayoutFrame 90 0 15 0 0 1.0 37 0)
+ #'layout:' #(#LayoutFrame 110 0 15 0 0 1.0 37 0)
#'activeHelpKey:' #nameKey
#'tabable:' true
#'model:' #nameKey
@@ -1038,20 +960,20 @@
)
#(#LabelSpec
#'name:' 'labelLabel'
- #'layout:' #(#AlignmentOrigin 87 0 51 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 51 0 1 0.5)
#'label:' 'Label:'
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'labelField'
- #'layout:' #(#LayoutFrame 90 0 40 0 0 1.0 62 0)
+ #'layout:' #(#LayoutFrame 110 0 40 0 0 1.0 62 0)
#'activeHelpKey:' #label
#'tabable:' true
#'model:' #label
)
#(#InputFieldSpec
#'name:' 'menuField'
- #'layout:' #(#LayoutFrame 90 0 65 0 0 1.0 87 0)
+ #'layout:' #(#LayoutFrame 110 0 65 0 0 1.0 87 0)
#'activeHelpKey:' #submenuChannel
#'tabable:' true
#'model:' #submenuChannel
@@ -1059,7 +981,7 @@
)
#(#LabelSpec
#'name:' 'menuLabel'
- #'layout:' #(#AlignmentOrigin 87 0 76 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 76 0 1 0.5)
#'label:' 'Menu:'
#'resizeForLabel:' true
)
@@ -1087,11 +1009,11 @@
#'window:'
#(#WindowSpec
#'name:' 'unnamed canvas'
- #'layout:' #(#LayoutFrame 197 0 172 0 463 0 490 0)
+ #'layout:' #(#LayoutFrame 381 0 278 0 647 0 596 0)
#'label:' 'unnamed canvas'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1280 1024)
- #'bounds:' #(#Rectangle 197 172 464 491)
+ #'bounds:' #(#Rectangle 381 278 648 597)
#'usePreferredExtent:' false
)
#'component:'
@@ -1100,14 +1022,14 @@
#(
#(#LabelSpec
#'name:' 'nameKeyLabel'
- #'layout:' #(#AlignmentOrigin 87 0 26 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 26 0 1 0.5)
#'label:' 'NameKey:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'nameKeyField'
- #'layout:' #(#LayoutFrame 90 0 15 0 0 1.0 37 0)
+ #'layout:' #(#LayoutFrame 110 0 15 0 0 1.0 37 0)
#'activeHelpKey:' #nameKey
#'tabable:' true
#'model:' #nameKey
@@ -1115,14 +1037,14 @@
)
#(#LabelSpec
#'name:' 'labelLabel'
- #'layout:' #(#AlignmentOrigin 87 0 51 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 51 0 1 0.5)
#'label:' 'Label:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'labelField'
- #'layout:' #(#LayoutFrame 90 0 40 0 0 1.0 62 0)
+ #'layout:' #(#LayoutFrame 110 0 40 0 0 1.0 62 0)
#'activeHelpKey:' #label
#'tabable:' true
#'model:' #label
@@ -1158,11 +1080,11 @@
#'window:'
#(#WindowSpec
#'name:' 'unnamed canvas'
- #'layout:' #(#LayoutFrame 197 0 172 0 463 0 490 0)
+ #'layout:' #(#LayoutFrame 427 0 345 0 693 0 663 0)
#'label:' 'unnamed canvas'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1280 1024)
- #'bounds:' #(#Rectangle 197 172 464 491)
+ #'bounds:' #(#Rectangle 427 345 694 664)
#'usePreferredExtent:' false
)
#'component:'
@@ -1171,14 +1093,14 @@
#(
#(#LabelSpec
#'name:' 'selectorLabel'
- #'layout:' #(#AlignmentOrigin 87 0 26 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 26 0 1 0.5)
#'label:' 'Selector:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'selectorField'
- #'layout:' #(#LayoutFrame 90 0 15 0 0 1.0 37 0)
+ #'layout:' #(#LayoutFrame 110 0 15 0 0 1.0 37 0)
#'activeHelpKey:' #menuSelector
#'tabable:' true
#'model:' #label
@@ -1256,11 +1178,11 @@
#'window:'
#(#WindowSpec
#'name:' 'unnamed canvas'
- #'layout:' #(#LayoutFrame 367 0 108 0 625 0 395 0)
+ #'layout:' #(#LayoutFrame 196 0 489 0 454 0 776 0)
#'label:' 'unnamed canvas'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1280 1024)
- #'bounds:' #(#Rectangle 367 108 626 396)
+ #'bounds:' #(#Rectangle 196 489 455 777)
#'usePreferredExtent:' false
)
#'component:'
@@ -1269,14 +1191,14 @@
#(
#(#LabelSpec
#'name:' 'shortcutKeyLabel'
- #'layout:' #(#AlignmentOrigin 87 0 26 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 26 0 1 0.5)
#'label:' 'Accelerator:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'shortcutKeyField'
- #'layout:' #(#LayoutFrame 90 0 15 0 0 1.0 37 0)
+ #'layout:' #(#LayoutFrame 110 0 15 0 0 1.0 37 0)
#'activeHelpKey:' #shortcutKey
#'tabable:' true
#'model:' #shortcutKey
@@ -1284,14 +1206,14 @@
)
#(#LabelSpec
#'name:' 'enabledLabel'
- #'layout:' #(#AlignmentOrigin 87 0 51 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 51 0 1 0.5)
#'label:' 'Enabled:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'enabledField'
- #'layout:' #(#LayoutFrame 90 0 40 0 0 1.0 62 0)
+ #'layout:' #(#LayoutFrame 110 0 40 0 0 1.0 62 0)
#'activeHelpKey:' #enbled
#'tabable:' true
#'model:' #enabled
@@ -1299,14 +1221,14 @@
)
#(#LabelSpec
#'name:' 'accessCharLabel'
- #'layout:' #(#AlignmentOrigin 171 0 90 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 217 0 90 0 1 0.5)
#'label:' 'Access Character Position:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'accessCharField'
- #'layout:' #(#LayoutFrame 177 0 79 0 0 1.0 101 0)
+ #'layout:' #(#LayoutFrame 220 0 79 0 0 1.0 101 0)
#'activeHelpKey:' #accessCharaterPos
#'tabable:' true
#'model:' #accessCharaterPos
@@ -1336,11 +1258,11 @@
#'window:'
#(#WindowSpec
#'name:' 'unnamed canvas'
- #'layout:' #(#LayoutFrame 197 0 172 0 441 0 313 0)
+ #'layout:' #(#LayoutFrame 424 0 309 0 668 0 450 0)
#'label:' 'unnamed canvas'
#'min:' #(#Point 10 10)
#'max:' #(#Point 1280 1024)
- #'bounds:' #(#Rectangle 197 172 442 314)
+ #'bounds:' #(#Rectangle 424 309 669 451)
#'usePreferredExtent:' false
)
#'component:'
@@ -1349,14 +1271,14 @@
#(
#(#LabelSpec
#'name:' 'retrieverLabel'
- #'layout:' #(#AlignmentOrigin 87 0 26 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 26 0 1 0.5)
#'label:' 'Retriever:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'retrieverField'
- #'layout:' #(#LayoutFrame 90 0 15 0 0 1.0 37 0)
+ #'layout:' #(#LayoutFrame 110 0 15 0 0 1.0 37 0)
#'activeHelpKey:' #retriever
#'tabable:' true
#'model:' #retriever
@@ -1364,14 +1286,14 @@
)
#(#LabelSpec
#'name:' 'iconLabel'
- #'layout:' #(#AlignmentOrigin 87 0 51 0 1 0.5)
+ #'layout:' #(#AlignmentOrigin 107 0 51 0 1 0.5)
#'label:' 'Selector:'
#'adjust:' #right
#'resizeForLabel:' true
)
#(#InputFieldSpec
#'name:' 'iconField'
- #'layout:' #(#LayoutFrame 90 0 40 0 0 1.0 62 0)
+ #'layout:' #(#LayoutFrame 110 0 40 0 0 1.0 62 0)
#'activeHelpKey:' #icon
#'tabable:' true
#'model:' #icon
@@ -1387,7 +1309,7 @@
)
#(#ActionButtonSpec
#'name:' 'imageEditorButton'
- #'layout:' #(#LayoutFrame 90 0 66 0 0 1 90 0)
+ #'layout:' #(#LayoutFrame 110 0 66 0 0 1 90 0)
#'label:' 'Image Editor'
#'model:' #doEditImage
)
@@ -1911,7 +1833,8 @@
loadFromMessage: aMessage
- self checkModified ifTrue:
+ ((aMessage size > 0) and: [self checkModified])
+ ifTrue:
[
|readStream aClass aSelector|
readStream := aMessage readStream.
@@ -2013,13 +1936,14 @@
doFromClass
- aspects at:#classNameChannel put:(self specClass asValue).
+ "aspects at:#classNameChannel put:(self specClass asValue).
aspects at:#methodNameChannel put:(self painter selectorName asValue).
(self openDialogInterface:#classAndMethodSpec) ifTrue:[
self buildFrom:(aspects at:#classNameChannel) value
andSelector:(aspects at:#methodNameChannel) value
- ].
+ ]."
+ self loadFromInClassesOf: #Object
!
doInstallHelp
@@ -2149,6 +2073,36 @@
"
self painter selectedNodeChangeSequenceOrder:-1.
isModified := true.
+!
+
+loadFromClassWithSuperclass
+
+ |box|
+ box := EnterBox new.
+ box title:'Name of superclass:'.
+ box okText:'OK'.
+ box abortText:'Cancel'.
+ box initialText: 'ApplicationModel'.
+ box showAtPointer.
+ box accepted
+ ifTrue:
+ [
+ self loadFromInClassesOf: box contents asSymbol
+ ].
+
+
+
+!
+
+loadFromInClassesOf: aSuperclassOrSymbol
+
+ self loadFromMessage:
+ (ResourceSelectionBrowser
+ request: 'Load Menu From Class'
+ onSuperclass: aSuperclassOrSymbol
+ andClass: specClass
+ andSelector: nil
+ withResourceTypes: #(menu))
! !
!MenuEditor methodsFor:'values'!
@@ -2424,6 +2378,15 @@
! !
+!MenuEditor::Painter class methodsFor:'initialization'!
+
+initialize
+
+ super initialize.
+
+ Images := nil
+! !
+
!MenuEditor::Painter class methodsFor:'resources'!
closedSubmenuImage
@@ -2784,3 +2747,4 @@
version
^ '$Header$'
! !
+MenuEditor initialize!