support of UIPainter
authorca
Thu, 29 Jan 1998 10:14:28 +0100
changeset 514 5ac07e96e448
parent 513 a0d00fecb49a
child 515 1b64e990e495
support of UIPainter
TabItemEditor.st
--- a/TabItemEditor.st	Thu Jan 29 10:09:23 1998 +0100
+++ b/TabItemEditor.st	Thu Jan 29 10:14:28 1998 +0100
@@ -13,8 +13,8 @@
 
 
 ToolApplicationModel subclass:#TabItemEditor
-	instanceVariableNames:'rebuildMode className selector aspects listOfTabs hasChanged
-		selectedIndex'
+	instanceVariableNames:'rebuildMode testView className selector aspects listOfTabs
+		hasChanged selectedIndex'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-UIPainter'
@@ -166,40 +166,40 @@
                #(
                  #(#LabelSpec
                     #'name:' 'Label'
-                    #'layout:' #(#AlignmentOrigin 63 0 34 0 1 0.5)
+                    #'layout:' #(#AlignmentOrigin 73 0 34 0 1 0.5)
                     #'label:' 'Label:'
                     #'resizeForLabel:' true
                 )
                  #(#InputFieldSpec
                     #'name:' 'LabelField'
-                    #'layout:' #(#LayoutFrame 66 0 24 0 -4 1.0 46 0)
+                    #'layout:' #(#LayoutFrame 75 0 24 0 -4 1.0 46 0)
                     #'activeHelpKey:' #label
                     #'model:' #label
                 )
                  #(#CheckBoxSpec
                     #'name:' 'TranslateLabel'
-                    #'layout:' #(#LayoutOrigin 63 0 49 0)
+                    #'layout:' #(#LayoutOrigin 71 0 49 0)
                     #'activeHelpKey:' #translateLabel
                     #'model:' #translateLabel
                     #'label:' 'Label derives from Application'
                 )
                  #(#ColorMenuSpec
                     #'name:' 'ForegroundColorMenu'
-                    #'layout:' #(#LayoutFrame 94 0 104 0 -4 1.0 126 0)
+                    #'layout:' #(#LayoutFrame 75 0 104 0 -4 1.0 126 0)
                     #'activeHelpKey:' #foregroundColor
                     #'model:' #labelForegroundColor
                     #'labelsAreColored:' false
                 )
                  #(#LabelSpec
                     #'name:' 'ForegroundLabel'
-                    #'layout:' #(#AlignmentOrigin 92 0 116 0 1 0.5)
-                    #'label:' 'Foreground:'
+                    #'layout:' #(#AlignmentOrigin 73 0 116 0 1 0.5)
+                    #'label:' 'Color:'
                     #'adjust:' #right
                     #'resizeForLabel:' true
                 )
                  #(#CheckBoxSpec
                     #'name:' 'CanSelect'
-                    #'layout:' #(#LayoutFrame 15 0 171 0 134 0 193 0)
+                    #'layout:' #(#LayoutFrame 34 0 157 0 153 0 179 0)
                     #'model:' #enabled
                     #'label:' 'Can Select'
                 )
@@ -269,6 +269,20 @@
                                #(#SpecCollection
                                   #'collection:' 
                                    #(
+                                     #(#ViewSpec
+                                        #'name:' 'TestView'
+                                        #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+                                        #'component:' 
+                                         #(#SpecCollection
+                                            #'collection:' 
+                                             #(
+                                               #(#TabViewSpec
+                                                  #'name:' 'TestTabsView'
+                                                  #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 0.5)
+                                              )
+                                            )
+                                        )
+                                    )
                                      #(#SubCanvasSpec
                                         #'name:' 'specCanvas'
                                         #'layout:' #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -30 1.0)
@@ -358,6 +372,10 @@
                        #(#MenuItem
                           #'label:' 'New'
                           #'value:' #doNew
+                          #'labelImage:' #(#ResourceRetriever nil #newIcon 'New')
+                      )
+                       #(#MenuItem
+                          #'label:' '-'
                       )
                        #(#MenuItem
                           #'label:' 'Reload'
@@ -368,6 +386,15 @@
                           #'label:' '-'
                       )
                        #(#MenuItem
+                          #'label:' 'Save'
+                          #'value:' #doInstallSpec
+                          #'enabled:' #isNotModified
+                          #'labelImage:' #(#ResourceRetriever nil #saveIcon 'Save')
+                      )
+                       #(#MenuItem
+                          #'label:' '='
+                      )
+                       #(#MenuItem
                           #'label:' 'Define Class And Selector...'
                           #'value:' #doDefineClassAndSelector
                       )
@@ -380,7 +407,7 @@
                           #'enabled:' #hasClassAndSelector
                       )
                        #(#MenuItem
-                          #'label:' '-'
+                          #'label:' '='
                       )
                        #(#MenuItem
                           #'label:' 'Exit'
@@ -391,6 +418,18 @@
                     nil
                 )
             )
+             #(#MenuItem
+                #'label:' 'Edit'
+                #'submenuChannel:' #menuEdit
+            )
+             #(#MenuItem
+                #'label:' 'History'
+                #'submenuChannel:' #menuHistory
+            )
+             #(#MenuItem
+                #'label:' 'Help'
+                #'submenuChannel:' #menuHelp
+            )
           ) nil
           nil
       )
@@ -403,39 +442,44 @@
      handle the specification if its corrupted."
 
     "
-     MenuEditor new openOnClass:self andSelector:#menuEdit
-     (Menu new fromLiteralArrayEncoding:(self menuEdit)) startUp
+     MenuEditor new openOnClass:TabItemEditor andSelector:#menuEdit
+     (Menu new fromLiteralArrayEncoding:(TabItemEditor menuEdit)) startUp
     "
 
     <resource: #menu>
 
     ^
-
+     
        #(#Menu
-
+          
            #(
              #(#MenuItem
                 #'label:' 'Cut'
                 #'value:' #doCutTab
                 #'enabled:' #isColumnSelected
-                #'shortcutKeyCharacter:' #Cut
             )
              #(#MenuItem
                 #'label:' 'Copy'
                 #'value:' #doCopyTab
                 #'enabled:' #isColumnSelected
-                #'shortcutKeyCharacter:' #Copy
             )
              #(#MenuItem
                 #'label:' 'Paste'
                 #'value:' #doPasteTab
                 #'enabled:' #valueOfHavingClipboard
-                #'shortcutKeyCharacter:' #Paste
+            )
+             #(#MenuItem
+                #'label:' '-'
+            )
+             #(#MenuItem
+                #'label:' 'Create Tab'
+                #'value:' #doCreateTab
+                #'enabled:' #isNotModified
+                #'labelImage:' #(#ResourceRetriever #MenuEditor #menuItemImage 'Create Tab')
             )
           ) nil
           nil
       )
-
 !
 
 menuToolbar
@@ -457,6 +501,21 @@
           
            #(
              #(#MenuItem
+                #'label:' 'Test'
+                #'isButton:' true
+                #'value:' #doTest
+                #'labelImage:' #(#ResourceRetriever #UIPainter #startIcon)
+            )
+             #(#MenuItem
+                #'label:' ''
+            )
+             #(#MenuItem
+                #'label:' 'New'
+                #'isButton:' true
+                #'value:' #doNew
+                #'labelImage:' #(#ResourceRetriever nil #newIcon)
+            )
+             #(#MenuItem
                 #'label:' 'Save'
                 #'isButton:' true
                 #'value:' #doInstallSpec
@@ -467,7 +526,7 @@
                 #'label:' ''
             )
              #(#MenuItem
-                #'label:' 'createLabel'
+                #'label:' 'Create Label'
                 #'isButton:' true
                 #'value:' #doCreateTab
                 #'enabled:' #isNotModified
@@ -514,6 +573,10 @@
     ^ className
 !
 
+didInstall
+    ^ hasChanged not
+!
+
 selector
     ^ selector
 ! !
@@ -671,6 +734,66 @@
     ^ holder
 ! !
 
+!TabItemEditor methodsFor:'building'!
+
+buildFrom:aClass andSelector:aSelector
+    "build from class and selector
+    "
+    |spec list validClSl|
+
+    self doNew.
+
+    selector  := nil.
+    className := self resolveName:aClass.
+    validClSl := false.
+
+    className notNil ifTrue:[
+        aSelector notNil ifTrue:[
+            validClSl := true.
+            selector  := aSelector asSymbol.
+
+            (className respondsTo:selector) ifTrue:[
+                spec := className perform:selector.
+                list := self listOfLabels.
+
+                spec size ~~ 0 ifTrue:[
+
+                    rebuildMode := true.
+
+                    spec do:[:aTab|
+                        list add:aTab label.
+                        listOfTabs add:aTab.
+                    ].
+                    rebuildMode := false.
+                    self addToHistory:(className name, ' ', selector) -> #loadFromMessage:                        
+                ]
+            ]
+        ]
+    ].
+
+    self hasClassAndSelector value:validClSl.
+    self modified:false.
+    hasChanged := false.
+
+    listOfTabs notEmpty ifTrue:[
+        self selectionHolder value:1
+    ].
+!
+
+loadFromMessage:aMessage
+    "load tabs from class and selector derived from history
+    "
+    |msg cls|
+
+    aMessage notNil ifTrue:[
+        msg := aMessage asCollectionOfWords.
+
+        (msg size == 2 and:[(cls := self resolveName:(msg at:1)) notNil]) ifTrue:[
+            self buildFrom:cls andSelector:((msg at:2) asSymbol)
+        ]
+    ]
+! !
+
 !TabItemEditor methodsFor:'change & update'!
 
 update:something with:aParameter from:someObject
@@ -703,53 +826,14 @@
         ]
     ].
     self cancel.
+
+    testView notNil ifTrue:[
+        testView lower
+    ]
 ! !
 
 !TabItemEditor methodsFor:'startup / release'!
 
-buildFrom:aClass andSelector:aSelector
-    "build from class and selector
-    "
-    |spec list validClSl|
-
-    self doNew.
-
-    selector  := nil.
-    className := self resolveName:aClass.
-    validClSl := false.
-
-    className notNil ifTrue:[
-        aSelector notNil ifTrue:[
-            validClSl := true.
-            selector  := aSelector asSymbol.
-
-            (className respondsTo:selector) ifTrue:[
-                spec := className perform:selector.
-                list := self listOfLabels.
-
-                spec size ~~ 0 ifTrue:[
-
-                    rebuildMode := true.
-
-                    spec do:[:aTab|
-                        list add:aTab label.
-                        listOfTabs add:aTab.
-                    ].
-                    rebuildMode := false.
-                ]
-            ]
-        ]
-    ].
-
-    self hasClassAndSelector value:validClSl.
-    self modified:false.
-    hasChanged := false.
-
-    listOfTabs notEmpty ifTrue:[
-        self selectionHolder value:1
-    ].
-!
-
 closeRequest
 
     hasChanged ifTrue:[
@@ -813,6 +897,7 @@
 
 postBuildWith:builder
     self buildFrom:className andSelector:selector.
+    testView := builder componentAt:#TestView.
 ! !
 
 !TabItemEditor methodsFor:'user interactions'!
@@ -887,7 +972,12 @@
 
             sel notNil ifTrue:[
                 selector := sel asSymbol.
-              ^ self hasClassAndSelector value:true.
+                self hasClassAndSelector value:true.
+
+                listOfTabs size == 0 ifTrue:[
+                    self buildFrom:className andSelector:selector
+                ].
+                ^ self
             ]
         ]
     ]
@@ -1036,6 +1126,10 @@
     self listOfLabels removeAll.
     listOfTabs removeAll.
 
+    testView notNil ifTrue:[
+        testView lower
+    ].
+
     hasChanged  := true.
     rebuildMode := false.
 !
@@ -1059,6 +1153,29 @@
     "reload from class and selector
     "
     self buildFrom:className andSelector:selector
+!
+
+doTest
+    "run a test
+    "
+    |tabView list|
+
+    self selectionHolder value:nil.
+
+    listOfTabs size ~~ 0 ifTrue:[
+        list := listOfTabs collect:[:aTab||t|
+            t := aTab copy.
+            t setAttributesFromClass:className.
+            t
+        ]
+    ] ifFalse:[
+        list := nil
+    ].
+    tabView  := builder componentAt:#TestTabsView.
+    tabView list:list.
+    testView raise.
+
+
 ! !
 
 !TabItemEditor class methodsFor:'documentation'!