--- a/AbstractSettingsApplication.st Tue Nov 19 12:48:13 2002 +0100
+++ b/AbstractSettingsApplication.st Tue Nov 19 15:11:02 2002 +0100
@@ -7,6 +7,156 @@
category:'Interface-Smalltalk'
!
+AbstractSettingsApplication subclass:#CommunicationSettingsAppl
+ instanceVariableNames:'modifiedChannel'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+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:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#DisplaySettingsAppl
+ instanceVariableNames:'modifiedChannel isColorMonitor useFixGrayPaletteLabel
+ useFixPalette sizeY clipEncodingListSelection sizeX monitorList
+ ditherList clipEncodingList ditherListSelection deepIcons
+ monitorSelection useFixPaletteLabel visualIsPseudoColor
+ ditherSymsNotNil useFixGrayPalette sizeInfos screen ditherStyles
+ ditherSyms screenDepthVisualLabelHolder'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#EditSettingsAppl
+ instanceVariableNames:'modifiedChannel st80EditingMode tabsIs4 st80DoubleClickSelectMode
+ searchDialogIsModal startTextDragWithControl'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+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:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#KbdMappingSettingsAppl
+ instanceVariableNames:'modifiedChannel selectedRawKey macroTextHolder
+ selectedFunctionKey labelTextHolder functionKeyList rawKeyList
+ mappings'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#LanguageSettingsAppl
+ instanceVariableNames:'modifiedChannel languageHolder languageList listOfLanguages
+ translatedLanguages noticeLabelHolder currentLanguageChannel
+ currentLanguageLabel'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#MemorySettingsAppl
+ instanceVariableNames:'modifiedChannel newSpaceSize maxOldSpace fastMoreLimit
+ warningLabelHolder codeTrigger codeLimit oldIncr compressLimit
+ igcFreeLimit igcLimit igcFreeAmount stackLimit
+ supportsJustInTimeCompilation'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#MiscSettingsAppl
+ instanceVariableNames:'modifiedChannel returnFocus focusFollowsMouse beepEnabled
+ takeFocus preemptive activateOnClick shadows dynamicPrios
+ opaqueVariablePanelResize formatHostNameinWindowLabels
+ opaqueTableColumnResize hostNameInLabelHolder showAccelerators
+ currentUserPrefs newWindowLabelFormat'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#PlainSettingsAppl
+ instanceVariableNames:'modifiedChannel'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#PrinterSettingsAppl
+ instanceVariableNames:'modifiedChannel selectedUnit supportsColor topMargin rightMargin
+ bottomMargin landscape pageFormatList pageFormat unitList
+ leftMargin possiblePrinters printerType printerTypeSelection
+ printCommandSelection printCommandList commandList printCommand
+ enableFormat enablelandscape enableMargins enableColorBox'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#SourceAndDebuggerSettingsAppl
+ instanceVariableNames:'modifiedChannel syntaxColoring showVerboseStack sourceCacheDir
+ useManager updChanges condenseSourceCache
+ syntaxColorConfiguration showErrorNotifier setupSourceCodeManager
+ fullSelectorCheck logDoits checkClassesWhenCheckingIn
+ changeFileName formattingConfiguration flushSourceCache
+ localSourceFirst autoFormat cvsIsSetup repositoryHolder manager
+ repository currentUserPrefs'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#StyleSettingsAppl
+ instanceVariableNames:'modifiedChannel showStandardStylesOnly styleList selectedStyle
+ styleDirectoryContents infoLabelHolder noticeLabelHolder'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#SystemMessageSettingsAppl
+ instanceVariableNames:'modifiedChannel classInfos vmInfo vmErrors displayErrors'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
+AbstractSettingsApplication subclass:#ToolsSettingsAppl
+ instanceVariableNames:'useNewVersionDiffBrowser transcriptBufferSize useNewInspector
+ showClockInLauncher useNewChangesBrowser useNewFileBrowser
+ useNewSystemBrowser currentUserPrefs modifiedChannel'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:AbstractSettingsApplication
+!
+
!AbstractSettingsApplication methodsFor:'actions'!
@@ -34,8 +184,7681 @@
^ masterApplication notNil and:[ masterApplication class == AbstractLauncherApplication::SettingsDialog].
! !
+!AbstractSettingsApplication::CommunicationSettingsAppl 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::PlainSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::PlainSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::PlainSettingsAppl 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: #(
+ #(#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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::CommunicationSettingsAppl 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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::CommunicationSettingsAppl methodsFor:'aspects'!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+! !
+
+!AbstractSettingsApplication::CommunicationSettingsAppl 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
+! !
+
+!AbstractSettingsApplication::CommunicationSettingsAppl 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
+! !
+
+!AbstractSettingsApplication::CommunicationSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ true
+! !
+
+!AbstractSettingsApplication::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)
+! !
+
+!AbstractSettingsApplication::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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::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.
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::CompilerSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ super initialize
+! !
+
+!AbstractSettingsApplication::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'
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl class methodsFor:'defaults'!
+
+clipEncodingStrings
+
+ ^ #('untranslated' 'iso8859' 'jis' 'jis7' 'shift-JIS' 'EUC' 'big5')
+!
+
+clipEncodingSyms
+
+ ^ #(nil #iso8859 #jis #jis7 #sjis #euc #big5)
+!
+
+staticGrayOrGrayScaleDitherStrings
+
+ ^ #('threshold' 'ordered dither' 'error diffusion')
+!
+
+staticGrayOrGrayScaleDitherSyms
+
+ ^ #(threshold ordered floydSteinberg)
+!
+
+trueColorDitherStrings
+
+ ^ #('nearest color' 'error diffusion')
+!
+
+trueColorDitherSyms
+
+ ^ #(ordered floydSteinberg)
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl 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::DisplaySettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::DisplaySettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::DisplaySettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Display Screen Settings'
+ #name: 'Display Screen Settings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 16 42 616 592)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#LabelSpec
+ #label: 'Actual Visible Screen Area:'
+ #name: 'ActualVisibleScreenAreaLabel'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 22 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#LabelSpec
+ #label: 'Common Sizes:'
+ #name: 'CommonSizesLabel'
+ #layout: #(#LayoutFrame 0 0 39 0 205 0 61 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#PopUpListSpec
+ #label: 'monitor size'
+ #name: 'MonitorSelectionPopUpList'
+ #layout: #(#LayoutFrame 205 0 39 0 -5 1 61 0)
+ #tabable: true
+ #model: #monitorSelection
+ #menu: #monitorList
+ #useIndex: true
+ )
+ #(#LabelSpec
+ #label: 'Screen Size:'
+ #name: 'ScreenSizeLabel'
+ #layout: #(#LayoutFrame 0 0 72 0 205 0 94 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'SizeXEntryField'
+ #layout: #(#LayoutFrame 205 0 72 0 300 0 94 0)
+ #model: #sizeX
+ #type: #number
+ #immediateAccept: true
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: ' x '
+ #name: 'xLabel'
+ #layout: #(#LayoutFrame 314 0 72 0 360 0 94 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'SizeYEntryField'
+ #layout: #(#LayoutFrame 379 0 72 0 474 0 94 0)
+ #model: #sizeY
+ #type: #number
+ #immediateAccept: true
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: '(mm)'
+ #name: 'mmLabel'
+ #layout: #(#LayoutFrame 491 0 72 0 537 0 94 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#DividerSpec
+ #name: 'Separator1'
+ #layout: #(#LayoutFrame 0 0.0 105 0 0 1.0 109 0)
+ )
+ #(#LabelSpec
+ #name: 'ScreenDepthVisualLabel'
+ #layout: #(#LayoutFrame 0 0.0 113 0.0 0 1.0 135 0)
+ #translateLabel: true
+ #labelChannel: #screenDepthVisualLabelHolder
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator2'
+ #layout: #(#LayoutFrame 0 0.0 139 0 0 1.0 143 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Color Monitor'
+ #name: 'ColorMonitorCheckBox'
+ #layout: #(#LayoutFrame 5 0 150 0 250 0 172 0)
+ #model: #isColorMonitor
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Use Fix Color Palette'
+ #name: 'FixColorPaletteCheckBox'
+ #layout: #(#LayoutFrame 5 0 175 0 301 0 197 0)
+ #enableChannel: #visualIsPseudoColor
+ #model: #useFixPalette
+ #translateLabel: true
+ #labelChannel: #useFixPaletteLabel
+ )
+ #(#CheckBoxSpec
+ #label: 'Use Fix Gray Color Palette'
+ #name: 'UseFixGrayPaletteCheckBox'
+ #layout: #(#LayoutFrame 5 0 201 0 301 0 223 0)
+ #enableChannel: #visualIsPseudoColor
+ #model: #useFixGrayPalette
+ #translateLabel: true
+ #labelChannel: #useFixGrayPaletteLabel
+ )
+ #(#LabelSpec
+ #label: 'Image Display:'
+ #name: 'ImageDisplayLabel'
+ #layout: #(#LayoutFrame 0 0 230 0 205 0 252 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#PopUpListSpec
+ #label: 'image display'
+ #name: 'DitherListPopUpList'
+ #layout: #(#LayoutFrame 205 0 230 0 -5 1 252 0)
+ #tabable: true
+ #model: #ditherListSelection
+ #enableChannel: #ditherSymsNotNil
+ #menu: #ditherList
+ #useIndex: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Allow Colored/Grayscale Icons'
+ #name: 'AllowColoredGrayscaleIconsCheckBox'
+ #layout: #(#LayoutFrame 5 0 262 0 301 0 284 0)
+ #model: #deepIcons
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator3'
+ #layout: #(#LayoutFrame 0 0.0 288 0 0 1.0 292 0)
+ )
+ #(#LabelSpec
+ #label: 'ClipBoard Encoding:'
+ #name: 'ClipBoardEncodingLabel'
+ #layout: #(#LayoutFrame 0 0 303 0 205 0 325 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#PopUpListSpec
+ #label: 'image display'
+ #name: 'ClipEncodingListPopUpList'
+ #layout: #(#LayoutFrame 205 0 303 0 -5 1 325 0)
+ #tabable: true
+ #model: #clipEncodingListSelection
+ #menu: #clipEncodingList
+ #useIndex: true
+ )
+ #(#DividerSpec
+ #name: 'Separator4'
+ #layout: #(#LayoutFrame 0 0.0 333 0 0 1.0 337 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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl 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/screenSettings.html'].
+!
+
+loadRequest
+
+ self useFixPalette value:screen fixColors notNil.
+ self useFixGrayPalette value:screen fixGrayColors notNil.
+ self isColorMonitor value:screen hasColors.
+ self sizeX value:screen widthInMillimeter.
+ self sizeY value:screen heightInMillimeter.
+
+ self deepIcons value:screen supportsDeepIcons.
+ ditherSyms notNil ifTrue:[
+ self ditherListSelection value:(ditherSyms indexOf:(Image ditherAlgorithm) ifAbsent:#threshold).
+ ].
+ self clipEncodingListSelection value:(self class clipEncodingSyms indexOf:screen clipBoardEncoding ifAbsent:1).
+ 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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ Image flushDeviceImages.
+
+ screen visualType == #PseudoColor ifTrue:[
+ self useFixPalette value ifTrue:[
+ Color colorAllocationFailSignal handle:[:ex |
+ self warn:'Could not allocate colors.'.
+ ] do:[
+ Color getColorsRed:4 green:8 blue:4 on:screen
+ ]
+ ] ifFalse:[
+ screen releaseFixColors
+ ].
+
+ self useFixGrayPalette value ifTrue:[
+ Color colorAllocationFailSignal handle:[:ex |
+ self warn:'Could not allocate colors.'.
+ ] do:[
+ Color getGrayColors:32 on:screen
+ ]
+ ] ifFalse:[
+ screen releaseFixGrayColors
+ ]
+ ].
+ screen hasColors:self isColorMonitor value.
+ screen widthInMillimeter:self sizeX value.
+ screen heightInMillimeter:self sizeY value.
+
+ screen supportsDeepIcons:self deepIcons value.
+ ditherSyms notNil ifTrue:[
+ Image ditherAlgorithm:(ditherSyms at:self ditherListSelection value).
+ ].
+
+ WindowGroup activeGroup withWaitCursorDo:[
+ View defaultStyle:(View defaultStyle).
+ ].
+
+ screen clipBoardEncoding:(self class clipEncodingSyms at:self clipEncodingListSelection value).
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl methodsFor:'aspects'!
+
+clipEncodingList
+
+ clipEncodingList isNil ifTrue:[
+ clipEncodingList := (resources array:self class clipEncodingStrings) asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/ clipEncodingList addDependent:self.
+"/ clipEncodingList onChangeSend:#clipEncodingListChanged to:self.
+ ].
+ ^ clipEncodingList.
+!
+
+clipEncodingListSelection
+
+ clipEncodingListSelection isNil ifTrue:[
+ clipEncodingListSelection := (self class clipEncodingSyms indexOf:screen clipBoardEncoding ifAbsent:1) asValue.
+ clipEncodingListSelection onChangeSend:#evaluateModified to:self.
+ ].
+ ^ clipEncodingListSelection.
+!
+
+deepIcons
+
+ deepIcons isNil ifTrue:[
+ deepIcons := screen supportsDeepIcons asValue.
+ deepIcons onChangeSend:#evaluateModified to:self.
+ ].
+ ^ deepIcons.
+!
+
+ditherList
+
+ ditherList isNil ifTrue:[
+ ditherList := ValueHolder new.
+ ].
+ ^ ditherList.
+!
+
+ditherListSelection
+
+ ditherListSelection isNil ifTrue:[
+ ditherSyms notNil ifTrue:[
+ ditherListSelection := (ditherSyms indexOf:(Image ditherAlgorithm) ifAbsent:#threshold) asValue.
+ ] ifFalse:[
+ ditherListSelection := ValueHolder new.
+ ].
+ ditherListSelection onChangeSend:#evaluateModified to:self.
+ ].
+ ^ ditherListSelection.
+!
+
+ditherSymsNotNil
+
+ ditherSymsNotNil isNil ifTrue:[
+ ditherSymsNotNil := ditherSyms notNil asValue.
+ ].
+ ^ ditherSymsNotNil.
+!
+
+isColorMonitor
+
+ isColorMonitor isNil ifTrue:[
+ isColorMonitor := screen hasColors asValue.
+ isColorMonitor onChangeSend:#evaluateModified to:self.
+ ].
+ ^ isColorMonitor.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+monitorList
+
+ monitorList isNil ifTrue:[
+ monitorList := (resources array:(sizeInfos collect:[:entry | entry at:1])) asList.
+ ].
+ ^ monitorList.
+!
+
+monitorSelection
+
+ monitorSelection isNil ifTrue:[
+ monitorSelection := ValueHolder new.
+ monitorSelection addDependent:self.
+ monitorSelection onChangeSend:#evaluateModified to:self.
+ monitorSelection changed.
+ ].
+ ^ monitorSelection.
+!
+
+screenDepthVisualLabelHolder
+
+ screenDepthVisualLabelHolder isNil ifTrue:[
+ screenDepthVisualLabelHolder := (resources string:'Screen: Depth: %1 Visual: %2 (%3)'
+ with:screen depth printString
+ with:screen visualType
+ with:screen serverVendor) asValue.
+ ].
+ ^ screenDepthVisualLabelHolder.
+!
+
+sizeX
+
+ sizeX isNil ifTrue:[
+ sizeX := screen widthInMillimeter asValue.
+ sizeX addDependent:self.
+ sizeX changed.
+ sizeX onChangeSend:#evaluateModified to:self.
+ ].
+ ^ sizeX.
+!
+
+sizeY
+
+ sizeY isNil ifTrue:[
+ sizeY := screen heightInMillimeter asValue.
+ sizeY addDependent:self.
+ sizeY changed.
+ sizeY onChangeSend:#evaluateModified to:self.
+ ].
+ ^ sizeY.
+!
+
+useFixGrayPalette
+
+ useFixGrayPalette isNil ifTrue:[
+ useFixGrayPalette := screen fixGrayColors notNil asValue.
+ useFixGrayPalette onChangeSend:#evaluateModified to:self.
+ ].
+ ^ useFixGrayPalette.
+!
+
+useFixGrayPaletteLabel
+
+ useFixGrayPaletteLabel isNil ifTrue:[
+ useFixGrayPaletteLabel := (resources string:'Use Fix Gray Color Palette %1' with:'(32)') asValue.
+ ].
+ ^ useFixGrayPaletteLabel.
+!
+
+useFixPalette
+
+ useFixPalette isNil ifTrue:[
+ useFixPalette := screen fixColors notNil asValue.
+ useFixPalette onChangeSend:#evaluateModified to:self.
+ ].
+ ^ useFixPalette.
+!
+
+useFixPaletteLabel
+
+ useFixPaletteLabel isNil ifTrue:[
+ useFixPaletteLabel := (resources string:'Use Fix Color Palette %1' with:'(4x8x4)') asValue.
+ ].
+ ^ useFixPaletteLabel.
+!
+
+visualIsPseudoColor
+
+ visualIsPseudoColor isNil ifTrue:[
+ visualIsPseudoColor := (screen visualType == #PseudoColor) asValue.
+ visualIsPseudoColor onChangeSend:#evaluateModified to:self.
+ ].
+ ^ visualIsPseudoColor.
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl methodsFor:'change & update'!
+
+monitorSelectionChanged
+
+ | sel sizeInfoEntry sizes|
+
+ sel := self monitorSelection value.
+ (sel notNil and:[sel ~~ 0]) ifTrue:[
+ sizeInfoEntry := sizeInfos at:sel.
+ sizes := sizeInfoEntry at:2.
+ self sizeX value:(sizes at:1).
+ self sizeY value:(sizes at:2).
+ ].
+!
+
+sizeXorYChanged
+ | sizes idx|
+
+ sizes := sizeInfos collect:[:entry | entry at:2].
+ idx := sizes findFirst:[:entry |
+ ((entry at:1) = sizeX value)
+ and:[((entry at:2) = sizeY value)]
+ ].
+ idx ~~ 0 ifTrue:[
+ self monitorSelection value:idx
+ ].
+!
+
+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 monitorSelection ifTrue:[
+ self monitorSelectionChanged.
+ ^ self.
+ ].
+ (changedObject == self sizeX or:[self sizeY]) ifTrue:[
+ self sizeXorYChanged.
+ ^ self.
+ ].
+
+ super update:something with:aParameter from:changedObject
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ | listOfSizes visual|
+ resources := self class owningClass classResources.
+ screen := Screen current.
+ listOfSizes := resources at:'LIST_OF_OFFERED_SCREEN_SIZES' default:#default.
+ listOfSizes == #default ifTrue:[
+ "/ nothing in resource file; offer at least some.
+ sizeInfos := #(
+ ( '11.3'' (235mm x 175mm) LCD' (235 175) )
+ ( '17'' (325mm x 245mm)' (325 245) )
+ ( '19'' (340mm x 270mm)' (340 270) )
+ ( '20'' (350mm x 280mm)' (350 280) )
+ ( '21'' (365mm x 285mm)' (365 285) )
+ ).
+ ] ifFalse:[
+ sizeInfos := resources array:listOfSizes.
+ ].
+ visual := screen visualType.
+ (visual == #StaticGray or:[visual == #GrayScale]) ifTrue:[
+ ditherStyles := self class staticGrayOrGrayScaleDitherStrings.
+ ditherSyms := self class staticGrayOrGrayScaleDitherSyms.
+ ] ifFalse:[
+ visual ~~ #TrueColor ifTrue:[
+ ditherStyles := self class trueColorDitherStrings.
+ ditherSyms := self class trueColorDitherSyms.
+ ]
+ ].
+ super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenWith:aBuilder
+! !
+
+!AbstractSettingsApplication::DisplaySettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ (
+ self useFixPalette value ~= screen fixColors notNil or:[
+ self useFixGrayPalette value ~= screen fixGrayColors notNil or:[
+ self isColorMonitor value ~= screen hasColors or:[
+ self sizeX value ~= screen widthInMillimeter or:[
+ self sizeY value ~= screen heightInMillimeter or:[
+
+ self deepIcons value ~= screen supportsDeepIcons or:[
+ (ditherSyms notNil and:[
+ self ditherListSelection value ~= (ditherSyms indexOf:(Image ditherAlgorithm) ifAbsent:#threshold).
+ ]) or:[
+ self clipEncodingListSelection value ~= (self class clipEncodingSyms indexOf:screen clipBoardEncoding ifAbsent:1)
+ ]]]]]]]
+ )
+! !
+
+!AbstractSettingsApplication::EditSettingsAppl 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::EditSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::EditSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::EditSettingsAppl 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: #(
+ #(#VerticalPanelViewSpec
+ #name: 'VerticalPanel2'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 -40 1.0)
+ #horizontalLayout: #fit
+ #verticalLayout: #center
+ #horizontalSpace: 3
+ #verticalSpace: 3
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#VerticalPanelViewSpec
+ #name: 'VerticalPanel1'
+ #horizontalLayout: #fit
+ #verticalLayout: #top
+ #horizontalSpace: 3
+ #verticalSpace: 3
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
+ #label: 'CTRL-Key to Start TextDrag'
+ #name: 'CTRLKeyStTextDragCheckBox'
+ #model: #startTextDragWithControl
+ #translateLabel: true
+ #extent: #(#Point 600 23)
+ )
+ #(#CheckBoxSpec
+ #label: 'SearchBox is Modal'
+ #name: 'SearchBoxModalCheckBox'
+ #model: #searchDialogIsModal
+ #translateLabel: true
+ #extent: #(#Point 600 23)
+ )
+ #(#CheckBoxSpec
+ #label: 'Tab Stops in Multiples of 4'
+ #name: 'TabStopsMultiples4CheckBox'
+ #model: #tabsIs4
+ #translateLabel: true
+ #extent: #(#Point 600 23)
+ )
+ #(#CheckBoxSpec
+ #label: 'Double Click Select Behavior as in ST80'
+ #name: 'DoubleClickSelectBehaviorST80CheckBox'
+ #model: #st80DoubleClickSelectMode
+ #translateLabel: true
+ #extent: #(#Point 600 23)
+ )
+ #(#CheckBoxSpec
+ #label: 'Cursor has ST80 Line-end Behavior'
+ #name: 'CursorST80LineEndBehaviorCheckBox'
+ #model: #st80EditingMode
+ #translateLabel: true
+ #extent: #(#Point 600 23)
+ )
+ )
+
+ )
+ #extent: #(#Point 600 200)
+ )
+ )
+
+ )
+ )
+ #(#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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::EditSettingsAppl 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/editSettings.html'].
+!
+
+loadRequest
+
+ self st80EditingMode value: UserPreferences current st80EditMode.
+ self st80DoubleClickSelectMode value: TextView st80SelectMode.
+ self tabsIs4 value: (ListView userDefaultTabPositions = ListView tab4Positions).
+ self searchDialogIsModal value: UserPreferences current searchDialogIsModal.
+ self startTextDragWithControl value: UserPreferences current startTextDragWithControl.
+ 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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ UserPreferences current st80EditMode:(self st80EditingMode value).
+ TextView st80SelectMode:(self st80DoubleClickSelectMode value).
+ tabsIs4 value ~~ (ListView userDefaultTabPositions = ListView tab4Positions) ifTrue:[
+ ListView userDefaultTabPositions:(self tabsIs4 value ifTrue:[ListView tab4Positions] ifFalse:[ListView tab8Positions]).
+ ListView allSubInstancesDo:[:eachKindOfListView |
+ self tabsIs4 value ifTrue:[eachKindOfListView setTab4] ifFalse:[eachKindOfListView setTab8]
+ ].
+ ].
+ UserPreferences current searchDialogIsModal:self searchDialogIsModal value.
+ UserPreferences current startTextDragWithControl:self startTextDragWithControl value.
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::EditSettingsAppl methodsFor:'aspects'!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+searchDialogIsModal
+
+ searchDialogIsModal isNil ifTrue:[
+ searchDialogIsModal := true asValue.
+ searchDialogIsModal onChangeSend:#evaluateModified to:self.
+ ].
+ ^ searchDialogIsModal.
+!
+
+st80DoubleClickSelectMode
+
+ st80DoubleClickSelectMode isNil ifTrue:[
+ st80DoubleClickSelectMode := true asValue.
+ st80DoubleClickSelectMode onChangeSend:#evaluateModified to:self.
+ ].
+ ^ st80DoubleClickSelectMode.
+!
+
+st80EditingMode
+
+ st80EditingMode isNil ifTrue:[
+ st80EditingMode := true asValue.
+ st80EditingMode onChangeSend:#evaluateModified to:self.
+ ].
+ ^ st80EditingMode.
+!
+
+startTextDragWithControl
+
+ startTextDragWithControl isNil ifTrue:[
+ startTextDragWithControl := true asValue.
+ startTextDragWithControl onChangeSend:#evaluateModified to:self.
+ ].
+ ^ startTextDragWithControl.
+!
+
+tabsIs4
+
+ tabsIs4 isNil ifTrue:[
+ tabsIs4 := true asValue.
+ tabsIs4 onChangeSend:#evaluateModified to:self.
+ ].
+ ^ tabsIs4.
+! !
+
+!AbstractSettingsApplication::EditSettingsAppl 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
+! !
+
+!AbstractSettingsApplication::EditSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ self loadRequest.
+ super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenWith:aBuilder
+! !
+
+!AbstractSettingsApplication::EditSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ (
+ UserPreferences current st80EditMode ~= (self st80EditingMode value) or:[
+ TextView st80SelectMode ~= (self st80DoubleClickSelectMode value) or:[
+ (tabsIs4 value ~~ (ListView userDefaultTabPositions = ListView tab4Positions) and:[
+ ListView userDefaultTabPositions ~= (self tabsIs4 value ifTrue:[ListView tab4Positions] ifFalse:[ListView tab8Positions]) or:[
+ ]]) or:[
+ UserPreferences current searchDialogIsModal ~= self searchDialogIsModal value or:[
+ UserPreferences current startTextDragWithControl ~= self startTextDragWithControl value ]]]]
+ )
+! !
+
+!AbstractSettingsApplication::FontSettingsAppl class methodsFor:'defaults'!
+
+widgetList
+
+ ^ #(
+ 'All'
+ 'Labels'
+ 'Buttons'
+ 'Lists'
+ 'Menus'
+ 'Edited Text'
+ )
+! !
+
+!AbstractSettingsApplication::FontSettingsAppl class methodsFor:'instance creation'!
+
+fontForEncoding:encodingMatch
+
+ | inst |
+
+ inst := self new.
+ inst encodingMatch:encodingMatch.
+ self initialize.
+ self open.
+! !
+
+!AbstractSettingsApplication::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
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::FontSettingsAppl methodsFor:'accessing'!
+
+encodingMatch:aEncodingMatch
+
+ aEncodingMatch notNil ifTrue:[
+ filter := [:f | f encoding notNil
+ and:[aEncodingMatch match:f encoding]].
+ ].
+! !
+
+!AbstractSettingsApplication::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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ 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.
+ ].
+! !
+
+!AbstractSettingsApplication::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.
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::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 ]]]]
+! !
+
+!AbstractSettingsApplication::KbdMappingSettingsAppl 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::KbdMappingSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::KbdMappingSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::KbdMappingSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Keyboard Mappings'
+ #name: 'Keyboard Mappings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 16 42 491 620)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#VariableVerticalPanelSpec
+ #name: 'VariableVerticalPanel1'
+ #layout: #(#LayoutFrame 0 0.0 60 0 0 1.0 -34 1)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#VariableHorizontalPanelSpec
+ #name: 'VariableHorizontalPanel1'
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#SequenceViewSpec
+ #name: 'RawKeyList'
+ #model: #selectedRawKey
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #useIndex: false
+ #sequenceList: #rawKeyList
+ )
+ #(#SequenceViewSpec
+ #name: 'FunctionKeyList'
+ #model: #selectedFunctionKey
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #useIndex: false
+ #sequenceList: #functionKeyList
+ )
+ )
+
+ )
+ #handles: #(#Any 0.5 1.0)
+ )
+ #(#ViewSpec
+ #name: 'Box1'
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#TextEditorSpec
+ #name: 'MacroText'
+ #layout: #(#LayoutFrame 0 0.0 20 0 0 1.0 0 1.0)
+ #model: #macroTextHolder
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #isReadOnly: true
+ )
+ #(#LabelSpec
+ #label: 'Macro text (if any):'
+ #name: 'MacroTextLabel'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 20 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ #handles: #(#Any 0.5 1.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: 'Close'
+ #name: 'Cancel'
+ #visibilityChannel: #isNotPartOfSettinsDialog
+ #translateLabel: true
+ #model: #doCancel
+ #extent: #(#Point 125 22)
+ )
+ #(#ActionButtonSpec
+ #label: 'Help'
+ #name: 'Help'
+ #translateLabel: true
+ #model: #help
+ #extent: #(#Point 125 22)
+ )
+ )
+
+ )
+ )
+ #(#LabelSpec
+ #label: 'NoticeText'
+ #name: 'Text'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 60 0)
+ #translateLabel: true
+ #labelChannel: #labelTextHolder
+ #resizeForLabel: true
+ #adjust: #left
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::KbdMappingSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+ self isPartOfSettinsDialog ifTrue:[
+ self loadRequest.
+ ].
+ self closeRequest.
+!
+
+evaluateModified
+
+ self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+ self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/keyboardSetting.html'].
+!
+
+loadRequest
+
+ self modifiedChannel value:false.
+!
+
+saveRequest
+ | result |
+
+ (self hasUnsavedChanges) ifTrue:[
+ result := self confirmWithCancel:(resources string:'Save changed Tool Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+! !
+
+!AbstractSettingsApplication::KbdMappingSettingsAppl methodsFor:'aspects'!
+
+functionKeyList
+ "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 ;-)"
+
+ functionKeyList isNil ifTrue:[
+ functionKeyList := ValueHolder new.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/ functionKeyList addDependent:self.
+"/ functionKeyList onChangeSend:#functionKeyListChanged to:self.
+ ].
+ ^ functionKeyList.
+!
+
+labelTextHolder
+ "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 ;-)"
+
+ labelTextHolder isNil ifTrue:[
+ labelTextHolder := ValueHolder new.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/ labelTextHolder addDependent:self.
+"/ labelTextHolder onChangeSend:#labelTextHolderChanged to:self.
+ ].
+ ^ labelTextHolder.
+!
+
+macroTextHolder
+ "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 ;-)"
+
+ macroTextHolder isNil ifTrue:[
+ macroTextHolder := ValueHolder new.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/ macroTextHolder addDependent:self.
+"/ macroTextHolder onChangeSend:#macroTextHolderChanged to:self.
+ ].
+ ^ macroTextHolder.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+rawKeyList
+
+ rawKeyList isNil ifTrue:[
+ rawKeyList := List new.
+ ].
+ ^ rawKeyList.
+!
+
+selectedFunctionKey
+
+ selectedFunctionKey isNil ifTrue:[
+ selectedFunctionKey := ValueHolder new.
+ selectedFunctionKey addDependent:self.
+ ].
+ ^ selectedFunctionKey.
+!
+
+selectedRawKey
+
+ selectedRawKey isNil ifTrue:[
+ selectedRawKey := ValueHolder new.
+ selectedRawKey addDependent:self.
+ ].
+ ^ selectedRawKey.
+! !
+
+!AbstractSettingsApplication::KbdMappingSettingsAppl methodsFor:'change & update'!
+
+changeFunctionKeySelection
+
+ |raw|
+ raw := self selectedRawKey value.
+ self selectedFunctionKey value:(mappings at:raw asSymbol) asString.
+!
+
+changeMacroText
+
+ |f macro indent|
+
+ f := self selectedFunctionKey value.
+ (f startsWith:'Cmd') ifTrue:[
+ f := f copyFrom:4
+ ].
+ macro := UserPreferences current functionKeySequences
+ at:(f asSymbol) ifAbsent:nil.
+ macro notNil ifTrue:[
+ macro := macro asStringCollection.
+ indent := macro
+ inject:99999 into:[:min :element |
+ |stripped|
+
+ stripped := element withoutLeadingSeparators.
+ stripped size == 0 ifTrue:[
+ min
+ ] ifFalse:[
+ min min:(element size - stripped size)
+ ]
+ ].
+ indent ~~ 0 ifTrue:[
+ macro := macro collect:[:line |
+ line size > indent ifTrue:[
+ line copyFrom:indent+1
+ ] ifFalse:[
+ line
+ ].
+ ]
+ ].
+ ].
+ macroTextHolder value:macro.
+!
+
+changeRawKeySelection
+ |f raw|
+
+ f := self selectedFunctionKey value.
+ raw := mappings keyAtValue:f asString.
+ raw isNil ifTrue:[
+ raw := mappings keyAtValue:f first.
+ raw isNil ifTrue:[
+ raw := mappings keyAtValue:f asSymbol.
+ ]
+ ].
+ self selectedRawKey value:raw.
+!
+
+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 selectedFunctionKey ifTrue:[
+ self changeRawKeySelection.
+ self changeMacroText.
+ ^ self
+ ].
+ changedObject == self selectedRawKey ifTrue:[
+ self changeFunctionKeySelection.
+ ^ self
+ ].
+ super update:something with:aParameter from:changedObject
+! !
+
+!AbstractSettingsApplication::KbdMappingSettingsAppl 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:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+
+ mappings := Screen current keyboardMap.
+
+ rawKeyList := (mappings keys asArray collect:[:key | key asString]) sort.
+ functionKeyList := (mappings values asSet asArray collect:[:key | key asString]) sort.
+
+ self labelTextHolder value:(resources at:'KEY_MSG2' default:'keyboard mapping:') withCRs.
+ super initialize
+! !
+
+!AbstractSettingsApplication::KbdMappingSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ false
+! !
+
+!AbstractSettingsApplication::LanguageSettingsAppl 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::LanguageSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::LanguageSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::LanguageSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Language Settings'
+ #name: 'Language Settings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 16 42 491 713)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField1'
+ #layout: #(#LayoutFrame 0 0.0 105 0 0 1.0 125 0)
+ #model: #languageHolder
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#SequenceViewSpec
+ #name: 'List1'
+ #layout: #(#LayoutFrame 0 0.0 125 0 0 1.0 -34 1)
+ #model: #languageHolder
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #doubleClickSelector: #doubleClick:
+ #useIndex: false
+ #sequenceList: #languageList
+ )
+ #(#HorizontalPanelViewSpec
+ #name: 'HorizontalPanel1'
+ #layout: #(#LayoutFrame 0 0.0 -34 1 0 1.0 0 1.0)
+ #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)
+ )
+ )
+
+ )
+ )
+ #(#LabelSpec
+ #label: 'Notice:'
+ #name: 'Notice'
+ #layout: #(#LayoutFrame 0 0 0 0 0 1.0 105 0)
+ #translateLabel: true
+ #labelChannel: #noticeLabelHolder
+ #adjust: #left
+ )
+ #(#LabelSpec
+ #label: 'Label'
+ #name: 'CurrentLang'
+ #layout: #(#LayoutFrame -150 1 0 0 0 1 20 0)
+ #style: #(#FontDescription #helvetica #bold #roman 12)
+ #translateLabel: true
+ #labelChannel: #currentLanguageChannel
+ #adjust: #left
+ )
+ #(#LabelSpec
+ #label: 'Current Language:'
+ #name: 'Label1'
+ #layout: #(#LayoutFrame 190 0 0 0 -150 1 20 0)
+ #translateLabel: true
+ #labelChannel: #currentLanguageLabel
+ #adjust: #right
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::LanguageSettingsAppl methodsFor:'accessing'!
+
+languageList
+ "return the value of the instance variable 'languageList' (automatically generated)"
+
+ ^ languageList
+!
+
+requestor
+ "return the value of the instance variable 'requestor' (automatically generated)"
+
+ | masterApplication |
+ masterApplication := self masterApplication.
+ masterApplication notNil ifTrue:[
+ ^ masterApplication requestor.
+ ].
+ ^ nil
+! !
+
+!AbstractSettingsApplication::LanguageSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+ self isPartOfSettinsDialog ifTrue:[
+ self loadRequest.
+ ].
+ self closeRequest.
+!
+
+doubleClick:aEntry
+
+ self saveSettings.
+!
+
+evaluateModified
+
+ self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+ self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/languageSetting.html'].
+!
+
+loadRequest
+
+ self languageHolder value:self currentLanguage.
+ self currentLanguageChannel value:self currentLanguage.
+ self modifiedChannel value:false.
+!
+
+saveRequest
+ | result |
+
+ (self hasUnsavedChanges) ifTrue:[
+ result := self confirmWithCancel:(resources string:'Save changed Language Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ |fontPref idx language oldLanguage territory enc
+ answer matchingFonts l screen newLanguage switch|
+
+ newLanguage := self languageHolder value.
+ self withWaitCursorDo:[
+ idx := translatedLanguages indexOf:newLanguage.
+ idx ~~ 0 ifTrue:[
+ language := listOfLanguages at:idx
+ ] ifFalse:[
+ language := newLanguage
+ ].
+ (language includes:$-) ifTrue:[
+ l := language asCollectionOfSubstringsSeparatedBy:$-.
+ language := l at:1.
+ territory := l at:2.
+ ].
+ territory isNil ifTrue:[
+ territory := language copyTo:2
+ ].
+
+ "/ check if the new language needs a differently encoded font;
+ "/ ask user to switch font and allow cancellation.
+ "/ Otherwise, you are left with unreadable menu & button items ...
+
+ oldLanguage := Smalltalk language.
+ Smalltalk language:language asSymbol.
+ ResourcePack flushCachedResourcePacks.
+ "/ refetch resources ...
+ resources := AbstractLauncherApplication classResources.
+ fontPref := resources at:'PREFERRED_FONT_ENCODING' default:'iso8859*'.
+ fontPref := fontPref asLowercase.
+ Smalltalk language:oldLanguage.
+
+ switch := true.
+ enc := MenuView defaultFont encoding.
+ (fontPref match:enc asLowercase) ifFalse:[
+ "/ look if there is one at all.
+ screen := Screen current.
+ matchingFonts := screen listOfAvailableFonts select:[:f | fontPref match:f encoding asLowercase].
+ matchingFonts size == 0 ifTrue:[
+ "/ flush and try again - just in case, the font path has changed.
+ screen flushListOfAvailableFonts.
+ matchingFonts := screen listOfAvailableFonts select:[:f | fontPref match:f encoding asLowercase].
+ ].
+ matchingFonts size == 0 ifTrue:[
+ (Dialog
+ confirm:(resources
+ string:'Your display does not offer any %1-encoded font.\\Change the language anyway ?\ (texts will probably be unreadable then)'
+ with:fontPref) withCRs)
+ ifFalse:[
+ switch := false
+ ]
+ ] ifFalse:[
+ answer := Dialog
+ confirmWithCancel:(resources
+ string:'menu font is not %1-encoded.\\Change it ?'
+ with:fontPref) withCRs
+ labels:(resources
+ array:#('cancel' 'no' 'yes'))
+ default:3.
+ answer isNil ifTrue:[
+ switch := false
+ ] ifFalse:[
+ answer ifTrue:[
+ switch := ( self requestor fontBoxForEncoding:fontPref)
+ ]
+ ].
+ ].
+ ].
+
+ switch ifTrue:[
+ Transcript showCR:'change language to ' , newLanguage , ' ...'.
+ Smalltalk language:language asSymbol.
+ Smalltalk languageTerritory:territory asSymbol.
+ "/ ResourcePack flushCachedResourcePacks - already done by language-change
+ ].
+ ].
+ switch ifTrue:[
+ self requestor notNil ifTrue:[
+ self requestor reopenLauncher.
+ ].
+ DebugView newDebugger.
+ ].
+ self currentLanguageChannel value:self currentLanguage.
+ self modifiedChannel value:false.
+! !
+
+!AbstractSettingsApplication::LanguageSettingsAppl methodsFor:'aspects'!
+
+currentLanguageChannel
+
+ currentLanguageChannel isNil ifTrue:[
+ currentLanguageChannel := self currentLanguage asValue.
+ ].
+ ^ currentLanguageChannel.
+!
+
+currentLanguageLabel
+
+ currentLanguageLabel isNil ifTrue:[
+ currentLanguageLabel := (resources string:'Current Language:') asValue.
+ ].
+ ^ currentLanguageLabel.
+!
+
+languageHolder
+
+ languageHolder isNil ifTrue:[
+ languageHolder := self currentLanguage asValue.
+ languageHolder onChangeSend:#evaluateModified to:self.
+ ].
+ ^ languageHolder.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+noticeLabelHolder
+
+ noticeLabelHolder isNil ifTrue:[
+ noticeLabelHolder := ((resources at:'LANG_MSG' default:'Select a Language') withCRs) asValue.
+ ].
+ ^ noticeLabelHolder.
+! !
+
+!AbstractSettingsApplication::LanguageSettingsAppl 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:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ |flags|
+
+ resources := self class owningClass classResources.
+ listOfLanguages := resources at:'LIST_OF_OFFERED_LANGUAGES' default:#('default').
+ listOfLanguages := listOfLanguages asOrderedCollection.
+ translatedLanguages := listOfLanguages collect:[:lang | |item|
+ item := resources at:lang.
+ item isString ifTrue:[
+ item
+ ] ifFalse:[
+ item at:1
+ ]
+ ].
+ flags := listOfLanguages collect:[:lang | |item|
+ item := resources at:lang.
+ item isArray ifTrue:[
+ item at:2
+ ] ifFalse:[
+ nil
+ ]
+ ].
+ flags := flags collect:[:nm | |img d| nm notNil ifTrue:[
+ img := Image fromFile:nm.
+ img isNil ifTrue:[
+ d := Smalltalk getPackageDirectoryForPackage:'stx:goodies'.
+ img := Image fromFile:(d construct:nm).
+ ].
+ ] ifFalse:[
+ nil
+ ]
+ ].
+ listOfLanguages := listOfLanguages collect:[:nm | nm copyFrom:'LANG_' size + 1].
+ languageList := translatedLanguages with:flags collect:[:lang :flag | LabelAndIcon icon:flag string:lang.].
+ super initialize
+! !
+
+!AbstractSettingsApplication::LanguageSettingsAppl methodsFor:'queries'!
+
+currentLanguage
+
+ | lang |
+
+ lang := Language ~= LanguageTerritory ifTrue:[
+ Language , '-' , LanguageTerritory
+ ] ifFalse:[
+ Language
+ ].
+ ^ languageList at:(listOfLanguages indexOf:lang)
+!
+
+hasUnsavedChanges
+
+ ^ (self languageHolder value) ~= (self currentLanguage)
+! !
+
+!AbstractSettingsApplication::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: 'Memory Manager Settings'
+ #name: 'Memory Manager Settings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 16 42 616 592)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#LabelSpec
+ #label: 'Label'
+ #name: 'Label1'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 50 0)
+ #translateLabel: true
+ #labelChannel: #warningLabelHolder
+ #adjust: #left
+ )
+ #(#ViewSpec
+ #name: 'NewSpaceBox'
+ #layout: #(#LayoutFrame 0 0.0 50 0 0 1.0 100 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField1'
+ #layout: #(#LayoutFrame 205 0 3 0 295 0 25 0)
+ #model: #newSpaceSize
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Size of NewSpace:'
+ #name: 'SizeOfNewSpaceLabel'
+ #layout: #(#LayoutFrame 0 0 3 0 205 0 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Size of newSpace where objects are created'
+ #name: 'Label3'
+ #layout: #(#LayoutFrame 0 0.0 25 0 295 0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#LabelSpec
+ #label: 'Maximum Memory Limit:'
+ #name: 'Label8'
+ #layout: #(#LayoutFrame 305 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'EntryField5'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #model: #maxOldSpace
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Never allocate more than this amount of memory'
+ #name: 'Label9'
+ #layout: #(#LayoutFrame 305 0 25 0 0 1 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator5'
+ #layout: #(#LayoutFrame 300 0 0 0.0 303 0 0 1.0)
+ #orientation: #vertical
+ )
+ #(#DividerSpec
+ #name: 'Separator1'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'QuickAllocationLimitBox'
+ #layout: #(#LayoutFrame 0 0.0 100 0 0 1.0 150 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField14'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #model: #fastMoreLimit
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Quick Allocation Limit:'
+ #name: 'Label26'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Quickly allocate more memory (suppress GC) up to this limit'
+ #name: 'Label27'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator15'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'GCTriggerBox'
+ #layout: #(#LayoutFrame 0 0.0 150 0 0 1.0 200 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField8'
+ #layout: #(#LayoutFrame 205 0 3 0 295 0 25 0)
+ #model: #igcLimit
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Incremental GC Allocation Trigger:'
+ #name: 'Label14'
+ #layout: #(#LayoutFrame 0 0 3 0 205 0 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Start IGC whenever this amount has been allocated'
+ #name: 'Label15'
+ #layout: #(#LayoutFrame 0 0.0 25 0 295 0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#LabelSpec
+ #label: 'Incremental GC Freespace Trigger:'
+ #name: 'Label16'
+ #layout: #(#LayoutFrame 305 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'EntryField9'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #model: #igcFreeLimit
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Start IGC whenever freespace drops below this'
+ #name: 'Label17'
+ #layout: #(#LayoutFrame 305 0 25 0 0 1 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator8'
+ #layout: #(#LayoutFrame 300 0 0 0.0 303 0 0 1.0)
+ #orientation: #vertical
+ )
+ #(#DividerSpec
+ #name: 'Separator9'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'GCAmountBox'
+ #layout: #(#LayoutFrame 0 0.0 200 0 0 1.0 250 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField17'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #model: #igcFreeAmount
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Incremental GC Amount:'
+ #name: 'Label32'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Try to keep this amount for peak requests'
+ #name: 'Label33'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator18'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'OldspaceIncrementBox'
+ #layout: #(#LayoutFrame 0 0.0 250 0 0 1.0 300 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField18'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1.0 25 0)
+ #model: #oldIncr
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Oldspace Increment:'
+ #name: 'Label34'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Increase oldSpace in chunks of this size'
+ #name: 'Label35'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator19'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'OldSpaceCompressLimitBox'
+ #layout: #(#LayoutFrame 0 0.0 300 0 0 1.0 350 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField19'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #model: #compressLimit
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Oldspace Compress Limit:'
+ #name: 'Label36'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Use 2-pass compressing GC if > 0 and more memory is in use'
+ #name: 'Label37'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator20'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'StackLimitBox'
+ #layout: #(#LayoutFrame 0 0.0 350 0.0 0 1.0 400 1.0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField20'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #enableChannel: #supportsJustInTimeCompilation
+ #model: #stackLimit
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Stack Limit:'
+ #name: 'Label38'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Trigger recursionInterrupt if more stack is used by a process'
+ #name: 'Label39'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator21'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'CodeLimitBox'
+ #layout: #(#LayoutFrame 0 0.0 400 0 0 1.0 450 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField21'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #enableChannel: #supportsJustInTimeCompilation
+ #model: #codeLimit
+ #type: #numberOrNil
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Dynamic code Limit:'
+ #name: 'Label40'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Flush dynamic compiled code to stay within this limit'
+ #name: 'Label41'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator22'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#ViewSpec
+ #name: 'CodeTriggerBox'
+ #layout: #(#LayoutFrame 0 0.0 450 0 0 1.0 500 0)
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#InputFieldSpec
+ #name: 'EntryField22'
+ #layout: #(#LayoutFrame -95 1 3 0 -5 1 25 0)
+ #model: #codeTrigger
+ #type: #number
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Dynamic code Limit:'
+ #name: 'Label42'
+ #layout: #(#LayoutFrame 0 0 3 0 -95 1 25 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#LabelSpec
+ #label: 'Start incremental GC whenever this amount of code has been allocated'
+ #name: 'Label43'
+ #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 47 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#DividerSpec
+ #name: 'Separator23'
+ #layout: #(#LayoutFrame 0 0.0 0 0 0 1.0 3 0)
+ )
+ )
+
+ )
+ )
+ #(#DividerSpec
+ #name: 'Separator24'
+ #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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::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/memorySettings.html'].
+!
+
+loadRequest
+
+ self igcLimit value:ObjectMemory incrementalGCLimit.
+ self igcFreeLimit value:ObjectMemory freeSpaceGCLimit.
+ self igcFreeAmount value:ObjectMemory freeSpaceGCAmount.
+ self newSpaceSize value:ObjectMemory newSpaceSize.
+ self oldIncr value:ObjectMemory oldSpaceIncrement.
+ self compressLimit value:ObjectMemory oldSpaceCompressLimit.
+ self codeLimit value:ObjectMemory dynamicCodeLimit.
+ self codeTrigger value:ObjectMemory dynamicCodeGCTrigger.
+ self stackLimit value:Process defaultMaximumStackSize.
+ self fastMoreLimit value:(ObjectMemory fastMoreOldSpaceLimit:-1).
+ self maxOldSpace value:ObjectMemory maxOldSpace.
+ self modifiedChannel value:false.
+!
+
+saveRequest
+ | result |
+
+ (self hasUnsavedChanges) ifTrue:[
+ result := self confirmWithCancel:(resources string:'Save changed Memory Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ ObjectMemory freeSpaceGCAmount:self igcFreeAmount value.
+ ObjectMemory freeSpaceGCLimit:self igcFreeLimit value.
+ ObjectMemory incrementalGCLimit:self igcLimit value.
+ ObjectMemory newSpaceSize:self newSpaceSize value.
+ ObjectMemory oldSpaceIncrement:self oldIncr value.
+ Process defaultMaximumStackSize:self stackLimit value.
+ ObjectMemory fastMoreOldSpaceLimit:self fastMoreLimit value.
+ ObjectMemory maxOldSpace:self maxOldSpace value.
+ ObjectMemory oldSpaceCompressLimit:self compressLimit value.
+ ObjectMemory dynamicCodeLimit:self codeLimit value.
+ ObjectMemory dynamicCodeGCTrigger:self codeTrigger value.
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::MemorySettingsAppl methodsFor:'aspects'!
+
+codeLimit
+
+ codeLimit isNil ifTrue:[
+ codeLimit := ObjectMemory dynamicCodeLimit asValue.
+ codeLimit onChangeSend:#evaluateModified to:self
+ ].
+ ^ codeLimit.
+!
+
+codeTrigger
+
+ codeTrigger isNil ifTrue:[
+ codeTrigger := ObjectMemory dynamicCodeGCTrigger asValue.
+ codeTrigger onChangeSend:#evaluateModified to:self
+ ].
+ ^ codeTrigger.
+!
+
+compressLimit
+
+ compressLimit isNil ifTrue:[
+ compressLimit := ObjectMemory oldSpaceCompressLimit asValue.
+ compressLimit onChangeSend:#evaluateModified to:self
+ ].
+ ^ compressLimit.
+!
+
+fastMoreLimit
+
+ fastMoreLimit isNil ifTrue:[
+ fastMoreLimit := (ObjectMemory fastMoreOldSpaceLimit:-1) asValue.
+ fastMoreLimit onChangeSend:#evaluateModified to:self
+ ].
+ ^ fastMoreLimit.
+!
+
+igcFreeAmount
+
+ igcFreeAmount isNil ifTrue:[
+ igcFreeAmount := ObjectMemory freeSpaceGCAmount asValue.
+ igcFreeAmount onChangeSend:#evaluateModified to:self
+ ].
+ ^ igcFreeAmount.
+!
+
+igcFreeLimit
+
+ igcFreeLimit isNil ifTrue:[
+ igcFreeLimit := ObjectMemory freeSpaceGCLimit asValue.
+ igcFreeLimit onChangeSend:#evaluateModified to:self
+ ].
+ ^ igcFreeLimit.
+!
+
+igcLimit
+
+ igcLimit isNil ifTrue:[
+ igcLimit := ObjectMemory incrementalGCLimit asValue.
+ igcLimit onChangeSend:#evaluateModified to:self
+ ].
+ ^ igcLimit.
+!
+
+maxOldSpace
+
+ maxOldSpace isNil ifTrue:[
+ maxOldSpace := ObjectMemory maxOldSpace asValue.
+ maxOldSpace onChangeSend:#evaluateModified to:self
+ ].
+ ^ maxOldSpace.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+newSpaceSize
+
+ newSpaceSize isNil ifTrue:[
+ newSpaceSize := ObjectMemory newSpaceSize asValue.
+ newSpaceSize onChangeSend:#evaluateModified to:self
+ ].
+ ^ newSpaceSize.
+!
+
+oldIncr
+
+ oldIncr isNil ifTrue:[
+ oldIncr := ObjectMemory oldSpaceIncrement asValue.
+ oldIncr onChangeSend:#evaluateModified to:self
+ ].
+ ^ oldIncr.
+!
+
+stackLimit
+
+ stackLimit isNil ifTrue:[
+ stackLimit := Process defaultMaximumStackSize asValue.
+ stackLimit onChangeSend:#evaluateModified to:self
+ ].
+ ^ stackLimit.
+!
+
+supportsJustInTimeCompilation
+
+ ^ ObjectMemory supportsJustInTimeCompilation.
+!
+
+warningLabelHolder
+
+ warningLabelHolder isNil ifTrue:[
+ warningLabelHolder := ValueHolder new.
+ ].
+ ^ warningLabelHolder.
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::MemorySettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ self warningLabelHolder value:'Warning - invalid settings may result in failures or poor performance
+' , 'You have been warned' allBold , '.'.
+ super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenWith:aBuilder
+! !
+
+!AbstractSettingsApplication::MemorySettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ (
+ ObjectMemory freeSpaceGCAmount ~= self igcFreeAmount value or:[
+ ObjectMemory freeSpaceGCLimit ~= self igcFreeLimit value or:[
+ ObjectMemory incrementalGCLimit ~= self igcLimit value or:[
+ ObjectMemory newSpaceSize ~= self newSpaceSize value or:[
+ ObjectMemory oldSpaceIncrement ~= self oldIncr value or:[
+ Process defaultMaximumStackSize ~= self stackLimit value or:[
+ (ObjectMemory fastMoreOldSpaceLimit:-1) ~= self fastMoreLimit value or:[
+ ObjectMemory maxOldSpace ~= self maxOldSpace value or:[
+ ObjectMemory oldSpaceCompressLimit ~= self compressLimit value or:[
+ ObjectMemory dynamicCodeLimit ~= self codeLimit value or:[
+ ObjectMemory dynamicCodeGCTrigger ~= self codeTrigger value ]]]]]]]]]]
+ )
+! !
+
+!AbstractSettingsApplication::MiscSettingsAppl 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::MiscSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::MiscSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::MiscSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Other settings'
+ #name: 'Other settings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 16 42 616 592)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
+ #label: 'Shadows under PopUp Views'
+ #name: 'CheckBox1'
+ #layout: #(#LayoutFrame 5 0 5 0 -5 1 27 0)
+ #model: #shadows
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Beeper enabled'
+ #name: 'CheckBox2'
+ #layout: #(#LayoutFrame 5 0 30 0 -5 1 52 0)
+ #model: #beepEnabled
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Boxes Return Focus to Previously Active View'
+ #name: 'CheckBox3'
+ #layout: #(#LayoutFrame 5 0 55 0 -5 1 77 0)
+ #model: #returnFocus
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Views Catch Focus when Mapped'
+ #name: 'CheckBox4'
+ #layout: #(#LayoutFrame 5 0 80 0 -5 1 102 0)
+ #model: #takeFocus
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Hostname in Window Labels'
+ #name: 'CheckBox5'
+ #layout: #(#LayoutFrame 5 0 105 0 300 0 127 0)
+ #model: #hostNameInLabelHolder
+ #translateLabel: true
+ )
+ #(#ActionButtonSpec
+ #label: 'Format...'
+ #name: 'Button1'
+ #layout: #(#LayoutFrame 300 0 105 0 -5 1 127 0)
+ #translateLabel: true
+ #model: #formatHostNameinWindowLabels
+ )
+ #(#CheckBoxSpec
+ #label: 'Show Accelerator Keys in Menus'
+ #name: 'CheckBox6'
+ #layout: #(#LayoutFrame 5 0 130 0 -5 1 152 0)
+ #model: #showAccelerators
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Raise & Activate Windows on Click'
+ #name: 'CheckBox7'
+ #layout: #(#LayoutFrame 5 0 155 0 -5 1 177 0)
+ #model: #activateOnClick
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Focus Follows Mouse'
+ #name: 'CheckBox8'
+ #layout: #(#LayoutFrame 5 0 180 0 -5 1 202 0)
+ #model: #focusFollowsMouse
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Opaque Variable Panel Resizing'
+ #name: 'CheckBox9'
+ #layout: #(#LayoutFrame 5 0 205 0 -5 1 227 0)
+ #model: #opaqueVariablePanelResize
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Opaque Table Column Resizing'
+ #name: 'CheckBox10'
+ #layout: #(#LayoutFrame 5 0 230 0 -5 1 252 0)
+ #model: #opaqueTableColumnResize
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator1'
+ #layout: #(#LayoutFrame 0 0.0 259 0 0 1.0 263 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Preemptive Scheduling'
+ #name: 'CheckBox11'
+ #layout: #(#LayoutFrame 5 0 270 0 -5 1 292 0)
+ #model: #preemptive
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Dynamic Priorities'
+ #name: 'CheckBox12'
+ #layout: #(#LayoutFrame 20 0 295 0 -5 1 317 0)
+ #enableChannel: #preemptive
+ #model: #dynamicPrios
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator2'
+ #layout: #(#LayoutFrame 0 0.0 321 0 0 1.0 325 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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::MiscSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+ self isPartOfSettinsDialog ifTrue:[
+ self loadRequest.
+ ].
+ self closeRequest.
+!
+
+evaluateModified
+
+ self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+formatHostNameinWindowLabels
+ |newFormat|
+
+ newFormat := Dialog request:
+ 'Define the Format of Window Labels:\\ %1 - Label\ %2 - Hostname\ %3 - Username\ %4 - ProcessId\'
+ withCRs initialAnswer:newWindowLabelFormat.
+
+ newFormat size > 0 ifTrue:[
+ newWindowLabelFormat := newFormat.
+ self evaluateModified.
+ ].
+!
+
+help
+
+"/ self warn:'no help available here'.
+ self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/miscSettings.html'].
+!
+
+loadRequest
+
+ self shadows value:PopUpView shadows.
+ self beepEnabled value:currentUserPrefs beepEnabled.
+
+ self hostNameInLabelHolder value:PopUpView shadows.
+ self returnFocus value:StandardSystemView returnFocusWhenClosingModalBoxes.
+ self takeFocus value:StandardSystemView takeFocusWhenMapped .
+ self focusFollowsMouse value:(currentUserPrefs focusFollowsMouse ? true) .
+ self activateOnClick value:(Display activateOnClick:nil).
+ self opaqueVariablePanelResize value:currentUserPrefs opaqueVariablePanelResizing.
+ self opaqueTableColumnResize value:currentUserPrefs opaqueTableColumnResizing.
+
+ self showAccelerators value:MenuView showAcceleratorKeys.
+ self preemptive value:Processor isTimeSlicing.
+ self dynamicPrios value:Processor supportDynamicPriorities.
+ self modifiedChannel value:false.
+!
+
+saveRequest
+ | result |
+
+ (self hasUnsavedChanges) ifTrue:[
+ result := self confirmWithCancel:(resources string:'Save changed Misc Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ PopUpView shadows:shadows value.
+ (self hostNameInLabelHolder value ~= StandardSystemView includeHostNameInLabel
+ or:[newWindowLabelFormat ~= StandardSystemView windowLabelFormat]) ifTrue:[
+ StandardSystemView includeHostNameInLabel:self hostNameInLabelHolder value.
+ newWindowLabelFormat notNil ifTrue:[
+ StandardSystemView windowLabelFormat:newWindowLabelFormat
+ ].
+
+ Screen allScreens do:[:aDisplay |
+ aDisplay allViewsDo:[:aView |
+ |l|
+
+ aView isTopView ifTrue:[
+ l := aView label.
+ l notNil ifTrue:[
+ aView label:(l , ' '); label:l. "/ force a change
+ ]
+ ]
+ ]
+ ]
+ ].
+
+ currentUserPrefs opaqueVariablePanelResizing:self opaqueVariablePanelResize value.
+ currentUserPrefs opaqueTableColumnResizing:self opaqueTableColumnResize value.
+
+ currentUserPrefs beepEnabled:self beepEnabled value.
+
+ StandardSystemView returnFocusWhenClosingModalBoxes:self returnFocus value.
+ StandardSystemView takeFocusWhenMapped:self takeFocus value.
+ currentUserPrefs focusFollowsMouse:self focusFollowsMouse value.
+ Screen current activateOnClick:self activateOnClick value.
+
+ MenuView showAcceleratorKeys:self showAccelerators value.
+ Processor isTimeSlicing ~~ self preemptive value ifTrue:[
+ self preemptive value ifTrue:[
+ Processor startTimeSlicing
+ ] ifFalse:[
+ Processor stopTimeSlicing
+ ]
+ ].
+ Processor supportDynamicPriorities ~~ self dynamicPrios value ifTrue:[
+ Processor supportDynamicPriorities:self dynamicPrios value
+ ].
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::MiscSettingsAppl methodsFor:'aspects'!
+
+activateOnClick
+
+ activateOnClick isNil ifTrue:[
+ activateOnClick := true asValue.
+ activateOnClick onChangeSend:#evaluateModified to:self
+ ].
+ ^ activateOnClick.
+!
+
+beepEnabled
+
+ beepEnabled isNil ifTrue:[
+ beepEnabled := true asValue.
+ beepEnabled onChangeSend:#evaluateModified to:self
+ ].
+ ^ beepEnabled.
+!
+
+dynamicPrios
+
+ dynamicPrios isNil ifTrue:[
+ dynamicPrios := true asValue.
+ dynamicPrios onChangeSend:#evaluateModified to:self
+ ].
+ ^ dynamicPrios.
+!
+
+focusFollowsMouse
+
+ focusFollowsMouse isNil ifTrue:[
+ focusFollowsMouse := true asValue.
+ focusFollowsMouse onChangeSend:#evaluateModified to:self
+ ].
+ ^ focusFollowsMouse.
+!
+
+hostNameInLabelHolder
+
+ hostNameInLabelHolder isNil ifTrue:[
+ hostNameInLabelHolder := true asValue.
+ hostNameInLabelHolder onChangeSend:#evaluateModified to:self
+ ].
+ ^ hostNameInLabelHolder.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+opaqueTableColumnResize
+
+ opaqueTableColumnResize isNil ifTrue:[
+ opaqueTableColumnResize := true asValue.
+ opaqueTableColumnResize onChangeSend:#evaluateModified to:self
+ ].
+ ^ opaqueTableColumnResize.
+!
+
+opaqueVariablePanelResize
+
+ opaqueVariablePanelResize isNil ifTrue:[
+ opaqueVariablePanelResize := true asValue.
+ opaqueVariablePanelResize onChangeSend:#evaluateModified to:self
+ ].
+ ^ opaqueVariablePanelResize.
+!
+
+preemptive
+
+ preemptive isNil ifTrue:[
+ preemptive := true asValue.
+ preemptive onChangeSend:#evaluateModified to:self
+ ].
+ ^ preemptive.
+!
+
+returnFocus
+
+ returnFocus isNil ifTrue:[
+ returnFocus := true asValue.
+ returnFocus onChangeSend:#evaluateModified to:self
+ ].
+ ^ returnFocus.
+!
+
+shadows
+
+ shadows isNil ifTrue:[
+ shadows := true asValue.
+ shadows onChangeSend:#evaluateModified to:self
+ ].
+ ^ shadows.
+!
+
+showAccelerators
+
+ showAccelerators isNil ifTrue:[
+ showAccelerators := true asValue.
+ showAccelerators onChangeSend:#evaluateModified to:self
+ ].
+ ^ showAccelerators.
+!
+
+takeFocus
+
+ takeFocus isNil ifTrue:[
+ takeFocus := true asValue.
+ takeFocus onChangeSend:#evaluateModified to:self
+ ].
+ ^ takeFocus.
+! !
+
+!AbstractSettingsApplication::MiscSettingsAppl 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
+! !
+
+!AbstractSettingsApplication::MiscSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ currentUserPrefs := UserPreferences current.
+ newWindowLabelFormat := StandardSystemView windowLabelFormat.
+ self loadRequest.
+ super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenWith:aBuilder
+! !
+
+!AbstractSettingsApplication::MiscSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ (
+ newWindowLabelFormat ~= StandardSystemView windowLabelFormat or:[
+ self shadows value ~= PopUpView shadows or:[
+ self beepEnabled value ~= currentUserPrefs beepEnabled or:[
+ self hostNameInLabelHolder value ~= PopUpView shadows or:[
+ self returnFocus value ~= StandardSystemView returnFocusWhenClosingModalBoxes or:[
+ self takeFocus value ~= StandardSystemView takeFocusWhenMapped or:[
+ self focusFollowsMouse value ~= (currentUserPrefs focusFollowsMouse ? true) or:[
+ self activateOnClick value ~= (Display activateOnClick:nil) or:[
+ self opaqueVariablePanelResize value ~= currentUserPrefs opaqueVariablePanelResizing or:[
+ self opaqueTableColumnResize value ~= currentUserPrefs opaqueTableColumnResizing or:[
+ self showAccelerators value ~= MenuView showAcceleratorKeys or:[
+ self preemptive value ~= Processor isTimeSlicing or:[
+ self dynamicPrios value ~= Processor supportDynamicPriorities]]]]]]]]]]]]
+ )
+! !
+
+!AbstractSettingsApplication::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::PlainSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::PlainSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::PlainSettingsAppl 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: #(
+ #(#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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::PlainSettingsAppl methodsFor:'aspects'!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::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
+! !
+
+!AbstractSettingsApplication::PlainSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ true
+! !
+
+!AbstractSettingsApplication::PrinterSettingsAppl 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::PrinterSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::PrinterSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::PrinterSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Printer Settings'
+ #name: 'Printer Settings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 12 22 612 572)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#LabelSpec
+ #label: 'Printer Type:'
+ #name: 'PrinterTypeLabel'
+ #layout: #(#LayoutFrame 0 0 5 0 150 0 27 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#ComboListSpec
+ #name: 'PrinterTypeComboList'
+ #layout: #(#LayoutFrame 150 0 5 0 -5 1 27 0)
+ #model: #printerTypeSelection
+ #comboList: #printerType
+ #useIndex: true
+ )
+ #(#LabelSpec
+ #label: 'Printer Command:'
+ #name: 'PrinterCommandLabel'
+ #layout: #(#LayoutFrame 0 0 40 0 150 0 62 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#ComboBoxSpec
+ #name: 'CommandComboBox'
+ #layout: #(#LayoutFrame 150 0 40 0 -5 1 62 0)
+ #model: #printCommand
+ #acceptOnPointerLeave: false
+ #comboList: #printCommandList
+ #useIndex: false
+ )
+ #(#DividerSpec
+ #name: 'Separator1'
+ #layout: #(#LayoutFrame 0 0.0 72 0 0 1.0 76 0)
+ )
+ #(#LabelSpec
+ #label: 'Page Format:'
+ #name: 'PageFormatLabel'
+ #layout: #(#LayoutFrame 5 0 85 0 150 0 107 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#PopUpListSpec
+ #label: 'PopUp List'
+ #name: 'PageFormatPopUpList'
+ #layout: #(#LayoutFrame 150 0 85 0 288 0 107 0)
+ #tabable: true
+ #model: #pageFormat
+ #enableChannel: #enableFormat
+ #menu: #pageFormatList
+ #useIndex: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Landscape'
+ #name: 'LandscapeCheckBox'
+ #layout: #(#LayoutFrame 330 0 85 0 -5 1 107 0)
+ #enableChannel: #enablelandscape
+ #model: #landscape
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator2'
+ #layout: #(#LayoutFrame 0 0.0 114 0 0 1.0 118 0)
+ )
+ #(#LabelSpec
+ #label: 'Top Margin:'
+ #name: 'TopMarginLabel'
+ #layout: #(#LayoutFrame 5 0 130 0 150 0 152 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'TopMarginEntryField'
+ #layout: #(#LayoutFrame 150 0 130 0 250 0 152 0)
+ #enableChannel: #enableMargins
+ #model: #topMargin
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #converter: #PrintConverter
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Left Margin:'
+ #name: 'LeftMarginLabel'
+ #layout: #(#LayoutFrame 5 0 160 0 150 0 182 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'LeftMarginEntryField'
+ #layout: #(#LayoutFrame 150 0 160 0 250 0 182 0)
+ #enableChannel: #enableMargins
+ #model: #leftMargin
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #converter: #PrintConverter
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Right Margin:'
+ #name: 'RightMarginLabel'
+ #layout: #(#LayoutFrame 5 0 190 0 150 0 212 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'RightMarginEntryField'
+ #layout: #(#LayoutFrame 150 0 190 0 250 0 212 0)
+ #enableChannel: #enableMargins
+ #model: #rightMargin
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #converter: #PrintConverter
+ #acceptOnPointerLeave: false
+ )
+ #(#LabelSpec
+ #label: 'Bottom Margin:'
+ #name: 'BottomMarginLabel'
+ #layout: #(#LayoutFrame 5 0 220 0 150 0 242 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'BottomMarginEntryField'
+ #layout: #(#LayoutFrame 150 0 220 0 250 0 242 0)
+ #enableChannel: #enableMargins
+ #model: #bottomMargin
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #converter: #PrintConverter
+ #acceptOnPointerLeave: false
+ )
+ #(#PopUpListSpec
+ #label: 'PopUp List'
+ #name: 'PopUpList2'
+ #layout: #(#LayoutFrame 457 0 129 0 -5 1 151 0)
+ #tabable: true
+ #model: #selectedUnit
+ #menu: #unitList
+ #useIndex: true
+ )
+ #(#DividerSpec
+ #name: 'Separator3'
+ #layout: #(#LayoutFrame 0 0.0 256 0 0 1.0 260 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Color Printer'
+ #name: 'ColorPrinterCheckBox'
+ #layout: #(#LayoutFrame 5 0 269 0 -5 1 291 0)
+ #enableChannel: #enableColorBox
+ #model: #supportsColor
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator4'
+ #layout: #(#LayoutFrame 0 0.0 296 0 0 1.0 300 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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::PrinterSettingsAppl 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/printerSettings.html'].
+!
+
+loadRequest
+
+ self modifiedChannel value:false.
+!
+
+saveRequest
+ | result |
+
+ (self hasUnsavedChanges) ifTrue:[
+ result := self confirmWithCancel:(resources string:'Save changed Printer Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ Printer := possiblePrinters at:(self printerTypeSelection value).
+ Printer printCommand:self printCommand value.
+
+ Printer supportsPageSizes ifTrue:[
+ Printer pageFormat:(self pageFormatList at:self pageFormat value).
+ Printer landscape:(self landscape value).
+ ].
+ Printer supportsMargins ifTrue:[
+ | unit |
+ self selectedUnit value == 2 ifTrue:[
+ unit := #mm
+ ] ifFalse:[
+ unit := #inch
+ ].
+ Printer topMargin:(UnitConverter convert:self topMargin value from:unit to:#inch).
+ Printer leftMargin:(UnitConverter convert:leftMargin value from:unit to:#inch).
+ Printer rightMargin:(UnitConverter convert:rightMargin value from:unit to:#inch).
+ Printer bottomMargin:(UnitConverter convert:bottomMargin value from:unit to:#inch).
+ ].
+ Printer supportsPostscript ifTrue:[
+ Printer supportsColor:self supportsColor value.
+ ].
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::PrinterSettingsAppl methodsFor:'aspects'!
+
+bottomMargin
+
+ bottomMargin isNil ifTrue:[
+ bottomMargin := Printer bottomMargin asValue.
+ bottomMargin onChangeSend:#evaluateModified to:self
+ ].
+ ^ bottomMargin.
+!
+
+enableColorBox
+
+ enableColorBox isNil ifTrue:[
+ enableColorBox := true asValue.
+ ].
+ ^ enableColorBox.
+!
+
+enableFormat
+
+ enableFormat isNil ifTrue:[
+ enableFormat := true asValue.
+ ].
+ ^ enableFormat.
+!
+
+enableMargins
+
+ enableMargins isNil ifTrue:[
+ enableMargins := true asValue.
+ ].
+ ^ enableMargins.
+!
+
+enablelandscape
+
+ enablelandscape isNil ifTrue:[
+ enablelandscape := true asValue.
+ ].
+ ^ enablelandscape.
+!
+
+landscape
+
+ landscape isNil ifTrue:[
+ landscape := Printer landscape asValue.
+ landscape onChangeSend:#evaluateModified to:self
+ ].
+ ^ landscape.
+!
+
+leftMargin
+
+ leftMargin isNil ifTrue:[
+ leftMargin := Printer leftMargin asValue.
+ leftMargin onChangeSend:#evaluateModified to:self
+ ].
+ ^ leftMargin.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+pageFormat
+
+ pageFormat isNil ifTrue:[
+ self pageFormatList notEmpty ifTrue:[
+ | index |
+ (index := self pageFormatList indexOf:#a4) ~~ 0 ifTrue:[
+ pageFormat := index asValue.
+ ] ifFalse:[
+ pageFormat := 1 asValue.
+ ]
+ ].
+ pageFormat onChangeSend:#evaluateModified to:self
+ ].
+ ^ pageFormat.
+!
+
+pageFormatList
+
+ pageFormatList isNil ifTrue:[
+ pageFormatList := Printer defaultPageFormats asList.
+ ].
+ ^ pageFormatList.
+!
+
+printCommand
+ "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 ;-)"
+
+ printCommand isNil ifTrue:[
+ printCommand := Printer printCommand asValue.
+ printCommand onChangeSend:#evaluateModified to:self
+ ].
+ ^ printCommand.
+!
+
+printCommandList
+
+ printCommandList isNil ifTrue:[
+ printCommandList := commandList asList.
+ ].
+ ^ printCommandList.
+!
+
+printerType
+
+ printerType isNil ifTrue:[
+ printerType := (possiblePrinters collect:[:cls | cls printerTypeName]) asList.
+ printerType onChangeSend:#evaluateModified to:self
+ ].
+ ^ printerType.
+!
+
+printerTypeSelection
+
+ printerTypeSelection isNil ifTrue:[
+ printerTypeSelection := (possiblePrinters identityIndexOf:Printer) asValue.
+"/ printerTypeSelection onChangeSend:#printerTypeSelectionChanged to:self.
+ printerTypeSelection addDependent:self.
+ printerTypeSelection changed.
+ printerTypeSelection onChangeSend:#evaluateModified to:self
+ ].
+ ^ printerTypeSelection.
+!
+
+rightMargin
+
+ rightMargin isNil ifTrue:[
+ rightMargin := Printer rightMargin asValue.
+ rightMargin onChangeSend:#evaluateModified to:self
+ ].
+ ^ rightMargin.
+!
+
+selectedUnit
+
+ selectedUnit isNil ifTrue:[
+ selectedUnit := 1 asValue.
+ selectedUnit addDependent:self.
+ selectedUnit changed.
+ selectedUnit onChangeSend:#evaluateModified to:self
+ ].
+ ^ selectedUnit.
+!
+
+supportsColor
+
+ supportsColor isNil ifTrue:[
+ supportsColor := Printer supportsColor asValue.
+ supportsColor onChangeSend:#evaluateModified to:self
+ ].
+ ^ supportsColor.
+!
+
+topMargin
+
+ topMargin isNil ifTrue:[
+ topMargin := Printer topMargin asValue.
+ topMargin onChangeSend:#evaluateModified to:self
+ ].
+ ^ topMargin.
+!
+
+unitList
+
+ unitList isNil ifTrue:[
+ unitList := #('inch' 'mm') asList.
+ ].
+ ^ unitList.
+! !
+
+!AbstractSettingsApplication::PrinterSettingsAppl methodsFor:'change & update'!
+
+printerTypeSelectionChanged
+
+ | p hasPageSize hasMargins|
+ printerType selectionIndex ~~ 0 ifTrue:[
+ p := possiblePrinters at:(printerType selectionIndex).
+ hasPageSize := p supportsPageSizes.
+ hasMargins := p supportsMargins.
+ ] ifFalse:[
+ hasPageSize := false.
+ hasMargins := false.
+ ].
+!
+
+printerTypeSelectionOrUnitListChanged
+
+ | p hasPageSize hasMargins unit|
+
+ self printerTypeSelection value ~~ 0 ifTrue:[
+ p := possiblePrinters at:(self printerTypeSelection value).
+ hasPageSize := p supportsPageSizes.
+ hasMargins := p supportsMargins.
+ ] ifFalse:[
+ hasPageSize := false.
+ hasMargins := false.
+ ].
+ self enablelandscape value:hasPageSize.
+ self enableFormat value:hasPageSize.
+ hasPageSize ifTrue:[
+
+ self pageFormat value:(p pageFormat).
+ self landscape value:(p landscape).
+ ] ifFalse:[
+ self landscape value:false.
+ ].
+ hasMargins ifTrue:[
+ self selectedUnit value == 2 ifTrue:[
+ unit := #mm
+ ] ifFalse:[
+ unit := #inch
+ ].
+
+ topMargin value:(UnitConverter convert:p topMargin from:#inch to:unit).
+ leftMargin value:(UnitConverter convert:p leftMargin from:#inch to:unit).
+ rightMargin value:(UnitConverter convert:p rightMargin from:#inch to:unit).
+ bottomMargin value:(UnitConverter convert:p bottomMargin from:#inch to:unit).
+
+ ] ifFalse:[
+ ].
+ self enableMargins value:hasMargins.
+
+ p notNil ifTrue:[
+ | newCommandList |
+ newCommandList := p defaultCommands.
+ newCommandList notNil ifTrue:[
+ self printCommandList contents:(newCommandList asList).
+ self printCommandList changed.
+ ].
+
+ self printCommand value:(p printCommand).
+ ].
+ self enableColorBox value:p supportsPostscript.
+ p supportsPostscript ifFalse:[
+ self supportsColor value:false
+ ] ifTrue:[
+ self supportsColor value:(Printer supportsColor).
+ ]
+!
+
+unitListChanged
+!
+
+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 selectedUnit or:[changedObject == self printerTypeSelection]) ifTrue:[
+ self printerTypeSelectionOrUnitListChanged.
+ ^ self.
+ ].
+
+ super update:something with:aParameter from:changedObject
+! !
+
+!AbstractSettingsApplication::PrinterSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ possiblePrinters := PrinterStream withAllSubclasses asArray.
+ commandList := resources at:'PRINT_COMMANDS' ifAbsent:nil.
+ commandList isNil ifTrue:[
+ commandList := PrinterStream defaultCommands.
+ commandList isNil ifTrue:[
+ commandList := #('lpr'
+ 'lp'
+ ).
+ ].
+ (commandList includes:self printCommand value) not ifTrue:[
+ commandList add:self printCommand value.
+ ].
+ ].
+ super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenWith:aBuilder
+! !
+
+!AbstractSettingsApplication::PrinterSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+
+ | printer unit|
+ self selectedUnit value == 2 ifTrue:[
+ unit := #mm
+ ] ifFalse:[
+ unit := #inch
+ ].
+ printer := possiblePrinters at:(self printerTypeSelection value).
+ ^ (
+ printer ~= Printer or:[
+ Printer printCommand ~= self printCommand value or:[
+ (Printer supportsPageSizes and:[
+ Printer pageFormat ~= (self pageFormatList at:self pageFormat value) or:[
+ Printer landscape ~= (self landscape value) or:[
+ ]]]) or:[
+ (Printer supportsMargins and:[
+ Printer topMargin ~= (UnitConverter convert:self topMargin value from:unit to:#inch) or:[
+ Printer leftMargin ~= (UnitConverter convert:leftMargin value from:unit to:#inch) or:[
+ Printer rightMargin ~= (UnitConverter convert:rightMargin value from:unit to:#inch) or:[
+ Printer bottomMargin ~= (UnitConverter convert:bottomMargin value from:unit to:#inch) or:[
+ ]]]]]) or:[
+ Printer supportsPostscript and:[
+ Printer supportsColor ~= self supportsColor value
+ ]]]]]
+ )
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl 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::SourceAndDebuggerSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::SourceAndDebuggerSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::SourceAndDebuggerSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Source & Debugger Settings'
+ #name: 'Source & Debugger Settings'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 12 14 612 572)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
+ #label: 'Log compiles in Changefile'
+ #name: 'LogCompilesInChangefileCheckBox'
+ #layout: #(#LayoutFrame 5 0 5 0 214 0 28 0)
+ #model: #updChanges
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Log doIts in Changefile'
+ #name: 'LogDoItsInChangefileCheckBox'
+ #layout: #(#LayoutFrame 5 0 30 0 214 0 53 0)
+ #model: #logDoits
+ #translateLabel: true
+ )
+ #(#LabelSpec
+ #label: 'Changefile Name:'
+ #name: 'ChangefileNameLabel'
+ #layout: #(#LayoutFrame 96 0 60 0 300 0 82 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'ChangeFileNameEntryField'
+ #layout: #(#LayoutFrame 300 0 60 0 -5 1 82 0)
+ #model: #changeFileName
+ #immediateAccept: true
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#DividerSpec
+ #name: 'Separator1'
+ #layout: #(#LayoutFrame 0 0.0 95 0 0 1.0 99 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Sourcecode Management'
+ #name: 'SourcecodeManagementCheckBox'
+ #layout: #(#LayoutFrame 5 0 110 0 220 0 132 0)
+ #enableChannel: #cvsIsSetup
+ #model: #useManager
+ #translateLabel: true
+ )
+ #(#ActionButtonSpec
+ #label: 'Setup...'
+ #name: 'SetupButton1'
+ #layout: #(#LayoutFrame -250 1 110 0 -5 1 130 0)
+ #translateLabel: true
+ #model: #setupSourceCodeManager
+ #enableChannel: #useManager
+ )
+ #(#LabelSpec
+ #label: 'Source Cache Dir:'
+ #name: 'SourceCacheDirLabel'
+ #layout: #(#LayoutFrame 96 0 145 0 300 0 167 0)
+ #translateLabel: true
+ #adjust: #right
+ )
+ #(#InputFieldSpec
+ #name: 'SourceCacheDirEntryField'
+ #layout: #(#LayoutFrame 300 0 145 0 -5 1 167 0)
+ #enableChannel: #useManager
+ #model: #sourceCacheDir
+ #immediateAccept: true
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#ActionButtonSpec
+ #label: 'Flush Cache now'
+ #name: 'FlushCacheNowButton'
+ #layout: #(#LayoutFrame -250 1 179 0 -5 1 199 0)
+ #translateLabel: true
+ #model: #flushSourceCache
+ #enableChannel: #useManager
+ )
+ #(#ActionButtonSpec
+ #label: 'Condense Cache now'
+ #name: 'CondenseCacheNowButton'
+ #layout: #(#LayoutFrame -250 1 204 0 -5 1 224 0)
+ #translateLabel: true
+ #model: #condenseSourceCache
+ #enableChannel: #useManager
+ )
+ #(#CheckBoxSpec
+ #label: 'If Present, Use Local Source (Suppress Checkout)'
+ #name: 'CheckBox4'
+ #layout: #(#LayoutFrame 50 0 232 0 -5 1 254 0)
+ #model: #localSourceFirst
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Check for halt/error-Sends when Checking in'
+ #name: 'CheckBox5'
+ #layout: #(#LayoutFrame 50 0 257 0 -5 1 279 0)
+ #model: #checkClassesWhenCheckingIn
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator2'
+ #layout: #(#LayoutFrame 0 0.0 282 0 0 1.0 286 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Syntax Coloring'
+ #name: 'SyntaxColoringCheckBox'
+ #layout: #(#LayoutFrame 5 0 292 0 300 0 316 0)
+ #model: #syntaxColoring
+ #translateLabel: true
+ )
+ #(#ActionButtonSpec
+ #label: 'Configure...'
+ #name: 'SyntaxColorButton'
+ #layout: #(#LayoutFrame -250 1 292 0 -5 1 312 0)
+ #translateLabel: true
+ #model: #syntaxColorConfiguration
+ #enableChannel: #syntaxColoring
+ )
+ #(#CheckBoxSpec
+ #label: 'Immediate Selector Check'
+ #name: 'ImmediateSelectorCheckBox'
+ #layout: #(#LayoutFrame 5 0 317 0 300 0 339 0)
+ #enableChannel: #syntaxColoring
+ #model: #fullSelectorCheck
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Auto Format'
+ #name: 'AutoFormatCheckBox'
+ #layout: #(#LayoutFrame 5 0 342 0 300 0 364 0)
+ #model: #autoFormat
+ #translateLabel: true
+ )
+ #(#ActionButtonSpec
+ #label: 'Configure...'
+ #name: 'FormattingConfigurationButton'
+ #layout: #(#LayoutFrame -250 1 342 0 -5 1 362 0)
+ #translateLabel: true
+ #model: #formattingConfiguration
+ )
+ #(#DividerSpec
+ #name: 'Separator3'
+ #layout: #(#LayoutFrame 0 0.0 369 0 0 1.0 373 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Show Error Notifier before Opening Debugger'
+ #name: 'ShowErrorNotifierCheckBox'
+ #layout: #(#LayoutFrame 5 0 378 0 -5 1 400 0)
+ #model: #showErrorNotifier
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Verbose Backtrace by Default in Debugger'
+ #name: 'ShowVerboseStackCheckBox'
+ #layout: #(#LayoutFrame 5 0 403 0 -5 1 428 0)
+ #model: #showVerboseStack
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator4'
+ #layout: #(#LayoutFrame 0 0.0 431 0 0 1.0 435 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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl methodsFor:'accessing'!
+
+manager
+
+ ^ Smalltalk at:#SourceCodeManager
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl methodsFor:'actions'!
+
+condenseSourceCache
+
+ self withWaitCursorDo:[ AbstractSourceCodeManager condenseSourceCache ]
+!
+
+doCancel
+
+ self isPartOfSettinsDialog ifTrue:[
+ self loadRequest.
+ ].
+ self closeRequest.
+!
+
+evaluateModified
+
+ self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+flushSourceCache
+
+ self withWaitCursorDo:[ AbstractSourceCodeManager flushSourceCache ]
+!
+
+formattingConfiguration
+
+ AbstractLauncherApplication::LauncherDialogs formattingConfigurationDialog
+!
+
+help
+
+"/ self warn:'no help available here'.
+ self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/sourceSettings.html'].
+!
+
+loadRequest
+
+ self logDoits value:Smalltalk logDoits.
+ self updChanges value:Class updatingChanges.
+ self changeFileName value:ObjectMemory nameForChanges.
+ self hasManager ifTrue:[
+ self useManager value:(manager := Smalltalk at:#SourceCodeManager) notNil.
+ self localSourceFirst value:Class tryLocalSourceFirst.
+ self sourceCacheDir value:(AbstractSourceCodeManager cacheDirectoryName).
+ manager notNil ifTrue:[
+ manager forgetDisabledModules.
+ repository := manager repositoryName.
+ repository notNil ifTrue:[
+ repositoryHolder := repository asValue.
+ ] ifFalse:[
+ repositoryHolder := '' asValue.
+ ].
+ ].
+ self cvsIsSetup value:true.
+ ] ifFalse:[
+ self useManager value: false.
+ self localSourceFirst value:false.
+ self cvsIsSetup value:false.
+ ].
+ self showErrorNotifier value:(Exception emergencyHandler == AbstractLauncherApplication notifyingEmergencyHandler).
+ self showVerboseStack value:(DebugView defaultVerboseBacktrace ? false).
+ self syntaxColoring value:currentUserPrefs syntaxColoring.
+ self fullSelectorCheck value:currentUserPrefs fullSelectorCheck.
+ self autoFormat value:currentUserPrefs autoFormatting.
+
+ self checkClassesWhenCheckingIn value:(currentUserPrefs at:#checkClassesWhenCheckingIn ifAbsent:true).
+ 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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ self hasUnsavedChanges ifTrue:[
+ Smalltalk logDoits:self logDoits value.
+ Class updateChanges:self updChanges value.
+ ObjectMemory nameForChanges:self changeFileName value.
+
+ (self hasManager and:[self useManager value]) ifTrue:[
+ manager isNil ifTrue:[
+ Smalltalk at:#SourceCodeManager put:(AbstractSourceCodeManager defaultManager).
+ manager := Smalltalk at:#SourceCodeManager.
+ ].
+ Class tryLocalSourceFirst:self localSourceFirst value.
+
+ manager notNil ifTrue:[
+ | nm fn|
+ nm := self sourceCacheDir value.
+ nm size > 0 ifTrue:[
+ (fn := nm asFilename) exists ifFalse:[
+ (self confirm:('CVS cache directory ''' , nm , ''' does not exists\create ?' withCRs)) ifTrue:[
+ fn makeDirectory;
+ makeReadableForAll;
+ makeWritableForAll;
+ makeExecutableForAll.
+ ]
+ ].
+ (fn exists
+ and:[fn isDirectory
+ and:[fn isReadable
+ and:[fn isWritable]]]) ifTrue:[
+ AbstractSourceCodeManager cacheDirectoryName:(self sourceCacheDir value).
+ ] ifFalse:[
+ self warn:'Invalid sourceCache directory.'
+ ]
+ ]
+ ].
+
+ repositoryHolder notNil ifTrue:[
+ repositoryHolder value size > 0 ifTrue:[
+ manager notNil ifTrue:[
+ manager initializeForRepository:repositoryHolder value.
+ ]
+ ].
+ ].
+ ] ifFalse:[
+ Smalltalk at:#SourceCodeManager put:nil
+ ].
+
+ self showErrorNotifier value ifFalse:[
+ Exception emergencyHandler:nil
+ ] ifTrue:[
+ Exception emergencyHandler:(AbstractLauncherApplication notifyingEmergencyHandler)
+ ].
+ DebugView defaultVerboseBacktrace:self showVerboseStack value.
+ currentUserPrefs syntaxColoring:self syntaxColoring value.
+ currentUserPrefs at:#fullSelectorCheck put:self fullSelectorCheck value.
+ currentUserPrefs autoFormatting:self autoFormat value.
+
+ UserPreferences current at:#checkClassesWhenCheckingIn put:self checkClassesWhenCheckingIn value.
+ self modifiedChannel value:false.
+ ].
+!
+
+setupSourceCodeManager
+
+ AbstractLauncherApplication::LauncherDialogs cvsConfigurationDialog.
+ manager := (Smalltalk at:#SourceCodeManager).
+ cvsIsSetup value:manager notNil.
+ manager notNil ifTrue:[
+ repositoryHolder value: manager repositoryName.
+ sourceCacheDir value:(AbstractSourceCodeManager cacheDirectoryName).
+ ].
+!
+
+syntaxColorConfiguration
+ "automatically generated by UIPainter ..."
+
+ "*** the code below performs no action"
+ "*** (except for some feedback on the Transcript)"
+ "*** Please change as required and accept in the browser."
+
+ "action to be added ..."
+
+ Transcript showCR:self class name, ': action for syntaxColorConfiguration ...'.
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl methodsFor:'aspects'!
+
+autoFormat
+
+ autoFormat isNil ifTrue:[
+ autoFormat := currentUserPrefs autoFormatting asValue.
+ autoFormat onChangeSend:#evaluateModified to:self
+ ].
+ ^ autoFormat.
+!
+
+changeFileName
+
+ changeFileName isNil ifTrue:[
+ changeFileName := ObjectMemory nameForChanges asValue.
+ changeFileName onChangeSend:#evaluateModified to:self
+ ].
+ ^ changeFileName.
+!
+
+checkClassesWhenCheckingIn
+
+ checkClassesWhenCheckingIn isNil ifTrue:[
+ checkClassesWhenCheckingIn := (currentUserPrefs at:#checkClassesWhenCheckingIn ifAbsent:true) asValue.
+ checkClassesWhenCheckingIn onChangeSend:#evaluateModified to:self
+ ].
+ ^ checkClassesWhenCheckingIn.
+!
+
+cvsIsSetup
+
+ cvsIsSetup isNil ifTrue:[
+ cvsIsSetup := true asValue.
+"/ if your app needs to be notified of changes, uncomment one of the lines below:
+"/ cvsIsSetup addDependent:self.
+"/ cvsIsSetup onChangeSend:#cvsIsSetupChanged to:self.
+ ].
+ ^ cvsIsSetup.
+!
+
+fullSelectorCheck
+
+ fullSelectorCheck isNil ifTrue:[
+ fullSelectorCheck := currentUserPrefs fullSelectorCheck asValue.
+ fullSelectorCheck onChangeSend:#evaluateModified to:self
+ ].
+ ^ fullSelectorCheck.
+!
+
+localSourceFirst
+
+ localSourceFirst isNil ifTrue:[
+ localSourceFirst := ValueHolder new.
+ localSourceFirst onChangeSend:#evaluateModified to:self
+ ].
+ ^ localSourceFirst.
+!
+
+logDoits
+
+ logDoits isNil ifTrue:[
+ logDoits := Smalltalk logDoits asValue.
+ logDoits onChangeSend:#evaluateModified to:self
+ ].
+ ^ logDoits.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+showErrorNotifier
+
+ showErrorNotifier isNil ifTrue:[
+ showErrorNotifier := (Exception emergencyHandler == AbstractLauncherApplication notifyingEmergencyHandler) asValue.
+ showErrorNotifier onChangeSend:#evaluateModified to:self
+ ].
+ ^ showErrorNotifier.
+!
+
+showVerboseStack
+
+ showVerboseStack isNil ifTrue:[
+ showVerboseStack := (DebugView defaultVerboseBacktrace ? false) asValue.
+ showVerboseStack onChangeSend:#evaluateModified to:self
+ ].
+ ^ showVerboseStack.
+!
+
+sourceCacheDir
+
+ sourceCacheDir isNil ifTrue:[
+ sourceCacheDir := nil asValue.
+ sourceCacheDir addDependent:self.
+ sourceCacheDir onChangeSend:#evaluateModified to:self
+ ].
+ ^ sourceCacheDir.
+!
+
+syntaxColoring
+
+ syntaxColoring isNil ifTrue:[
+ syntaxColoring := currentUserPrefs syntaxColoring asValue.
+ syntaxColoring onChangeSend:#evaluateModified to:self
+ ].
+ ^ syntaxColoring.
+!
+
+updChanges
+
+ updChanges isNil ifTrue:[
+ updChanges := Class updatingChanges asValue.
+ updChanges onChangeSend:#evaluateModified to:self
+ ].
+ ^ updChanges.
+!
+
+useManager
+
+ useManager isNil ifTrue:[
+ useManager := ValueHolder new.
+ useManager onChangeSend:#evaluateModified to:self
+ ].
+ ^ useManager.
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl methodsFor:'change & update'!
+
+sourceDirChanged
+
+ manager notNil ifTrue:[
+ | nm fn|
+ nm := self sourceCacheDir value.
+ nm size > 0 ifTrue:[
+ (fn := nm asFilename) exists ifFalse:[
+ (self confirm:('CVS cache directory ''' , nm , ''' does not exists\create ?' withCRs)) ifTrue:[
+ fn makeDirectory;
+ makeReadableForAll;
+ makeWritableForAll;
+ makeExecutableForAll.
+ ]
+ ].
+ (fn exists
+ and:[fn isDirectory
+ and:[fn isReadable
+ and:[fn isWritable]]]) ifTrue:[
+ AbstractSourceCodeManager cacheDirectoryName:(self sourceCacheDir value).
+ ] ifFalse:[
+ self warn:'Invalid sourceCache directory.'.
+ self sourceCacheDir value:(AbstractSourceCodeManager cacheDirectoryName).
+ ]
+ ]
+ ].
+!
+
+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 sourceCacheDir ifTrue:[
+ ^ self sourceDirChanged.
+ ].
+
+ super update:something with:aParameter from:changedObject
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ currentUserPrefs := UserPreferences current.
+ (AbstractSourceCodeManager notNil
+ and:[AbstractSourceCodeManager isLoaded not]) ifTrue:[
+ AbstractSourceCodeManager autoload.
+ ].
+ repositoryHolder := '' asValue.
+ self loadRequest.
+ super initialize
+!
+
+postOpen
+!
+
+postOpenAsSubcanvasWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenAsSubcanvasWith:aBuilder
+!
+
+postOpenWith:aBuilder
+
+ self postOpen.
+ ^ super postOpenWith:aBuilder
+! !
+
+!AbstractSettingsApplication::SourceAndDebuggerSettingsAppl methodsFor:'queries'!
+
+hasManager
+ ^ AbstractSourceCodeManager notNil
+ and:[AbstractSourceCodeManager isLoaded]
+!
+
+hasUnsavedChanges
+
+ ^ (
+ Smalltalk logDoits ~= self logDoits value or:[
+ Class updatingChanges ~= self updChanges value or:[
+ ObjectMemory nameForChanges ~= self changeFileName value or:[
+ self useManager value ~= (Smalltalk at:#SourceCodeManager) notNil or:[
+ ((self hasManager and:[self useManager value]) and:[
+ Class tryLocalSourceFirst ~= self localSourceFirst value or:[
+ AbstractSourceCodeManager cacheDirectoryName ~= self sourceCacheDir value]]
+ ) or:[
+ self showErrorNotifier value ~= (Exception emergencyHandler == AbstractLauncherApplication notifyingEmergencyHandler) or:[
+ DebugView defaultVerboseBacktrace ? false ~= self showVerboseStack value or:[
+ currentUserPrefs syntaxColoring ? false ~= self syntaxColoring value or:[
+ (currentUserPrefs at:#fullSelectorCheck ifAbsent:false) ~= self fullSelectorCheck value or:[
+ currentUserPrefs autoFormatting ? false ~= self autoFormat value or:[
+ (UserPreferences current at:#checkClassesWhenCheckingIn ifAbsent:true) ~= self checkClassesWhenCheckingIn value
+ ]]]]]]]]]]
+ )
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl class methodsFor:'defaults'!
+
+standardStyles
+
+ ^ #(
+ 'decWindows'
+ 'iris'
+ 'motif'
+ 'mswindows95'
+ 'next'
+ 'normal'
+ 'os2'
+ 'st80'
+ )
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl 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::StyleSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::StyleSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::StyleSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'Style Selection'
+ #name: 'Style Selection'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 12 22 487 553)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#LabelSpec
+ #label: 'Label'
+ #name: 'Label1'
+ #layout: #(#LayoutFrame 0 0.0 -71 1 0 1.0 -34 1)
+ #style: #(#FontDescription #helvetica #bold #roman 12)
+ #translateLabel: true
+ #labelChannel: #infoLabelHolder
+ #resizeForLabel: true
+ #adjust: #left
+ )
+ #(#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)
+ )
+ )
+
+ )
+ )
+ #(#LabelSpec
+ #label: 'NoticeText'
+ #name: 'Text'
+ #layout: #(#LayoutFrame 0 0.0 0 0.0 0 1.0 160 0)
+ #translateLabel: true
+ #labelChannel: #noticeLabelHolder
+ #resizeForLabel: true
+ #adjust: #left
+ )
+ #(#CheckBoxSpec
+ #label: 'standard styles only'
+ #name: 'CheckBox1'
+ #layout: #(#LayoutFrame 0 0.0 160 0 0 1.0 182 0)
+ #model: #showStandardStylesOnly
+ #translateLabel: true
+ )
+ #(#SequenceViewSpec
+ #name: 'StyleList'
+ #layout: #(#LayoutFrame 0 0.0 182 0 0 1.0 -74 1)
+ #model: #selectedStyle
+ #hasHorizontalScrollBar: true
+ #hasVerticalScrollBar: true
+ #useIndex: false
+ #sequenceList: #styleList
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl 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 Style Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ | newStyle master requestor|
+
+ newStyle := self selectedStyle value.
+ master := self masterApplication.
+ master notNil ifTrue:[
+ requestor := master requestor.
+ ].
+ self hasUnsavedChanges ifTrue:[
+ | launcher |
+ requestor notNil ifTrue:[
+ launcher := requestor.
+ ] ifFalse:[
+ | transcript |
+ transcript := Transcript current.
+ transcript notNil ifTrue:[
+ | app|
+ app := transcript topView application.
+ (app respondsTo:#reopenLauncher) ifTrue:[
+ launcher := app.
+ ].
+ ].
+ ].
+ self withWaitCursorDo:[
+ Transcript showCR:'change style to ' , newStyle , ' ...'.
+ View defaultStyle:newStyle asSymbol.
+ ].
+ launcher notNil ifTrue:[
+ launcher reopenLauncher.
+ ].
+ DebugView newDebugger.
+ self modifiedChannel value:false.
+ ].
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl methodsFor:'aspects'!
+
+infoLabelHolder
+
+ infoLabelHolder isNil ifTrue:[
+ infoLabelHolder := '' asValue.
+ ].
+ ^ infoLabelHolder.
+!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+noticeLabelHolder
+
+ noticeLabelHolder isNil ifTrue:[
+ noticeLabelHolder := '' asValue.
+ ].
+ ^ noticeLabelHolder.
+!
+
+selectedStyle
+
+ selectedStyle isNil ifTrue:[
+ selectedStyle := ValueHolder new.
+ selectedStyle addDependent:self.
+ ].
+ ^ selectedStyle.
+!
+
+showStandardStylesOnly
+
+ showStandardStylesOnly isNil ifTrue:[
+ showStandardStylesOnly := true asValue.
+ showStandardStylesOnly addDependent:self.
+ ].
+ ^ showStandardStylesOnly.
+!
+
+styleList
+
+ styleList isNil ifTrue:[
+ styleList := List new.
+ styleList addDependent:self.
+ ].
+ ^ styleList.
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl methodsFor:'change & update'!
+
+changeInfoLabel
+
+ |nm sheet comment|
+
+ comment := ''.
+ nm := self selectedStyle value.
+ nm notNil ifTrue:[
+ sheet := ViewStyle fromFile:(nm , '.style').
+ comment := (sheet at:#comment ifAbsent:'') withoutSeparators.
+ ].
+ comment := comment withCRs asStringCollection.
+ comment size == 1 ifTrue:[
+ comment := comment first
+ ].
+ self infoLabelHolder value:comment
+!
+
+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 showStandardStylesOnly ifTrue:[
+ self updateList.
+ ^ self.
+ ].
+ changedObject == self selectedStyle ifTrue:[
+ self changeInfoLabel.
+ self evaluateModified.
+ ^ self.
+ ].
+
+ super update:something with:aParameter from:changedObject
+!
+
+updateList
+
+ |listOfStyles lastSelection|
+
+ lastSelection := self selectedStyle value.
+ listOfStyles := styleDirectoryContents select:[:aFileName | aFileName asFilename hasSuffix:'style'].
+ listOfStyles := listOfStyles collect:[:aFileName | aFileName asFilename withoutSuffix name].
+ Filename isCaseSensitive ifFalse:[
+ listOfStyles := listOfStyles collect:[:aStyleName | aStyleName asLowercase].
+ ].
+ listOfStyles remove:'generic' ifAbsent:nil; remove:'mswindows3' ifAbsent:nil.
+ self showStandardStylesOnly value ifTrue:[
+ listOfStyles := listOfStyles select:[:aStyleName | self class standardStyles includes:aStyleName].
+ ].
+
+ listOfStyles sort.
+ self styleList contents:listOfStyles.
+ self selectedStyle value:lastSelection.
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl 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:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ |someRsrcFile resourceDir|
+
+ resources := self class owningClass classResources.
+ someRsrcFile := Smalltalk getSystemFileName:('resources' asFilename constructString:'normal.style').
+ someRsrcFile isNil ifTrue:[
+ someRsrcFile := Smalltalk getResourceFileName:'normal.style' forPackage:'stx:libview'.
+ someRsrcFile isNil ifTrue:[
+ someRsrcFile := Smalltalk getResourceFileName:'styles/normal.style' forPackage:'stx:libview'.
+ ].
+ ].
+ someRsrcFile notNil ifTrue:[
+ resourceDir := someRsrcFile asFilename directoryName
+ ] ifFalse:[
+ resourceDir := Smalltalk getSystemFileName:'resources'.
+ ].
+
+ resourceDir isNil ifTrue:[
+ self warn:'no styles found (missing ''resources'' directory)'.
+ ^ self
+ ].
+ styleDirectoryContents := resourceDir asFilename directoryContents.
+ self updateList.
+ (self class standardStyles includes:View defaultStyle) ifFalse:[
+ self showStandardStylesOnly value:false
+ ].
+ self selectedStyle value:(View defaultStyle).
+ self noticeLabelHolder value:(resources at:'STYLE_MSG' default:'Select a Style') withCRs.
+ super initialize
+! !
+
+!AbstractSettingsApplication::StyleSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ (self selectedStyle value ~= View defaultStyle)
+! !
+
+!AbstractSettingsApplication::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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::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.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ 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.
+! !
+
+!AbstractSettingsApplication::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.
+! !
+
+!AbstractSettingsApplication::SystemMessageSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ super initialize
+! !
+
+!AbstractSettingsApplication::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 ]]])
+! !
+
+!AbstractSettingsApplication::ToolsSettingsAppl 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::ToolsSettingsAppl andSelector:#windowSpec
+ AbstractLauncherApplication::ToolsSettingsAppl new openInterface:#windowSpec
+ AbstractLauncherApplication::ToolsSettingsAppl open
+ "
+
+ <resource: #canvas>
+
+ ^
+ #(#FullSpec
+ #name: #windowSpec
+ #window:
+ #(#WindowSpec
+ #label: 'AbstractLauncherApplication::LauncherDialogs::ToolsSettingsAppl'
+ #name: 'AbstractLauncherApplication::LauncherDialogs::ToolsSettingsAppl'
+ #min: #(#Point 10 10)
+ #max: #(#Point 1024 768)
+ #bounds: #(#Rectangle 16 42 491 313)
+ )
+ #component:
+ #(#SpecCollection
+ #collection: #(
+ #(#CheckBoxSpec
+ #label: 'Use the New Changes Browser'
+ #name: 'ChangesBrowser'
+ #layout: #(#LayoutFrame 5 0 5 0 250 0 30 0)
+ #model: #useNewChangesBrowser
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator1'
+ #layout: #(#LayoutFrame 0 0.0 35 0 0 1 38 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Use the New System Browser'
+ #name: 'NewSystemBrowser'
+ #layout: #(#LayoutFrame 250 0 5 0 0 1 30 0)
+ #model: #useNewSystemBrowser
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator2'
+ #layout: #(#LayoutFrame 0 0.0 70 0 0 1 73 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Use the New VersionDiff Browser'
+ #name: 'VersionDiffBrowser'
+ #layout: #(#LayoutFrame 5 0 40 0 250 0 65 0)
+ #model: #useNewVersionDiffBrowser
+ #translateLabel: true
+ )
+ #(#DividerSpec
+ #name: 'Separator3'
+ #layout: #(#LayoutFrame 0 0.0 105 0 0 1 108 0)
+ )
+ #(#CheckBoxSpec
+ #label: 'Use the New File Browser'
+ #name: 'NewFileBrowser'
+ #layout: #(#LayoutFrame 250 0 40 0 0 1 65 0)
+ #model: #useNewFileBrowser
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Use Hierarchical Inspector'
+ #name: 'HierarchicalInspector'
+ #layout: #(#LayoutFrame 5 0 75 0 250 0 100 0)
+ #model: #useNewInspector
+ #translateLabel: true
+ )
+ #(#CheckBoxSpec
+ #label: 'Show Clock in Launcher'
+ #name: 'Clock'
+ #layout: #(#LayoutFrame 250 0 75 0 0 1 100 0)
+ #model: #showClockInLauncher
+ #translateLabel: true
+ )
+ #(#LabelSpec
+ #label: '''Transcripts Buffer Size:'''
+ #name: 'Label1'
+ #layout: #(#LayoutFrame 9 0 133 0 154 0 155 0)
+ #translateLabel: true
+ #adjust: #left
+ )
+ #(#InputFieldSpec
+ #name: 'Transcripts Buffer Size'
+ #layout: #(#LayoutFrame 159 0 133 0 214 0 155 0)
+ #model: #transcriptBufferSize
+ #type: #number
+ #immediateAccept: true
+ #acceptOnReturn: true
+ #acceptOnTab: true
+ #acceptOnLostFocus: true
+ #acceptOnPointerLeave: false
+ )
+ #(#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)
+ )
+ )
+
+ )
+ )
+ )
+
+ )
+ )
+! !
+
+!AbstractSettingsApplication::ToolsSettingsAppl methodsFor:'actions'!
+
+doCancel
+
+ self isPartOfSettinsDialog ifTrue:[
+ self loadRequest.
+ ].
+ self closeRequest.
+!
+
+evaluateModified
+
+ self modifiedChannel value:(self hasUnsavedChanges).
+!
+
+help
+
+ self withWaitCursorDo:[HTMLDocumentView openFullOnHelpFile:'Launcher/toolSettings.html'].
+!
+
+loadRequest
+
+ self showClockInLauncher value:currentUserPrefs showClockInLauncher.
+ self transcriptBufferSize value:Transcript current lineLimit.
+ self useNewChangesBrowser value:currentUserPrefs useNewChangesBrowser.
+ self useNewFileBrowser value:currentUserPrefs useNewFileBrowser.
+ self useNewInspector value:currentUserPrefs useNewInspector.
+ self useNewSystemBrowser value:currentUserPrefs useNewSystemBrowser.
+ self useNewVersionDiffBrowser value:currentUserPrefs useNewVersionDiffBrowser.
+ self modifiedChannel value:false.
+!
+
+saveRequest
+ | result |
+
+ (self hasUnsavedChanges) ifTrue:[
+ result := self confirmWithCancel:(resources string:'Save changed Tool Settings ?').
+ result isNil ifTrue:[ ^ false].
+ result ifTrue:[
+ self saveSettings.
+ ] ifFalse:[
+ self loadRequest.
+ ]
+ ].
+ ^ true
+!
+
+saveSettings
+
+ | showClock launcher |
+
+ currentUserPrefs useNewInspector:self useNewInspector value.
+ currentUserPrefs useNewChangesBrowser:self useNewChangesBrowser value.
+ currentUserPrefs useNewSystemBrowser:self useNewSystemBrowser value.
+ currentUserPrefs useNewVersionDiffBrowser:self useNewVersionDiffBrowser value.
+ currentUserPrefs useNewFileBrowser:self useNewFileBrowser value.
+ (Smalltalk at:#FileBrowserV2) isBehavior ifTrue:[
+ self useNewFileBrowser value ifTrue:[
+ FileBrowserV2 installInLauncher.
+ ] ifFalse:[
+ FileBrowserV2 isLoaded ifTrue:[
+ FileBrowserV2 removeFromLauncher.
+ ]
+ ].
+ ].
+ showClock := self showClockInLauncher value.
+ currentUserPrefs showClockInLauncher ~= showClock ifTrue:[
+ currentUserPrefs showClockInLauncher:showClock.
+ launcher := Transcript application.
+ (launcher isKindOf:ToolApplicationModel) ifTrue:[
+ showClock ifTrue:[
+ launcher startClock
+ ] ifFalse:[
+ launcher stopClock
+ ]
+ ]
+ ].
+ Inspector := currentUserPrefs inspectorClassSetting.
+ Transcript current lineLimit:self transcriptBufferSize value.
+ self modifiedChannel value:false.
+! !
+
+!AbstractSettingsApplication::ToolsSettingsAppl methodsFor:'aspects'!
+
+modifiedChannel
+
+ modifiedChannel isNil ifTrue:[
+ modifiedChannel := false asValue.
+ ].
+ ^ modifiedChannel
+!
+
+showClockInLauncher
+
+ showClockInLauncher isNil ifTrue:[
+ showClockInLauncher := currentUserPrefs showClockInLauncher asValue.
+ showClockInLauncher onChangeSend:#evaluateModified to:self
+ ].
+ ^ showClockInLauncher.
+!
+
+transcriptBufferSize
+
+ transcriptBufferSize isNil ifTrue:[
+ transcriptBufferSize := Transcript current lineLimit asValue.
+ transcriptBufferSize onChangeSend:#evaluateModified to:self
+ ].
+ ^ transcriptBufferSize.
+!
+
+useNewChangesBrowser
+
+ useNewChangesBrowser isNil ifTrue:[
+ useNewChangesBrowser := currentUserPrefs useNewChangesBrowser asValue.
+ useNewChangesBrowser onChangeSend:#evaluateModified to:self
+ ].
+ ^ useNewChangesBrowser.
+!
+
+useNewFileBrowser
+
+ useNewFileBrowser isNil ifTrue:[
+ useNewFileBrowser := currentUserPrefs useNewFileBrowser asValue.
+ useNewFileBrowser onChangeSend:#evaluateModified to:self
+ ].
+ ^ useNewFileBrowser.
+!
+
+useNewInspector
+
+ useNewInspector isNil ifTrue:[
+ useNewInspector := currentUserPrefs useNewInspector asValue.
+ useNewInspector onChangeSend:#evaluateModified to:self
+ ].
+ ^ useNewInspector.
+!
+
+useNewSystemBrowser
+
+ useNewSystemBrowser isNil ifTrue:[
+ useNewSystemBrowser := currentUserPrefs useNewSystemBrowser asValue.
+ useNewSystemBrowser onChangeSend:#evaluateModified to:self
+ ].
+ ^ useNewSystemBrowser.
+!
+
+useNewVersionDiffBrowser
+
+ useNewVersionDiffBrowser isNil ifTrue:[
+ useNewVersionDiffBrowser := currentUserPrefs useNewVersionDiffBrowser asValue.
+ useNewVersionDiffBrowser onChangeSend:#evaluateModified to:self
+ ].
+ ^ useNewVersionDiffBrowser.
+! !
+
+!AbstractSettingsApplication::ToolsSettingsAppl methodsFor:'initialization & release'!
+
+closeRequest
+
+ self saveRequest ifFalse:[
+ ^ self
+ ].
+
+ ^ super closeRequest.
+!
+
+initialize
+
+ resources := self class owningClass classResources.
+ currentUserPrefs := UserPreferences current.
+ super initialize
+! !
+
+!AbstractSettingsApplication::ToolsSettingsAppl methodsFor:'queries'!
+
+hasUnsavedChanges
+
+ ^ ((self useNewInspector value ~= currentUserPrefs useNewInspector) or:[
+ (self useNewChangesBrowser value ~= currentUserPrefs useNewChangesBrowser) or:[
+ (self useNewSystemBrowser value ~= currentUserPrefs useNewSystemBrowser) or:[
+ (self showClockInLauncher value ~= currentUserPrefs showClockInLauncher) or:[
+ (self useNewVersionDiffBrowser value ~= currentUserPrefs useNewVersionDiffBrowser) or:[
+ (self useNewFileBrowser value ~= currentUserPrefs useNewFileBrowser) or:[
+ (self transcriptBufferSize value ~= Transcript current lineLimit)]]]]]])
+! !
+
!AbstractSettingsApplication class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.3 2002-11-11 17:54:42 penk Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.4 2002-11-19 14:11:02 penk Exp $'
! !