--- 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'!