--- 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:#(
+ <resource: #help>
+
+ ^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
"
<resource: #image>
@@ -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
"
<resource: #image>
@@ -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
"
<resource: #image>
@@ -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
"
<resource: #image>
@@ -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
"
<resource: #image>
@@ -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
"
<resource: #image>
@@ -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
"
<resource: #canvas>
@@ -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
+ "
+
+ <resource: #canvas>
+
+ ^
+
+ #(#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
"
<resource: #canvas>
@@ -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"
<resource: #canvas>
@@ -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'!