AbstractSettingsApplication.st
changeset 5561 aea14004c977
parent 5556 f9583d708764
child 5563 5d27879814a5
--- a/AbstractSettingsApplication.st	Sat Feb 21 17:40:29 2004 +0100
+++ b/AbstractSettingsApplication.st	Sat Feb 21 17:41:56 2004 +0100
@@ -98,8 +98,10 @@
 !
 
 AbstractSettingsApplication subclass:#LanguageSettingsAppl
-	instanceVariableNames:'languageHolder languageList listOfLanguages translatedLanguages
-		noticeLabelHolder currentLanguageChannel currentLanguageLabel'
+	instanceVariableNames:'languageHolder languageIndexHolder languageList
+		languageListHolder listOfLanguages translatedLanguages
+		noticeLabelHolder currentFlagAndLanguageChannel
+		currentLanguageLabel'
 	classVariableNames:''
 	poolDictionaries:''
 	privateIn:AbstractSettingsApplication
@@ -3902,7 +3904,7 @@
           label: 'Language Settings'
           name: 'Language Settings'
           min: (Point 10 10)
-          bounds: (Rectangle 0 0 539 851)
+          bounds: (Rectangle 0 0 571 941)
         )
         component: 
        (SpecCollection
@@ -3916,9 +3918,9 @@
               adjust: left
             )
            (LabelSpec
-              label: 'Current:'
+              label: 'Current Language:'
               name: 'Label1'
-              layout: (LayoutFrame 134 0 0 0 -150 1 20 0)
+              layout: (LayoutFrame 51 0 0 0 -233 1 20 0)
               translateLabel: true
               labelChannel: currentLanguageLabel
               adjust: right
@@ -3926,10 +3928,10 @@
            (LabelSpec
               label: 'Label'
               name: 'CurrentLang'
-              layout: (LayoutFrame -150 1 0 0 0 1 20 0)
-              style: (FontDescription helvetica bold roman 12)
+              layout: (LayoutFrame -233 1 0 0 0 1 20 0)
+              style: (FontDescription arial bold roman 10)
               translateLabel: true
-              labelChannel: currentLanguageChannel
+              labelChannel: currentFlagAndLanguageChannel
               adjust: left
             )
            (InputFieldSpec
@@ -3944,12 +3946,12 @@
            (SequenceViewSpec
               name: 'List1'
               layout: (LayoutFrame 2 0.0 186 0 -2 1.0 -30 1.0)
-              model: languageHolder
+              model: languageIndexHolder
               hasHorizontalScrollBar: true
               hasVerticalScrollBar: true
               doubleClickSelector: doubleClick:
-              useIndex: false
-              sequenceList: languageList
+              useIndex: true
+              sequenceList: languageListHolder
             )
            (HorizontalPanelViewSpec
               name: 'HorizontalPanel1'
@@ -3990,17 +3992,12 @@
 !AbstractSettingsApplication::LanguageSettingsAppl methodsFor:'actions'!
 
 basicSaveSettings
-    |fontPref fontPrefs idx language oldLanguage territory enc 
-     answer matchingFonts l screen newLanguage switch dialog anyWrong|
-
-    newLanguage := self languageHolder value.
+    |fontPref fontPrefs language oldLanguage languageString territory enc 
+     answer matchingFonts l screen switch dialog anyWrong|
+
+    language := self languageHolder value.
     self withWaitCursorDo:[
-        idx := translatedLanguages indexOf:newLanguage.
-        idx ~~ 0 ifTrue:[
-            language := listOfLanguages at:idx
-        ] ifFalse:[
-            language := newLanguage
-        ].
+        languageString := translatedLanguages at:(self languageIndexHolder value).
         (language includes:$-) ifTrue:[
             l := language asCollectionOfSubstringsSeparatedBy:$-.
             language := l at:1.
@@ -4044,7 +4041,7 @@
         anyWrong := false.
         (Array
             with:MenuView defaultFont
-            with:ListView defaultFont
+            "/ with:ListView defaultFont
             with:EditTextView defaultFont
             with:Button defaultFont)
         do:[:fn |
@@ -4097,7 +4094,7 @@
         ].
 
         switch ifTrue:[
-            Transcript showCR:'Changing language setting to ' , newLanguage string , ' (' , language , ')...'.
+            Transcript showCR:'Changing language setting to ' , languageString string , ' (' , language , ')...'.
             Smalltalk language:language asSymbol.
             Smalltalk languageTerritory:territory asSymbol.
             ResourcePack flushCachedResourcePacks.
@@ -4112,11 +4109,14 @@
         ].
         DebugView newDebugger.
     ].
-    self currentLanguageChannel value:self currentLanguage.
+    self initializeLanguages.
+    self languageListHolder value:languageList.
+    self currentFlagAndLanguageChannel value:self currentLanguage.
+    self setCurrentLanguageLabel.
+    self setNoticeLabel.
 !
 
 doubleClick:aEntry
-
     self saveSettingsIfUnsavedChangesArePresent.
 !
 
@@ -4126,7 +4126,7 @@
 
 readSettings
     self languageHolder value:self currentLanguage.
-    self currentLanguageChannel value:self currentLanguage.
+    self currentFlagAndLanguageChannel value:self currentLanguage.
     self modifiedChannel value:false
 !
 
@@ -4142,24 +4142,22 @@
 
 !AbstractSettingsApplication::LanguageSettingsAppl methodsFor:'aspects'!
 
-currentLanguageChannel
-
-    currentLanguageChannel isNil ifTrue:[
-        currentLanguageChannel := self currentLanguage asValue.
-    ].
-    ^ currentLanguageChannel.
+currentFlagAndLanguageChannel
+    currentFlagAndLanguageChannel isNil ifTrue:[
+        currentFlagAndLanguageChannel := self currentLanguage asValue.
+    ].
+    ^ currentFlagAndLanguageChannel.
 !
 
 currentLanguageLabel
-
     currentLanguageLabel isNil ifTrue:[
-        currentLanguageLabel := (resources string:'Current Language:') asValue.
+        currentLanguageLabel := ValueHolder new.
+        self setCurrentLanguageLabel.
     ].
     ^ currentLanguageLabel.
 !
 
 languageHolder
-
     languageHolder isNil ifTrue:[
         languageHolder := self currentLanguage asValue.
         languageHolder onChangeSend:#updateModifiedChannel to:self.
@@ -4167,38 +4165,55 @@
     ^ languageHolder.
 !
 
+languageIndexChanged
+    self languageHolder value:(listOfLanguages at:self languageIndexHolder value).
+    self updateModifiedChannel.
+!
+
+languageIndexHolder
+    languageIndexHolder isNil ifTrue:[
+        languageIndexHolder := (self currentLanguageIndex) asValue.
+        languageIndexHolder onChangeSend:#languageIndexChanged to:self.
+    ].
+    ^ languageIndexHolder.
+!
+
+languageListHolder
+    languageListHolder isNil ifTrue:[
+        languageListHolder := self languageList asValue.
+    ].
+    ^ languageListHolder.
+!
+
 noticeLabelHolder
-
     noticeLabelHolder isNil ifTrue:[
-        noticeLabelHolder := ((resources at:'LANG_MSG' default:'Select a Language') withCRs) asValue.
+        noticeLabelHolder := ValueHolder new.
+        self setNoticeLabel.
     ].
     ^ noticeLabelHolder.
+!
+
+setCurrentLanguageLabel
+    currentLanguageLabel value: (resources string:'Current Language:')
+!
+
+setNoticeLabel
+    noticeLabelHolder value: ((resources at:'LANG_MSG' default:'Select a Language') withCRs).
 ! !
 
 !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
-!
-
 initialize
-
+    self initializeLanguages.
+    super initialize.
+!
+
+initializeLanguages
     |flags|
 
-    listOfLanguages := self class classResources at:'LIST_OF_OFFERED_LANGUAGES' default:#('default').
+    resources := self class classResources.
+
+    listOfLanguages := resources at:'LIST_OF_OFFERED_LANGUAGES' default:#('default').
     listOfLanguages := listOfLanguages asOrderedCollection.
     translatedLanguages := listOfLanguages 
                                 collect:[:lang | |item|
@@ -4240,25 +4255,37 @@
                                         ]
                            ].
     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 ifAbsent:1)
+    ^ languageList at:(self currentLanguageIndex)
+!
+
+currentLanguageIndex
+    | langIdx |
+
+    (Language ~= LanguageTerritory) ifTrue:[
+        langIdx := listOfLanguages indexOf:(Language , '-' , LanguageTerritory) ifAbsent:nil.
+    ].
+    langIdx isNil ifTrue:[
+        langIdx := listOfLanguages indexOf:Language ifAbsent:nil.
+    ].
+    langIdx isNil ifTrue:[
+        langIdx := listOfLanguages indexOf:'en' ifAbsent:nil.
+        langIdx isNil ifTrue:[
+            langIdx := listOfLanguages indexOf:'en-us' ifAbsent:nil.
+    
+            langIdx isNil ifTrue:[
+                langIdx := 1.
+            ]
+        ]
+    ].
+    ^ langIdx
 !
 
 hasUnsavedChanges
-
     ^ (self languageHolder value) ~= (self currentLanguage)  
 ! !
 
@@ -11146,5 +11173,5 @@
 !AbstractSettingsApplication class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.136 2004-02-20 18:47:54 cg Exp $'
-! !
+    ^ '$Header: /cvs/stx/stx/libtool/AbstractSettingsApplication.st,v 1.137 2004-02-21 16:41:56 cg Exp $'
+! !