# HG changeset patch # User Claus Gittinger # Date 1537008195 -7200 # Node ID cfbc0a29b03007f23ca5d09a5e5fbb7a285de13c # Parent c7c138eb0d866d63515ae4985da4dd58d4d13d1c #UI_ENHANCEMENT by cg class: Tools::InternationalLanguageTranslationEditor comment/format in: #languageEditorBuilt: #requestFilenameFor: #saveLanguage: changed: #requestLanguageToSave #update:with:from: class: Tools::InternationalLanguageTranslationEditor class changed: #windowSpec diff -r c7c138eb0d86 -r cfbc0a29b030 Tools__InternationalLanguageTranslationEditor.st --- a/Tools__InternationalLanguageTranslationEditor.st Sat Aug 25 03:36:06 2018 +0000 +++ b/Tools__InternationalLanguageTranslationEditor.st Sat Sep 15 12:43:15 2018 +0200 @@ -1,3 +1,5 @@ +"{ Encoding: utf8 }" + "{ Package: 'stx:libtool2' }" "{ NameSpace: Tools }" @@ -314,249 +316,276 @@ - ^ + ^ #(FullSpec name: windowSpec - window: + uuid: '37d7f37a-b8d0-11e8-aeef-b8f6b1108e05' + window: (WindowSpec - label: 'InternationalLanguageTranslationEditor' - name: 'InternationalLanguageTranslationEditor' - min: (Point 10 10) - bounds: (Rectangle 0 0 774 610) - menu: mainMenu + label: 'InternationalLanguageTranslationEditor' + name: 'InternationalLanguageTranslationEditor' + uuid: '37d7f60e-b8d0-11e8-aeef-b8f6b1108e05' + min: (Point 10 10) + bounds: (Rectangle 0 0 774 610) + menu: mainMenu ) - component: + component: (SpecCollection - collection: ( - (MenuPanelSpec - name: 'ToolBar' - layout: (LayoutFrame 0 0 0 0 0 1 30 0) - menu: menuToolBar - textDefault: true - ) - (VariableVerticalPanelSpec - name: 'TranslationsVariableVerticalPanel' - layout: (LayoutFrame 0 0 30 0 0 1 -32 1) - component: - (SpecCollection - collection: ( - (DataSetSpec - name: 'KeyStringAndLanguageSelectionTable' - model: selectedKeyRow - menu: keyStringAndLanguageSelectionTableMenu - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - dataList: keyStringAndLanguageSelectionTable - columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder - beDependentOfRows: true - columnAdaptor: yourself - postBuildCallback: postBuildDataSet: - ) - (VariableVerticalPanelSpec - name: 'VariableVerticalPanel1' - component: - (SpecCollection - collection: ( - (ViewSpec - name: 'Box1' - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Original String (Key):' - name: 'Label2' - layout: (LayoutFrame 0 0 -2 0 0 1 28 0) - translateLabel: true - adjust: left - ) - (TextEditorSpec - name: 'OriginalText' - layout: (LayoutFrame 0 0 27 0 0 1 -2 1) - model: originalTextHolder - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - modifiedChannel: originalTextModifiedHolder - acceptCallBack: languageTextAccepted - hasKeyboardFocusInitially: false - ) - ) - - ) - ) - (ViewSpec - name: 'Box3' - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Select Another Language as example:' - name: 'Label3' - layout: (LayoutFrame 0 0 -6 0 0 1 24 0) - translateLabel: true - adjust: left - ) - (ComboBoxSpec - name: 'ComboBox1' - layout: (LayoutFrame 281 0 -2 0 406 0 18 0) - model: exampleLanguageSelectionHolder - immediateAccept: false - acceptOnLeave: true - acceptOnLostFocus: true - acceptOnPointerLeave: false - comboList: shownLanguages - useIndex: false - ) - (TextEditorSpec - name: 'ExampleLanguageText' - layout: (LayoutFrame 0 0 30 0 0 1 0 1) - model: exampleLanguageTextHolder - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - isReadOnly: true - hasKeyboardFocusInitially: false - ) - ) - - ) - ) - (ViewSpec - name: 'Box2' - component: - (SpecCollection - collection: ( - (LabelSpec - label: 'Translated String:' - name: 'Label1' - layout: (LayoutFrame 0 0 0 0 0 1 30 0) - translateLabel: true - adjust: left - ) - (TextEditorSpec - name: 'LanguageText' - layout: (LayoutFrame 0 0 30 0 0 1 0 1) - model: languageTextHolder - hasHorizontalScrollBar: true - hasVerticalScrollBar: true - acceptChannel: languageTextAcceptHolder - modifiedChannel: languageTextModifiedHolder - acceptCallBack: languageTextAccepted - hasKeyboardFocusInitially: false - postBuildCallback: languageEditorBuilt: - ) - (ActionButtonSpec - label: 'Paste Previous' - name: 'pastePreviousTranslation' - layout: (LayoutOrigin 0 0.83085250338295003 0 0.034482758620689995) - translateLabel: true - model: pastePreviousTranslationInLanguageText - enableChannel: pastePreviousTranslationEnableHolder - disabledLogo: 'Paste Previous' - ) - (ActionButtonSpec - label: 'Paste Original' - name: 'Button1' - layout: (LayoutOrigin -95 0.83085250338295003 0 0.034482758620689995) - translateLabel: true - model: pasteOriginalInLanguageText - enableChannel: pasteOriginalEnableHolder - disabledLogo: 'Paste Original' - ) - ) - - ) - ) - ) - - ) - handles: (Any 0.3333333333333301 0.66666666666667018 1.0) - ) - ) - - ) - handles: (Any 0.5 1.0) - postBuildCallback: postBuildTranslationsPanel: - ) - (ViewSpec - name: 'SearchBox' - layout: (LayoutFrame 0 0 -32 1 0 1 0 1) - level: -1 - visibilityChannel: searchBoxVisible - component: - (SpecCollection - collection: ( - (ActionButtonSpec - label: 'closeSearchBarIcon' - name: 'closeSearchBarButton' - layout: (LayoutFrame 4 0 5 0 25 0 26 0) - hasCharacterOrientedLabel: false - translateLabel: true - model: closeSearchBar - ) - (LabelSpec - label: 'Search:' - name: 'SearchLabel' - layout: (LayoutFrame 30 0 5 0 100 0 27 0) - translateLabel: true - adjust: right - ) - (InputFieldSpec - name: 'SearchEntryField' - layout: (LayoutFrame 100 0 5 0 257 0 27 0) - model: searchTextHolder - immediateAccept: true - acceptOnReturn: true - acceptOnTab: true - acceptOnLostFocus: true - modifiedChannel: searchTextModifiedHolder - acceptOnPointerLeave: false - postBuildCallback: postBuildSearchTextView: - ) - (ActionButtonSpec - label: 'searchNextIcon' - name: 'SearchNextButton' - layout: (LayoutFrame 264 0 5 0 285 0 26 0) - hasCharacterOrientedLabel: false - translateLabel: true - model: searchNextText - ) - (ActionButtonSpec - label: 'searchPreviousIcon' - name: 'searchPreviousButton' - layout: (LayoutFrame 292 0 5 0 313 0 26 0) - hasCharacterOrientedLabel: false - translateLabel: true - model: searchPreviousText - ) - (CheckBoxSpec - label: 'Ignore case' - name: 'IgnoreCaseCheckBox' - layout: (LayoutFrame 322 0 5 0 518 0 27 0) - model: ignoreCaseHolder - translateLabel: true - ) - (LabelSpec - label: 'SearchBarImageInfoLabel' - name: 'SearchBarImageInfoLabel' - layout: (LayoutFrame 524 0 5 0 548 0 27 0) - hasCharacterOrientedLabel: false - translateLabel: true - labelChannel: searchBarImageInfoLabelHolder - ) - (LabelSpec - label: 'SearchBarInfoLabel' - name: 'SearchBarInfoLabel' - layout: (LayoutFrame 551 0 5 0 829 0 27 0) - translateLabel: true - labelChannel: searchBarInfoLabelHolder - adjust: left - ) - ) - - ) - postBuildCallback: postBuildSearchBoxView: - ) - ) - + collection: ( + (MenuPanelSpec + name: 'ToolBar' + layout: (LayoutFrame 0 0 0 0 0 1 30 0) + uuid: '37d7f820-b8d0-11e8-aeef-b8f6b1108e05' + menu: menuToolBar + textDefault: true + ) + (VariableVerticalPanelSpec + name: 'TranslationsVariableVerticalPanel' + layout: (LayoutFrame 0 0 30 0 0 1 -32 1) + uuid: '37d7f9ce-b8d0-11e8-aeef-b8f6b1108e05' + component: + (SpecCollection + collection: ( + (DataSetSpec + name: 'KeyStringAndLanguageSelectionTable' + uuid: '37d7fb2c-b8d0-11e8-aeef-b8f6b1108e05' + model: selectedKeyRow + menu: keyStringAndLanguageSelectionTableMenu + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + dataList: keyStringAndLanguageSelectionTable + columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder + beDependentOfRows: true + columnAdaptor: yourself + postBuildCallback: postBuildDataSet: + ) + (VariableVerticalPanelSpec + name: 'VariableVerticalPanel1' + uuid: '37d7fd48-b8d0-11e8-aeef-b8f6b1108e05' + component: + (SpecCollection + collection: ( + (ViewSpec + name: 'Box1' + uuid: '37d7fe24-b8d0-11e8-aeef-b8f6b1108e05' + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Original String (Key):' + name: 'Label2' + layout: (LayoutFrame 0 0 -2 0 0 1 28 0) + uuid: '37d7fee2-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + adjust: left + ) + (TextEditorSpec + name: 'OriginalText' + layout: (LayoutFrame 0 0 27 0 0 1 -2 1) + uuid: '37d8002c-b8d0-11e8-aeef-b8f6b1108e05' + model: originalTextHolder + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + modifiedChannel: originalTextModifiedHolder + acceptCallBack: languageTextAccepted + hasKeyboardFocusInitially: false + ) + ) + + ) + ) + (ViewSpec + name: 'Box3' + uuid: '37d801bc-b8d0-11e8-aeef-b8f6b1108e05' + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Select Another Language as example:' + name: 'Label3' + layout: (LayoutFrame 0 0 -6 0 0 1 24 0) + uuid: '37d80270-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + adjust: left + ) + (ComboBoxSpec + name: 'ComboBox1' + layout: (LayoutFrame 281 0 -2 0 406 0 18 0) + uuid: '37d80360-b8d0-11e8-aeef-b8f6b1108e05' + model: exampleLanguageSelectionHolder + immediateAccept: false + acceptOnLeave: true + acceptOnLostFocus: true + acceptOnPointerLeave: false + comboList: shownLanguages + useIndex: false + ) + (TextEditorSpec + name: 'ExampleLanguageText' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + uuid: '37d805cc-b8d0-11e8-aeef-b8f6b1108e05' + model: exampleLanguageTextHolder + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + isReadOnly: true + hasKeyboardFocusInitially: false + ) + ) + + ) + ) + (ViewSpec + name: 'Box2' + uuid: '37d8070c-b8d0-11e8-aeef-b8f6b1108e05' + component: + (SpecCollection + collection: ( + (LabelSpec + label: 'Translated String:' + name: 'Label1' + layout: (LayoutFrame 0 0 0 0 0 1 30 0) + uuid: '37d807ca-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + adjust: left + ) + (TextEditorSpec + name: 'LanguageText' + layout: (LayoutFrame 0 0 30 0 0 1 0 1) + uuid: '37d808ba-b8d0-11e8-aeef-b8f6b1108e05' + model: languageTextHolder + hasHorizontalScrollBar: true + hasVerticalScrollBar: true + acceptChannel: languageTextAcceptHolder + modifiedChannel: languageTextModifiedHolder + acceptCallBack: languageTextAccepted + hasKeyboardFocusInitially: false + postBuildCallback: languageEditorBuilt: + ) + (ActionButtonSpec + label: 'Paste Original' + name: 'Button1' + layout: (LayoutFrame -186 0.83085250338295003 0 0 -64 0.83085250338295003 27 0) + uuid: '37d809fa-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + model: pasteOriginalInLanguageText + enableChannel: pasteOriginalEnableHolder + disabledLogo: 'Paste Original' + ) + (ActionButtonSpec + label: 'Paste Previous' + name: 'pastePreviousTranslation' + layout: (LayoutFrame -42 0.83085250338295003 0 0 118 0.83085250338295003 27 0) + uuid: '37d80b80-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + model: pastePreviousTranslationInLanguageText + enableChannel: pastePreviousTranslationEnableHolder + disabledLogo: 'Paste Previous' + ) + ) + + ) + ) + ) + + ) + handles: (Any 0.33000000000000002 0.67000000000000004 1.0) + ) + ) + + ) + handles: (Any 0.5 1.0) + postBuildCallback: postBuildTranslationsPanel: + ) + (ViewSpec + name: 'SearchBox' + layout: (LayoutFrame 0 0 -32 1 0 1 0 1) + uuid: '37d80cf2-b8d0-11e8-aeef-b8f6b1108e05' + level: -1 + visibilityChannel: searchBoxVisible + component: + (SpecCollection + collection: ( + (ActionButtonSpec + label: 'closeSearchBarIcon' + name: 'closeSearchBarButton' + layout: (LayoutFrame 4 0 5 0 25 0 26 0) + uuid: '37d80dc4-b8d0-11e8-aeef-b8f6b1108e05' + hasCharacterOrientedLabel: false + translateLabel: true + model: closeSearchBar + ) + (LabelSpec + label: 'Search:' + name: 'SearchLabel' + layout: (LayoutFrame 30 0 5 0 100 0 27 0) + uuid: '37d80ef0-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + adjust: right + ) + (InputFieldSpec + name: 'SearchEntryField' + layout: (LayoutFrame 100 0 5 0 257 0 27 0) + uuid: '37d80fd6-b8d0-11e8-aeef-b8f6b1108e05' + model: searchTextHolder + immediateAccept: true + acceptOnReturn: true + acceptOnTab: true + acceptOnLostFocus: true + modifiedChannel: searchTextModifiedHolder + acceptOnPointerLeave: false + postBuildCallback: postBuildSearchTextView: + ) + (ActionButtonSpec + label: 'searchNextIcon' + name: 'SearchNextButton' + layout: (LayoutFrame 264 0 5 0 285 0 26 0) + uuid: '37d8117a-b8d0-11e8-aeef-b8f6b1108e05' + hasCharacterOrientedLabel: false + translateLabel: true + model: searchNextText + ) + (ActionButtonSpec + label: 'searchPreviousIcon' + name: 'searchPreviousButton' + layout: (LayoutFrame 292 0 5 0 313 0 26 0) + uuid: '37d812b0-b8d0-11e8-aeef-b8f6b1108e05' + hasCharacterOrientedLabel: false + translateLabel: true + model: searchPreviousText + ) + (CheckBoxSpec + label: 'Ignore case' + name: 'IgnoreCaseCheckBox' + layout: (LayoutFrame 322 0 5 0 518 0 27 0) + uuid: '37d813d2-b8d0-11e8-aeef-b8f6b1108e05' + model: ignoreCaseHolder + translateLabel: true + ) + (LabelSpec + label: 'SearchBarImageInfoLabel' + name: 'SearchBarImageInfoLabel' + layout: (LayoutFrame 524 0 5 0 548 0 27 0) + uuid: '37d81512-b8d0-11e8-aeef-b8f6b1108e05' + hasCharacterOrientedLabel: false + translateLabel: true + labelChannel: searchBarImageInfoLabelHolder + ) + (LabelSpec + label: 'SearchBarInfoLabel' + name: 'SearchBarInfoLabel' + layout: (LayoutFrame 551 0 5 0 829 0 27 0) + uuid: '37d8160c-b8d0-11e8-aeef-b8f6b1108e05' + translateLabel: true + labelChannel: searchBarInfoLabelHolder + adjust: left + ) + ) + + ) + postBuildCallback: postBuildSearchBoxView: + ) + ) + ) ) ! ! @@ -1122,7 +1151,7 @@ selectedAssociation value sameAs: association value] ifNone:[collection add: association]. collection]. selectedTranslation := Dialog - choose:'Choose one if you consider it´s usefull to translate: + choose:'Choose one if you consider it´s usefull to translate: ', '<', key, '> ', (self currentExampleLanguageText ifNil:['']) fromList: (similarTranslationsAssociations collect:[:each | '<', each key, '> ', each value]) @@ -1380,22 +1409,27 @@ ! update:something with:aParameter from:changedObject + languageEditor modified ifTrue:[ + languageEditor accept + ]. changedObject == shownLanguages ifTrue:[ - self shownLanguagesChanged. - ^ self. + self shownLanguagesChanged. + ^ self. ]. changedObject == languageTextAcceptHolder ifTrue:[ - self updateLanguageTextModification. - ^ self. + self updateLanguageTextModification. + ^ self. ]. changedObject == exampleLanguageSelectionHolder ifTrue:[ - self updateExampleLanguageText. - ^ self. + self updateExampleLanguageText. + ^ self. ]. changedObject == showMissingTranslationsOnly ifTrue:[ - self showMissingTranslationsOnlyChanged. - ^ self. + self showMissingTranslationsOnlyChanged. + ^ self. ]. + + "Modified: / 15-09-2018 / 12:17:07 / Claus Gittinger" ! updateCopyPreviousTranslationButtonEnabled @@ -1507,17 +1541,20 @@ ! requestFilenameFor: lang - "Returns a filename to save the language resource and updates the language's info" + "Returns a filename to save the language resource and updates the language's info" + |aFilename| aFilename := Dialog - requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString) - default:nil - pattern:'*.rs'. + requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString) + default:nil + pattern:'*.rs'. aFilename isEmptyOrNil ifTrue:[^ nil ]. keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename. ^aFilename asFilename + + "Modified (format): / 15-09-2018 / 12:28:28 / Claus Gittinger" ! requestLanguage @@ -1528,10 +1565,26 @@ ! requestLanguageToSave + |question filename| + + question := resources string:'Which language do you want to save?'. + + lastLanguage notNil ifTrue:[ + filename := keyStringsToLanguageMappings filenameAt:lastLanguage. + filename notNil ifTrue:[ + question := question , Character cr , + (resources string:'(Last was "%1" in "%2")' + with:lastLanguage + with:(filename asFilename pathName)). + ]. + ]. + ^ Dialog - choose:'Which language do you want to save?' - fromList:languagesList - lines:10 + choose:question + fromList:languagesList + lines:10 + + "Modified: / 15-09-2018 / 12:39:30 / Claus Gittinger" ! requestPackage @@ -1594,6 +1647,8 @@ languageEditorBuilt:aView languageEditor := aView. + + "Modified: / 15-09-2018 / 12:16:22 / Claus Gittinger" ! postBuildDataSet:aView @@ -2705,16 +2760,19 @@ ! saveLanguage: lang -"Saves the language in the fileName from where the language resource was obtained." - |aFilename| + "Saves the language in the fileName from where the language resource was obtained." + |filename| lang isNil ifTrue:[^ self]. - aFilename := keyStringsToLanguageMappings filenameAt:lang. - aFilename isNil ifTrue:[ - aFilename := self requestFilenameFor: lang. - aFilename isNil ifTrue:[^ self]. + filename := keyStringsToLanguageMappings filenameAt:lang. + filename isNil ifTrue:[ + "/ ask + filename := self requestFilenameFor: lang. + filename isNil ifTrue:[^ self]. ]. - self saveResourceFile:aFilename for:lang asSymbol + self saveResourceFile:filename for:lang asSymbol + + "Modified (format): / 15-09-2018 / 12:29:59 / Claus Gittinger" ! saveResourceFile: aFilename for: lang @@ -3286,8 +3344,8 @@ self addLanguage:#'de'. self addLanguage:#'fr'. - self at:'open' language:#'de' put:'öffnen'. - self at:'close' language:#'de' put:'schließen'. + self at:'open' language:#'de' put:'öffnen'. + self at:'close' language:#'de' put:'schließen'. self at:'yes' language:#'de' put:'ja'. self at:'no' language:#'de' put:'nein'. self at:'cancel' language:#'de' put:'abbrechen'. @@ -3425,3 +3483,4 @@ version_CVS ^ '$Header$' ! ! +