AbstractLauncherApplication.st
changeset 4258 20a0db92f04a
parent 4245 fe5535df5fb3
child 4287 feaec2b9cf67
--- a/AbstractLauncherApplication.st	Fri Nov 15 15:27:04 2002 +0100
+++ b/AbstractLauncherApplication.st	Fri Nov 15 17:23:26 2002 +0100
@@ -20,6 +20,35 @@
 	category:'Interface-Smalltalk'
 !
 
+AbstractSettingsApplication subclass:#CompilerSettingsAppl
+	instanceVariableNames:'modifiedChannel stcCompilationSelection catchMethodRedefs
+		allowQualifiedNames warnDollar warnOldStyle stcCompilation
+		fullDebugSupport warnCommonMistakes warnUnderscore keepSource
+		constantFolding fullHistoryUpdate warnCompatibility
+		constantFoldingOptions historyLines warnings warnSTX allowDollar
+		allowReservedWordsAsSelectors immutableArrays
+		allowOldStyleAssignment compileLazy allowUnderscore
+		allowDolphinExtensions warnUnusedVars keepSourceSelection
+		allowSqueakExtensions loadBinaries justInTimeCompilation
+		canLoadBinaries constantFoldingSelection stcCompilationList
+		catchClassRedefs stcCompilerSettings enableUnderscore
+		enableDollar'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:AbstractLauncherApplication
+!
+
+AbstractSettingsApplication subclass:#FontSettingsAppl
+	instanceVariableNames:'modifiedChannel filter allOfThem labelDef buttonDef listDef
+		menuDef textDef allFontLabelHolder buttonsFontLabelHolder
+		textFontLabelHolder labelsFontLabelHolder listsFontLabelHolder
+		menusFontLabelHolder allLabel buttonsLabel textLabel labelLabel
+		listsLabel menuLabel'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:AbstractLauncherApplication
+!
+
 AbstractSettingsApplication subclass:#KbdMappingSettingsAppl
 	instanceVariableNames:'modifiedChannel selectedRawKey macroTextHolder
 		selectedFunctionKey labelTextHolder functionKeyList rawKeyList
@@ -45,6 +74,20 @@
 	privateIn:AbstractLauncherApplication
 !
 
+AbstractSettingsApplication subclass:#MemorySettingsAppl
+	instanceVariableNames:'modifiedChannel'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:AbstractLauncherApplication
+!
+
+AbstractSettingsApplication subclass:#PlainSettingsAppl
+	instanceVariableNames:'modifiedChannel'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:AbstractLauncherApplication
+!
+
 ApplicationModel subclass:#SettingsDialog
 	instanceVariableNames:'canvasHolder appList selectionHolder selection requestor
 		colOfInstances'
@@ -61,6 +104,13 @@
 	privateIn:AbstractLauncherApplication
 !
 
+AbstractSettingsApplication subclass:#SystemMessageSettingsAppl
+	instanceVariableNames:'modifiedChannel classInfos vmInfo vmErrors displayErrors'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:AbstractLauncherApplication
+!
+
 AbstractSettingsApplication subclass:#ToolsSettingsAppl
 	instanceVariableNames:'useNewVersionDiffBrowser transcriptBufferSize useNewInspector
 		showClockInLauncher useNewChangesBrowser useNewFileBrowser
@@ -1692,6 +1742,2087 @@
     ]
 ! !
 
+!AbstractLauncherApplication::CompilerSettingsAppl class methodsFor:'defaults'!
+
+constantFoldingOptions
+
+    ^ #( nil #level1 #level2 #full )
+!
+
+constantFoldingStrings
+
+    ^ #('disabled' 'level1 (always safe)' 'level2 (usually safe)' 'full')
+!
+
+keepSourceOptions
+
+    ^ #( keep reference absReference sourceReference discard )
+!
+
+keepSourceStrings
+
+    ^ #('Keep as String' 'Reference to Filename' 'Reference to Full Path' 'Append and Ref in `st.src''' 'Discard' )
+!
+
+stcCompilationDemoStrings
+
+    ^ #('never')
+!
+
+stcCompilationFullVersionStrings
+
+    ^ #('always' 'primitive code only' 'never')
+!
+
+stcCompilationOptions
+
+    ^ #( always default never)
+! !
+
+!AbstractLauncherApplication::CompilerSettingsAppl class methodsFor:'interface specs'!
+
+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:AbstractLauncherApplication::CompilerSettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::CompilerSettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::CompilerSettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Compiler Settings'
+          #name: 'Compiler Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 616 602)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#CheckBoxSpec
+              #label: 'Catch Method Redefinitions'
+              #name: 'CatchMethodRedefinitions'
+              #layout: #(#LayoutFrame 5 0 5 0 250 0 30 0)
+              #model: #catchMethodRedefs
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Catch Class Redefinitions'
+              #name: 'CatchClassRedefinitions'
+              #layout: #(#LayoutFrame 257 0 5 0 7 1 30 0)
+              #model: #catchClassRedefs
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Keep History Line in Methods'
+              #name: 'KeepHistoryLineinMethods'
+              #layout: #(#LayoutFrame 5 0 30 0 250 0 55 0)
+              #model: #historyLines
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Keep Full Class History'
+              #name: 'KeepFullClassHistory'
+              #layout: #(#LayoutFrame 257 0 30 0 7 1 55 0)
+              #enableChannel: #hasHistoryManager
+              #model: #fullHistoryUpdate
+              #translateLabel: true
+            )
+           #(#LabelSpec
+              #label: 'FileIn Source Mode:'
+              #name: 'FileInSourceModeLabel'
+              #layout: #(#LayoutFrame 239 0 60 0 425 0 82 0)
+              #translateLabel: true
+              #adjust: #right
+            )
+           #(#PopUpListSpec
+              #label: 'PopUp List'
+              #name: 'KeepSourceSelection'
+              #layout: #(#LayoutFrame 425 0 60 0 -5 1 82 0)
+              #tabable: true
+              #model: #keepSourceSelection
+              #menu: #keepSource
+              #useIndex: true
+            )
+           #(#DividerSpec
+              #name: 'Separator1'
+              #layout: #(#LayoutFrame 0 0.0 90 0 0 1 93 0)
+            )
+           #(#CheckBoxSpec
+              #label: 'Lazy Compilation when Autoloading'
+              #name: 'LazyCompilationWhenAutoloading'
+              #layout: #(#LayoutFrame 5 0 100 0 250 0 125 0)
+              #model: #compileLazy
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'If Present, Load Binary Objects when Autoloading'
+              #name: 'LoadBinaryObjectsWhenAutoloading'
+              #layout: #(#LayoutFrame 5 0 125 0 331 0 150 0)
+              #enableChannel: #canLoadBinaries
+              #model: #loadBinaries
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Just in Time Compilation to Machine Code'
+              #name: 'JustInTimeCompilation'
+              #layout: #(#LayoutFrame 5 0 150 0 289 0 175 0)
+              #model: #justInTimeCompilation
+              #translateLabel: true
+            )
+           #(#DividerSpec
+              #name: 'Separator2'
+              #layout: #(#LayoutFrame 0 0.0 180 0 0 1.0 183 0)
+            )
+           #(#ActionButtonSpec
+              #label: 'Stc Compilation Parameters...'
+              #name: 'StcCompilationParametersButton'
+              #layout: #(#LayoutFrame 5 0 195 0 217 0 217 0)
+              #translateLabel: true
+              #model: #stcCompilerSettings
+            )
+           #(#LabelSpec
+              #label: 'Stc Compilation to Machine Code'
+              #name: 'StcCompilationToMachineCodeLabel'
+              #layout: #(#LayoutFrame 220 0 195 0 425 0 217 0)
+              #translateLabel: true
+              #adjust: #right
+            )
+           #(#PopUpListSpec
+              #label: 'PopUp List'
+              #name: 'StcCompilation'
+              #layout: #(#LayoutFrame 425 0 195 0 -5 1 217 0)
+              #tabable: true
+              #model: #stcCompilationSelection
+              #enableChannel: #canLoadBinaries
+              #menu: #stcCompilationList
+              #useIndex: true
+            )
+           #(#DividerSpec
+              #name: 'Separator3'
+              #layout: #(#LayoutFrame 0 0.0 225 0 0 1.0 228 0)
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow Underscore in Identifiers'
+              #name: 'AllowUnderscoreInIdentifiers'
+              #layout: #(#LayoutFrame 5 0 240 0 249 0 262 0)
+              #model: #allowUnderscore
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow Dollar in Identifiers'
+              #name: 'AllowDollarInIdentifiers'
+              #layout: #(#LayoutFrame 5 0 265 0 249 0 287 0)
+              #model: #allowDollar
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow VW3 QualifiedNames'
+              #name: 'AllowVW3QualifiedNames'
+              #layout: #(#LayoutFrame 5 0 290 0 249 0 312 0)
+              #model: #allowQualifiedNames
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow Squeak Extensions'
+              #name: 'AllowSqueakExtensions'
+              #layout: #(#LayoutFrame 5 0 315 0 249 0 337 0)
+              #model: #allowSqueakExtensions
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow Dolphin Extensions'
+              #name: 'AllowDolphinExtensions'
+              #layout: #(#LayoutFrame 5 0 340 0 249 0 362 0)
+              #model: #allowDolphinExtensions
+              #translateLabel: true
+            )
+           #(#PopUpListSpec
+              #label: 'PopUp List'
+              #name: 'ConstantFolding'
+              #layout: #(#LayoutFrame 425 0 238 0 -5 1 260 0)
+              #tabable: true
+              #model: #constantFoldingSelection
+              #menu: #constantFolding
+              #useIndex: true
+            )
+           #(#LabelSpec
+              #label: 'Constant Folding:'
+              #name: 'ConstantFoldingLabel'
+              #layout: #(#LayoutFrame 250 0 240 0 425 0 262 0)
+              #translateLabel: true
+              #adjust: #right
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow OldStyle Assignment (_)'
+              #name: 'AllowOldStyleAssignment'
+              #layout: #(#LayoutFrame 257 0 265 0 501 0 287 0)
+              #model: #allowOldStyleAssignment
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Allow Reserved Words as Selector (self)'
+              #name: 'AllowReservedWordsAsSelector'
+              #layout: #(#LayoutFrame 257 0 290 0 -5 1 312 0)
+              #model: #allowReservedWordsAsSelectors
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Full Debug Info'
+              #name: 'FullDebugInfo'
+              #layout: #(#LayoutFrame 257 0 315 0 501 0 337 0)
+              #model: #fullDebugSupport
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Literal Arrays are Immutable'
+              #name: 'LiteralArraysAreImmutable'
+              #layout: #(#LayoutFrame 257 0 340 0 501 0 362 0)
+              #model: #immutableArrays
+              #translateLabel: true
+            )
+           #(#DividerSpec
+              #name: 'Separator4'
+              #layout: #(#LayoutFrame 0 0.0 365 0 0 1.0 368 0)
+            )
+           #(#CheckBoxSpec
+              #label: 'Warnings'
+              #name: 'Warnings'
+              #layout: #(#LayoutFrame 5 0 375 0 249 0 397 0)
+              #model: #warnings
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'ST/X Extensions'
+              #name: 'STXExtensions'
+              #layout: #(#LayoutFrame 25 0 400 0 245 0 422 0)
+              #enableChannel: #warnings
+              #model: #warnSTX
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Underscores in Identifiers'
+              #name: 'UnderscoresInIdentifiers'
+              #layout: #(#LayoutFrame 25 0 425 0 245 0 447 0)
+              #enableChannel: #enableUnderscore
+              #model: #warnUnderscore
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Dollars in Identifiers'
+              #name: 'DollarsInIdentifiers'
+              #layout: #(#LayoutFrame 25 0 450 0 245 0 472 0)
+              #enableChannel: #enableDollar
+              #model: #warnDollar
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Unused Method Variables'
+              #name: 'UnusedMethodVariables'
+              #layout: #(#LayoutFrame 25 0 475 0 245 0 497 0)
+              #enableChannel: #warnings
+              #model: #warnUnusedVars
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'OldStyle Assignment'
+              #name: 'OldStyleAssignment'
+              #layout: #(#LayoutFrame 257 0 400 0 475 0 422 0)
+              #enableChannel: #warnings
+              #model: #warnOldStyle
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Common Mistakes'
+              #name: 'CommonMistakes'
+              #layout: #(#LayoutFrame 257 0 425 0 475 0 447 0)
+              #enableChannel: #warnings
+              #model: #warnCommonMistakes
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Possible Incompatibilities'
+              #name: 'PossibleIncompatibilities'
+              #layout: #(#LayoutFrame 257 0 450 0 474 0 472 0)
+              #enableChannel: #warnings
+              #model: #warnCompatibility
+              #translateLabel: true
+            )
+           #(#DividerSpec
+              #name: 'Separator5'
+              #layout: #(#LayoutFrame 0 0.0 500 0 0 1.0 503 0)
+            )
+           #(#HorizontalPanelViewSpec
+              #name: 'HorizontalPanel1'
+              #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1)
+              #horizontalLayout: #center
+              #verticalLayout: #center
+              #horizontalSpace: 3
+              #verticalSpace: 3
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#ActionButtonSpec
+                    #label: 'OK'
+                    #name: 'OK'
+                    #translateLabel: true
+                    #model: #saveSettings
+                    #enableChannel: #modifiedChannel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Cancel'
+                    #name: 'Cancel'
+                    #translateLabel: true
+                    #model: #doCancel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Help'
+                    #name: 'Help'
+                    #translateLabel: true
+                    #model: #help
+                    #extent: #(#Point 125 22)
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+! !
+
+!AbstractLauncherApplication::CompilerSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+    self isPartOfSettinsDialog ifTrue:[
+        self loadRequest.
+    ].
+    self closeRequest.
+!
+
+evaluateModified
+
+    self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+    self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/compilerSettings.html'].
+!
+
+loadRequest
+
+    self allowDollar value:(Compiler allowDollarInIdentifier ? false).
+    self allowDolphinExtensions value:(Compiler allowDolphinExtensions ? false).
+    self allowOldStyleAssignment value:(Compiler allowOldStyleAssignment ? false).
+    self allowQualifiedNames value:(Compiler allowQualifiedNames ? false).
+    self allowReservedWordsAsSelectors value:(Compiler allowReservedWordsAsSelectors ? false).
+    self allowSqueakExtensions value:(Compiler allowSqueakExtensions ? false).
+    self allowUnderscore value:(Compiler allowUnderscoreInIdentifier ? false).
+    self catchClassRedefs value:(Class catchClassRedefinitions ? false).
+    self catchMethodRedefs value:(Class catchMethodRedefinitions ? false).
+    self compileLazy value:(Autoload compileLazy ? false).
+    self constantFoldingSelection value:(self class constantFoldingOptions indexOf:Compiler foldConstants ifAbsent:3).
+    self supportsJustInTimeCompilation ifTrue:[
+        self fullDebugSupport value:(ObjectMemory fullSingleStepSupport ? false).
+    ] ifFalse:[ 
+        self fullDebugSupport value:(Compiler lineNumberInfo == #full).
+    ].
+    self hasHistoryManager ifTrue:[
+        self fullHistoryUpdate value:(HistoryManager fullHistoryUpdate ? false).
+    ] ifFalse:[
+        self fullHistoryUpdate value:false.
+    ].
+    self historyLines value:self hasHistoryManager.
+    self immutableArrays value:(Compiler arraysAreImmutable ? false).
+    self supportsJustInTimeCompilation ifTrue:[
+        self justInTimeCompilation value:(ObjectMemory justInTimeCompilation ? false).
+    ] ifFalse:[ 
+        self justInTimeCompilation value:false.
+    ].
+    self keepSourceSelection value:(self class keepSourceOptions indexOf:ClassCategoryReader sourceMode ifAbsent:1).
+    self canLoadBinaries ifTrue:[ 
+        self loadBinaries value:Smalltalk loadBinaries.
+    ] ifFalse:[
+        self loadBinaries value:false
+    ].
+    self thisIsADemoVersion ifTrue:[
+        self stcCompilationSelection value:(self class stcCompilationOptions indexOf:(Compiler stcCompilation) ifAbsent:2).
+    ] ifFalse:[
+        self stcCompilationSelection value:2.
+    ].
+    self warnCommonMistakes value:(Compiler warnCommonMistakes ? false).
+    self warnCompatibility value:(Compiler warnPossibleIncompatibilities ? false).
+    self warnDollar value:(Compiler warnDollarInIdentifier ? false).
+    self warnOldStyle value:(Compiler warnOldStyleAssignment ? false).
+    self warnSTX value:(Compiler warnSTXSpecials ? false).
+    self warnUnderscore value:(Compiler warnUnderscoreInIdentifier ? false).
+    self warnUnusedVars value:(Compiler warnUnusedVars ? false).
+    self warnings value:(Compiler warnings ? false).
+    self modifiedChannel value:false.
+!
+
+saveRequest
+    | result |
+
+    (self hasUnsavedChanges) ifTrue:[
+        result := self confirmWithCancel:(resources string:'Save changed Compiler Settings ?'). 
+        result isNil ifTrue:[ ^ false].
+        result ifTrue:[
+            self saveSettings.
+        ] ifFalse:[
+            self loadRequest.
+        ]
+    ].
+    ^ true
+!
+
+saveSettings
+
+    HistoryManager notNil ifTrue:[
+        HistoryManager fullHistoryUpdate:self fullHistoryUpdate value.
+        self historyLines value ifTrue:[
+            HistoryManager activate
+        ] ifFalse:[
+            HistoryManager deactivate
+        ].
+    ].
+    Class catchMethodRedefinitions:self catchMethodRedefs value.
+    Class catchClassRedefinitions:self catchClassRedefs value.
+    ClassCategoryReader sourceMode:(self class keepSourceOptions at:self keepSourceSelection value).
+    Compiler warnings:self warnings value.
+    Compiler warnSTXSpecials:self warnSTX value.
+    Compiler warnOldStyleAssignment:self warnOldStyle value.
+    Compiler warnUnderscoreInIdentifier:self warnUnderscore value.
+    Compiler warnDollarInIdentifier:self warnDollar value.
+    Compiler warnCommonMistakes:self warnCommonMistakes value.
+    Compiler warnPossibleIncompatibilities:self warnCompatibility value.
+    Compiler warnUnusedVars:self warnUnusedVars value.
+    Compiler allowUnderscoreInIdentifier:self allowUnderscore value.
+    Compiler allowDollarInIdentifier:self allowDollar value.
+    Compiler allowSqueakExtensions:self allowSqueakExtensions value.
+    Compiler allowDolphinExtensions:self allowDolphinExtensions value.
+    Compiler allowQualifiedNames:self allowQualifiedNames value.
+    Compiler allowOldStyleAssignment:self allowOldStyleAssignment value.
+    Compiler allowReservedWordsAsSelectors:self allowReservedWordsAsSelectors value.
+
+    Compiler arraysAreImmutable:self immutableArrays value.
+    self fullDebugSupport value ifTrue:[
+        Compiler lineNumberInfo:#full.
+    ] ifFalse:[
+        Compiler lineNumberInfo:true
+    ].
+
+    Compiler stcCompilation:(self class stcCompilationOptions at:self stcCompilationSelection value).
+    Compiler foldConstants:(self class constantFoldingOptions at:self constantFoldingSelection value).
+
+    self supportsJustInTimeCompilation ifTrue:[
+        | justInTime |
+        justInTime := self justInTimeCompilation value.
+        justInTime ifTrue:[
+            Method allInstancesDo:[:m | m checked:false].
+        ].
+        ObjectMemory justInTimeCompilation:justInTime.
+        ObjectMemory fullSingleStepSupport:self fullDebugSupport value.
+    ].
+    Autoload compileLazy:self compileLazy value.
+    Smalltalk loadBinaries:self loadBinaries value.
+    self modifiedChannel value:false.
+!
+
+stcCompilerSettings
+
+    AbstractLauncherApplication::LauncherDialogs stcCompilerSettings
+! !
+
+!AbstractLauncherApplication::CompilerSettingsAppl methodsFor:'aspects'!
+
+allowDollar
+
+    allowDollar isNil ifTrue:[
+        allowDollar := (Compiler allowDollarInIdentifier ? false) asValue.
+        allowDollar onChangeSend:#evaluateModified to:self.
+        allowDollar addDependent:self.
+    ].
+    ^ allowDollar.
+!
+
+allowDolphinExtensions
+
+    allowDolphinExtensions isNil ifTrue:[
+        allowDolphinExtensions := (Compiler allowDolphinExtensions ? false) asValue.
+        allowDolphinExtensions onChangeSend:#evaluateModified to:self.
+    ].
+    ^ allowDolphinExtensions.
+!
+
+allowOldStyleAssignment
+
+    allowOldStyleAssignment isNil ifTrue:[
+        allowOldStyleAssignment := (Compiler allowOldStyleAssignment ? false) asValue.
+        allowOldStyleAssignment onChangeSend:#evaluateModified to:self.
+    ].
+    ^ allowOldStyleAssignment.
+!
+
+allowQualifiedNames
+
+    allowQualifiedNames isNil ifTrue:[
+        allowQualifiedNames := (Compiler allowQualifiedNames ? false) asValue.
+        allowQualifiedNames onChangeSend:#evaluateModified to:self.
+    ].
+    ^ allowQualifiedNames.
+!
+
+allowReservedWordsAsSelectors
+
+    allowReservedWordsAsSelectors isNil ifTrue:[
+        allowReservedWordsAsSelectors := (Compiler allowReservedWordsAsSelectors ? false) asValue.
+        allowReservedWordsAsSelectors onChangeSend:#evaluateModified to:self.
+    ].
+    ^ allowReservedWordsAsSelectors.
+!
+
+allowSqueakExtensions
+
+    allowSqueakExtensions isNil ifTrue:[
+        allowSqueakExtensions := (Compiler allowSqueakExtensions ? false) asValue.
+        allowSqueakExtensions onChangeSend:#evaluateModified to:self.
+    ].
+    ^ allowSqueakExtensions.
+!
+
+allowUnderscore
+
+    allowUnderscore isNil ifTrue:[
+        allowUnderscore := (Compiler allowUnderscoreInIdentifier ? false) asValue.
+        allowUnderscore onChangeSend:#evaluateModified to:self.
+        allowUnderscore addDependent:self.
+    ].
+    ^ allowUnderscore.
+!
+
+canLoadBinaries
+
+    canLoadBinaries isNil ifTrue:[
+        canLoadBinaries := ObjectFileLoader notNil and:[ObjectFileLoader canLoadObjectFiles].
+    ].
+    ^ canLoadBinaries.
+!
+
+catchClassRedefs
+
+    catchClassRedefs isNil ifTrue:[
+        catchClassRedefs := (Class catchClassRedefinitions ? false) asValue.
+        catchClassRedefs onChangeSend:#evaluateModified to:self.
+    ].
+    ^ catchClassRedefs.
+!
+
+catchMethodRedefs
+
+    catchMethodRedefs isNil ifTrue:[
+        catchMethodRedefs := (Class catchMethodRedefinitions ? false) asValue.
+        catchMethodRedefs onChangeSend:#evaluateModified to:self.
+    ].
+    ^ catchMethodRedefs.
+!
+
+compileLazy
+
+    compileLazy isNil ifTrue:[
+        compileLazy := (Autoload compileLazy ? false) asValue.
+        compileLazy onChangeSend:#evaluateModified to:self.
+    ].
+    ^ compileLazy.
+!
+
+constantFolding
+
+    constantFolding isNil ifTrue:[
+        constantFolding := (resources array:(self class constantFoldingStrings)) asList.
+    ].
+    ^ constantFolding.
+!
+
+constantFoldingOptions
+
+    constantFoldingOptions isNil ifTrue:[
+        constantFoldingOptions := self class constantFoldingOptions.
+    ].
+    ^ constantFoldingOptions.
+!
+
+constantFoldingSelection
+
+    constantFoldingSelection isNil ifTrue:[
+        | index |
+        index := self class constantFoldingOptions indexOf:Compiler foldConstants ifAbsent:3.
+        constantFoldingSelection := index asValue.
+        constantFoldingSelection onChangeSend:#evaluateModified to:self.
+    ].
+    ^ constantFoldingSelection.
+!
+
+enableDollar
+
+    enableDollar isNil ifTrue:[
+        enableDollar := true asValue.
+        enableDollar addDependent:self.
+    ].
+    ^ enableDollar.
+!
+
+enableUnderscore
+    "automatically generated by UIPainter ..."
+
+    "*** the code below creates a default model when invoked."
+    "*** (which may not be the one you wanted)"
+    "*** Please change as required and accept it in the browser."
+    "*** (and replace this comment by something more useful ;-)"
+
+    enableUnderscore isNil ifTrue:[
+        enableUnderscore := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/       enableUnderscore addDependent:self.
+"/       enableUnderscore onChangeSend:#enableUnderscoreChanged to:self.
+    ].
+    ^ enableUnderscore.
+!
+
+fullDebugSupport
+
+    fullDebugSupport isNil ifTrue:[
+        self supportsJustInTimeCompilation ifTrue:[
+            fullDebugSupport := (ObjectMemory fullSingleStepSupport ? false) asValue.
+        ] ifFalse:[ 
+            fullDebugSupport := (Compiler lineNumberInfo == #full) asValue.
+        ].
+        fullDebugSupport onChangeSend:#evaluateModified to:self.
+    ].
+    ^ fullDebugSupport.
+!
+
+fullHistoryUpdate
+
+    fullHistoryUpdate isNil ifTrue:[
+        self hasHistoryManager ifTrue:[
+            fullHistoryUpdate := (HistoryManager fullHistoryUpdate ? false) asValue.
+        ] ifFalse:[
+            fullHistoryUpdate := false asValue.
+        ].
+        fullHistoryUpdate onChangeSend:#evaluateModified to:self.
+    ].
+    ^ fullHistoryUpdate.
+!
+
+historyLines
+
+    historyLines isNil ifTrue:[
+        historyLines := self hasHistoryManager asValue.
+        historyLines onChangeSend:#evaluateModified to:self.
+    ].
+    ^ historyLines.
+!
+
+immutableArrays
+
+    immutableArrays isNil ifTrue:[
+        immutableArrays := (Compiler arraysAreImmutable ? false) asValue.
+        immutableArrays onChangeSend:#evaluateModified to:self.
+    ].
+    ^ immutableArrays.
+!
+
+justInTimeCompilation
+
+    justInTimeCompilation isNil ifTrue:[
+        self supportsJustInTimeCompilation ifTrue:[
+            justInTimeCompilation := (ObjectMemory justInTimeCompilation ? false) asValue.
+        ] ifFalse:[ 
+            justInTimeCompilation := false asValue.
+        ].
+        justInTimeCompilation onChangeSend:#evaluateModified to:self.
+    ].
+    ^ justInTimeCompilation.
+!
+
+keepSource
+
+    keepSource isNil ifTrue:[
+        keepSource := (resources array:(self class keepSourceStrings)) asList.
+    ].
+    ^ keepSource.
+!
+
+keepSourceSelection
+
+    keepSourceSelection isNil ifTrue:[
+        keepSourceSelection := (self class keepSourceOptions indexOf:ClassCategoryReader sourceMode ifAbsent:1) asValue.
+        keepSourceSelection onChangeSend:#evaluateModified to:self.
+    ].
+    ^ keepSourceSelection.
+!
+
+loadBinaries
+
+    loadBinaries isNil ifTrue:[
+        self canLoadBinaries ifTrue:[ 
+            loadBinaries:=  Smalltalk loadBinaries asValue
+        ] ifFalse:[
+            loadBinaries:=  false asValue
+        ].
+        loadBinaries onChangeSend:#evaluateModified to:self.
+    ].
+    ^ loadBinaries.
+!
+
+modifiedChannel
+
+    modifiedChannel isNil ifTrue:[
+        modifiedChannel := false asValue.
+    ].
+    ^ modifiedChannel
+!
+
+stcCompilationList
+
+    stcCompilationList isNil ifTrue:[
+        self thisIsADemoVersion ifTrue:[
+            stcCompilationList := (resources array:(self class stcCompilationDemoStrings)) asList.
+        ] ifFalse:[
+            stcCompilationList := (resources array:(self class stcCompilationFullVersionStrings)) asList.
+        ]
+    ].
+    ^ stcCompilationList.
+!
+
+stcCompilationSelection
+
+    stcCompilationSelection isNil ifTrue:[
+        self thisIsADemoVersion ifTrue:[
+            stcCompilationSelection := (self class stcCompilationOptions indexOf:(Compiler stcCompilation) ifAbsent:2) asValue.
+        ] ifFalse:[
+            stcCompilationSelection := 2 asValue.
+        ].
+        stcCompilationSelection onChangeSend:#evaluateModified to:self.
+    ].
+    ^ stcCompilationSelection.
+!
+
+warnCommonMistakes
+
+    warnCommonMistakes isNil ifTrue:[
+        warnCommonMistakes := (Compiler warnCommonMistakes ? false) asValue.
+        warnCommonMistakes onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnCommonMistakes.
+!
+
+warnCompatibility
+
+    warnCompatibility isNil ifTrue:[
+        warnCompatibility := (Compiler warnPossibleIncompatibilities ? false) asValue.
+        warnCompatibility onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnCompatibility.
+!
+
+warnDollar
+
+    warnDollar isNil ifTrue:[
+        warnDollar := (Compiler warnDollarInIdentifier ? false) asValue.
+        warnDollar onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnDollar.
+!
+
+warnOldStyle
+
+    warnOldStyle isNil ifTrue:[
+        warnOldStyle := (Compiler warnOldStyleAssignment ? false) asValue.
+        warnOldStyle onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnOldStyle.
+!
+
+warnSTX
+
+    warnSTX isNil ifTrue:[
+        warnSTX := (Compiler warnSTXSpecials ? false) asValue.
+        warnSTX onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnSTX.
+!
+
+warnUnderscore
+
+    warnUnderscore isNil ifTrue:[
+        warnUnderscore := (Compiler warnUnderscoreInIdentifier ? false) asValue.
+        warnUnderscore onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnUnderscore.
+!
+
+warnUnusedVars
+
+    warnUnusedVars isNil ifTrue:[
+        warnUnusedVars := (Compiler warnUnusedVars ? false) asValue.
+        warnUnusedVars onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnUnusedVars.
+!
+
+warnings
+
+    warnings isNil ifTrue:[
+        warnings := (Compiler warnings ? false) asValue.
+        warnings addDependent:self.
+        warnings changed.
+        warnings onChangeSend:#evaluateModified to:self.
+    ].
+    ^ warnings.
+! !
+
+!AbstractLauncherApplication::CompilerSettingsAppl methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    "stub code automatically generated - please change as required"
+
+    changedObject == self warnings ifTrue:[
+        self warnings value ifTrue:[
+            self enableUnderscore value:self allowUnderscore value.
+            self enableDollar value:self allowDollar value.
+        ] ifFalse:[
+            self enableUnderscore value:false.
+            self enableDollar value:false.
+        ].
+        ^ self
+    ].
+    (changedObject == self allowDollar or:[changedObject == self allowUnderscore]) ifTrue:[
+        self warnings changed.
+        ^ self
+    ].
+
+    super update:something with:aParameter from:changedObject
+! !
+
+!AbstractLauncherApplication::CompilerSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+    self saveRequest ifFalse:[
+        ^ self
+    ].
+
+    ^ super closeRequest.
+!
+
+initialize
+
+    resources := self class owningClass classResources.
+    super initialize
+! !
+
+!AbstractLauncherApplication::CompilerSettingsAppl methodsFor:'queries'!
+
+hasHistoryManager
+
+    ^ HistoryManager notNil and:[HistoryManager isLoaded and:[HistoryManager isActive]]
+!
+
+hasUnsavedChanges
+
+    ^ 
+        (
+        ((HistoryManager fullHistoryUpdate ? false) ~= self fullHistoryUpdate value) or:[
+        ((Class catchMethodRedefinitions ? false) ~= self catchMethodRedefs value) or:[
+        ((Class catchClassRedefinitions ? false) ~= self catchClassRedefs value) or:[
+        ((ClassCategoryReader sourceMode) ~= (self class keepSourceOptions at:self keepSourceSelection value)) or:[
+        ((Compiler warnings ? false) ~= self warnings value) or:[
+        ((Compiler warnSTXSpecials ? false) ~= self warnSTX value) or:[
+        ((Compiler warnOldStyleAssignment ? false) ~= self warnOldStyle value) or:[
+        ((Compiler warnUnderscoreInIdentifier ? false) ~= self warnUnderscore value) or:[
+        ((Compiler warnDollarInIdentifier ? false) ~= self warnDollar value) or:[
+        ((Compiler warnCommonMistakes ? false) ~= self warnCommonMistakes value) or:[
+        ((Compiler warnPossibleIncompatibilities ? false) ~= self warnCompatibility value) or:[
+        ((Compiler warnUnusedVars ? false) ~= self warnUnusedVars value)  or:[
+        ((Compiler allowUnderscoreInIdentifier ? false) ~= self allowUnderscore value) or:[
+        ((Compiler allowDollarInIdentifier ? false) ~= self allowDollar value) or:[
+        ((Compiler allowSqueakExtensions ? false) ~= self allowSqueakExtensions value) or:[
+        ((Compiler allowDolphinExtensions ? false) ~= self allowDolphinExtensions value) or:[
+        ((Compiler allowQualifiedNames ? false) ~= self allowQualifiedNames value) or:[
+        ((Compiler allowOldStyleAssignment ? false) ~= self allowOldStyleAssignment value) or:[
+        ((Compiler allowReservedWordsAsSelectors ? false) ~= self allowReservedWordsAsSelectors value) or:[
+        ((Compiler arraysAreImmutable ? false) ~= self immutableArrays value) or:[
+        ((self supportsJustInTimeCompilation value ifTrue:[ObjectMemory fullSingleStepSupport ? false] ifFalse:[Compiler lineNumberInfo == #full]) ~= self fullDebugSupport value) or:[
+        ((Compiler stcCompilation) ~= (self class stcCompilationOptions at:self stcCompilationSelection value)) or:[
+        ((Compiler foldConstants) ~= (self class constantFoldingOptions at:self constantFoldingSelection value)) or:[
+        ((ObjectMemory justInTimeCompilation ? false) ~= self justInTimeCompilation value) or:[
+        ((Autoload compileLazy ? false) ~= self compileLazy value) or:[
+        ((Smalltalk loadBinaries ? false) ~= self loadBinaries value) or:[
+        ((self hasHistoryManager) ~= self historyLines value) ]]]]]]]]]]]]]]]]]]]]]]]]]])
+!
+
+supportsJustInTimeCompilation
+
+    ^ ObjectMemory supportsJustInTimeCompilation
+!
+
+thisIsADemoVersion
+
+    ^ Smalltalk releaseIdentification = 'ST/X_free_demo_vsn'
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl class methodsFor:'defaults'!
+
+widgetList
+
+    ^  #(
+        'All' 
+        'Labels' 
+        'Buttons' 
+        'Lists' 
+        'Menus' 
+        'Edited Text'
+       )
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl class methodsFor:'instance creation'!
+
+fontForEncoding:encodingMatch
+
+    | inst |
+
+    inst := self new.
+    inst encodingMatch:encodingMatch.
+    self initialize.
+    self open.
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl class methodsFor:'interface specs'!
+
+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:AbstractLauncherApplication::FontSettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::FontSettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::FontSettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Font Settings'
+          #name: 'Font Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 490 353)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#ViewSpec
+              #name: 'AllBox'
+              #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 50 0)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'All'
+                    #name: 'All'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 100 0 20 0)
+                    #style: #(#FontDescription #helvetica #bold #roman 12)
+                    #translateLabel: true
+                    #adjust: #left
+                  )
+                 #(#LabelSpec
+                    #label: 'Label'
+                    #name: 'AllFont'
+                    #layout: #(#LayoutFrame 105 0 22 0 -5 1 44 0)
+                    #translateLabel: true
+                    #labelChannel: #allFontLabelHolder
+                    #adjust: #left
+                    #postBuildCallback: #postBuildAllFontLabel:
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Change ...'
+                    #name: 'ChangeAll'
+                    #layout: #(#LayoutFrame 0 0.0 22 0 105 0 44 0)
+                    #translateLabel: true
+                    #model: #changeAllFont
+                  )
+                 )
+               
+              )
+            )
+           #(#DividerSpec
+              #name: 'Separator1'
+              #layout: #(#LayoutFrame 0 0.0 50 0 0 1.0 54 0)
+            )
+           #(#ViewSpec
+              #name: 'LabelsBox'
+              #layout: #(#LayoutFrame 0 0.0 55 0 0 1.0 105 0)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Labels'
+                    #name: 'Labels'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 100 0 20 0)
+                    #style: #(#FontDescription #helvetica #bold #roman 12)
+                    #translateLabel: true
+                    #adjust: #left
+                  )
+                 #(#LabelSpec
+                    #label: 'Labels'
+                    #name: 'LabelsFont'
+                    #layout: #(#LayoutFrame 105 0 22 0 -5 1 44 0)
+                    #translateLabel: true
+                    #labelChannel: #labelsFontLabelHolder
+                    #adjust: #left
+                    #postBuildCallback: #postBuildLabelsFontLabel:
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Change ...'
+                    #name: 'ChangeLabels'
+                    #layout: #(#LayoutFrame 0 0.0 22 0 105 0 44 0)
+                    #translateLabel: true
+                    #model: #changeLabelsFont
+                  )
+                 )
+               
+              )
+            )
+           #(#DividerSpec
+              #name: 'Separator2'
+              #layout: #(#LayoutFrame 0 0.0 105 0 0 1.0 109 0)
+            )
+           #(#ViewSpec
+              #name: 'ButtonsBox'
+              #layout: #(#LayoutFrame 0 0.0 110 0 0 1.0 160 0)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Buttons'
+                    #name: 'Buttons'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 100 0 20 0)
+                    #style: #(#FontDescription #helvetica #bold #roman 12)
+                    #translateLabel: true
+                    #adjust: #left
+                  )
+                 #(#LabelSpec
+                    #label: 'Buttons Font'
+                    #name: 'ButtonsFont'
+                    #layout: #(#LayoutFrame 105 0 22 0 -5 1 44 0)
+                    #translateLabel: true
+                    #labelChannel: #buttonsFontLabelHolder
+                    #adjust: #left
+                    #postBuildCallback: #postBuildButtonsFontLabel:
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Change ...'
+                    #name: 'Change Buttons'
+                    #layout: #(#LayoutFrame 0 0.0 22 0 105 0 44 0)
+                    #translateLabel: true
+                    #model: #changeButtonsFont
+                  )
+                 )
+               
+              )
+            )
+           #(#DividerSpec
+              #name: 'Separator3'
+              #layout: #(#LayoutFrame 0 0.0 160 0 0 1.0 164 0)
+            )
+           #(#ViewSpec
+              #name: 'ListsBox'
+              #layout: #(#LayoutFrame 0 0.0 165 0 0 1.0 215 0)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Lists'
+                    #name: 'Lists'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 100 0 20 0)
+                    #style: #(#FontDescription #helvetica #bold #roman 12)
+                    #translateLabel: true
+                    #adjust: #left
+                  )
+                 #(#LabelSpec
+                    #label: 'Lists Font'
+                    #name: 'ListsFont'
+                    #layout: #(#LayoutFrame 105 0 22 0 -5 1 44 0)
+                    #translateLabel: true
+                    #labelChannel: #listsFontLabelHolder
+                    #adjust: #left
+                    #postBuildCallback: #postBuildListsFontLabel:
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Change ...'
+                    #name: 'ChangeLists'
+                    #layout: #(#LayoutFrame 0 0.0 22 0 105 0 44 0)
+                    #translateLabel: true
+                    #model: #changeListsFont
+                  )
+                 )
+               
+              )
+            )
+           #(#DividerSpec
+              #name: 'Separator4'
+              #layout: #(#LayoutFrame 0 0.0 215 0 0 1.0 219 0)
+            )
+           #(#ViewSpec
+              #name: 'MenusBox'
+              #layout: #(#LayoutFrame 0 0.0 220 0 0 1.0 270 0)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Menus'
+                    #name: 'Menus'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 100 0 20 0)
+                    #style: #(#FontDescription #helvetica #bold #roman 12)
+                    #translateLabel: true
+                    #adjust: #left
+                  )
+                 #(#LabelSpec
+                    #label: 'Menus Font'
+                    #name: 'MenusFont'
+                    #layout: #(#LayoutFrame 105 0 22 0 -5 1 44 0)
+                    #translateLabel: true
+                    #labelChannel: #menusFontLabelHolder
+                    #adjust: #left
+                    #postBuildCallback: #postBuildMenuesFontLabel:
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Change ...'
+                    #name: 'ChangeMenus'
+                    #layout: #(#LayoutFrame 0 0.0 22 0 105 0 44 0)
+                    #translateLabel: true
+                    #model: #changeMenusFont
+                  )
+                 )
+               
+              )
+            )
+           #(#DividerSpec
+              #name: 'Separator5'
+              #layout: #(#LayoutFrame 0 0.0 270 0 0 1.0 274 0)
+            )
+           #(#ViewSpec
+              #name: 'TextBox'
+              #layout: #(#LayoutFrame 0 0.0 280 0 0 1.0 340 0)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#LabelSpec
+                    #label: 'Text'
+                    #name: 'Text'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 100 0 20 0)
+                    #style: #(#FontDescription #helvetica #bold #roman 12)
+                    #translateLabel: true
+                    #adjust: #left
+                  )
+                 #(#LabelSpec
+                    #label: 'Text Font'
+                    #name: 'TextFont'
+                    #layout: #(#LayoutFrame 105 0 22 0 -5 1 44 0)
+                    #translateLabel: true
+                    #labelChannel: #textFontLabelHolder
+                    #adjust: #left
+                    #postBuildCallback: #postBuildTextFontLabel:
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Change ...'
+                    #name: 'ChangeText'
+                    #layout: #(#LayoutFrame 0 0.0 22 0 105 0 44 0)
+                    #translateLabel: true
+                    #model: #changeTextFont
+                  )
+                 )
+               
+              )
+            )
+           #(#DividerSpec
+              #name: 'Separator6'
+              #layout: #(#LayoutFrame 0 0.0 340 0 0 1.0 344 0)
+            )
+           #(#HorizontalPanelViewSpec
+              #name: 'HorizontalPanel1'
+              #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1)
+              #horizontalLayout: #center
+              #verticalLayout: #center
+              #horizontalSpace: 0
+              #verticalSpace: 3
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#ActionButtonSpec
+                    #label: 'OK'
+                    #name: 'OK'
+                    #translateLabel: true
+                    #model: #saveSettings
+                    #enableChannel: #modifiedChannel
+                    #extent: #(#Point 100 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Cancel'
+                    #name: 'Cancel'
+                    #translateLabel: true
+                    #model: #doCancel
+                    #extent: #(#Point 100 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Defaults'
+                    #name: 'Button1'
+                    #translateLabel: true
+                    #model: #loadRequest
+                    #extent: #(#Point 100 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Help'
+                    #name: 'Help'
+                    #translateLabel: true
+                    #model: #help
+                    #extent: #(#Point 100 22)
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+!
+
+windowSpec2
+    "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:AbstractLauncherApplication::FontSettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::FontSettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::FontSettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Font Settings'
+          #name: 'Font Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 491 533)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#HorizontalPanelViewSpec
+              #name: 'HorizontalPanel1'
+              #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1)
+              #horizontalLayout: #center
+              #verticalLayout: #center
+              #horizontalSpace: 3
+              #verticalSpace: 3
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#ActionButtonSpec
+                    #label: 'OK'
+                    #name: 'OK'
+                    #translateLabel: true
+                    #model: #saveSettings
+                    #enableChannel: #modifiedChannel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Cancel'
+                    #name: 'Cancel'
+                    #translateLabel: true
+                    #model: #doCancel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Help'
+                    #name: 'Help'
+                    #translateLabel: true
+                    #model: #help
+                    #extent: #(#Point 125 22)
+                  )
+                 )
+               
+              )
+            )
+           #(#SequenceViewSpec
+              #name: 'WidgetList'
+              #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 105 0)
+              #model: #selectedWidget
+              #style: #(#FontDescription #helvetica #bold #roman 12)
+              #hasHorizontalScrollBar: true
+              #hasVerticalScrollBar: true
+              #useIndex: false
+              #sequenceList: #widgetList
+            )
+           #(#ViewSpec
+              #name: 'Box1'
+              #layout: #(#LayoutFrame 0 0.0 105 0 0 1.0 -34 1)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#NonScrollableArbitraryComponentSpec
+                    #name: 'FontPanel'
+                    #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 0 1.0)
+                    #component: #FontPanel
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+!
+
+windowSpecFirst
+    "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:AbstractLauncherApplication::FontSettingsAppl andSelector:#windowSpecFirst
+     AbstractLauncherApplication::FontSettingsAppl new openInterface:#windowSpecFirst
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpecFirst
+        #window: 
+       #(#WindowSpec
+          #label: 'Font Settings'
+          #name: 'Font Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 491 456)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#HorizontalPanelViewSpec
+              #name: 'HorizontalPanel1'
+              #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1)
+              #horizontalLayout: #center
+              #verticalLayout: #center
+              #horizontalSpace: 3
+              #verticalSpace: 3
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#ActionButtonSpec
+                    #label: 'OK'
+                    #name: 'OK'
+                    #translateLabel: true
+                    #model: #saveSettings
+                    #enableChannel: #modifiedChannel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Cancel'
+                    #name: 'Cancel'
+                    #translateLabel: true
+                    #model: #doCancel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Help'
+                    #name: 'Help'
+                    #translateLabel: true
+                    #model: #help
+                    #extent: #(#Point 125 22)
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+!
+
+windowSpecx
+    "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:AbstractLauncherApplication::FontSettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::FontSettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::FontSettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Font Settings'
+          #name: 'Font Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 491 533)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#HorizontalPanelViewSpec
+              #name: 'HorizontalPanel1'
+              #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1)
+              #horizontalLayout: #center
+              #verticalLayout: #center
+              #horizontalSpace: 3
+              #verticalSpace: 3
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#ActionButtonSpec
+                    #label: 'OK'
+                    #name: 'OK'
+                    #translateLabel: true
+                    #model: #saveSettings
+                    #enableChannel: #modifiedChannel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Cancel'
+                    #name: 'Cancel'
+                    #translateLabel: true
+                    #model: #doCancel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Help'
+                    #name: 'Help'
+                    #translateLabel: true
+                    #model: #help
+                    #extent: #(#Point 125 22)
+                  )
+                 )
+               
+              )
+            )
+           #(#SequenceViewSpec
+              #name: 'WidgetList'
+              #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 105 0)
+              #model: #selectedWidget
+              #style: #(#FontDescription #helvetica #bold #roman 12)
+              #hasHorizontalScrollBar: true
+              #hasVerticalScrollBar: true
+              #useIndex: false
+              #sequenceList: #widgetList
+            )
+           #(#ViewSpec
+              #name: 'Box1'
+              #layout: #(#LayoutFrame 0 0.0 105 0 0 1.0 -34 1)
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#TextEditorSpec
+                    #name: 'ExampleText'
+                    #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 145 0)
+                    #model: #exampleText
+                    #hasHorizontalScrollBar: true
+                    #hasVerticalScrollBar: true
+                  )
+                 #(#VariableHorizontalPanelSpec
+                    #name: 'VariableHorizontalPanel1'
+                    #layout: #(#LayoutFrame 0 0.0 145 0 0 1.0 -20 1)
+                    #component: 
+                   #(#SpecCollection
+                      #collection: #(
+                       #(#ViewSpec
+                          #name: 'FamilyBox'
+                          #component: 
+                         #(#SpecCollection
+                            #collection: #(
+                             #(#SequenceViewSpec
+                                #name: 'FamilyList'
+                                #layout: #(#LayoutFrame 0 0.0 20 0.0 0 1.0 0 1.0)
+                                #model: #selectedFamily
+                                #hasHorizontalScrollBar: true
+                                #hasVerticalScrollBar: true
+                                #useIndex: false
+                                #sequenceList: #familyList
+                              )
+                             #(#LabelSpec
+                                #label: 'Family'
+                                #name: 'FamilyLabel'
+                                #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 20 0)
+                                #translateLabel: true
+                              )
+                             )
+                           
+                          )
+                        )
+                       #(#ViewSpec
+                          #name: 'TypeFaceBox'
+                          #component: 
+                         #(#SpecCollection
+                            #collection: #(
+                             #(#SequenceViewSpec
+                                #name: 'TypeFaceList'
+                                #layout: #(#LayoutFrame 0 0.0 20 0.0 0 1.0 0 1.0)
+                                #model: #selectedTypeFace
+                                #hasHorizontalScrollBar: true
+                                #hasVerticalScrollBar: true
+                                #useIndex: false
+                                #sequenceList: #typeFaceList
+                              )
+                             #(#LabelSpec
+                                #label: 'TypeFace'
+                                #name: 'TypeFaceLabel'
+                                #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 20 0)
+                                #translateLabel: true
+                              )
+                             )
+                           
+                          )
+                        )
+                       #(#ViewSpec
+                          #name: 'SizeListBox'
+                          #component: 
+                         #(#SpecCollection
+                            #collection: #(
+                             #(#LabelSpec
+                                #label: 'Size'
+                                #name: 'SizeLabel'
+                                #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 20 0)
+                                #translateLabel: true
+                              )
+                             #(#SequenceViewSpec
+                                #name: 'SizeList'
+                                #layout: #(#LayoutFrame 0 0.0 20 0.0 0 1.0 0 1.0)
+                                #model: #selectedSize
+                                #hasHorizontalScrollBar: true
+                                #hasVerticalScrollBar: true
+                                #useIndex: false
+                                #sequenceList: #sizeList
+                              )
+                             )
+                           
+                          )
+                        )
+                       )
+                     
+                    )
+                    #handles: #(#Any 0.333333 0.666667 1.0)
+                  )
+                 #(#LabelSpec
+                    #label: 'CurrentFontLabel'
+                    #name: 'CurrentFontLabel'
+                    #layout: #(#LayoutFrame 0 0.0 -20 1 0 1.0 0 1)
+                    #level: -1
+                    #translateLabel: true
+                    #labelChannel: #currentFontLabelHolder
+                    #adjust: #left
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl methodsFor:'accessing'!
+
+encodingMatch:aEncodingMatch
+
+    aEncodingMatch notNil ifTrue:[
+        filter := [:f | f encoding notNil 
+                        and:[aEncodingMatch match:f encoding]].
+    ].
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl methodsFor:'actions'!
+
+changeAllFont
+    |f|
+
+    f := FontPanel 
+        fontFromUserInitial:(self allOfThem value) 
+                      title:(resources string:'Font for %1' with:'All')
+                     filter:filter.
+    f notNil ifTrue:[
+        self allOfThem value:f.
+        self labelDef value:f.
+        self buttonDef value:f.
+        self listDef value:f.
+        self menuDef value:f.
+        self textDef value:f.
+    ]
+!
+
+changeButtonsFont
+
+    |f|
+
+    f := FontPanel 
+        fontFromUserInitial:(self allOfThem value) 
+                      title:(resources string:'Font for %1' with:'All')
+                     filter:filter.
+    f notNil ifTrue:[
+        self allOfThem value:f.
+    ]
+!
+
+changeLabelsFont
+    |f|
+
+    f := FontPanel 
+        fontFromUserInitial:(self labelDef value) 
+                      title:(resources string:'Font for %1' with:'Labels')
+                     filter:filter.
+    f notNil ifTrue:[
+        self labelDef value:f.
+    ]
+!
+
+changeListsFont
+    |f|
+
+    f := FontPanel 
+        fontFromUserInitial:(self listDef value) 
+                      title:(resources string:'Font for %1' with:'Lists')
+                     filter:filter.
+    f notNil ifTrue:[
+        self listDef value:f.
+    ]
+!
+
+changeMenusFont
+    |f|
+
+    f := FontPanel 
+        fontFromUserInitial:(self menuDef value) 
+                      title:(resources string:'Font for %1' with:'Menus')
+                     filter:filter.
+    f notNil ifTrue:[
+        self menuDef value:f.
+    ]
+!
+
+changeTextFont
+    |f|
+
+    f := FontPanel 
+        fontFromUserInitial:(self textDef value) 
+                      title:(resources string:'Font for %1' with:'Edited Text')
+                     filter:filter.
+    f notNil ifTrue:[
+        self textDef value:f.
+    ]
+!
+
+doCancel
+
+    self isPartOfSettinsDialog ifTrue:[
+        self loadRequest.
+    ].
+    self closeRequest.
+!
+
+evaluateModified
+
+    self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+    self warn:'no help available here'.
+"/    self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/keyboardSetting.html'].
+!
+
+loadRequest
+
+    View readStyleSheetAndUpdateAllStyleCaches.
+    self labelDef value:Label defaultFont.
+    self buttonDef value:Button defaultFont.
+    self listDef value:SelectionInListView defaultFont.
+    self menuDef value:MenuView defaultFont.
+    self textDef value:TextView defaultFont.
+    self allOfThem value:nil.
+    self modifiedChannel value:false.
+!
+
+saveRequest
+    | result |
+
+    (self hasUnsavedChanges) ifTrue:[
+        result := self confirmWithCancel:(resources string:'Save changed Font Settings ?'). 
+        result isNil ifTrue:[ ^ false].
+        result ifTrue:[
+            self saveSettings.
+        ] 
+    ].
+    ^ true
+!
+
+saveSettings
+
+    | master requestor|
+
+    master := self masterApplication.
+    master notNil ifTrue:[
+        requestor := master requestor.
+    ].
+    self hasUnsavedChanges ifTrue:[
+        | launcher |
+        Label defaultFont:self labelDef value.
+        Button defaultFont:self buttonDef value.
+        Toggle defaultFont:self buttonDef value.
+        TextView withAllSubclasses do:[:cls | cls defaultFont:self textDef value].
+        SelectionInListView withAllSubclasses do:[:cls | cls defaultFont:self listDef value].
+        MenuView defaultFont:self menuDef value.
+        PullDownMenu defaultFont:self menuDef value.
+        self modifiedChannel value:false.
+    ].
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl methodsFor:'aspects'!
+
+allFontLabelHolder
+
+    allFontLabelHolder isNil ifTrue:[
+        allFontLabelHolder := '' asValue.
+    ].
+    ^ allFontLabelHolder.
+!
+
+allOfThem
+    "return/create the 'allOfThem' value holder (automatically generated)"
+
+    allOfThem isNil ifTrue:[
+        allOfThem := ValueHolder new.
+        allOfThem addDependent:self.
+    ].
+    ^ allOfThem
+!
+
+buttonDef
+    "return/create the 'buttonDef' value holder (automatically generated)"
+
+    buttonDef isNil ifTrue:[
+        buttonDef := ValueHolder new.
+        buttonDef addDependent:self.
+    ].
+    ^ buttonDef
+!
+
+buttonsFontLabelHolder
+
+    buttonsFontLabelHolder isNil ifTrue:[
+        buttonsFontLabelHolder := Button defaultFont asValue.
+    ].
+    ^ buttonsFontLabelHolder.
+!
+
+labelDef
+    "return/create the 'labelDef' value holder (automatically generated)"
+
+    labelDef isNil ifTrue:[
+        labelDef := ValueHolder new.
+        labelDef addDependent:self.
+    ].
+    ^ labelDef
+!
+
+labelsFontLabelHolder
+
+    labelsFontLabelHolder isNil ifTrue:[
+        labelsFontLabelHolder := Label defaultFont asValue.
+    ].
+    ^ labelsFontLabelHolder.
+!
+
+listDef
+    "return/create the 'listDef' value holder (automatically generated)"
+
+    listDef isNil ifTrue:[
+        listDef := ValueHolder new.
+        listDef addDependent:self.
+    ].
+    ^ listDef
+!
+
+listsFontLabelHolder
+
+    listsFontLabelHolder isNil ifTrue:[
+        listsFontLabelHolder := SelectionInListView defaultFont asValue.
+    ].
+    ^ listsFontLabelHolder.
+!
+
+menuDef
+    "return/create the 'menuDef' value holder (automatically generated)"
+
+    menuDef isNil ifTrue:[
+        menuDef := ValueHolder new.
+        menuDef addDependent:self.
+    ].
+    ^ menuDef
+!
+
+menusFontLabelHolder
+
+    menusFontLabelHolder isNil ifTrue:[
+        menusFontLabelHolder := MenuView defaultFont asValue.
+    ].
+    ^ menusFontLabelHolder.
+!
+
+modifiedChannel
+
+    modifiedChannel isNil ifTrue:[
+        modifiedChannel := false asValue.
+    ].
+    ^ modifiedChannel
+!
+
+textDef
+    "return/create the 'textDef' value holder (automatically generated)"
+
+    textDef isNil ifTrue:[
+        textDef := ValueHolder new.
+        textDef addDependent:self.
+    ].
+    ^ textDef
+!
+
+textFontLabelHolder
+
+    textFontLabelHolder isNil ifTrue:[
+        textFontLabelHolder := TextView defaultFont asValue.
+    ].
+    ^ textFontLabelHolder.
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    "stub code automatically generated - please change as required"
+
+    changedObject == self allOfThem ifTrue:[
+        | f label|
+        f := self allOfThem value.
+        allLabel font:f.
+        label := f isNil ifTrue:[
+            ''
+        ] ifFalse:[
+            f userFriendlyName
+        ].
+        self allFontLabelHolder value:f.
+        self evaluateModified.
+        ^ self.
+    ].
+    changedObject == self labelDef ifTrue:[
+        | f label|
+        f := self labelDef value.
+        labelLabel font:f.
+        label := f isNil ifTrue:[
+            ''
+        ] ifFalse:[
+            f userFriendlyName
+        ].
+        self labelsFontLabelHolder value:f.
+        self evaluateModified.
+        ^ self.
+    ].
+    changedObject == self buttonDef ifTrue:[
+        | f label|
+        f := self buttonDef value.
+        buttonsLabel font:f.
+        label := f isNil ifTrue:[
+            ''
+        ] ifFalse:[
+            f userFriendlyName
+        ].
+        self buttonsFontLabelHolder value:f.
+        self evaluateModified.
+        ^ self.
+    ].
+    changedObject == self listDef ifTrue:[
+        | f label|
+        f := self listDef value.
+        listsLabel font:f.
+        label := f isNil ifTrue:[
+            ''
+        ] ifFalse:[
+            f userFriendlyName
+        ].
+        self listsFontLabelHolder value:f.
+        self evaluateModified.
+        ^ self.
+    ].
+    changedObject == self menuDef ifTrue:[
+        | f label|
+        f := self menuDef value.
+        menuLabel font:f.
+        label := f isNil ifTrue:[
+            ''
+        ] ifFalse:[
+            f userFriendlyName
+        ].
+        self menusFontLabelHolder value:f.
+        self evaluateModified.
+        ^ self.
+    ].
+    changedObject == self textDef ifTrue:[
+        | f label|
+        f := self textDef value.
+        textLabel font:f.
+        label := f isNil ifTrue:[
+            ''
+        ] ifFalse:[
+            f userFriendlyName
+        ].
+        self evaluateModified.
+        self textFontLabelHolder value:f.
+        ^ self.
+    ].
+
+    super update:something with:aParameter from:changedObject
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+    self saveRequest ifFalse:[
+        ^ self
+    ].
+
+    ^ super closeRequest.
+!
+
+initialize
+
+    resources := self class owningClass classResources.
+    super initialize
+!
+
+postBuildAllFontLabel:aWidget
+
+    allLabel := aWidget.
+!
+
+postBuildButtonsFontLabel:aWidget
+
+    buttonsLabel := aWidget.
+!
+
+postBuildLabelsFontLabel:aWidget
+
+    labelLabel := aWidget.
+!
+
+postBuildListsFontLabel:aWidget
+
+    listsLabel := aWidget.
+!
+
+postBuildMenuesFontLabel:aWidget
+
+    menuLabel := aWidget.
+!
+
+postBuildTextFontLabel:aWidget
+
+    textLabel := aWidget.
+!
+
+postOpen
+
+    self allOfThem value:nil.
+    self labelDef value:Label defaultFont.
+    self buttonDef value:Button defaultFont.
+    self listDef value:SelectionInListView defaultFont.
+    self menuDef value:MenuView defaultFont.
+    self textDef value:TextView defaultFont.
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+    self postOpen.
+    ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+    self postOpen.
+    ^ super postOpenWith:aBuilder
+! !
+
+!AbstractLauncherApplication::FontSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+    ^ (self labelDef value ~= Label defaultFont) or:[
+       self buttonDef value ~= Button defaultFont or:[
+       self listDef value ~= SelectionInListView defaultFont or:[
+       self menuDef value ~= MenuView defaultFont or:[
+       self textDef value ~= TextView defaultFont ]]]]
+! !
+
 !AbstractLauncherApplication::KbdMappingSettingsAppl class methodsFor:'interface specs'!
 
 windowSpec
@@ -7281,6 +9412,294 @@
       )
 ! !
 
+!AbstractLauncherApplication::MemorySettingsAppl class methodsFor:'interface specs'!
+
+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:AbstractLauncherApplication::MemorySettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::MemorySettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::MemorySettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Settings'
+          #name: 'Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 616 592)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #()
+        )
+      )
+! !
+
+!AbstractLauncherApplication::MemorySettingsAppl methodsFor:'actions'!
+
+doCancel
+
+    self isPartOfSettinsDialog ifTrue:[
+        self loadRequest.
+    ].
+    self closeRequest.
+!
+
+evaluateModified
+
+    self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+    self warn:'no help available here'.
+"/    self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/keyboardSetting.html'].
+!
+
+loadRequest
+
+    self modifiedChannel value:false.
+!
+
+saveRequest
+    | result |
+
+    (self hasUnsavedChanges) ifTrue:[
+        result := self confirmWithCancel:(resources string:'Save changed Font Settings ?'). 
+        result isNil ifTrue:[ ^ false].
+        result ifTrue:[
+            self saveSettings.
+        ] 
+    ].
+    ^ true
+!
+
+saveSettings
+
+    self hasUnsavedChanges ifTrue:[
+        self modifiedChannel value:false.
+    ].
+! !
+
+!AbstractLauncherApplication::MemorySettingsAppl methodsFor:'aspects'!
+
+modifiedChannel
+
+    modifiedChannel isNil ifTrue:[
+        modifiedChannel := false asValue.
+    ].
+    ^ modifiedChannel
+! !
+
+!AbstractLauncherApplication::MemorySettingsAppl methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    "stub code automatically generated - please change as required"
+
+"/    changedObject == self allOfThem ifTrue:[
+"/        ^ self.
+"/    ].
+
+    super update:something with:aParameter from:changedObject
+! !
+
+!AbstractLauncherApplication::MemorySettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+    self saveRequest ifFalse:[
+        ^ self
+    ].
+
+    ^ super closeRequest.
+!
+
+initialize
+
+    resources := self class owningClass classResources.
+    super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+    self postOpen.
+    ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+    self postOpen.
+    ^ super postOpenWith:aBuilder
+! !
+
+!AbstractLauncherApplication::MemorySettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+    ^ true
+! !
+
+!AbstractLauncherApplication::PlainSettingsAppl class methodsFor:'interface specs'!
+
+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:AbstractLauncherApplication::MemorySettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::MemorySettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::MemorySettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Settings'
+          #name: 'Settings'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 16 42 616 592)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #()
+        )
+      )
+! !
+
+!AbstractLauncherApplication::PlainSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+    self isPartOfSettinsDialog ifTrue:[
+        self loadRequest.
+    ].
+    self closeRequest.
+!
+
+evaluateModified
+
+    self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+    self warn:'no help available here'.
+"/    self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/keyboardSetting.html'].
+!
+
+loadRequest
+
+    self modifiedChannel value:false.
+!
+
+saveRequest
+    | result |
+
+    (self hasUnsavedChanges) ifTrue:[
+        result := self confirmWithCancel:(resources string:'Save changed Font Settings ?'). 
+        result isNil ifTrue:[ ^ false].
+        result ifTrue:[
+            self saveSettings.
+        ] 
+    ].
+    ^ true
+!
+
+saveSettings
+
+    self hasUnsavedChanges ifTrue:[
+        self modifiedChannel value:false.
+    ].
+! !
+
+!AbstractLauncherApplication::PlainSettingsAppl methodsFor:'aspects'!
+
+modifiedChannel
+
+    modifiedChannel isNil ifTrue:[
+        modifiedChannel := false asValue.
+    ].
+    ^ modifiedChannel
+! !
+
+!AbstractLauncherApplication::PlainSettingsAppl methodsFor:'change & update'!
+
+update:something with:aParameter from:changedObject
+    "Invoked when an object that I depend upon sends a change notification."
+
+    "stub code automatically generated - please change as required"
+
+"/    changedObject == self allOfThem ifTrue:[
+"/        ^ self.
+"/    ].
+
+    super update:something with:aParameter from:changedObject
+! !
+
+!AbstractLauncherApplication::PlainSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+    self saveRequest ifFalse:[
+        ^ self
+    ].
+
+    ^ super closeRequest.
+!
+
+initialize
+
+    resources := self class owningClass classResources.
+    super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+    self postOpen.
+    ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+    self postOpen.
+    ^ super postOpenWith:aBuilder
+! !
+
+!AbstractLauncherApplication::PlainSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+    ^ true
+! !
+
 !AbstractLauncherApplication::SettingsDialog class methodsFor:'applications'!
 
 addApplClass:aClass withName:aName
@@ -7307,7 +9726,8 @@
         #('Language' #'AbstractLauncherApplication::LanguageSettingsAppl')
         #('Keyboard Mappings' #'AbstractLauncherApplication::KbdMappingSettingsAppl')
         #('Style Selection' #'AbstractLauncherApplication::StyleSettingsAppl')
-
+        #('System Messages' #'AbstractLauncherApplication::SystemMessageSettingsAppl')
+        #('Compiler' #'AbstractLauncherApplication::CompilerSettingsAppl')
     ).
 !
 
@@ -7373,7 +9793,7 @@
           #name: 'Settings Dialog'
           #min: #(#Point 10 10)
           #max: #(#Point 1024 768)
-          #bounds: #(#Rectangle 16 42 516 562)
+          #bounds: #(#Rectangle 16 42 616 662)
           #menu: #mainMenu
         )
         #component: 
@@ -7470,11 +9890,14 @@
 
 sendSaveRequest
 
-    |oldClient|
-
-    oldClient := self canvasHolder value application.
-    oldClient notNil ifTrue:[
-        oldClient saveRequest ifFalse:[^ false].
+    |oldClient canvas|
+
+    canvas := self canvasHolder value.
+    canvas notNil ifTrue:[
+        oldClient := canvas application.
+        oldClient notNil ifTrue:[
+            oldClient saveRequest ifFalse:[^ false].
+        ].
     ].
     ^ true
 ! !
@@ -7552,6 +9975,7 @@
 
 initialize
 
+    resources := self class owningClass resources.
     selectionHolder := AspectAdaptor new subject:self; forAspect:#selection.
     super initialize.
 !
@@ -8053,7 +10477,7 @@
     | result |
 
     (self hasUnsavedChanges) ifTrue:[
-        result := self confirmWithCancel:(resources string:'Save changed Tool Settings ?'). 
+        result := self confirmWithCancel:(resources string:'Save changed Style Settings ?'). 
         result isNil ifTrue:[ ^ false].
         result ifTrue:[
             self saveSettings.
@@ -8199,7 +10623,7 @@
         listOfStyles := listOfStyles collect:[:aStyleName | aStyleName asLowercase].
     ].
     listOfStyles remove:'generic' ifAbsent:nil; remove:'mswindows3' ifAbsent:nil.
-    showStandardStylesOnly value ifTrue:[
+    self showStandardStylesOnly value ifTrue:[
         listOfStyles := listOfStyles select:[:aStyleName | self class standardStyles includes:aStyleName].
     ].
 
@@ -8261,7 +10685,7 @@
     styleDirectoryContents := resourceDir asFilename directoryContents.
     self updateList.
     (self class standardStyles includes:View defaultStyle) ifFalse:[
-        showStandardStylesOnly value:false
+        self showStandardStylesOnly value:false
     ].
     self selectedStyle value:(View defaultStyle).
     self noticeLabelHolder value:(resources at:'STYLE_MSG' default:'Select a Style') withCRs.    
@@ -8275,6 +10699,239 @@
     ^  (self selectedStyle value ~= View defaultStyle)
 ! !
 
+!AbstractLauncherApplication::SystemMessageSettingsAppl class methodsFor:'interface specs'!
+
+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:AbstractLauncherApplication::SystemMessageSettingsAppl andSelector:#windowSpec
+     AbstractLauncherApplication::SystemMessageSettingsAppl new openInterface:#windowSpec
+     AbstractLauncherApplication::SystemMessageSettingsAppl open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+     #(#FullSpec
+        #name: #windowSpec
+        #window: 
+       #(#WindowSpec
+          #label: 'Messages'
+          #name: 'Messages'
+          #min: #(#Point 10 10)
+          #max: #(#Point 1024 768)
+          #bounds: #(#Rectangle 24 22 499 293)
+        )
+        #component: 
+       #(#SpecCollection
+          #collection: #(
+           #(#CheckBoxSpec
+              #label: 'VM Info Messages'
+              #name: 'VMInfoMessages'
+              #layout: #(#LayoutFrame 5 0 5 0 -5 1 30 0)
+              #model: #vmInfo
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'VM Error Messages'
+              #name: 'VMErrorMessages'
+              #layout: #(#LayoutFrame 5 0 40 0 -5 1 65 0)
+              #model: #vmErrors
+              #translateLabel: true
+            )
+           #(#DividerSpec
+              #name: 'Separator2'
+              #layout: #(#LayoutFrame 0 0.0 70 0 0 1 73 0)
+            )
+           #(#CheckBoxSpec
+              #label: 'Display Error Messages (Xlib, Xtlib, WinAPI ...)'
+              #name: 'DisplayErrorMessages'
+              #layout: #(#LayoutFrame 5 0 80 0 -5 1 105 0)
+              #model: #displayErrors
+              #translateLabel: true
+            )
+           #(#CheckBoxSpec
+              #label: 'Other Info Messages'
+              #name: 'OtherInfoMessages'
+              #layout: #(#LayoutFrame 4 0 115 0 -5 1 135 0)
+              #model: #classInfos
+              #translateLabel: true
+            )
+           #(#DividerSpec
+              #name: 'Separator3'
+              #layout: #(#LayoutFrame 2 0.0 144 0 2 1 147 0)
+            )
+           #(#HorizontalPanelViewSpec
+              #name: 'HorizontalPanel1'
+              #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1)
+              #horizontalLayout: #center
+              #verticalLayout: #center
+              #horizontalSpace: 3
+              #verticalSpace: 3
+              #component: 
+             #(#SpecCollection
+                #collection: #(
+                 #(#ActionButtonSpec
+                    #label: 'OK'
+                    #name: 'OK'
+                    #translateLabel: true
+                    #model: #saveSettings
+                    #enableChannel: #modifiedChannel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Cancel'
+                    #name: 'Cancel'
+                    #translateLabel: true
+                    #model: #doCancel
+                    #extent: #(#Point 125 22)
+                  )
+                 #(#ActionButtonSpec
+                    #label: 'Help'
+                    #name: 'Help'
+                    #translateLabel: true
+                    #model: #help
+                    #extent: #(#Point 125 22)
+                  )
+                 )
+               
+              )
+            )
+           )
+         
+        )
+      )
+! !
+
+!AbstractLauncherApplication::SystemMessageSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+    self isPartOfSettinsDialog ifTrue:[
+        self loadRequest.
+    ].
+    self closeRequest.
+!
+
+evaluateModified
+
+    self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+    self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/messageSettings.html'].
+!
+
+loadRequest
+
+    self vmInfo value:ObjectMemory infoPrinting.
+    self vmErrors value:ObjectMemory debugPrinting.
+    self classInfos value:Object infoPrinting.
+    self displayErrors value:DeviceWorkstation errorPrinting.
+    self modifiedChannel value:false.
+!
+
+saveRequest
+    | result |
+
+    (self hasUnsavedChanges) ifTrue:[
+        result := self confirmWithCancel:(resources string:'Save changed System Massage Settings ?'). 
+        result isNil ifTrue:[ ^ false].
+        result ifTrue:[
+            self saveSettings.
+        ] 
+    ].
+    ^ true
+!
+
+saveSettings
+
+    ObjectMemory infoPrinting:self vmInfo value.
+    ObjectMemory debugPrinting:self vmErrors value.
+    Object infoPrinting:self classInfos value.
+    DeviceWorkstation errorPrinting:self displayErrors value.
+    self modifiedChannel value:false.
+! !
+
+!AbstractLauncherApplication::SystemMessageSettingsAppl methodsFor:'aspects'!
+
+classInfos
+
+    classInfos isNil ifTrue:[
+        classInfos := Object infoPrinting asValue.
+        classInfos onChangeSend:#evaluateModified to:self
+    ].
+    ^ classInfos.
+!
+
+displayErrors
+
+    displayErrors isNil ifTrue:[
+        displayErrors := DeviceWorkstation errorPrinting asValue.
+        displayErrors onChangeSend:#evaluateModified to:self
+    ].
+    ^ displayErrors.
+!
+
+modifiedChannel
+
+    modifiedChannel isNil ifTrue:[
+        modifiedChannel := false asValue.
+    ].
+    ^ modifiedChannel
+!
+
+vmErrors
+
+    vmErrors isNil ifTrue:[
+        vmErrors := ObjectMemory debugPrinting asValue.
+        vmErrors onChangeSend:#evaluateModified to:self
+    ].
+    ^ vmErrors.
+!
+
+vmInfo
+
+    vmInfo isNil ifTrue:[
+        vmInfo := ObjectMemory infoPrinting asValue.
+        vmInfo onChangeSend:#evaluateModified to:self
+    ].
+    ^ vmInfo.
+! !
+
+!AbstractLauncherApplication::SystemMessageSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+    self saveRequest ifFalse:[
+        ^ self
+    ].
+
+    ^ super closeRequest.
+!
+
+initialize
+
+    resources := self class owningClass classResources.
+    super initialize
+! !
+
+!AbstractLauncherApplication::SystemMessageSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+    ^(self vmInfo value ~= ObjectMemory infoPrinting  or:[
+      self vmErrors value ~= ObjectMemory debugPrinting or:[
+      self classInfos value ~= Object infoPrinting or:[
+      self displayErrors value ~= DeviceWorkstation errorPrinting ]]])
+! !
+
 !AbstractLauncherApplication::ToolsSettingsAppl class methodsFor:'interface specs'!
 
 windowSpec
@@ -8497,6 +11154,7 @@
     ].
     Inspector := currentUserPrefs inspectorClassSetting.
     Transcript current lineLimit:self transcriptBufferSize value.
+    self modifiedChannel value:false.
 ! !
 
 !AbstractLauncherApplication::ToolsSettingsAppl methodsFor:'aspects'!
@@ -8574,23 +11232,6 @@
 
 !AbstractLauncherApplication::ToolsSettingsAppl methodsFor:'initialization & release'!
 
-closeDownViews
-    "This is a hook method generated by the Browser.
-     It will be invoked when your app/dialog-window is really closed.
-     See also #closeDownViews, which is invoked before and may suppress the close
-     or ask the user for confirmation."
-
-    "/ change the code below as required ...
-    "/ This should cleanup any leftover resources
-    "/ (for example, temporary files)
-    "/ super closeRequest will initiate the closeDown
-
-    "/ add your code here
-
-    "/ do not remove the one below ...
-    ^ super closeDownViews
-!
-
 closeRequest
 
     self saveRequest ifFalse:[
@@ -8602,66 +11243,11 @@
 
 initialize
 
+    resources := self class owningClass classResources.
     currentUserPrefs := UserPreferences current.
     super initialize
 ! !
 
-!AbstractLauncherApplication::ToolsSettingsAppl methodsFor:'menu actions'!
-
-menuNew
-    "This method was generated by the Browser.
-     It will be invoked when the menu-item 'new' is selected."
-
-    "/ change below and add any actions as required here ...
-    self warn:'no action for ''new'' available.'.
-!
-
-menuOpen
-    "This method was generated by the Browser.
-     It will be invoked when the menu-item 'open' is selected."
-
-    "/ change below and add any actions as required here ...
-    self warn:'no action for ''open'' available.'.
-!
-
-menuSave
-    "This method was generated by the Browser.
-     It will be invoked when the menu-item 'save' is selected."
-
-    "/ change below and add any actions as required here ...
-    self warn:'no action for ''save'' available.'.
-!
-
-menuSaveAs
-    "This method was generated by the Browser.
-     It will be invoked when the menu-item 'saveAs' is selected."
-
-    "/ change below and add any actions as required here ...
-    self warn:'no action for ''saveAs'' available.'.
-!
-
-openAboutThisApplication
-    "This method was generated by the Browser.
-     It will be invoked when the menu-item 'help-about' is selected."
-
-    "/ could open a customized aboutBox here ...
-    super openAboutThisApplication
-!
-
-openDocumentation
-    "This method was generated by the Browser.
-     It will be invoked when the menu-item 'help-documentation' is selected."
-
-    "/ change below as required ...
-
-    "/ to open an HTML viewer on some document (under 'doc/online/<language>/' ):
-    HTMLDocumentView openFullOnDocumentationFile:'TOP.html'.
-
-    "/ add application-specific help files under the 'doc/online/<language>/help/appName'
-    "/ directory, and open a viewer with:
-    "/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
-! !
-
 !AbstractLauncherApplication::ToolsSettingsAppl methodsFor:'queries'!
 
 hasUnsavedChanges
@@ -8678,7 +11264,7 @@
 !AbstractLauncherApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractLauncherApplication.st,v 1.231 2002-11-12 11:29:34 penk Exp $'
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractLauncherApplication.st,v 1.232 2002-11-15 16:23:26 penk Exp $'
 ! !
 
 AbstractLauncherApplication::SettingsDialog initialize!