diff -r 688fd0a0b0fd -r d58a3e7e39d5 UIPainter.st --- a/UIPainter.st Fri Mar 20 19:38:13 1998 +0100 +++ b/UIPainter.st Sat Mar 21 00:20:47 1998 +0100 @@ -72,8 +72,7 @@ !UIPainter class methodsFor:'instance creation'! openOnClass:aClass andSelector:aSelector - "open up an interface builder, fetching a spec from aClass - via some selector + "open a GUI Painter on aClass and (windowSpec) aSelector " ^ self new openOnClass:aClass andSelector:aSelector ! @@ -110,14 +109,19 @@ !UIPainter class methodsFor:'help specs'! helpSpec - "return a dictionary filled with helpKey -> helptext associations. - These are used by the activeHelp tool." + "This resource specification was automatically generated + by the UIHelpTool of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIHelpTool may not be able to read the specification." " - UIHelpTool openOnClass:UIPainter + UIHelpTool openOnClass:UIPainter " - ^ super helpSpec addPairsFrom:#( + + + ^super helpSpec addPairsFrom:#( #alignSelectionBottom 'Aligns the selected widgets to the bottom edge of the dominant widget.' @@ -191,6 +195,9 @@ #editInspectSpec 'Opens an inspector on the spec of the selected widget.' +#editOpenSpecDocumentation +'Opens the documentation of the selected widget.' + #fileBrowseAspectMethods 'Opens a System Browser to browse the aspect methods.' @@ -251,6 +258,9 @@ #settingsRedefineAspectMethods 'Turns on/off the permission of redefinition of the aspect methods.' +#settingsTranscriptHelp +'Turns on/off showing help texts in a transcript (after opening of a new GUI Painter).' + #settingsUndoManager 'Opens a dialog to reverse a certain number of last edit action.' @@ -267,7 +277,6 @@ 'Starts current application on current window spec.' ) - ! ! !UIPainter class methodsFor:'helpers'! @@ -336,9 +345,14 @@ !UIPainter class methodsFor:'image specs'! iconAlignB - "Generated by the Image Editor" + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!!!! If it is corrupted, + the ImageEditor may not be able to read the specification." + " - ImageEditor openOnClass:self andSelector:#iconAlignB + ImageEditor openOnClass:self andSelector:#iconAlignB " @@ -348,9 +362,14 @@ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@@@@@@@G@@@@@@@G@E@@@@@G@G@@@@@G@G@@@@@G@G@@@E@G@G@@@G@G@G@K@G@G@G@@@G@G@G@A@G@G@G@@@G@G@G@K@@@@@@@@B*****(@B*****(@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@G C@G @@G'' @G'' @G'' @G'' G'''' G'''' G'''' G''''!!G'''' G'''' G'''' G'''' O??0O??0@@@@@@@C@@@@') ; yourself); yourself]! iconAlignL - "Generated by the Image Editor" + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!!!! If it is corrupted, + the ImageEditor may not be able to read the specification." + " - ImageEditor openOnClass:self andSelector:#iconAlignL + ImageEditor openOnClass:self andSelector:#iconAlignL " @@ -360,9 +379,14 @@ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@(@@@@@@@(@@@@@@@(UUUP@I@(_??0@@@(@@@@@@@(@@@@@@@(@@@@@@@(@@@@@@@(UUUU@@@(_???@@@(@@@@@E@(@@@@@@@(@@@@@@@(@@@@@@@(UU@@@@@(_?@@@@@(@@@@@@@(@@@@@@@@@@@@@E@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@F@@@G?>@G?>@G?>@G?>@F@@@F@@@G?? G?? G?? G?? F@@@F@@@G? @G? @G? @G? @F@@@@@@@@@@@') ; yourself); yourself]! iconAlignLR - "Generated by the Image Editor" + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!!!! If it is corrupted, + the ImageEditor may not be able to read the specification." + " - ImageEditor openOnClass:self andSelector:#iconAlignLR + ImageEditor openOnClass:self andSelector:#iconAlignLR " @@ -372,9 +396,14 @@ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@(@@@B @@(@@@B @@(UUUR I@(_??2 @@(@@@B @@(@@@B @@(@@@B @@(@@@B @@(UUUR @@(_??2 @@(@@@B E@(@@@B @@(@@@B @@(@@@B @@(UUUR @@(_??B @@(@@@B @@(@@@B @@@@@@@@E@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@F@A G?? G?? G?? G?? F@A F@A G?? G?? G?? G?? F@A F@A G?? G?? G?; G?? F@A @@@@@@@@') ; yourself); yourself]! iconAlignR - "Generated by the Image Editor" + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!!!! If it is corrupted, + the ImageEditor may not be able to read the specification." + " - ImageEditor openOnClass:self andSelector:#iconAlignR + ImageEditor openOnClass:self andSelector:#iconAlignR " @@ -384,9 +413,14 @@ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@B @@@@@@B @@@UUUR I@@_??2 @@@@@@B @@@@@@B @@@@@@B @@@@@@B @@EUUUR @@G???2 @@@@@@B E@@@@@B @@@@@@B @@@@@@B @@@@EUR @@@@G?2 @@@@@@B @@@@@@B @@@@@@@@E@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@A A?? A?? A?? A?? @@A @@A G?? G?? G?? G?? @@A @@A @G? @G? @G? @G? @@A @@@@@@@@') ; yourself); yourself]! iconAlignT - "Generated by the Image Editor" + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!!!! If it is corrupted, + the ImageEditor may not be able to read the specification." + " - ImageEditor openOnClass:self andSelector:#iconAlignT + ImageEditor openOnClass:self andSelector:#iconAlignT " @@ -396,9 +430,14 @@ ifAbsentPut:[(Depth2Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#(2 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@@@@@@@@@@@@@B*****(@B*****(@@@@@@@@@@E@E@E@K@G@G@G@@@G@G@G@A@G@G@G@@@G@G@G@K@G@G@G@@@@@G@G@@@@@G@G@@@@@G@G@@@@@G@G@@@@@G@@@@@@@G@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; colorMapFromArray:#[0 0 0 255 255 255 0 0 127 170 170 170]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#(1 )); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@C@@@@O??0O??0G'''' G'''' G'''' G'''' G''''!!G'''' G'''' G'''' @G'' @G'' @G'' @G'' @G @@G C@@@@@@@@@@@@') ; yourself); yourself]! iconAlignTB - "Generated by the Image Editor" + "This resource specification was automatically generated + by the ImageEditor of ST/X." + + "Do not manually edit this!!!! If it is corrupted, + the ImageEditor may not be able to read the specification." + " - ImageEditor openOnClass:self andSelector:#iconAlignTB + ImageEditor openOnClass:self andSelector:#iconAlignTB " @@ -409,15 +448,16 @@ !UIPainter class methodsFor:'interface specs'! -gridParametersSpec - "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." +dialogSpecForDefiningClassAndSelector + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this. If it is corrupted, + the UIPainter may not be able to read the specification." " - UIPainter new openOnClass:UIPainter andSelector:#gridParametersSpec - UIPainter new openInterface:#gridParametersSpec + UIPainter new openOnClass:UIPainter andSelector:#dialogSpecForDefiningClassAndSelector + UIPainter new openInterface:#dialogSpecForDefiningClassAndSelector " @@ -428,11 +468,105 @@ #window: #(#WindowSpec #name: 'GUI Painter' - #layout: #(#LayoutFrame 171 0 570 0 452 0 767 0) + #layout: #(#LayoutFrame 575 0 296 0 921 0 455 0) + #label: 'GUI Painter' + #min: #(#Point 10 10) + #max: #(#Point 1152 900) + #bounds: #(#Rectangle 575 296 922 456) + #usePreferredExtent: false + ) + #component: + #(#SpecCollection + #collection: + #( + #(#FramedBoxSpec + #name: 'FramedBox' + #layout: #(#LayoutFrame 0 0.0 3 0.0 0 1.0 -35 1.0) + #component: + #(#SpecCollection + #collection: + #( + #(#LabelSpec + #name: 'selectorLabel' + #layout: #(#AlignmentOrigin 77 0.11 39 0 1 0.5) + #label: 'Selector:' + #adjust: #right + #resizeForLabel: true + ) + #(#InputFieldSpec + #name: 'methodNameField' + #layout: #(#LayoutFrame 80 0.11 28 0 14 1.0 50 0) + #tabable: true + #model: #methodNameChannel + ) + #(#LabelSpec + #name: 'classLabel' + #layout: #(#AlignmentOrigin 77 0.11 64 0 1 0.5) + #label: 'Class:' + #adjust: #right + #resizeForLabel: true + ) + #(#InputFieldSpec + #name: 'classNameField' + #layout: #(#LayoutFrame 80 0.11 53 0 14 1.0 75 0) + #tabable: true + #model: #classNameChannel + ) + #(#LabelSpec + #name: 'superClassLabel' + #layout: #(#AlignmentOrigin 77 0.11 89 0 1 0.5) + #label: 'Superclass:' + #adjust: #right + #resizeForLabel: true + ) + #(#ComboBoxSpec + #name: 'superclassNameComboBox' + #layout: #(#LayoutFrame 80 0.11 78 0 14 1.0 100 0) + #tabable: true + #model: #superclassNameChannel + #comboList: #superclassNameDefaults + ) + ) + ) + #label: 'Define Class And Selector' + #labelPosition: #topLeft + ) + #(#UISubSpecification + #name: 'subSpec' + #layout: #(#LayoutFrame 0 0.0 -29 1 0 1.0 -5 1) + #majorKey: #ToolApplicationModel + #minorKey: #windowSpecForCommitWithoutChannels + ) + ) + ) + ) +! + +dialogSpecForDefiningGridParameters + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this. If it is corrupted, + the UIPainter may not be able to read the specification." + + " + UIPainter new openOnClass:UIPainter andSelector:#dialogSpecForDefiningGridParameters + UIPainter new openInterface:#dialogSpecForDefiningGridParameters + " + + + + ^ + + #(#FullSpec + #window: + #(#WindowSpec + #name: 'GUI Painter' + #layout: #(#LayoutFrame 575 0 296 0 856 0 493 0) #label: 'GUI Painter' #min: #(#Point 10 10) #max: #(#Point 1280 1024) - #bounds: #(#Rectangle 171 570 453 768) + #bounds: #(#Rectangle 575 296 857 494) #usePreferredExtent: false ) #component: @@ -490,7 +624,7 @@ #labelPosition: #topLeft ) #(#UISubSpecification - #name: 'CommitButtonsSubSpecView' + #name: 'subSpec' #layout: #(#LayoutFrame 0 0.0 -29 1 0 1.0 -5 1) #majorKey: #ToolApplicationModel #minorKey: #windowSpecForCommitWithoutChannels @@ -500,15 +634,17 @@ ) ! -nameAndSelectorSpec - "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." +windowSpec + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this!! If it is corrupted, + the UIPainter may not be able to read the specification." " - UIPainter new openOnClass:UIPainter andSelector:#nameAndSelectorSpec - UIPainter new openInterface:#nameAndSelectorSpec + UIPainter new openOnClass:UIPainter andSelector:#windowSpec + UIPainter new openInterface:#windowSpec + UIPainter open " @@ -519,91 +655,173 @@ #window: #(#WindowSpec #name: 'GUI Painter' - #layout: #(#LayoutFrame 296 0 349 0 642 0 508 0) + #layout: #(#LayoutFrame 50 0 310 0 579 0 796 0) #label: 'GUI Painter' #min: #(#Point 10 10) - #max: #(#Point 1152 900) - #bounds: #(#Rectangle 296 349 643 509) + #max: #(#Point 1160 870) + #bounds: #(#Rectangle 50 310 580 797) + #menu: #menu #usePreferredExtent: false ) #component: #(#SpecCollection #collection: #( - #(#FramedBoxSpec - #name: 'framedBox1' - #layout: #(#LayoutFrame 0 0.0 3 0.0 0 1.0 -35 1.0) + #(#MenuPanelSpec + #name: 'menuToolbarView' + #layout: #(#LayoutFrame -1 0.0 0 0 -1 1.0 32 0) + #tabable: true + #menu: #menuToolbar + ) + #(#VariableHorizontalPanelSpec + #name: 'hpanel' + #layout: #(#LayoutFrame 0 0.0 34 0.0 0 1.0 -26 1.0) #component: #(#SpecCollection #collection: #( - #(#LabelSpec - #name: 'selectorLabel' - #layout: #(#AlignmentOrigin 77 0.11 39 0 1 0.5) - #label: 'Selector:' - #adjust: #right - #resizeForLabel: true - ) - #(#InputFieldSpec - #name: 'methodNameField' - #layout: #(#LayoutFrame 80 0.11 28 0 14 1.0 50 0) + #(#ArbitraryComponentSpec + #name: 'treeView' #tabable: true - #model: #methodNameChannel - ) - #(#LabelSpec - #name: 'classLabel' - #layout: #(#AlignmentOrigin 77 0.11 64 0 1 0.5) - #label: 'Class:' - #adjust: #right - #resizeForLabel: true + #menu: #menuEdit + #hasHorizontalScrollBar: true + #hasVerticalScrollBar: true + #miniScrollerHorizontal: true + #miniScrollerVertical: true + #component: #treeView + #hasBorder: false ) - #(#InputFieldSpec - #name: 'classNameField' - #layout: #(#LayoutFrame 80 0.11 53 0 14 1.0 75 0) - #tabable: true - #model: #classNameChannel - ) - #(#LabelSpec - #name: 'superClassLabel' - #layout: #(#AlignmentOrigin 77 0.11 89 0 1 0.5) - #label: 'Superclass:' - #adjust: #right - #resizeForLabel: true - ) - #(#ComboBoxSpec - #name: 'superclassNameComboBox' - #layout: #(#LayoutFrame 80 0.11 78 0 14 1.0 100 0) - #tabable: true - #model: #superclassNameChannel - #comboList: #superclassNameDefaults + #(#ViewSpec + #name: 'specHolderView' + #component: + #(#SpecCollection + #collection: + #( + #(#MenuPanelSpec + #name: 'menuToolbar2View' + #layout: #(#LayoutFrame -1 0.0 -2 0 -1 1.0 30 0) + #enableChannel: #canMoveOrAlignSelection + #tabable: true + #menu: #menuToolbar2 + ) + #(#NoteBookViewSpec + #name: 'noteBook' + #layout: #(#LayoutFrame 0 0.0 34 0.0 0 1.0 -30 1.0) + #enableChannel: #enableChannel + #tabable: true + #model: #tabModel + #menu: #tabList + #style: #(#FontDescription #helvetica #medium #roman 10) + #canvas: #noteBookView + ) + #(#HorizontalPanelViewSpec + #name: 'horizontalPanelView1' + #layout: #(#LayoutFrame -163 1 -1 0 -35 1.0 31 0) + #component: + #(#SpecCollection + #collection: + #( + #(#ArrowButtonSpec + #name: 'MoveLeftButton' + #activeHelpKey: #changePositionLeft + #tabable: true + #model: #moveSelectionLeft + #enableChannel: #canMoveOrAlignSelection + #isTriggerOnDown: true + #direction: #left + #extent: #(#Point 32 32) + ) + #(#ArrowButtonSpec + #name: 'MoveRightButton' + #activeHelpKey: #changePositionRight + #model: #moveSelectionRight + #enableChannel: #canMoveOrAlignSelection + #isTriggerOnDown: true + #direction: #right + #extent: #(#Point 32 32) + ) + #(#ArrowButtonSpec + #name: 'MoveDownButton' + #activeHelpKey: #changePositionDown + #model: #moveSelectionDown + #enableChannel: #canMoveOrAlignSelection + #isTriggerOnDown: true + #direction: #down + #extent: #(#Point 32 32) + ) + #(#ArrowButtonSpec + #name: 'MoveUpButton' + #activeHelpKey: #changePositionUp + #model: #moveSelectionUp + #enableChannel: #canMoveOrAlignSelection + #isTriggerOnDown: true + #direction: #up + #extent: #(#Point 32 32) + ) + ) + ) + #horizontalLayout: #fit + #verticalLayout: #fit + #horizontalSpace: 0 + #verticalSpace: 0 + ) + #(#ActionButtonSpec + #name: 'openSpecDocumentationButton' + #layout: #(#LayoutFrame -32 1 -1 0 0 1 31 0) + #activeHelpKey: #editOpenSpecDocumentation + #hasCharacterOrientedLabel: false + #label: 'helpIcon' + #model: #openSpecDocumentation + ) + #(#ActionButtonSpec + #name: 'cancelButton' + #layout: #(#LayoutFrame 2 0 -26 1 -1 0.5 -2 1) + #activeHelpKey: #cancel + #label: 'Cancel' + #tabable: true + #model: #cancel + #enableChannel: #modifiedChannel + ) + #(#ActionButtonSpec + #name: 'acceptButton' + #layout: #(#LayoutFrame 1 0.5 -26 1 -2 1 -2 1) + #activeHelpKey: #accept + #label: 'OK' + #tabable: true + #model: #accept + #enableChannel: #modifiedChannel + ) + ) + ) + #borderWidth: 1 ) ) ) - #label: 'Define Class And Selector' - #labelPosition: #topLeft + #level: 1 + #handles: #(#Any 0.318868 1.0) ) #(#UISubSpecification - #name: 'uISubSpecifica1' - #layout: #(#LayoutFrame 0 0.0 -29 1 0 1.0 -5 1) + #name: 'infoBarSubSpec' + #layout: #(#LayoutFrame 0 0.0 -24 1 0 1.0 0 1.0) #majorKey: #ToolApplicationModel - #minorKey: #windowSpecForCommitWithoutChannels + #minorKey: #windowSpecForInfoBar ) ) ) ) ! -windowSpec - "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." +windowSpecWithTranscriptHelp + "This resource specification was automatically generated + by the UIPainter of ST/X." + + "Do not manually edit this. If it is corrupted, + the UIPainter may not be able to read the specification." " - UIPainter new openOnClass:UIPainter andSelector:#windowSpec - UIPainter new openInterface:#windowSpec + UIPainter new openOnClass:UIPainter andSelector:#windowSpecWithTranscriptHelp + UIPainter new openInterface:#windowSpecWithTranscriptHelp " - "UIPainter open" @@ -613,11 +831,11 @@ #window: #(#WindowSpec #name: 'GUI Painter' - #layout: #(#LayoutFrame 453 0 344 0 1005 0 881 0) + #layout: #(#LayoutFrame 575 0 296 0 1127 0 833 0) #label: 'GUI Painter' #min: #(#Point 10 10) #max: #(#Point 1160 870) - #bounds: #(#Rectangle 453 344 1006 882) + #bounds: #(#Rectangle 575 296 1128 834) #menu: #menu #usePreferredExtent: false ) @@ -743,7 +961,7 @@ #tabable: true #model: #cancel #enableChannel: #modifiedChannel - #extent: #(#Point 182 24) + #extent: #(#Point 183 24) ) #(#ActionButtonSpec #name: 'acceptButton' @@ -771,11 +989,12 @@ #handles: #(#Any 0.318264 1.0) ) #(#TextEditorSpec - #name: 'Transcript' + #name: 'HelpTranscript' #hasHorizontalScrollBar: true #hasVerticalScrollBar: true #miniScrollerHorizontal: true #miniScrollerVertical: true + #isReadOnly: true ) ) ) @@ -795,10 +1014,11 @@ !UIPainter class methodsFor:'menu specs'! menu - "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." + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this!! If it is corrupted, + the MenuEditor may not be able to read the specification." " MenuEditor new openOnClass:UIPainter andSelector:#menu @@ -916,7 +1136,7 @@ #( #(#MenuItem #label: 'Aspect Methods' - #value: #doInstallAspects + #value: #doGenerateAspectMethods #activeHelpKey: #generateAspectMethods #enabled: #hasSpecClass ) @@ -925,7 +1145,7 @@ ) #(#MenuItem #label: 'Hook Methods' - #value: #doInstallHooks + #value: #doGenerateHookMethods #activeHelpKey: #generateHookMethods #enabled: #hasSpecClass ) @@ -976,6 +1196,27 @@ #label: '-' ) #(#MenuItem + #label: 'Redefine Aspect Methods' + #activeHelpKey: #settingsRedefineAspectMethods + #enabled: #hasSpecClass + #indication: #redefineAspectMethods: + ) + #(#MenuItem + #label: 'Transcript Help' + #activeHelpKey: #settingsTranscriptHelp + #indication: #transcriptHelp: + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem + #label: 'Fonts' + #submenuChannel: #menuFont + ) + #(#MenuItem + #label: '-' + ) + #(#MenuItem #label: 'Undo Manager...' #value: #openUndoMenu #activeHelpKey: #settingsUndoManager @@ -985,15 +1226,6 @@ #value: #gridMenu #activeHelpKey: #settingsGridManager ) - #(#MenuItem - #label: '-' - ) - #(#MenuItem - #label: 'Redefine Aspect Methods' - #activeHelpKey: #settingsRedefineAspectMethods - #enabled: #hasSpecClass - #indication: #doRedefineMethods: - ) ) nil nil ) @@ -1052,10 +1284,11 @@ ! menuAlign - "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." + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this. If it is corrupted, + the MenuEditor may not be able to read the specification." " MenuEditor new openOnClass:UIPainter andSelector:#menuAlign @@ -1162,10 +1395,11 @@ ! menuEdit - "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." + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this. If it is corrupted, + the MenuEditor may not be able to read the specification." " MenuEditor new openOnClass:UIPainter andSelector:#menuEdit @@ -1309,6 +1543,11 @@ #label: '-' ) #(#MenuItem + #label: 'Open Spec Documentation' + #value: #openSpecDocumentation + #activeHelpKey: #editOpenSpecDocumentation + ) + #(#MenuItem #label: 'Inspect Spec' #value: #inspectSpec #activeHelpKey: #editInspectSpec @@ -1319,10 +1558,11 @@ ! menuMove - "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." + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this. If it is corrupted, + the MenuEditor may not be able to read the specification." " MenuEditor new openOnClass:UIPainter andSelector:#menuMove @@ -1370,10 +1610,11 @@ ! menuToolbar - "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." + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this. If it is corrupted, + the MenuEditor may not be able to read the specification." " MenuEditor new openOnClass:UIPainter andSelector:#menuToolbar @@ -1507,10 +1748,11 @@ ! menuToolbar2 - "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." + "This resource specification was automatically generated + by the MenuEditor of ST/X." + + "Do not manually edit this. If it is corrupted, + the MenuEditor may not be able to read the specification." " MenuEditor new openOnClass:UIPainter andSelector:#menuToolbar2 @@ -1574,6 +1816,40 @@ ) ! ! +!UIPainter methodsFor:'accessing'! + +redefineAspectMethods + "redefine methods yes or no. If a method is defined in super class + should the message be reinstalled ? + " + ^ UIPainterView redefineAspectMethods + + +! + +redefineAspectMethods:aBoolean + "redefine methods yes or no. If a method is defined in super class + should the message be reinstalled ? + " + UIPainterView redefineAspectMethods:aBoolean + + +! + +transcriptHelp + "get whether the help transcript is turned on/off + " + ^self class settings at: #transcriptHelp + ifAbsent: [self class settings at: #transcriptHelp put: false] +! + +transcriptHelp:aBoolean + "turn on/off the help transcript + " + self class settings at: #transcriptHelp put: aBoolean + +! ! + !UIPainter methodsFor:'actions'! accept @@ -1713,6 +1989,21 @@ " self painter moveSelectionUp +! + +openSpecDocumentation + "open documentation for the selected specification" + + |spec| + + (spec := self painter specForSelection) isNil ifTrue:[ + treeView isCanvasSelected ifTrue:[ + spec := treeView canvasSpec. + ] + ]. + spec notNil ifTrue:[ + HTMLDocumentView openFullOnDocumentationFile: 'tools/uipainter/', spec userFriendlyName,'.html' + ] ! ! !UIPainter methodsFor:'aspects'! @@ -1891,6 +2182,7 @@ ^ self information:'No application class defined yet!!' ]. aspect := self specTool specification columns. + editor := DataSetBuilder new. editor masterApplication:self. editor columns:aspect fromView:(self layoutTool layoutView). @@ -2007,8 +2299,8 @@ "Modified: / 6.2.1998 / 13:59:30 / stefan" ! -openTabItemEditor - "opens a column editor +openTabListEditor + "open a TabListEditor " |cls aspect editor columns| @@ -2018,14 +2310,14 @@ ^ self information:'No application class defined yet!!' ]. aspect := self specTool specification listSelector. - editor := TabItemEditor new. + + editor := TabListEditor new. editor masterApplication:self. - editor openModalOnClass:cls andSelector:aspect. - editor selector ~= aspect ifTrue:[ - editor didInstall ifTrue:[ - self specTool specification listSelector:(editor selector). + editor specSelector ~= aspect ifTrue:[ + editor hasSaved ifTrue:[ + self specTool specification listSelector:(editor specSelector). self modifiedChannel value:true. self accept. ] @@ -2111,36 +2403,45 @@ defaultInfoLabel - specClass isNil ifTrue: [^'No class and selector defined']. + specClass isNil ifTrue: [^'No class and selector defined.']. ^specClass printString, ' >> ', specSelector ! +show:aHelpText + + (self transcriptHelp and: [transcript notNil]) + ifFalse: + [ + super showHelp:aHelpText for:self + ] + ifTrue: + [ + transcript hideCursor; contents:aHelpText + ] +! + showHelp:aHelpText for:view "display active help texts in my own info area." - |txt| - - aHelpText isNil ifTrue:[ - txt := nil - ] ifFalse:[ - txt := self class - convertString:(aHelpText asString) - maxLineSize:(transcript width // transcript font width) - skipLineFeed:true - ]. - transcript hideCursor. - transcript contents:txt. - ^ true - - "Modified: / 29.10.1997 / 22:33:55 / cg" -! ! - -!UIPainter methodsFor:'printing'! - -show:aText - transcript hideCursor. - transcript contents:aText. - + (self transcriptHelp and: [transcript notNil]) + ifFalse: + [ + ^super showHelp:aHelpText for:view. + ] + ifTrue: + [ + |txt| + aHelpText isNil ifTrue:[ + txt := nil + ] ifFalse:[ + txt := self class + convertString:(aHelpText asString) + maxLineSize:(transcript width // transcript font width) + skipLineFeed:true + ]. + transcript hideCursor; contents:txt. + ^true + ] ! ! !UIPainter methodsFor:'private'! @@ -2151,7 +2452,7 @@ self treeSelection. "accept modifications" - (modified or: [self painter isModified or: [self helpTool isModified]]) + (modified or: [self painter isModified or: [self helpTool modified]]) ifTrue: [ ((YesNoBox title:'Window Spec was modified!!') @@ -2165,10 +2466,75 @@ ^true ! +checkClassAndSelector + "check for class & superclass" + + |superclass cls| + + specClass isNil ifTrue:[^ false]. + + cls := self resolveName:specClass. + + cls isNil ifTrue:[ + superclass := self resolveName:specSuperclass. + + superclass isNil ifTrue:[ + self warn:'No class named ' , specSuperclass , ' exists!!'. + ^ false. + ]. + (self confirm:'Create class ' , specClass asBoldText, '?') ifTrue:[ + superclass subclass:(specClass asSymbol) + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'Applications'. + ^ true. + ]. + ^ false. + ]. + cls isBehavior ifFalse:[ + self warn:'A global named ' , specClass , ' exists, but it is no class.'. + ^ false. + ]. + + specSuperclass isBehavior ifFalse:[ + specSuperclass isEmpty ifFalse:[ + superclass := self resolveName:specSuperclass + ] ifTrue:[ + specSuperclass := nil. + ] + ] ifTrue:[ + superclass := specSuperclass + ]. + + specSuperclass notNil ifTrue:[ + superclass isNil ifTrue:[ + self warn:'No class named ' , specSuperclass , ' exists!!'. + ^ false. + ]. + + (cls isSubclassOf:superclass) ifFalse:[ + self information:('A global named ' , specClass , ' exists,\' , + 'but is not a subclass of ' , superclass name , '.\\' , + 'Check and try again if that is not what you want.') withCRs. + ] + ]. + + superclass isNil ifTrue:[ + cls notNil ifTrue:[ + specSuperclass := cls superclass name + ] + ]. + + ^ true + + "Modified: 12.8.1997 / 23:39:10 / cg" +! + checkModified "check interface modification " - (self isModified and: [self isModified or: [self helpTool isModified]]) + (self isModified and: [self isModified or: [self helpTool modified]]) ifTrue: [ ((YesNoBox title:'Window Spec was modified!!') @@ -2181,6 +2547,83 @@ ^true ! +defineClassAndSelector + "launch a dialog to define class, superclass and method" + + |again tmp| + + [ + again := false. + + (tmp := specClass) isNil ifTrue:[tmp := 'NewApplication']. + aspects at:#classNameChannel put:tmp asValue. + + (tmp := specSelector) isNil ifTrue:[tmp := 'windowSpec']. + aspects at:#methodNameChannel put:tmp asValue. + + (tmp := specSuperclass) isNil ifTrue:[tmp := 'ApplicationModel']. + aspects at:#superclassNameChannel put:tmp asValue. + + (self openDialogInterface:#dialogSpecForDefiningClassAndSelector) ifTrue:[ + + specClass := (self aspectFor:#classNameChannel) value. + specSelector := (self aspectFor:#methodNameChannel) value. + specSelector notNil ifTrue:[specSelector := specSelector asSymbol]. + specSuperclass := (self aspectFor:#superclassNameChannel) value. + + (again := self checkClassAndSelector not) ifFalse:[ + self painter className:specClass + superclassName:specSuperclass + selector:specSelector. + ] + ] + ifFalse: + [ + ^nil + ] + + ] doWhile:[again]. + + self specClass:specClass. + self helpTool modified: true +! + +gridMenu + "open a dialog for grip parameters configuration + " + |hspace vspace bindings painter gridPara| + + painter := self painter. + bindings := IdentityDictionary new. + gridPara := painter gridParameters copy. + + bindings at:#showGrid put:(painter gridShown asValue). + bindings at:#alignToGrid put:(painter gridAlign asValue). + bindings at:#hspace put:((gridPara at:1) asValue). + bindings at:#vspace put:((gridPara at:2) asValue). + + (self openDialogInterface:#dialogSpecForDefiningGridParameters withBindings:bindings) ifFalse:[ + ^ self + ]. + + hspace := (bindings at:#hspace) value ? 5. + vspace := (bindings at:#vspace) value ? 5. + + gridPara at:1 put:hspace. + gridPara at:2 put:vspace. + gridPara at:5 put:hspace. + gridPara at:6 put:vspace. + + painter gridShown:false. + painter gridAlign:false. + painter gridParameters:gridPara. + painter gridAlign:(bindings at:#alignToGrid) value. + painter gridShown:(bindings at:#showGrid) value. + painter clear. + painter clear. + +! + hideUIView:aView "hide the view which is an application or top view " @@ -2395,7 +2838,6 @@ self raiseTabView. self cancel. - "Modified: / 26.10.1997 / 15:54:15 / cg" ! treeSelection @@ -2477,7 +2919,9 @@ self valueOfCanCut value: canCutOrCopy. self valueOfCanCopy value: canCutOrCopy. self valueOfCanPaste value: canPaste. - self valueOfCanPasteWithKeepingLayout value: (canPaste & self canKeepLayoutInSelection) + self valueOfCanPasteWithKeepingLayout value: (canPaste & self canKeepLayoutInSelection). + + ! ! !UIPainter methodsFor:'startup / release'! @@ -2529,6 +2973,28 @@ ]. ! +loadFromMessage: aMessage + + ((aMessage size > 0) and: [self askForModification]) + ifTrue: + [ + |readStream aClass aSelector| + readStream := aMessage readStream. + (aClass := Smalltalk at: (readStream upTo: $ ) asSymbol) notNil + ifTrue: + [ + aSelector := readStream upToEnd asSymbol. + self setClass: aClass selector: aSelector. + (aClass respondsTo:aSelector) + ifTrue: + [ + self painter setupFromSpec:(aClass perform:aSelector). + treeView selection: #(1). + ] + ] + ] +! + openInterface:aSymbol "open interfaces " @@ -2572,9 +3038,17 @@ painter treeView:treeView. treeView model addDependent:self. - super openInterface:aSymbol. - - transcript := (self builder componentAt:#Transcript) scrolledView. + self transcriptHelp + ifFalse: + [ + super openInterface:aSymbol. + ] + ifTrue: + [ + super openInterface:#windowSpecWithTranscriptHelp. + transcript := (self builder componentAt:#HelpTranscript) scrolledView. + ]. + topView := self window. topView label:'GUI Painter'. @@ -2606,7 +3080,6 @@ selectionPanel window icon:(Image fromFile:'bitmaps/UIPainter.xbm' resolution:100). ActiveHelp startFor:self. - ! openOnClass:aClass @@ -2653,9 +3126,10 @@ self treeSelection. self tabSelection: 'Basics' + ! ! -!UIPainter methodsFor:'user interactions'! +!UIPainter methodsFor:'user actions'! doBrowseAspectMethods "open a browser on the aspect methods" @@ -2682,7 +3156,7 @@ ! doBrowseClass - "open a browser on the class" + "open a System Browser on the class" |cls| @@ -2699,8 +3173,21 @@ ! -doInstallAspects - "install aspects and actions +doChooseTreeViewFont + + |font| + (font := FontPanel + fontFromUserInitial: treeView class defaultFont + title: 'Choose Tree View Font') notNil + ifTrue: + [ + treeView class defaultFont: (font on: device). + treeView font: treeView class defaultFont + ] +! + +doGenerateAspectMethods + "generate aspect and action methods " |code| @@ -2723,8 +3210,8 @@ ! -doInstallHooks - "install application hooks +doGenerateHookMethods + "generate hook methods for the application class " |code| @@ -2800,6 +3287,7 @@ self painter removeAll. treeView canvas topView name: UIPainter defaultNameOfCanvas. treeView canvas topView label: UIPainter defaultNameOfCanvas. + self helpTool reset. treeView selection:#(1). self treeSelection. self updateInfoLabel. @@ -2834,24 +3322,6 @@ ! -doRedefineMethods - "redefine methods yes or no. If a method is defined in super class - should the message be reinstalled ? - " - ^ UIPainterView redefineMethods - - -! - -doRedefineMethods:aBool - "redefine methods yes or no. If a method is defined in super class - should the message be reinstalled ? - " - UIPainterView redefineMethods:aBool - - -! - doSave "install window spec " @@ -2914,11 +3384,13 @@ (resourceMessage := ResourceSelectionBrowser request: 'Save Window Spec In Class' onSuperclass: #Object - andClass: specClass ? #ApplicationModel + andClass: (specClass ? #ApplicationModel) asSymbol andSelector: specSelector ? #windowSpec withResourceTypes: #(canvas)) notNil ifTrue: [ + modified := false. + self painter resetModification. (self resourceMessage: resourceMessage) ifTrue: [ @@ -2986,190 +3458,6 @@ app openInterface:specSelector ! -doWindowSpec - "create the window specification but do not write to application; instead - open a view - " - |code v| - - self treeSelection. "accept modifications" - - code := self painter generateWindowSpecMethodSource. - - v := CodeView open. - v contents:code. - v label:'windowSpec'. - -! - -loadFromMessage: aMessage - - ((aMessage size > 0) and: [self askForModification]) - ifTrue: - [ - |readStream aClass aSelector| - readStream := aMessage readStream. - (aClass := Smalltalk at: (readStream upTo: $ ) asSymbol) notNil - ifTrue: - [ - aSelector := readStream upToEnd asSymbol. - self setClass: aClass selector: aSelector. - (aClass respondsTo:aSelector) - ifTrue: - [ - self painter setupFromSpec:(aClass perform:aSelector). - treeView selection: #(1). - ] - ] - ] -! ! - -!UIPainter methodsFor:'user interactions - dialog'! - -checkClassAndSelector - "check for class & superclass" - - |superclass cls| - - specClass isNil ifTrue:[^ false]. - - cls := self resolveName:specClass. - - cls isNil ifTrue:[ - superclass := self resolveName:specSuperclass. - - superclass isNil ifTrue:[ - self warn:'No class named ' , specSuperclass , ' exists!!'. - ^ false. - ]. - (self confirm:'Create class ' , specClass asBoldText, '?') ifTrue:[ - superclass subclass:(specClass asSymbol) - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - category:'Applications'. - ^ true. - ]. - ^ false. - ]. - cls isBehavior ifFalse:[ - self warn:'A global named ' , specClass , ' exists, but it is no class.'. - ^ false. - ]. - - specSuperclass isBehavior ifFalse:[ - specSuperclass isEmpty ifFalse:[ - superclass := self resolveName:specSuperclass - ] ifTrue:[ - specSuperclass := nil. - ] - ] ifTrue:[ - superclass := specSuperclass - ]. - - specSuperclass notNil ifTrue:[ - superclass isNil ifTrue:[ - self warn:'No class named ' , specSuperclass , ' exists!!'. - ^ false. - ]. - - (cls isSubclassOf:superclass) ifFalse:[ - self information:('A global named ' , specClass , ' exists,\' , - 'but is not a subclass of ' , superclass name , '.\\' , - 'Check and try again if that is not what you want.') withCRs. - ] - ]. - - superclass isNil ifTrue:[ - cls notNil ifTrue:[ - specSuperclass := cls superclass name - ] - ]. - - ^ true - - "Modified: 12.8.1997 / 23:39:10 / cg" -! - -defineClassAndSelector - "launch a dialog to define class, superclass and method" - - |again tmp| - - [ - again := false. - - (tmp := specClass) isNil ifTrue:[tmp := 'NewApplication']. - aspects at:#classNameChannel put:tmp asValue. - - (tmp := specSelector) isNil ifTrue:[tmp := 'windowSpec']. - aspects at:#methodNameChannel put:tmp asValue. - - (tmp := specSuperclass) isNil ifTrue:[tmp := 'ApplicationModel']. - aspects at:#superclassNameChannel put:tmp asValue. - - (self openDialogInterface:#nameAndSelectorSpec) ifTrue:[ - - specClass := (self aspectFor:#classNameChannel) value. - specSelector := (self aspectFor:#methodNameChannel) value. - specSelector notNil ifTrue:[specSelector := specSelector asSymbol]. - specSuperclass := (self aspectFor:#superclassNameChannel) value. - - (again := self checkClassAndSelector not) ifFalse:[ - self painter className:specClass - superclassName:specSuperclass - selector:specSelector. - ] - ] - ifFalse: - [ - ^nil - ] - - ] doWhile:[again]. - - self specClass:specClass. - self helpTool isModified: true -! - -gridMenu - "open a dialog for grip parameters configuration - " - |hspace vspace bindings painter gridPara| - - painter := self painter. - bindings := IdentityDictionary new. - gridPara := painter gridParameters copy. - - bindings at:#showGrid put:(painter gridShown asValue). - bindings at:#alignToGrid put:(painter gridAlign asValue). - bindings at:#hspace put:((gridPara at:1) asValue). - bindings at:#vspace put:((gridPara at:2) asValue). - - (self openDialogInterface:#gridParametersSpec withBindings:bindings) ifFalse:[ - ^ self - ]. - - hspace := (bindings at:#hspace) value ? 5. - vspace := (bindings at:#vspace) value ? 5. - - gridPara at:1 put:hspace. - gridPara at:2 put:vspace. - gridPara at:5 put:hspace. - gridPara at:6 put:vspace. - - painter gridShown:false. - painter gridAlign:false. - painter gridParameters:gridPara. - painter gridAlign:(bindings at:#alignToGrid) value. - painter gridShown:(bindings at:#showGrid) value. - painter clear. - painter clear. - -! ! - -!UIPainter methodsFor:'user interactions - move'! - doStepDown "move selected component after the next component in the hierarchy of its container widget @@ -3194,6 +3482,22 @@ its container widget " treeView doStepOver:-1 +! + +doWindowSpec + "create the window specification but do not write to application; instead + open a view + " + |code v| + + self treeSelection. "accept modifications" + + code := self painter generateWindowSpecMethodSource. + + v := CodeView open. + v contents:code. + v label:'windowSpec'. + ! ! !UIPainter::TreeView class methodsFor:'documentation'!