UIPainter.st
changeset 743 d58a3e7e39d5
parent 735 29c8681ce68d
child 755 cfbbec0a33c6
--- 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'!