diff -r 8546da96ab11 -r a519e0d547f6 MenuEditor.st --- 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 - " - - - - ^ - - #(#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!