UIPainter.st
changeset 217 354ba46948b4
parent 206 1c3fb15ffd62
child 222 dd2688307d90
--- a/UIPainter.st	Thu Jul 17 11:52:41 1997 +0200
+++ b/UIPainter.st	Thu Jul 17 12:02:57 1997 +0200
@@ -236,212 +236,297 @@
 !UIPainter class methodsFor:'interface specs'!
 
 menuAlignment
-    ^ #(#Menu #(
-                #(#MenuItem
-                        #'label:' 'align left'
-                        #'value:' #alignSelectionLeft
-                        #'labelImage:' #( ResourceRetriever nil iconAlignL )
-                        #'activeHelpKey:' #alignSelectionLeft
-                 )
-                #(#MenuItem
-                        #'label:' 'align right'
-                        #'value:' #alignSelectionRight
-                        #'labelImage:' #( ResourceRetriever nil iconAlignR )
-                        #'activeHelpKey:' #alignSelectionRight
-                 )
-                #(#MenuItem
-                        #'label:' 'align left & right'
-                        #'value:' #alignSelectionLeftAndRight
-                        #'labelImage:' #( ResourceRetriever nil iconAlignLR )
-                        #'activeHelpKey:' #alignSelectionLeftAndRight
-                 )
-                #(#MenuItem
-                        #'label:' 'align top'
-                        #'value:' #alignSelectionTop
-                        #'labelImage:' #( ResourceRetriever nil iconAlignT )
-                        #'activeHelpKey:' #alignSelectionTop
-                 )
-                #(#MenuItem
-                        #'label:' 'align bottom'
-                        #'value:' #alignSelectionBottom
-                        #'labelImage:' #( ResourceRetriever nil iconAlignB )
-                        #'activeHelpKey:' #alignSelectionBottom
-                 )
-                #(#MenuItem
-                        #'label:' 'align top & bottom'
-                        #'value:' #alignSelectionTopAndBottom
-                        #'labelImage:' #( ResourceRetriever nil iconAlignTB )
-                        #'activeHelpKey:' #alignSelectionTopAndBottom
-                 )
-                #(#MenuItem
-                        #'label:' 'align centered horizontal'
-                        #'value:' #alignSelectionCenterHor
-                        #'labelImage:' #( ResourceRetriever nil iconAlignCenterH )
-                        #'activeHelpKey:' #alignSelectionCenterHor
-                 )
-                #(#MenuItem
-                        #'label:' 'align centered vertical'
-                        #'value:' #alignSelectionCenterVer
-                        #'labelImage:' #( ResourceRetriever nil iconAlignCenterV )
-                        #'activeHelpKey:' #alignSelectionCenterVer
-                 )
+    "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."
+
+    "
+     MenuEditor new openOnClass:UIPainter andSelector:#menuAlignment
+     (Menu new fromLiteralArrayEncoding:(UIPainter menuAlignment)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
+                #'label:' 'align left'
+                #'value:' #alignSelectionLeft
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionLeft
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignL
+                )
+            )
+             #(#MenuItem
+                #'label:' 'align right'
+                #'value:' #alignSelectionRight
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionRight
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignR
+                )
+            )
+             #(#MenuItem
+                #'label:' 'align left & right'
+                #'value:' #alignSelectionLeftAndRight
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionLeftAndRight
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignLR
                 )
-               #( 3 3 )
-               nil
-        )
-
+            )
+             #(#MenuItem
+                #'label:' 'align top'
+                #'value:' #alignSelectionTop
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionTop
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignT
+                )
+            )
+             #(#MenuItem
+                #'label:' 'align bottom'
+                #'value:' #alignSelectionBottom
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionBottom
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignB
+                )
+            )
+             #(#MenuItem
+                #'label:' 'align top & bottom'
+                #'value:' #alignSelectionTopAndBottom
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionTopAndBottom
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignTB
+                )
+            )
+             #(#MenuItem
+                #'label:' 'align centered horizontal'
+                #'value:' #alignSelectionCenterHor
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionCenterHor
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignCenterH
+                )
+            )
+             #(#MenuItem
+                #'label:' 'align centered vertical'
+                #'value:' #alignSelectionCenterVer
+                #'enabled:' #enableChannel
+                #'activeHelpKey:' #alignSelectionCenterVer
+                #'labelImage:' 
+                 #(#ResourceRetriever
+                    nil #iconAlignCenterV
+                )
+            )
+          )
+          #( 3 3 )
+          nil
+      )
 !
 
 menuPullDown
-    ^ #(#Menu #(
-        #(#MenuItem
+    "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."
+
+    "
+     MenuEditor new openOnClass:UIPainter andSelector:#menuPullDown
+     (Menu new fromLiteralArrayEncoding:(UIPainter menuPullDown)) startUp
+    "
+
+    <resource: #menu>
+
+    ^
+     
+       #(#Menu
+          
+           #(
+             #(#MenuItem
                 #'label:' 'file'
                 #'value:' #file
-                #'submenu:'
-                        #(#Menu #(
-                                 #(#MenuItem
-                                        #'label:' 'new'
-                                        #'value:' #doNew
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'from class ...'
-                                        #'value:' #doFromClass
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'pick a view '
-                                        #'value:' #doPickAView
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'raise'
-                                        #'value:' #doRaise
-                                  )
-                                 #(#MenuItem
-                                        #'label:' '='
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'quit'
-                                        #'value:' #closeRequest
-                                  )
-                                 )
-                                #( 3 )
-                                nil
-                       )
-         )
-        #(#MenuItem
+                #'enabled:' #enableChannel
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'new'
+                          #'value:' #doNew
+                      )
+                       #(#MenuItem
+                          #'label:' 'from class ...'
+                          #'value:' #doFromClass
+                      )
+                       #(#MenuItem
+                          #'label:' 'pick a view '
+                          #'value:' #doPickAView
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'raise'
+                          #'value:' #doRaise
+                      )
+                       #(#MenuItem
+                          #'label:' '='
+                      )
+                       #(#MenuItem
+                          #'label:' 'quit'
+                          #'value:' #closeRequest
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
                 #'label:' 'misc'
                 #'value:' #misc
-                #'submenu:'
-                        #(#Menu #(
-                                #(#MenuItem
-                                        #'label:' 'grid'
-                                        #'value:' #grid
-                                        #'submenu:'
-                                                #(#Menu #(
-                                                        #(#MenuItem
-                                                                #'label:' 'show'
-                                                                #'indication:' #gridShown:
-                                                         )
-                                                        #(#MenuItem
-                                                                #'label:' 'align'
-                                                                #'indication:' #gridAlign:
-                                                         )
-                                                        )
-                                                        nil
-                                                        nil
-                                                 )
-                                 )
-                                #(#MenuItem
-                                        #'label:' 'undo'
-                                        #'value:' #undo
-                                        #'submenu:'
-                                                #(#Menu #(
-                                                        #(#MenuItem
-                                                                #'label:' 'last'
-                                                                #'value:' #undoLast
-                                                         )
-                                                        #(#MenuItem
-                                                                #'label:' 'menu'
-                                                                #'value:' #openUndoMenu
-                                                         )
-                                                        #(#MenuItem
-                                                                #'label:' 'delete'
-                                                                #'value:' #removeUndoHistory
-                                                         )
-                                                        )
-                                                        #(2)
-                                                        nil
-                                                 )
-                                  )
+                #'enabled:' #enableChannel
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'grid'
+                          #'value:' #grid
+                          #'submenu:' 
+                           #(#Menu
+                              
+                               #(
+                                 #(#MenuItem
+                                    #'label:' 'show'
+                                    #'indication:' #'gridShown:'
+                                )
+                                 #(#MenuItem
+                                    #'label:' 'align'
+                                    #'indication:' #'gridAlign:'
                                 )
-                                nil
-                                nil
-                               )
-         )
-        #(#MenuItem
+                              ) nil
+                              nil
+                          )
+                      )
+                       #(#MenuItem
+                          #'label:' 'undo'
+                          #'value:' #undo
+                          #'submenu:' 
+                           #(#Menu
+                              
+                               #(
+                                 #(#MenuItem
+                                    #'label:' 'last'
+                                    #'value:' #undoLast
+                                )
+                                 #(#MenuItem
+                                    #'label:' 'menu'
+                                    #'value:' #openUndoMenu
+                                )
+                                 #(#MenuItem
+                                    #'label:' '-'
+                                )
+                                 #(#MenuItem
+                                    #'label:' 'delete'
+                                    #'value:' #removeUndoHistory
+                                )
+                              ) nil
+                              nil
+                          )
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
                 #'label:' 'code'
                 #'value:' #code
-                #'submenu:'
-                        #(#Menu #(
-                                #(#MenuItem
-                                        #'label:' 'class && method ...'
-                                        #'value:' #defineClassAndSelector
-                                 )
-                                 #(#MenuItem
-                                        #'label:' '='
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'install window spec.'
-                                        #'value:' #doInstallSpec
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'install help spec.'
-                                        #'value:' #doInstallHelp
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'install aspects'
-                                        #'value:' #doInstallAspects
-                                  )
-                                 #(#MenuItem
-                                        #'label:' '='
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'show window spec.'
-                                        #'value:' #doWindowSpec
-                                   )
-                                 #(#MenuItem
-                                        #'label:' '='
-                                  )
-                                 #(#MenuItem
-                                        #'label:' 'browse application'
-                                        #'value:' #doBrowseAppClass
-                                  )
-                                 #(#MenuItem
-                                         #'label:' 'start  application'
-                                         #'value:' #doStartApplication
-                                  )
-                                )
-                                #( 4 )
-                                nil
-                          )
-         )
-        #(#MenuItem
+                #'enabled:' #enableChannel
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'class && method ...'
+                          #'value:' #defineClassAndSelector
+                      )
+                       #(#MenuItem
+                          #'label:' '='
+                      )
+                       #(#MenuItem
+                          #'label:' 'install window spec.'
+                          #'value:' #doInstallSpec
+                          #'enabled:' #hasSpecClassAndSelector
+                      )
+                       #(#MenuItem
+                          #'label:' 'install help spec.'
+                          #'value:' #doInstallHelp
+                          #'enabled:' #hasSpecClass
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
+                      )
+                       #(#MenuItem
+                          #'label:' 'install aspects'
+                          #'value:' #doInstallAspects
+                          #'enabled:' #hasSpecClass
+                      )
+                       #(#MenuItem
+                          #'label:' '='
+                      )
+                       #(#MenuItem
+                          #'label:' 'show window spec.'
+                          #'value:' #doWindowSpec
+                      )
+                       #(#MenuItem
+                          #'label:' '='
+                      )
+                       #(#MenuItem
+                          #'label:' 'browse application'
+                          #'value:' #doBrowseAppClass
+                          #'enabled:' #hasSpecClass
+                      )
+                       #(#MenuItem
+                          #'label:' 'start  application'
+                          #'value:' #doStartApplication
+                          #'enabled:' #hasSpecClass
+                      )
+                    ) nil
+                    nil
+                )
+            )
+             #(#MenuItem
                 #'label:' 'test'
                 #'nameKey:' #test
                 #'value:' #test
-                #'submenu:'
-                        #(#Menu #(
-                                #(#MenuItem
-                                        #'label:' 'test mode'
-                                        #'indication:' #testMode:
-                                 )
-                                )
-                                nil
-                                nil
-                          )
-         )
-        )
-        nil
-        nil
+                #'submenu:' 
+                 #(#Menu
+                    
+                     #(
+                       #(#MenuItem
+                          #'label:' 'test mode'
+                          #'indication:' #'testMode:'
+                      )
+                    ) nil
+                    nil
+                )
+            )
+          ) nil
+          nil
       )
 !
 
@@ -804,6 +889,32 @@
 
 doubleClick
     objectList selectGroup
+!
+
+openEditMenu
+    |cls aspect editor|
+
+    specClass isNil ifTrue:[
+        ^ self information:'no class yet'.
+    ].
+    (cls := specClass) isBehavior ifFalse:[
+        cls := Smalltalk at:specClass asSymbol.
+        cls isNil ifTrue:[
+            ^ self information:'no class yet'
+        ]
+    ].
+
+    cls notNil ifTrue:[
+        (aspect := specTool specification menu) notNil ifTrue:[
+            aspect := aspect asSymbol
+        ].
+        editor := MenuEditor new.
+        editor masterApplication:self.
+        editor activeHelpTool:(self activeHelpTool).
+        editor openModalOnClass:cls andSelector:aspect
+    ]
+
+
 ! !
 
 !UIPainter methodsFor:'active help'!
@@ -814,6 +925,7 @@
     activeHelpTool isNil ifTrue:[
         activeHelpTool := UIHelpTool new.
         activeHelpTool helpSpecFrom:specClass.
+        activeHelpTool masterApplication:self.
     ].
     ^ activeHelpTool
 !
@@ -856,34 +968,6 @@
 
 !
 
-menuAlignment
-    |menu channel|
-
-    channel := self enableChannel.
-
-    menu := Menu new.
-    menu fromLiteralArrayEncoding:(self class menuAlignment).
-    menu receiver:self.
-    menu menuItems do:[:anItem| anItem enabled:channel].
-  ^ menu
-!
-
-menuPullDown
-    |menu channel|
-
-    channel := self enableChannel.
-
-    menu := Menu new.
-    menu fromLiteralArrayEncoding:(self class menuPullDown).
-    menu receiver:self.
-
-    menu menuItems do:[:anItem| 
-        anItem nameKey ~~ #test ifTrue:[anItem enabled:channel]
-                               ifFalse:[anItem value:channel].
-    ].
-  ^ menu
-!
-
 modifiedChannel
 
     |holder|
@@ -1124,12 +1208,32 @@
 
 !UIPainter methodsFor:'queries'!
 
+hasSpecClass
+
+    specClass notNil ifTrue:[
+        ^ (specClass isBehavior or:[(Smalltalk at:specClass asSymbol) notNil])
+    ].
+  ^ false
+!
+
+hasSpecClassAndSelector
+
+    specSelector size > 1 ifTrue:[
+        ^ self hasSpecClass
+    ].
+  ^ false
+!
+
 isHelpToolSelected
     ^ tabSelection = 'Help'
 !
 
 isLayoutToolSelected
     ^ tabSelection = layoutTool class label
+!
+
+isPainterEnabled
+    ^ self painter enabled
 ! !
 
 !UIPainter methodsFor:'selection'!
@@ -1510,7 +1614,7 @@
 doInstallAspects
     |code|
 
-    (specClass isNil or:[specSelector isNil]) ifTrue:[
+    self hasSpecClassAndSelector ifFalse:[
         self defineClassAndSelector
     ].
 
@@ -1540,7 +1644,7 @@
 doInstallSpec
     |code painter|
 
-    (specClass isNil or:[specSelector isNil]) ifTrue:[
+    self hasSpecClassAndSelector ifFalse:[
         self defineClassAndSelector
     ].
 
@@ -1620,7 +1724,7 @@
 doStartApplication
     |cls|
 
-    (specClass isNil or:[specSelector isNil]) ifTrue:[
+    (specClass isNil or:[specSelector size < 2]) ifTrue:[
         ^ self information:'no class or selector defined'.
     ].