#UI_ENHANCEMENT by cg
class: Tools::InternationalLanguageTranslationEditor
comment/format in:
#languageEditorBuilt:
#requestFilenameFor:
#saveLanguage:
changed:
#requestLanguageToSave
#update:with:from:
class: Tools::InternationalLanguageTranslationEditor class
changed: #windowSpec
--- 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 @@
<resource: #canvas>
- ^
+ ^
#(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$'
! !
+