Search String
authorfm
Mon, 19 Mar 2007 12:07:20 +0100
changeset 2163 641467b2f522
parent 2162 37159708ecef
child 2164 3c5fe1d92046
Search String
Tools__InternationalLanguageTranslationEditor.st
--- a/Tools__InternationalLanguageTranslationEditor.st	Sat Mar 17 12:38:37 2007 +0100
+++ b/Tools__InternationalLanguageTranslationEditor.st	Mon Mar 19 12:07:20 2007 +0100
@@ -15,7 +15,8 @@
 		lastSelectedKey autoAcceptHolder languageEditor
 		selectedColIndexHolder exampleLanguageSelectionHolder
 		exampleLanguageTextHolder pastePreviousTranslationEnableHolder
-		searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder'
+		searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder
+		lastNameSpace'
 	classVariableNames:'LastExtractedClass LastExtractedApplicationClass
 		LastExtractedProject'
 	poolDictionaries:''
@@ -114,7 +115,6 @@
           label: 'InternationalLanguageTranslationEditor'
           name: 'InternationalLanguageTranslationEditor'
           min: (Point 10 10)
-          max: (Point 1024 768)
           bounds: (Rectangle 0 0 778 614)
           menu: mainMenu
         )
@@ -136,6 +136,7 @@
                  (DataSetSpec
                     name: 'KeyStringAndLanguageSelectionTable'
                     model: selectedKeyRow
+                    menu: keyStringAndLanguageSelectionTableMenu
                     hasHorizontalScrollBar: true
                     hasVerticalScrollBar: true
                     dataList: keyStringAndLanguageSelectionTable
@@ -263,6 +264,39 @@
 
 !InternationalLanguageTranslationEditor class methodsFor:'menu specs'!
 
+keyStringAndLanguageSelectionTableMenu
+    "This resource specification was automatically generated
+     by the MenuEditor of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the MenuEditor may not be able to read the specification."
+
+    "
+     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyStringAndLanguageSelectionTableMenu
+     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp
+    "
+
+    <resource: #menu>
+
+    ^ 
+     #(Menu
+        (
+         (MenuItem
+            label: 'Current NameSpace:'
+            itemValue: changeLastNameSpace
+            translateLabel: true
+          )
+         (MenuItem
+            label: 'Search String in Current NameSpace:'
+            itemValue: searchStringInLastNameSpace
+            translateLabel: true
+          )
+         )
+        nil
+        nil
+      )
+!
+
 mainMenu
     "This resource specification was automatically generated
      by the MenuEditor of ST/X."
@@ -321,6 +355,14 @@
                   label: '-'
                 )
                (MenuItem
+                  label: 'Current NameSpace:'
+                  itemValue: changeLastNameSpace
+                  translateLabel: true
+                )
+               (MenuItem
+                  label: '-'
+                )
+               (MenuItem
                   label: 'Exit'
                   itemValue: closeRequest
                   translateLabel: true
@@ -405,6 +447,11 @@
                   translateLabel: true
                 )
                (MenuItem
+                  label: 'Extract from NameSpace...'
+                  itemValue: extractTranslationsFromNameSpace
+                  translateLabel: true
+                )
+               (MenuItem
                   label: '-'
                 )
                (MenuItem
@@ -612,15 +659,17 @@
 
 newLanguageText
 "/   languageEditor accept
-^self languageTextHolder value isNil 
-    ifTrue:['']
-    ifFalse:[self languageTextHolder value asCollectionOfLines first.]
+    ^self languageTextHolder value isNil 
+        ifTrue:['']
+        ifFalse:[self languageTextHolder value asCollectionOfLines first.]
 !
 
 selectedKey  
    "Returns the current selected key if there is one row seleted. Otherwise, returns nil"
      |rowSelectionIndex |
 
+    keyStringsToLanguageMappings isNil ifTrue:[^nil].
+    self selectedKeyRow value isNil ifTrue:[^nil].
     rowSelectionIndex := self selectedKeyRow value.
     rowSelectionIndex == 0 ifTrue:[^nil].
     ^ keyStringsToLanguageMappings keyAt:rowSelectionIndex.
@@ -629,29 +678,28 @@
 !InternationalLanguageTranslationEditor methodsFor:'additionalFuncionalities'!
 
 searchForSimilarTranslation
-"Looks for a quite similar translation for the key and display a dialog with available options"
-|similarTranslationsAssociations selectedTranslation|
+    "Looks for a quite similar translation for the key and display a dialog with available options"
+    |similarTranslationsAssociations selectedTranslation|
 
-self shouldSearchForSimilarTranslation ifFalse:[^self]. 
+    self shouldSearchForSimilarTranslation ifFalse:[^self]. 
 
-similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: self selectedKey in: self currentLanguage.
-similarTranslationsAssociations isEmpty ifTrue:[^self].    
+    similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: self selectedKey in: self currentLanguage.
+    similarTranslationsAssociations isEmpty ifTrue:[^self].    
 
-similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
-    collection detect:[:selectedAssociation |
-        selectedAssociation value sameAs: association value] ifNone:[collection add: association].
-    collection].
-selectedTranslation := Dialog 
-    choose:'Choose one if you consider itīs usefull to translate: 
-', 
-    '<', self selectedKey, '>  ',
-    self currentExampleLanguageText
-    fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
-    values: (similarTranslationsAssociations collect:[:each | each value])
-    lines:10
-    cancel: nil.      
+    similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
+        collection detect:[:selectedAssociation |
+            selectedAssociation value sameAs: association value] ifNone:[collection add: association].
+        collection].
+    selectedTranslation := Dialog 
+        choose:'Choose one if you consider itīs usefull to translate: 
+    ', 
+        '<', self selectedKey, '>  ', (self currentExampleLanguageText ifNil:[''])
+        fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
+        values: (similarTranslationsAssociations collect:[:each | each value])
+        lines:10
+        cancel: nil.      
 
-selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. 
+    selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. 
 ! !
 
 !InternationalLanguageTranslationEditor methodsFor:'aspects'!
@@ -813,8 +861,8 @@
 
 languageTextHolderValue: aString
 
-self languageTextHolder value: aString.
-self languageTextModifiedHolder value:true.
+    self languageTextHolder value: aString.
+    self languageTextModifiedHolder value:true.
 !
 
 update:something with:aParameter from:changedObject
@@ -838,7 +886,7 @@
 
 updateCopyPreviousTranslationButtonEnabled
 
- self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled
+     self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled
 !
 
 updateExampleLanguageText
@@ -875,23 +923,23 @@
 
 updateOriginalTextModification
 
-|answer|
+    |answer|
 
-    self originalTextModifiedHolder value ifTrue:[ 
-        answer := OptionBox 
-                      request:'Accept changed original text (key) ?' 
-                      label:'Original text (key) changed'
-                      image:(WarningBox iconBitmap)
-                      buttonLabels:#('Cancel' 'Accept' 'Accept As New')
-                      values:#(nil #accept #acceptAsNew)
-                      default:#acceptAsNew.
+        self originalTextModifiedHolder value ifTrue:[ 
+            answer := OptionBox 
+                          request:'Accept changed original text (key) ?' 
+                          label:'Original text (key) changed'
+                          image:(WarningBox iconBitmap)
+                          buttonLabels:#('Cancel' 'Accept' 'Accept As New')
+                          values:#(nil #accept #acceptAsNew)
+                          default:#acceptAsNew.
 
-        answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
-        answer == #accept ifTrue:[
-self halt.        ].
-        answer == #acceptAsNew ifTrue:[
-self halt.        ].
-    ].
+            answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
+            answer == #accept ifTrue:[
+    self halt.        ].
+            answer == #acceptAsNew ifTrue:[
+    self halt.        ].
+        ].
 ! !
 
 !InternationalLanguageTranslationEditor methodsFor:'dialogs'!
@@ -1012,7 +1060,7 @@
 
     key := Dialog request:'New Key:'.
     key isEmpty ifTrue:[^self].
-    (keyStringsToLanguageMappings includesKey:key) ifFalse:[
+    (self includesKey:key) ifFalse:[
         keyStringsToLanguageMappings addKey:key.
         modified := true.
     ].
@@ -1020,6 +1068,20 @@
    self selectedKeyRow value:index
 !
 
+changeLastNameSpace
+
+    |nameSpace defaultNameSpace|
+
+    lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name].
+    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace.
+    nameSpace isNil ifTrue:[^self].
+    nameSpace := Smalltalk at:nameSpace asSymbol.
+    nameSpace isNil ifTrue:[
+        ^Dialog information:(resources string:'No such nameSpace exists.?') 
+    ].
+    lastNameSpace := nameSpace.
+!
+
 extractTranslationsFromClass
     |aClass newTranslations|
 
@@ -1035,6 +1097,19 @@
     self addAllTranslations:newTranslations.
 !
 
+extractTranslationsFromNameSpace
+
+    |newTranslations|
+
+    self changeLastNameSpace.
+    lastNameSpace isNil ifTrue:[^self.].
+    newTranslations := OrderedCollection new.
+    lastNameSpace allClassesDo:[:eachClass |
+        newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
+    ].
+    self addAllTranslations:newTranslations.
+!
+
 extractTranslationsFromProject
     |box projectID newTranslations|
 
@@ -1067,6 +1142,35 @@
     self addAllTranslations:newTranslations.
 !
 
+inspectCanvasMissingStrings
+
+    |spec nameSpace missingStrings|
+
+    missingStrings := OrderedCollection new.
+    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil.
+    nameSpace := Smalltalk at:nameSpace asSymbol.
+    nameSpace isNil ifTrue:[
+        ^Dialog information:(resources string:'No such nameSpace exists.?') 
+    ].
+
+    nameSpace allClassesDo:[:cls |
+        cls theMetaclass methodsDo:[:m |
+            m hasResource ifTrue:[
+                (m resources includesKey:#canvas) ifTrue:[
+                    spec := (cls perform:m selector) decodeAsLiteralArray.
+                    spec do:[:eachComponent |
+                        eachComponent translationKeysDo:[:k | 
+                            (self includesKey: k) ifFalse:[
+                                missingStrings add: k. 
+                                Transcript showCR: k storeString, '                         ', m printString]]
+                    ]
+                ]
+            ]
+        ]
+    ].
+    missingStrings asSet inspect
+!
+
 menuNew
     modified ifTrue:[
         (Dialog 
@@ -1085,9 +1189,11 @@
 menuOpen
     |aFilename|
 
-    aFilename := self requestFilename.
-    aFilename isNil ifTrue:[^ self ].
-    self readResourceFile:aFilename
+    self withWaitCursorDo:[
+        aFilename := self requestFilename.
+        aFilename isNil ifTrue:[^ self ].
+        self readResourceFile:aFilename.
+    ]
 !
 
 menuSave
@@ -1161,8 +1267,10 @@
     |rowSelectionIndex selectedKey|
 
     rowSelectionIndex := self selectedKeyRow value.
+    rowSelectionIndex isNil ifTrue:[^self].
     rowSelectionIndex ~~ 0 ifTrue:[
         selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil.
+        selectedKey isNil ifTrue:[^self].
         (Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[
             keyStringsToLanguageMappings removeKey:selectedKey.
         ].
@@ -1226,6 +1334,30 @@
             monitoredApplication := nil.
         ].
     ] fork.
+!
+
+searchStringInLastNameSpace
+
+    |selectedKey browser|
+
+    selectedKey := self selectedKey.
+    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
+    browser := NewSystemBrowser new "open".
+    browser allButOpen.
+    browser lastSearchPatterns first = selectedKey ifFalse:[
+        browser lastSearchPatterns addFirst: selectedKey
+    ].
+    lastNameSpace isNil ifTrue:[
+        self changeLastNameSpace.
+    ].
+    lastNameSpace notNil ifTrue:[
+"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
+        browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name).
+        browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name).
+    ].
+    self withWaitCursorDo:[
+        browser browseMenuMethodsWithString
+    ].
 ! !
 
 !InternationalLanguageTranslationEditor methodsFor:'menus dynamic'!
@@ -1536,7 +1668,7 @@
 
 currentLanguage
 
-|colSelectionIndex |
+    |colSelectionIndex |
 
     colSelectionIndex := dataSetView selectedColIndex.
     ^colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil.
@@ -1544,9 +1676,9 @@
 
 exampleLanguageByDefault
 
-^self shownLanguages isEmpty
-    ifTrue:[nil]
-    ifFalse:[self shownLanguages first]
+    ^self shownLanguages isEmpty
+        ifTrue:[nil]
+        ifFalse:[self shownLanguages first]
 !
 
 hasFirstRowSelection
@@ -1563,9 +1695,14 @@
     ^ modified
 !
 
+includesKey: aKey
+    keyStringsToLanguageMappings isNil ifTrue:[^false].
+    ^keyStringsToLanguageMappings includesKey:aKey
+!
+
 isSearchForSimilarTranslationEnabled
 
-^self searchForSimilarTranslationEnableHolder value
+    ^self searchForSimilarTranslationEnableHolder value
 !
 
 languageTextFromKey: aKeyIndex for: language
@@ -1588,73 +1725,73 @@
 
 shouldSearchForSimilarTranslation
 
-self isSearchForSimilarTranslationEnabled ifFalse:[^false].
-(self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false].
-(self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false].
-^true
+    self isSearchForSimilarTranslationEnabled ifFalse:[^false].
+    (self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false].
+    (self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false].
+    ^true
 ! !
 
 !InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'!
 
 encoderAt: lang
 
-self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8].
-^keyStringsToLanguageMappings encoderAt: lang.
+    self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8].
+    ^keyStringsToLanguageMappings encoderAt: lang.
 !
 
 printEditingWarningOn: aStream
 
-aStream nextPutAll: ';';
-        cr;
-        nextPutAll: '; WARNING:';
-        cr;
-        nextPutAll: '; this file contains national characters';
-        cr;
-        nextPutAll: '; DONT EDIT this file with an old vi !!';
-        cr;
-        nextPutAll: ';';
-        cr; 
-        cr.
+    aStream nextPutAll: ';';
+            cr;
+            nextPutAll: '; WARNING:';
+            cr;
+            nextPutAll: '; this file contains national characters';
+            cr;
+            nextPutAll: '; DONT EDIT this file with an old vi !!';
+            cr;
+            nextPutAll: ';';
+            cr; 
+            cr.
 !
 
 printEncoderFor: lang on: aStream
-|characterEncoder encoderString|
+    |characterEncoder encoderString|
 
-characterEncoder := self encoderAt: lang.
-encoderString := characterEncoder isNil 
-    ifTrue:[self requestEncoderStringFor: lang]
-    ifFalse:[characterEncoder nameOfEncoding printString].
+    characterEncoder := self encoderAt: lang.
+    encoderString := characterEncoder isNil 
+        ifTrue:[self requestEncoderStringFor: lang]
+        ifFalse:[characterEncoder nameOfEncoding printString].
 
-aStream nextPutAll: '#encoding';
-        space;
-        nextPutAll: encoderString;
-        cr;
-        cr.
+    aStream nextPutAll: '#encoding';
+            space;
+            nextPutAll: encoderString;
+            cr;
+            cr.
 !
 
 printLanguage: lang on: aStream
 
-self printEncoderFor: lang on: aStream.
-self printEditingWarningOn: aStream.
-self printLanguageMappingsFor: lang on: aStream.
+    self printEncoderFor: lang on: aStream.
+    self printEditingWarningOn: aStream.
+    self printLanguageMappingsFor: lang on: aStream.
 !
 
 printLanguageMappingsFor: lang on: aStream
 
-|orderedAssociations maxKeySize characterEncoder|   
+    |orderedAssociations maxKeySize characterEncoder|   
 
-characterEncoder := self encoderAt: lang.
-characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
-orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. 
+    characterEncoder := self encoderAt: lang.
+    characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
+    orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. 
 
-maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.     
+    maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.     
 
-orderedAssociations do:[:association |
-    aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; 
-        nextPutAll: (String new: 10);
-        nextPutAll: (characterEncoder encodeString: association value) storeString;
-        cr.
-    ].
+    orderedAssociations do:[:association |
+        aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; 
+            nextPutAll: (String new: 10);
+            nextPutAll: (characterEncoder encodeString: association value) storeString;
+            cr.
+        ].
 !
 
 readResourceFile:aFilename asLanguage:lang
@@ -1717,14 +1854,14 @@
 
 saveResourceFile: aFilename for: lang
 
-|aStream |
+    |aStream |
 
-keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
-aStream := FileStream newFileNamed: aFilename.  
-self printLanguage: lang on: aStream.
-aStream flush;
-        close.
-DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
+    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
+    aStream := FileStream newFileNamed: aFilename.  
+    self printLanguage: lang on: aStream.
+    aStream flush;
+            close.
+    DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
 ! !
 
 !InternationalLanguageTranslationEditor methodsFor:'specs-dynamic'!
@@ -1773,12 +1910,12 @@
 !
 
 languageTextAccepted                                   
-|nextRowIndex|
-keyStringsToLanguageMappings size = self selectedKeyRow value
-    ifTrue:[ self updateLanguageTextModification.]
-    ifFalse:[ 
-        nextRowIndex := self selectedKeyRow value + 1.
-        self selectedKeyRow value: nextRowIndex].
+    |nextRowIndex|
+    keyStringsToLanguageMappings size = self selectedKeyRow value
+        ifTrue:[ self updateLanguageTextModification.]
+        ifFalse:[ 
+            nextRowIndex := self selectedKeyRow value + 1.
+            self selectedKeyRow value: nextRowIndex].
 !
 
 pastePreviousTranslationInLanguageText