Tools__InternationalLanguageTranslationEditor.st
author Claus Gittinger <cg@exept.de>
Fri, 14 Nov 2008 14:35:11 +0100
changeset 2433 88fbe1703c31
parent 2419 e71445e7174c
child 2434 6ad1f853d2e9
permissions -rw-r--r--
+openOnFile
cg@2015
     1
"{ Package: 'stx:libtool2' }"
cg@2015
     2
cg@2015
     3
"{ NameSpace: Tools }"
cg@2015
     4
cg@2015
     5
ApplicationModel subclass:#InternationalLanguageTranslationEditor
cg@2015
     6
	instanceVariableNames:'languagesList keyStringsToLanguageMappings languageTextHolder
cg@2015
     7
		originalTextHolder modified shownLanguages selectedKeyRow
cg@2015
     8
		showMissingTranslationsOnly
cg@2015
     9
		keyStringAndLanguageSelectionTableColumnDescriptionHolder
cg@2015
    10
		languageShownHolders dataSetView lastExtractedClass
cg@2015
    11
		lastExtractedApplicationClass stopApplicationIconVisibleHolder
cg@2015
    12
		monitoredApplication originalTextModifiedHolder
cg@2048
    13
		languageTextModifiedHolder languageTextAcceptHolder
cg@2048
    14
		inSingleFileMode lastExtractedProject lastLanguage
fm@2050
    15
		lastSelectedKey autoAcceptHolder languageEditor
fm@2050
    16
		selectedColIndexHolder exampleLanguageSelectionHolder
fm@2051
    17
		exampleLanguageTextHolder pastePreviousTranslationEnableHolder
fm@2163
    18
		searchForSimilarTranslationEnableHolder alwaysWriteUTF8Holder
fm@2327
    19
		lastNameSpace pasteOriginalEnableHolder ignoreCaseHolder
fm@2327
    20
		closeSearchBar searchTextModifiedHolder searchNextText
fm@2327
    21
		searchBarImageInfoLabelHolder searchPreviousText searchBoxVisible
fm@2327
    22
		searchBarInfoLabelHolder searchTextHolder searchTextView
fm@2327
    23
		searchBoxView translationsPanel lastPackage'
cg@2032
    24
	classVariableNames:'LastExtractedClass LastExtractedApplicationClass
cg@2410
    25
		LastExtractedProject LastProject'
cg@2015
    26
	poolDictionaries:''
cg@2015
    27
	category:'Interface-UIPainter'
cg@2015
    28
!
cg@2015
    29
cg@2015
    30
Object subclass:#AccessCollectingPseudoResourcePack
cg@2015
    31
	instanceVariableNames:'collectedKeys realResourcePack'
cg@2015
    32
	classVariableNames:''
cg@2015
    33
	poolDictionaries:''
cg@2015
    34
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    35
!
cg@2015
    36
cg@2015
    37
Collection subclass:#KeyStringsToLanguageMappings
cg@2032
    38
	instanceVariableNames:'keys keyInfo perLanguageInfo perLanguageMappings languageMappings
fm@2049
    39
		languages rowPerKey'
cg@2015
    40
	classVariableNames:''
cg@2015
    41
	poolDictionaries:''
cg@2015
    42
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    43
!
cg@2015
    44
cg@2015
    45
Object subclass:#LanguageMappingRow
cg@2015
    46
	instanceVariableNames:'key mappings'
cg@2015
    47
	classVariableNames:''
cg@2015
    48
	poolDictionaries:''
cg@2015
    49
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    50
!
cg@2015
    51
cg@2015
    52
Visitor subclass:#UISpecVisitor
cg@2015
    53
	instanceVariableNames:'translatedLabels'
cg@2015
    54
	classVariableNames:''
cg@2015
    55
	poolDictionaries:''
cg@2015
    56
	privateIn:InternationalLanguageTranslationEditor
cg@2015
    57
!
cg@2015
    58
cg@2015
    59
!InternationalLanguageTranslationEditor class methodsFor:'documentation'!
cg@2015
    60
cg@2015
    61
documentation
cg@2015
    62
"
cg@2015
    63
    documentation to be added.
cg@2015
    64
cg@2015
    65
    [author:]
cg@2015
    66
        cg (cg@FUSI)
cg@2015
    67
cg@2015
    68
    [instance variables:]
cg@2015
    69
cg@2015
    70
    [class variables:]
cg@2015
    71
cg@2015
    72
    [see also:]
cg@2015
    73
cg@2015
    74
"
cg@2015
    75
!
cg@2015
    76
cg@2015
    77
examples
cg@2015
    78
"
cg@2015
    79
  Starting the application:
cg@2015
    80
                                                                [exBegin]
cg@2015
    81
    InternationalLanguageTranslationEditor open
cg@2015
    82
cg@2015
    83
                                                                [exEnd]
cg@2015
    84
cg@2015
    85
  more examples to be added:
cg@2015
    86
                                                                [exBegin]
cg@2015
    87
    ... add code fragment for 
cg@2015
    88
    ... executable example here ...
cg@2015
    89
                                                                [exEnd]
cg@2015
    90
"
cg@2015
    91
!
cg@2015
    92
cg@2015
    93
history
cg@2015
    94
    "Created: / 04-03-2006 / 09:07:19 / cg"
cg@2015
    95
! !
cg@2015
    96
fm@2327
    97
!InternationalLanguageTranslationEditor class methodsFor:'image specs'!
fm@2327
    98
fm@2327
    99
closeSearchBarIcon
fm@2327
   100
    "This resource specification was automatically generated
fm@2327
   101
     by the ImageEditor of ST/X."
fm@2327
   102
fm@2327
   103
    "Do not manually edit this!! If it is corrupted,
fm@2327
   104
     the ImageEditor may not be able to read the specification."
fm@2327
   105
fm@2327
   106
    "
fm@2327
   107
     self closeSearchBar inspect
fm@2327
   108
     ImageEditor openOnClass:self andSelector:#closeSearchBar
fm@2327
   109
     Icon flushCachedIcons
fm@2327
   110
    "
fm@2327
   111
fm@2327
   112
    <resource: #image>
fm@2327
   113
fm@2327
   114
    ^Icon
fm@2327
   115
        constantNamed:#'Psiware::SystemManagement class closeSearchBar'
fm@2327
   116
        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
fm@2327
   117
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GQ\SD1LSD1LSD1LSD1LWGP@@@@@@
fm@2327
   118
@ATGA@HA@PDA@PDA@PHDA1T@@@@@@@@TAENG!!(VB XA?_''57QPPT@@@@@@@@E NJ^V)&X%)UTT5IV7 KE @@@@@@@A A"7Q,#&9VS%^MQ$E<DQ @@@@@@@@Z
fm@2327
   119
@X%-#9NRX52R$80:^1@Z@@@@@@@@F0FHY6>R$9JR$9ION''(PF0@@@@@@@A<A 5ABT)FS$9D=KR13C1<@@@@@@@@)@WUCND*Q$9NQM"T!!XP8)@@@@@@@@K E2
fm@2327
   120
O4RQ$9FQ$9@2G%8JK @@@@@@@CLA\S2D$9D9M)BS]!!1]BSL@@@@@@@@7@W@5LXP6J2\2]"P"VP 7@@@@@@@@O U+R3@*I2T#HA0&N5 RO @@@@@@@D LPF%(
fm@2327
   121
YVQ W59]VU 4CD @@@@@@@AGFP4F@PDA@PDA@PDFCQ%G@@@@@@@@K41TUEQTUEQTUEQTUEQLK0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   122
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 167 25 15 170 49 40 171 50 39 174 68 60 176 56 48 176 58 49 183 118 110 184 45 32 184 46 32 184 47 34 184 71 58 184 85 78 184 86 79 185 53 39 186 57 42 186 59 43 186 60 45 186 68 58 190 187 180 192 188 181 193 189 182 194 190 183 195 192 184 197 194 186 202 148 142 202 199 191 205 202 195 207 64 48 207 203 195 208 65 49 208 205 198 209 65 49 209 66 49 209 69 52 210 66 49 210 78 64 211 67 51 211 71 54 212 69 51 212 208 200 212 208 202 213 69 52 213 70 52 213 79 57 215 80 59 215 212 206 217 214 207 218 79 62 218 84 67 219 107 95 219 216 210 221 84 63 221 84 67 221 109 96 221 218 213 222 76 56 222 110 96 222 113 79 223 87 67 223 87 70 223 115 99 224 221 216 225 89 72 225 105 91 225 117 84 227 89 64 227 91 73 227 112 98 227 115 95 227 122 92 227 224 219 227 225 219 228 113 83 228 113 99 229 102 87 229 226 221 230 115 84 230 117 81 230 142 117 231 102 80 231 116 86 231 120 103 231 131 119 231 228 224 232 118 88 232 119 82 233 143 117 234 99 76 234 102 79 234 119 89 234 127 100 234 145 119 235 104 82 235 106 86 236 108 89 236 110 92 236 113 92 236 121 91 236 146 119 237 113 95 237 115 98 237 122 92 237 132 100 238 117 101 238 119 104 238 123 93 238 123 109 238 131 98 238 133 102 238 146 120 238 148 121 239 125 112 239 127 115 239 129 118 239 131 105 239 134 102 240 135 122 240 200 196 242 135 113 242 141 116 242 141 119 242 145 116 242 147 118 242 148 120 243 137 115 243 138 118 243 141 121 243 142 123 243 144 126 243 145 129 243 151 134 243 202 197 244 147 132 244 149 135 244 152 137 244 163 142 244 164 145 245 160 143 245 164 146 245 213 204 246 213 203 248 215 205 249 215 206 252 244 243 253 244 243 253 247 245 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@@@@@@@@@@G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? G?? @@@@@@@@@@@@') ; yourself); yourself]
fm@2327
   123
fm@2327
   124
    "Created: / 15-06-2007 / 18:04:38 / Administrador"
fm@2327
   125
!
fm@2327
   126
fm@2327
   127
restartSearchBarIcon
fm@2327
   128
    "This resource specification was automatically generated
fm@2327
   129
     by the ImageEditor of ST/X."
fm@2327
   130
fm@2327
   131
    "Do not manually edit this!! If it is corrupted,
fm@2327
   132
     the ImageEditor may not be able to read the specification."
fm@2327
   133
fm@2327
   134
    "
fm@2327
   135
     self restartSearchBarIcon inspect
fm@2327
   136
     ImageEditor openOnClass:self andSelector:#restartSearchBarIcon
fm@2327
   137
     Icon flushCachedIcons
fm@2327
   138
    "
fm@2327
   139
fm@2327
   140
    <resource: #image>
fm@2327
   141
fm@2327
   142
    ^Icon
fm@2327
   143
        constantNamed:#'Psiware::SystemManagement class restartSearchBarIcon'
fm@2327
   144
        ifAbsentPut:[(Depth24Image new) width: 20; height: 20; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
fm@2327
   145
@@@@@@@@@@@@@@@@@@@@@@@@?>SX?>''V?>;)?>O!!?>G]?>WY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=3\:[>''5;JF/Y-.+XY),(U.
fm@2327
   146
6JZK?=J1?>V<>.+I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>?'':+:!!19]U6*-Q?]Y/?>RC?>*!!?>F_>+=939UL2Y!!L>MJT??W[@@@@@@@@@@@@@@@@@@@@
fm@2327
   147
@@@@??[-=\^&1IEP=<Q[?>1/?=5$?=52?>NT?=^Q?>BP?>FG>;1]6JEO8;^H?]3I@@@@@@@@@@@@@@@@@@@@?\*95Y-)<+!!$??.F?>)17+-U8,E40Y-.09I)
fm@2327
   148
:Z1-?=I??=)8?<1.>K597;NL??K,@@@@@@@@@@@@?=#M6I>B>+:@?>2U=,]]5[IN7,^C5LB[<MWL?]#O=,BZ7)=\>;Y[??FP?=>O1YEW8<B$;=WH@@@@@@@@
fm@2327
   149
>,"%8Z:A?>N#?>._5KA$9-JW7=+FX6M+V%U3"''*T0Y>V4ZA7595T=;1"?=&D?=&L,W(93IU\:KE9=LBG9[Q9;K1<?=^R:K591*-6??''[@@@@RE%37>7?=?/?
fm@2327
   150
>^_''3*.M0YAU<K5,?>ZO?=>G?<!!6?<Y6>+U(69YI3:IG?=Z@?>NU5:=19,6%@@@@@@@@OU5*2.+7;O??5-KF2;JS?=*&?>&"?=.E?>2R?=&F?>"X8I-N5)ED
fm@2327
   151
29$&?>M:?=*F3:E&>]/A@@@@@@@@O5=.7O??5^/(?O++<M.>0I-/;LNE??2)?=&B?>^%,W)A8:14?=FX3)TR?>U/?=Q:3IAZ?=?T@@@@@@@@P5Y68_#?7.70
fm@2327
   152
??[1??C_:,F%6;A=>MJA?>6":,6+&G91?>+^?>+]79<$?<1\?=:C5IM[?<;F@@@@@@@@Q$1>6N_?<?+?<.W.?>3*??S(=,.(2Z!!#=-:^+9>P4,[P<>''46=O^
fm@2327
   153
=+MX;Z)O?>^Q:Z]*;+Z''@@@@@@@@TD:O9^/?;/C??>???>/:?>71?>7Z;]^%0+JA7=CI8]O"0+[D8=#&?<&V79="?=2L?\E88[BG@@@@@@@@VU&M=_3?9N''?
fm@2327
   154
>/C???K??NK/??[1???#9M?B??3;(IV#/[WD;^_5@@@@;KR]<[10?=Q68[9,8,>W@@@@TU9&;/??9__9:.;/?_#<??/?>?[==?79>_?=<_S9T5M[0,WN7^G*
fm@2327
   155
@@@@@@@@1Y= >=!!>9,]-3[],6]B''TEH=;O_''=O?6>O77>O''=>//?=_+?:O_?:_''?>O??SEM[/<[P6.O,@@@@@@@@8-F%1*%/9[>@?>R(7+VG_%,;\E]CW$=H
fm@2327
   156
U5AWV5%.U5);R5M:Q5M;S%-=TE]*[GI>):696M;*@@@@@@@@@@@@6\F[2Y914)9.;[VF?L"!!8[^_3J>''0KB:0;?V0,_''-<C),K/(,;7!!+[OI,K[D2=G_9N+8
fm@2327
   157
@@@@@@@@@@@@@@@@@@@@?\*_7*]>3))5/II9+9FF+9> 0;7I5-#-7NO?7^#?8^/?:/G?7NK07>W3@@@@@@@@@@@@@@@@@@@@@@@@?>N;?>N;?=:9?>7T?>#X
fm@2327
   158
>^_%=N?6<OK?@@@@@@@@@@@@@@@@@@@@@@@@@@@@') ; mask:((Depth1Image new) width: 20; height: 20; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@?@OC?0OO?8O_?<O_?>O???O?????_??>_??>_??>_??>_??>_??>_??__??O???O???G???A??/A? O') ; yourself); yourself]
fm@2327
   159
!
fm@2327
   160
fm@2327
   161
searchNextIcon
fm@2327
   162
    "This resource specification was automatically generated
fm@2327
   163
     by the ImageEditor of ST/X."
fm@2327
   164
fm@2327
   165
    "Do not manually edit this!! If it is corrupted,
fm@2327
   166
     the ImageEditor may not be able to read the specification."
fm@2327
   167
fm@2327
   168
    "
fm@2327
   169
     self searchNextIcon inspect
fm@2327
   170
     ImageEditor openOnClass:self andSelector:#searchNextIcon
fm@2327
   171
     Icon flushCachedIcons
fm@2327
   172
    "
fm@2327
   173
fm@2327
   174
    <resource: #image>
fm@2327
   175
fm@2327
   176
    ^Icon
fm@2327
   177
        constantNamed:#'Psiware::SystemManagement class searchNextIcon'
fm@2327
   178
        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
fm@2327
   179
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@
fm@2327
   180
@@@@@@AFF XA@PXUQ @@@@@@@@@@@@@@@@@*@Q5G^WX6E0D*@@@@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@A[@U==\F-"VUQOUSLAV0@@@@@@@@@@
fm@2327
   181
G19-D <NCP0KB!!@7D1<@@@@@@@@@  ]MT5JY&Y&Y&Y%RLR4G  @@@@@@@H\A WL $)&Y&Y&RF35B@X\@@@@@@@BK@XA1WA"X&Y&XE#T:P@FK@@@@@@@@# !!H
fm@2327
   182
]F$<II&YH3H>N2 H# @@@@@@@@@''GG)*Y2$9NRIDO4DQHP@@@@@@@@@@!!@EP[6U]I"UIQTL.@XP@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@@@@EDA
fm@2327
   183
FSQ!!VC@T@UD@@@@@@@@@@@@@@@@@#R,I@PDIJ84@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   184
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 48 54 77 55 63 87 56 64 89 57 67 90 59 67 90 64 69 89 71 74 92 72 76 96 76 81 100 80 89 118 82 90 119 83 91 120 84 92 122 86 94 123 87 96 124 89 97 126 92 104 132 97 106 136 97 110 138 97 112 138 100 102 112 101 107 130 104 118 144 105 113 135 105 124 146 107 109 118 107 116 144 110 127 148 112 126 148 113 129 148 117 119 129 118 130 156 119 123 133 125 140 174 127 131 146 127 132 148 127 146 178 130 151 181 131 132 143 133 149 185 133 152 182 134 134 138 137 140 150 138 138 142 139 156 191 141 160 195 143 164 199 143 169 198 144 157 197 144 158 197 152 173 208 153 184 209 155 167 210 156 180 208 157 179 215 157 180 211 160 162 171 160 173 216 160 174 216 160 182 214 161 173 217 161 174 217 161 176 219 161 179 220 161 180 220 163 182 222 163 184 222 164 182 222 164 184 223 166 164 161 166 189 212 166 194 211 167 190 228 167 194 229 167 200 221 169 170 174 169 195 212 169 196 232 170 181 228 170 203 221 171 171 176 171 173 182 171 193 220 173 182 232 173 192 232 173 200 234 175 206 239 175 210 240 176 188 237 178 175 168 178 175 173 178 202 234 178 206 240 179 195 238 180 205 223 180 214 243 180 216 244 181 193 242 181 195 239 181 204 223 181 212 243 182 206 242 182 209 243 184 180 173 184 211 244 184 215 245 185 198 246 185 200 244 188 215 233 188 225 249 189 226 249 190 206 250 190 219 248 191 209 249 191 217 248 191 222 248 192 188 181 192 221 249 194 190 184 195 191 184 196 226 251 196 232 251 199 196 189 202 198 191 202 226 253 203 199 193 203 229 253 203 237 252 203 237 253 204 202 196 206 202 195 206 205 204 207 203 196 208 204 197 208 205 201 212 208 200 212 208 201 212 208 202 212 209 205 213 210 202 213 212 213 214 211 206 215 212 207 216 213 206 218 215 210 220 221 223 221 219 214 222 219 215 222 220 215 230 228 225 236 235 232 243 243 244 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@@@C@G C@_8C@?<CA?>CC??CC??CG??#G??#G??#G??#C??CC??CA?>C@?<C@_8C@G C@@@C@@@C@@@C') ; yourself); yourself]
fm@2327
   185
!
fm@2327
   186
fm@2327
   187
searchPreviousIcon
fm@2327
   188
    "This resource specification was automatically generated
fm@2327
   189
     by the ImageEditor of ST/X."
fm@2327
   190
fm@2327
   191
    "Do not manually edit this!! If it is corrupted,
fm@2327
   192
     the ImageEditor may not be able to read the specification."
fm@2327
   193
fm@2327
   194
    "
fm@2327
   195
     self searchPreviousIcon inspect
fm@2327
   196
     ImageEditor openOnClass:self andSelector:#searchPreviousIcon
fm@2327
   197
     Icon flushCachedIcons
fm@2327
   198
    "
fm@2327
   199
fm@2327
   200
    <resource: #image>
fm@2327
   201
fm@2327
   202
    ^Icon
fm@2327
   203
        constantNamed:#'Psiware::SystemManagement class searchPreviousIcon'
fm@2327
   204
        ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
fm@2327
   205
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@
fm@2327
   206
@@@@@@BMJ0$A@P$+#P@@@@@@@@@@@@@@@@AQ@Q$4XU 0E@EQ@@@@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@BD@UA/YU4&IT%EP28A!!@@@@@@@@@@@
fm@2327
   207
I11:Z&\)NS$"QC=ADRD@@@@@@@@@# !!H]F$<II&YH3H>N2 H# @@@@@@@H,A GE\FI"Y&Y VMS)@@X,@@@@@@@BG@XE3HIJY&Y&Y$!!,=P FG@@@@@@@@  ]M
fm@2327
   208
T5JY&Y&Y&Y%RLR4G  @@@@@@@@@_G&4RC08MC@,JDC\SG0@@@@@@@@@@V0E__WA+X%%TS5T3@U,@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@@@@B(A
fm@2327
   209
GT]9]#XW@R(@@@@@@@@@@@@@@@@@Q!!(F@PDFETX@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   210
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@a') ; colorMapFromArray:#[0 0 0 48 54 77 55 63 87 56 64 89 57 67 90 59 67 90 64 69 89 71 74 92 72 76 96 76 81 100 80 89 118 82 90 119 83 91 120 84 92 122 86 94 123 87 96 124 89 97 126 92 104 132 97 106 136 97 110 138 97 112 138 100 102 112 101 107 130 104 118 144 105 113 135 105 124 146 107 109 118 107 116 144 110 127 148 112 126 148 113 129 148 117 119 129 118 130 156 119 123 133 125 140 174 127 131 146 127 132 148 127 146 178 130 151 181 131 132 143 133 149 185 133 152 182 134 134 138 137 140 150 138 138 142 139 156 191 141 160 195 143 164 199 143 169 198 144 157 197 144 158 197 152 173 208 153 184 209 155 167 210 156 180 208 157 179 215 157 180 211 160 162 171 160 173 216 160 174 216 160 182 214 161 173 217 161 174 217 161 176 219 161 179 220 161 180 220 163 182 222 163 184 222 164 182 222 164 184 223 166 164 161 166 189 212 166 194 211 167 190 228 167 194 229 167 200 221 169 170 174 169 195 212 169 196 232 170 181 228 170 203 221 171 171 176 171 173 182 171 193 220 173 182 232 173 192 232 173 200 234 175 206 239 175 210 240 176 188 237 178 175 168 178 175 173 178 202 234 178 206 240 179 195 238 180 205 223 180 214 243 180 216 244 181 193 242 181 195 239 181 204 223 181 212 243 182 206 242 182 209 243 184 180 173 184 211 244 184 215 245 185 198 246 185 200 244 188 215 233 188 225 249 189 226 249 190 206 250 190 219 248 191 209 249 191 217 248 191 222 248 192 188 181 192 221 249 194 190 184 195 191 184 196 226 251 196 232 251 199 196 189 202 198 191 202 226 253 203 199 193 203 229 253 203 237 252 203 237 253 204 202 196 206 202 195 206 205 204 207 203 196 208 204 197 208 205 201 212 208 200 212 208 201 212 208 202 212 209 205 213 210 202 213 212 213 214 211 206 215 212 207 216 213 206 218 215 210 220 221 223 221 219 214 222 219 215 222 220 215 230 228 225 236 235 232 243 243 244 255 255 255]; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@@@C@G C@_8C@?<CA?>CC??CC??CG??#G??#G??#G??#C??CC??CA?>C@?<C@_8C@G C@@@C@@@C@@@C') ; yourself); yourself]
fm@2327
   211
!
fm@2327
   212
fm@2327
   213
searchToolBarIcon
fm@2327
   214
    "This resource specification was automatically generated
fm@2327
   215
     by the ImageEditor of ST/X."
fm@2327
   216
fm@2327
   217
    "Do not manually edit this!! If it is corrupted,
fm@2327
   218
     the ImageEditor may not be able to read the specification."
fm@2327
   219
fm@2327
   220
    "
fm@2327
   221
     self searchToolBarIcon inspect
fm@2327
   222
     ImageEditor openOnClass:self andSelector:#searchToolBarIcon
fm@2327
   223
     Icon flushCachedIcons
fm@2327
   224
    "
fm@2327
   225
fm@2327
   226
    <resource: #image>
fm@2327
   227
fm@2327
   228
    ^Icon
fm@2327
   229
        constantNamed:#'Psiware::SystemManagement class searchToolBarIcon'
fm@2327
   230
        ifAbsentPut:[(Depth24Image new) width: 22; height: 22; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
fm@2327
   231
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   232
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   233
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   234
@@@@@@@@@@@@@@@@@@@@@@@@@@@@;>#8/L#+!!:KS!!:KS/,'',;>''9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2];>^)WH
fm@2327
   235
NE:+KU*:J5&9NE6*_I#K4^S>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>RV3DLER"SWR6$K#0#;[.SGJ4L5"''UG_N4][>@@@@
fm@2327
   236
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*K''\JT*,U6Z7:^S?>/C*;.3,6>C>RFF(KEZ"3-_-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   237
@@@@@@@@@@@@&Z''HFTF &Z7">N#:7NK?7NK?6=W>!!Y''YH4N -+3T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%I>;FDV)#ZWU??''57NK?
fm@2327
   238
7NK?:>_?\8WKFCN".K#T@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@1L;.A#V[O5")3=W;=/[4</W:1,??K$JVI4Z\7-''4@@@@@@@@@@@@
fm@2327
   239
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?-,[1E#:&C"ZZH3F U6_EU63FHS^XHS.K JOX7-''4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?
fm@2327
   240
,K_*O5ZTCRBLPU&0FCBHDB&RDR6RH$NI Y#I4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?-;#%ND&KC">BYV.*4=;>7.+>-<K!!,K/!!7NK?
fm@2327
   241
:^C;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?/K3^PT%<CBI/NE>==O;8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   242
@@@@@@@@@@@@7NK? (J9GB1SZV>W:M3?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@5MS&++3H6M/#@@@@
fm@2327
   243
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@7NK?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   244
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   245
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   246
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   247
@@@@@@@@@@@@@@@@') ; mask:((Depth1Image new) width: 22; height: 22; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@@@C@@@C@@@C@A C@G8C@O<C@_>C@_>C@_>C@_>C@_>C@?>CA?<CC?8CG8@CG0@CC @CA@@C@@@C@@@C@@@C@@@C') ; yourself); yourself]
fm@2327
   248
!
fm@2327
   249
fm@2327
   250
warningSearchBarIcon
fm@2327
   251
    "This resource specification was automatically generated
fm@2327
   252
     by the ImageEditor of ST/X."
fm@2327
   253
fm@2327
   254
    "Do not manually edit this!! If it is corrupted,
fm@2327
   255
     the ImageEditor may not be able to read the specification."
fm@2327
   256
fm@2327
   257
    "
fm@2327
   258
     self warningSearchBarIcon inspect
fm@2327
   259
     ImageEditor openOnClass:self andSelector:#warningSearchBarIcon
fm@2327
   260
     Icon flushCachedIcons
fm@2327
   261
    "
fm@2327
   262
fm@2327
   263
    <resource: #image>
fm@2327
   264
fm@2327
   265
    ^Icon
fm@2327
   266
        constantNamed:#'Psiware::SystemManagement class warningSearchBarIcon'
fm@2327
   267
        ifAbsentPut:[(Depth24Image new) width: 22; height: 19; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
fm@2327
   268
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?:.+<Y"P??C\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>_;?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   269
@@@@?]SZ)5]X.6!! -HM2??''*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>39-7*B4H&G>[N+%%MJ>\#A@@@@@@@@
fm@2327
   270
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<+R?*U1&?=CN?>W^4HJ@+FY$?>+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   271
@@@@@@@@@@@@@@@@@@@@?>G_)U!!^>Z^->,B><+"4?*^-%C8?;;Z+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@??#1-(E;.65+?<#H
fm@2327
   272
?=_T?=GP?::65W-=(EQF?>WQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?\#D*VAY?;61<;"0;,C@6J^+;*"0>ZN$&CX)6(-:@@@@@@@@
fm@2327
   273
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>#+/7Q148E6?<"4<L&:W#(:G@@@392!!48^G9WM(%24_?=WN@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
fm@2327
   274
??C?7Y&$.E5\?;V*=<:8??K_R3X5DP@@4+R49ZZ!!7VIZ/#85)%UR??G/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=7.2&)6=IJQ?;..=]W@??7*PS$7E@,N
fm@2327
   275
4<OC?>K^>(M=1S8;)$ID8Y6^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@;HNR4U%%<)&S?<^9??_(??;3REEN@P,J2<[C??K/?:R!!/C8?&R(0(T-N?>GZ@@@@
fm@2327
   276
@@@@@@@@@@@@@@@@@@@@?<;H,31B3T9U2'')1?L3@?>3&=^7*XWE0@@<M7=;\??S3?=_U46-,#Q(!!$B,/18"A@@@@@@@@@@@@@@@@@@@@??G&1G!!*,S03)SP,
fm@2327
   277
3()?>=WL??_:<>33[G:@D2T%;^/,??#8??K19Y6^&R(0!!QPX#S8:;K22@@@@@@@@@@@@@@@@<*RZ+5I@*$D+*T48<[N&?>C_7,+U??3?7N''/(J.-?/+;??W5
fm@2327
   278
;.O!!?>G_3&]+ 0(O#B8.(U9X@@@@@@@@@@@@?<?Y/%MM.487%$P^7I)7?<&=?=+ <^W3;?C?YV]3JR .-*60=/W35.[#<>W"?:*+*3@3$R\)^R ''2)^T@@@@
fm@2327
   279
?>K2;(ZO2DQ@-SP!!,5H/?<F!!?<V=?;3B?=_"?>7:)72EUBT+<,GD?>?,<M;Z>]GO?<#J8VM& P4P_A0^ C(:?>+''?:"+34%H13L/02("13T(13\,5$H>3S<=
fm@2327
   280
1TMC0DQD/$IB/D@>.S4;-S,8,C(:,C 9-3X:(A4""@4R_1DT RH&/6%*?82D/S8503873C<85C<923H,23@+/RP\-"HX,"HW+"DX*"@V)10U)1(S)!!XU)AXU
fm@2327
   281
(Q0_$1XZ#1X["A(]^QPX&34>?;&).&-Z/6]Y06MU1&AR/5UG15-N0EYF1&EO0&EN/&EP.6AN.%5N.5-M.5%P/UYQ.$)I.4)L0UQW/U-\+5YX5XFA') ; mask:((Depth1Image new) width: 22; height: 19; photometric:(#blackIs0); bitsPerSample:(#[1]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'@C G@G0C@O0C@O8C@_8C@?<C@?<CA?>CC??CC??CC??#G??#O??3O??3_??;????????????????') ; yourself); yourself]
fm@2327
   282
! !
fm@2327
   283
cg@2015
   284
!InternationalLanguageTranslationEditor class methodsFor:'interface specs'!
cg@2015
   285
cg@2015
   286
windowSpec
cg@2015
   287
    "This resource specification was automatically generated
cg@2015
   288
     by the UIPainter of ST/X."
cg@2015
   289
cg@2015
   290
    "Do not manually edit this!! If it is corrupted,
cg@2015
   291
     the UIPainter may not be able to read the specification."
cg@2015
   292
cg@2015
   293
    "
cg@2048
   294
     UIPainter new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#windowSpec
cg@2048
   295
     Tools::InternationalLanguageTranslationEditor new openInterface:#windowSpec
cg@2048
   296
     Tools::InternationalLanguageTranslationEditor open
cg@2015
   297
    "
cg@2015
   298
cg@2015
   299
    <resource: #canvas>
cg@2015
   300
cg@2015
   301
    ^ 
cg@2015
   302
     #(FullSpec
cg@2015
   303
        name: windowSpec
cg@2015
   304
        window: 
cg@2015
   305
       (WindowSpec
cg@2015
   306
          label: 'InternationalLanguageTranslationEditor'
cg@2015
   307
          name: 'InternationalLanguageTranslationEditor'
cg@2015
   308
          min: (Point 10 10)
fm@2327
   309
          bounds: (Rectangle 0 0 774 610)
cg@2015
   310
          menu: mainMenu
cg@2015
   311
        )
cg@2015
   312
        component: 
cg@2015
   313
       (SpecCollection
cg@2015
   314
          collection: (
cg@2015
   315
           (MenuPanelSpec
cg@2015
   316
              name: 'ToolBar'
cg@2015
   317
              layout: (LayoutFrame 0 0 0 0 0 1 30 0)
cg@2015
   318
              menu: menuToolBar
cg@2015
   319
              textDefault: true
cg@2015
   320
            )
cg@2015
   321
           (VariableVerticalPanelSpec
fm@2327
   322
              name: 'TranslationsVariableVerticalPanel'
fm@2327
   323
              layout: (LayoutFrame 0 0 30 0 0 1 -32 1)
cg@2015
   324
              component: 
cg@2015
   325
             (SpecCollection
cg@2015
   326
                collection: (
cg@2015
   327
                 (DataSetSpec
cg@2015
   328
                    name: 'KeyStringAndLanguageSelectionTable'
cg@2015
   329
                    model: selectedKeyRow
fm@2163
   330
                    menu: keyStringAndLanguageSelectionTableMenu
cg@2015
   331
                    hasHorizontalScrollBar: true
cg@2015
   332
                    hasVerticalScrollBar: true
cg@2015
   333
                    dataList: keyStringAndLanguageSelectionTable
cg@2015
   334
                    columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
fm@2049
   335
                    beDependentOfRows: true
cg@2015
   336
                    columnAdaptor: yourself
cg@2015
   337
                    postBuildCallback: postBuildDataSet:
cg@2015
   338
                  )
fm@2050
   339
                 (VariableVerticalPanelSpec
fm@2050
   340
                    name: 'VariableVerticalPanel1'
cg@2015
   341
                    component: 
cg@2015
   342
                   (SpecCollection
cg@2015
   343
                      collection: (
fm@2050
   344
                       (ViewSpec
fm@2050
   345
                          name: 'Box1'
fm@2050
   346
                          component: 
fm@2050
   347
                         (SpecCollection
fm@2050
   348
                            collection: (
fm@2050
   349
                             (LabelSpec
fm@2050
   350
                                label: 'Original String (Key):'
fm@2050
   351
                                name: 'Label2'
fm@2050
   352
                                layout: (LayoutFrame 0 0 -2 0 0 1 28 0)
fm@2050
   353
                                translateLabel: true
fm@2050
   354
                                adjust: left
fm@2050
   355
                              )
fm@2050
   356
                             (TextEditorSpec
fm@2050
   357
                                name: 'OriginalText'
fm@2050
   358
                                layout: (LayoutFrame 0 0 27 0 0 1 -2 1)
fm@2050
   359
                                model: originalTextHolder
fm@2050
   360
                                hasHorizontalScrollBar: true
fm@2050
   361
                                hasVerticalScrollBar: true
fm@2050
   362
                                modifiedChannel: originalTextModifiedHolder
fm@2050
   363
                                acceptCallBack: languageTextAccepted
fm@2050
   364
                              )
fm@2050
   365
                             )
fm@2050
   366
                           
fm@2050
   367
                          )
cg@2015
   368
                        )
fm@2050
   369
                       (ViewSpec
fm@2050
   370
                          name: 'Box3'
fm@2050
   371
                          component: 
fm@2050
   372
                         (SpecCollection
fm@2050
   373
                            collection: (
fm@2050
   374
                             (LabelSpec
fm@2051
   375
                                label: 'Select Another Language as example:'
fm@2050
   376
                                name: 'Label3'
fm@2050
   377
                                layout: (LayoutFrame 0 0 -6 0 0 1 24 0)
fm@2050
   378
                                translateLabel: true
fm@2050
   379
                                adjust: left
fm@2050
   380
                              )
fm@2050
   381
                             (ComboBoxSpec
fm@2050
   382
                                name: 'ComboBox1'
fm@2050
   383
                                layout: (LayoutFrame 197 0 -2 0 322 0 18 0)
fm@2050
   384
                                model: exampleLanguageSelectionHolder
fm@2050
   385
                                immediateAccept: false
fm@2050
   386
                                acceptOnLeave: true
fm@2050
   387
                                acceptOnLostFocus: true
fm@2050
   388
                                acceptOnPointerLeave: false
fm@2050
   389
                                comboList: shownLanguages
fm@2050
   390
                                useIndex: false
fm@2050
   391
                              )
fm@2050
   392
                             (TextEditorSpec
fm@2050
   393
                                name: 'ExampleLanguageText'
fm@2051
   394
                                layout: (LayoutFrame 0 0 30 0 0 1 0 1)
fm@2050
   395
                                model: exampleLanguageTextHolder
fm@2050
   396
                                hasHorizontalScrollBar: true
fm@2050
   397
                                hasVerticalScrollBar: true
fm@2050
   398
                                isReadOnly: true
fm@2050
   399
                              )
fm@2050
   400
                             )
fm@2050
   401
                           
fm@2050
   402
                          )
fm@2050
   403
                        )
fm@2050
   404
                       (ViewSpec
fm@2050
   405
                          name: 'Box2'
fm@2050
   406
                          component: 
fm@2050
   407
                         (SpecCollection
fm@2050
   408
                            collection: (
fm@2050
   409
                             (LabelSpec
fm@2050
   410
                                label: 'Translated String:'
fm@2050
   411
                                name: 'Label1'
fm@2050
   412
                                layout: (LayoutFrame 0 0 0 0 0 1 30 0)
fm@2050
   413
                                translateLabel: true
fm@2050
   414
                                adjust: left
fm@2050
   415
                              )
fm@2050
   416
                             (TextEditorSpec
fm@2050
   417
                                name: 'LanguageText'
fm@2050
   418
                                layout: (LayoutFrame 0 0 30 0 0 1 0 1)
fm@2050
   419
                                model: languageTextHolder
fm@2050
   420
                                hasHorizontalScrollBar: true
fm@2050
   421
                                hasVerticalScrollBar: true
fm@2050
   422
                                acceptChannel: languageTextAcceptHolder
fm@2050
   423
                                modifiedChannel: languageTextModifiedHolder
fm@2050
   424
                                acceptCallBack: languageTextAccepted
fm@2050
   425
                                postBuildCallback: languageEditorBuilt:
fm@2050
   426
                              )
fm@2051
   427
                             (ActionButtonSpec
fm@2051
   428
                                label: 'Paste Previous'
fm@2051
   429
                                name: 'pastePreviousTranslation'
fm@2051
   430
                                layout: (LayoutOrigin 0 0.83085250338295 0 0.03448275862069)
fm@2051
   431
                                translateLabel: true
fm@2051
   432
                                model: pastePreviousTranslationInLanguageText
fm@2051
   433
                                enableChannel: pastePreviousTranslationEnableHolder
fm@2051
   434
                                disabledLogo: 'Paste Previous'
fm@2051
   435
                              )
fm@2323
   436
                             (ActionButtonSpec
fm@2323
   437
                                label: 'Paste Original'
fm@2323
   438
                                name: 'Button1'
fm@2323
   439
                                layout: (LayoutOrigin -95 0.83085250338295 0 0.03448275862069)
fm@2323
   440
                                translateLabel: true
fm@2323
   441
                                model: pasteOriginalInLanguageText
fm@2323
   442
                                enableChannel: pasteOriginalEnableHolder
fm@2323
   443
                                disabledLogo: 'Paste Original'
fm@2323
   444
                              )
fm@2050
   445
                             )
fm@2050
   446
                           
fm@2050
   447
                          )
cg@2015
   448
                        )
cg@2015
   449
                       )
cg@2015
   450
                     
cg@2015
   451
                    )
fm@2050
   452
                    handles: (Any 0.33333333333333 0.66666666666667 1.0)
cg@2015
   453
                  )
cg@2015
   454
                 )
cg@2015
   455
               
cg@2015
   456
              )
fm@2050
   457
              handles: (Any 0.5 1.0)
fm@2327
   458
              postBuildCallback: postBuildTranslationsPanel:
fm@2327
   459
            )
fm@2327
   460
           (ViewSpec
fm@2327
   461
              name: 'SearchBox'
fm@2327
   462
              layout: (LayoutFrame 0 0 -32 1 0 1 0 1)
fm@2327
   463
              level: -1
fm@2327
   464
              visibilityChannel: searchBoxVisible
fm@2327
   465
              component: 
fm@2327
   466
             (SpecCollection
fm@2327
   467
                collection: (
fm@2327
   468
                 (ActionButtonSpec
fm@2327
   469
                    label: 'closeSearchBarIcon'
fm@2327
   470
                    name: 'closeSearchBarButton'
fm@2327
   471
                    layout: (LayoutFrame 4 0 5 0 25 0 26 0)
fm@2327
   472
                    hasCharacterOrientedLabel: false
fm@2327
   473
                    translateLabel: true
fm@2327
   474
                    model: closeSearchBar
fm@2327
   475
                  )
fm@2327
   476
                 (LabelSpec
fm@2327
   477
                    label: 'Search:'
fm@2327
   478
                    name: 'SearchLabel'
fm@2327
   479
                    layout: (LayoutFrame 30 0 5 0 81 0 27 0)
fm@2327
   480
                    translateLabel: true
fm@2327
   481
                    adjust: right
fm@2327
   482
                  )
fm@2327
   483
                 (InputFieldSpec
fm@2327
   484
                    name: 'SearchEntryField'
fm@2327
   485
                    layout: (LayoutFrame 87 0 5 0 244 0 27 0)
fm@2327
   486
                    model: searchTextHolder
fm@2327
   487
                    immediateAccept: true
fm@2327
   488
                    acceptOnReturn: true
fm@2327
   489
                    acceptOnTab: true
fm@2327
   490
                    acceptOnLostFocus: true
fm@2327
   491
                    modifiedChannel: searchTextModifiedHolder
fm@2327
   492
                    acceptOnPointerLeave: false
fm@2327
   493
                    postBuildCallback: postBuildSearchTextView:
fm@2327
   494
                  )
fm@2327
   495
                 (ActionButtonSpec
fm@2327
   496
                    label: 'searchNextIcon'
fm@2327
   497
                    name: 'SearchNextButton'
fm@2327
   498
                    layout: (LayoutFrame 251 0 5 0 272 0 26 0)
fm@2327
   499
                    hasCharacterOrientedLabel: false
fm@2327
   500
                    translateLabel: true
fm@2327
   501
                    model: searchNextText
fm@2327
   502
                  )
fm@2327
   503
                 (ActionButtonSpec
fm@2327
   504
                    label: 'searchPreviousIcon'
fm@2327
   505
                    name: 'searchPreviousButton'
fm@2327
   506
                    layout: (LayoutFrame 279 0 5 0 300 0 26 0)
fm@2327
   507
                    hasCharacterOrientedLabel: false
fm@2327
   508
                    translateLabel: true
fm@2327
   509
                    model: searchPreviousText
fm@2327
   510
                  )
fm@2327
   511
                 (CheckBoxSpec
fm@2327
   512
                    label: 'Ignore case'
fm@2327
   513
                    name: 'IgnoreCaseCheckBox'
fm@2329
   514
                    layout: (LayoutFrame 309 0 5 0 505 0 27 0)
fm@2327
   515
                    model: ignoreCaseHolder
fm@2327
   516
                    translateLabel: true
fm@2327
   517
                  )
fm@2327
   518
                 (LabelSpec
fm@2327
   519
                    label: 'SearchBarImageInfoLabel'
fm@2327
   520
                    name: 'SearchBarImageInfoLabel'
fm@2329
   521
                    layout: (LayoutFrame 511 0 5 0 535 0 27 0)
fm@2327
   522
                    hasCharacterOrientedLabel: false
fm@2327
   523
                    translateLabel: true
fm@2327
   524
                    labelChannel: searchBarImageInfoLabelHolder
fm@2327
   525
                  )
fm@2327
   526
                 (LabelSpec
fm@2327
   527
                    label: 'SearchBarInfoLabel'
fm@2327
   528
                    name: 'SearchBarInfoLabel'
fm@2329
   529
                    layout: (LayoutFrame 538 0 5 0 816 0 27 0)
fm@2327
   530
                    translateLabel: true
fm@2327
   531
                    labelChannel: searchBarInfoLabelHolder
fm@2327
   532
                    adjust: left
fm@2327
   533
                  )
fm@2327
   534
                 )
fm@2327
   535
               
fm@2327
   536
              )
fm@2327
   537
              postBuildCallback: postBuildSearchBoxView:
cg@2015
   538
            )
cg@2015
   539
           )
cg@2015
   540
         
cg@2015
   541
        )
cg@2015
   542
      )
cg@2015
   543
! !
cg@2015
   544
cg@2015
   545
!InternationalLanguageTranslationEditor class methodsFor:'menu specs'!
cg@2015
   546
fm@2163
   547
keyStringAndLanguageSelectionTableMenu
fm@2163
   548
    "This resource specification was automatically generated
fm@2163
   549
     by the MenuEditor of ST/X."
fm@2163
   550
fm@2163
   551
    "Do not manually edit this!! If it is corrupted,
fm@2163
   552
     the MenuEditor may not be able to read the specification."
fm@2163
   553
fm@2163
   554
    "
fm@2163
   555
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyStringAndLanguageSelectionTableMenu
fm@2163
   556
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp
fm@2163
   557
    "
fm@2163
   558
fm@2163
   559
    <resource: #menu>
fm@2163
   560
fm@2163
   561
    ^ 
fm@2163
   562
     #(Menu
fm@2163
   563
        (
fm@2163
   564
         (MenuItem
fm@2327
   565
            label: 'Set Current NameSpace'
fm@2163
   566
            itemValue: changeLastNameSpace
fm@2163
   567
            translateLabel: true
fm@2163
   568
          )
fm@2163
   569
         (MenuItem
fm@2327
   570
            label: 'Search String in Current NameSpace'
fm@2163
   571
            itemValue: searchStringInLastNameSpace
fm@2163
   572
            translateLabel: true
fm@2163
   573
          )
fm@2327
   574
         (MenuItem
fm@2327
   575
            label: '-'
fm@2327
   576
            isVisible: #false
fm@2327
   577
          )
fm@2327
   578
         (MenuItem
fm@2327
   579
            label: 'Set Current Package'
fm@2327
   580
            itemValue: changeLastPackage
fm@2327
   581
            translateLabel: true
fm@2327
   582
            isVisible: #false
fm@2327
   583
          )
fm@2327
   584
         (MenuItem
fm@2327
   585
            label: 'Search String in Current Package'
fm@2327
   586
            itemValue: searchStringInLastPackage
fm@2327
   587
            translateLabel: true
fm@2327
   588
            isVisible: #false
fm@2327
   589
          )
fm@2163
   590
         )
fm@2163
   591
        nil
fm@2163
   592
        nil
fm@2163
   593
      )
fm@2163
   594
!
fm@2163
   595
cg@2015
   596
mainMenu
cg@2015
   597
    "This resource specification was automatically generated
cg@2015
   598
     by the MenuEditor of ST/X."
cg@2015
   599
cg@2015
   600
    "Do not manually edit this!! If it is corrupted,
cg@2015
   601
     the MenuEditor may not be able to read the specification."
cg@2015
   602
cg@2015
   603
    "
fm@2050
   604
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#mainMenu
fm@2050
   605
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor mainMenu)) startUp
cg@2015
   606
    "
cg@2015
   607
cg@2015
   608
    <resource: #menu>
cg@2015
   609
cg@2015
   610
    ^ 
cg@2015
   611
     #(Menu
cg@2015
   612
        (
cg@2015
   613
         (MenuItem
cg@2015
   614
            label: 'File'
cg@2015
   615
            translateLabel: true
cg@2015
   616
            submenu: 
cg@2015
   617
           (Menu
cg@2015
   618
              (
cg@2015
   619
               (MenuItem
cg@2015
   620
                  label: 'New'
cg@2015
   621
                  itemValue: menuNew
cg@2015
   622
                  translateLabel: true
cg@2015
   623
                )
cg@2015
   624
               (MenuItem
cg@2015
   625
                  label: '-'
cg@2015
   626
                )
cg@2015
   627
               (MenuItem
cg@2410
   628
                  label: 'Open Resources for Package or Project...'
cg@2410
   629
                  itemValue: menuOpenByPackage
cg@2410
   630
                  translateLabel: true
cg@2410
   631
                )
cg@2410
   632
               (MenuItem
cg@2015
   633
                  label: 'Open Resource File...'
cg@2015
   634
                  itemValue: menuOpen
cg@2015
   635
                  translateLabel: true
cg@2015
   636
                )
cg@2015
   637
               (MenuItem
cg@2015
   638
                  label: '-'
cg@2015
   639
                )
cg@2015
   640
               (MenuItem
fm@2053
   641
                  label: 'Save All Resource Files'
fm@2053
   642
                  itemValue: menuSaveAll
fm@2053
   643
                  translateLabel: true
fm@2053
   644
                )
fm@2053
   645
               (MenuItem
cg@2015
   646
                  label: 'Save Resource File'
cg@2015
   647
                  itemValue: menuSave
cg@2015
   648
                  translateLabel: true
cg@2015
   649
                )
cg@2015
   650
               (MenuItem
cg@2015
   651
                  label: 'Save Resource File As...'
cg@2015
   652
                  itemValue: menuSaveAs
cg@2015
   653
                  translateLabel: true
cg@2015
   654
                )
cg@2015
   655
               (MenuItem
cg@2015
   656
                  label: '-'
cg@2015
   657
                )
cg@2015
   658
               (MenuItem
cg@2410
   659
                  label: 'Import existing translations from file...'
fm@2327
   660
                  itemValue: importExistingTranslationsFromFile
fm@2327
   661
                  translateLabel: true
fm@2327
   662
                )
fm@2327
   663
               (MenuItem
fm@2327
   664
                  label: '-'
fm@2327
   665
                )
fm@2327
   666
               (MenuItem
fm@2327
   667
                  label: 'Set Current NameSpace'
fm@2163
   668
                  itemValue: changeLastNameSpace
fm@2163
   669
                  translateLabel: true
fm@2163
   670
                )
fm@2163
   671
               (MenuItem
fm@2327
   672
                  label: 'Set Current Package'
fm@2327
   673
                  itemValue: changeLastPackage
fm@2327
   674
                  translateLabel: true
fm@2327
   675
                  isVisible: #false
fm@2327
   676
                )
fm@2327
   677
               (MenuItem
fm@2163
   678
                  label: '-'
fm@2163
   679
                )
fm@2163
   680
               (MenuItem
cg@2015
   681
                  label: 'Exit'
cg@2015
   682
                  itemValue: closeRequest
cg@2015
   683
                  translateLabel: true
cg@2015
   684
                )
cg@2015
   685
               )
cg@2015
   686
              nil
cg@2015
   687
              nil
cg@2015
   688
            )
cg@2015
   689
          )
cg@2015
   690
         (MenuItem
cg@2015
   691
            label: 'View'
cg@2015
   692
            translateLabel: true
cg@2015
   693
            submenu: 
cg@2015
   694
           (Menu
cg@2015
   695
              (
cg@2015
   696
               (MenuItem
cg@2015
   697
                  label: 'Show Missing Translations Only'
cg@2015
   698
                  translateLabel: true
cg@2015
   699
                  indication: showMissingTranslationsOnly
cg@2015
   700
                )
cg@2015
   701
               (MenuItem
cg@2015
   702
                  label: '-'
cg@2015
   703
                )
cg@2015
   704
               (MenuItem
cg@2015
   705
                  label: 'Shown Languages'
cg@2015
   706
                  translateLabel: true
cg@2015
   707
                  submenuChannel: shownLanguagesMenu
cg@2015
   708
                )
cg@2015
   709
               )
cg@2015
   710
              nil
cg@2015
   711
              nil
cg@2015
   712
            )
cg@2015
   713
          )
cg@2015
   714
         (MenuItem
cg@2015
   715
            label: 'Languages'
cg@2015
   716
            translateLabel: true
cg@2015
   717
            submenu: 
cg@2015
   718
           (Menu
cg@2015
   719
              (
cg@2015
   720
               (MenuItem
cg@2015
   721
                  label: 'Add Language...'
cg@2015
   722
                  itemValue: addLanguage
cg@2015
   723
                  translateLabel: true
cg@2015
   724
                )
cg@2015
   725
               (MenuItem
cg@2015
   726
                  label: 'Remove Language...'
cg@2015
   727
                  itemValue: removeLanguage
cg@2015
   728
                  translateLabel: true
cg@2015
   729
                )
cg@2015
   730
               )
cg@2015
   731
              nil
cg@2015
   732
              nil
cg@2015
   733
            )
cg@2015
   734
          )
cg@2015
   735
         (MenuItem
cg@2015
   736
            label: 'Translations'
cg@2015
   737
            translateLabel: true
cg@2015
   738
            submenu: 
cg@2015
   739
           (Menu
cg@2015
   740
              (
cg@2015
   741
               (MenuItem
cg@2015
   742
                  label: 'Add Translation...'
cg@2015
   743
                  itemValue: addTranslation
cg@2015
   744
                  translateLabel: true
cg@2015
   745
                )
cg@2015
   746
               (MenuItem
cg@2015
   747
                  label: 'Remove Translation...'
cg@2015
   748
                  itemValue: removeTranslation
cg@2015
   749
                  translateLabel: true
cg@2015
   750
                )
cg@2015
   751
               (MenuItem
cg@2015
   752
                  label: '-'
cg@2015
   753
                )
cg@2015
   754
               (MenuItem
cg@2015
   755
                  label: 'Extract from Class...'
cg@2015
   756
                  itemValue: extractTranslationsFromClass
cg@2015
   757
                  translateLabel: true
cg@2015
   758
                )
cg@2015
   759
               (MenuItem
cg@2032
   760
                  label: 'Extract from Project...'
cg@2032
   761
                  itemValue: extractTranslationsFromProject
cg@2032
   762
                  translateLabel: true
cg@2032
   763
                )
cg@2032
   764
               (MenuItem
fm@2163
   765
                  label: 'Extract from NameSpace...'
fm@2163
   766
                  itemValue: extractTranslationsFromNameSpace
fm@2163
   767
                  translateLabel: true
fm@2163
   768
                )
fm@2163
   769
               (MenuItem
cg@2032
   770
                  label: '-'
cg@2032
   771
                )
cg@2032
   772
               (MenuItem
cg@2015
   773
                  label: 'Run Application and Collect Translations...'
cg@2015
   774
                  itemValue: runApplicationAndCollectTranslations
cg@2015
   775
                  translateLabel: true
cg@2015
   776
                )
cg@2015
   777
               )
cg@2015
   778
              nil
cg@2015
   779
              nil
cg@2015
   780
            )
cg@2015
   781
          )
cg@2015
   782
         (MenuItem
fm@2050
   783
            label: 'Preferences'
fm@2050
   784
            translateLabel: true
fm@2050
   785
            submenu: 
fm@2050
   786
           (Menu
fm@2050
   787
              (
fm@2050
   788
               (MenuItem
fm@2050
   789
                  label: 'Auto Accept Changes'
fm@2050
   790
                  translateLabel: true
fm@2050
   791
                  indication: autoAcceptHolder
fm@2050
   792
                )
fm@2051
   793
               (MenuItem
fm@2051
   794
                  label: 'Search For Similar Translations'
fm@2051
   795
                  translateLabel: true
fm@2051
   796
                  indication: searchForSimilarTranslationEnableHolder
fm@2051
   797
                )
fm@2053
   798
               (MenuItem
fm@2053
   799
                  label: 'Always Write UTF8'
fm@2053
   800
                  translateLabel: true
fm@2053
   801
                  indication: alwaysWriteUTF8Holder
fm@2053
   802
                )
fm@2050
   803
               )
fm@2050
   804
              nil
fm@2050
   805
              nil
fm@2050
   806
            )
fm@2050
   807
          )
fm@2050
   808
         (MenuItem
cg@2015
   809
            label: 'Help'
cg@2015
   810
            translateLabel: true
cg@2015
   811
            startGroup: right
cg@2015
   812
            submenu: 
cg@2015
   813
           (Menu
cg@2015
   814
              (
cg@2015
   815
               (MenuItem
cg@2015
   816
                  label: 'Documentation'
cg@2015
   817
                  itemValue: openDocumentation
cg@2015
   818
                  translateLabel: true
cg@2015
   819
                )
cg@2015
   820
               (MenuItem
cg@2015
   821
                  label: '-'
cg@2015
   822
                )
cg@2015
   823
               (MenuItem
cg@2015
   824
                  label: 'About this Application...'
cg@2015
   825
                  itemValue: openAboutThisApplication
cg@2015
   826
                  translateLabel: true
cg@2015
   827
                )
cg@2015
   828
               )
cg@2015
   829
              nil
cg@2015
   830
              nil
cg@2015
   831
            )
cg@2015
   832
          )
cg@2015
   833
         )
cg@2015
   834
        nil
cg@2015
   835
        nil
cg@2015
   836
      )
cg@2015
   837
!
cg@2015
   838
fm@2051
   839
menuItemsEditLanguage
fm@2051
   840
    "This resource specification was automatically generated
fm@2051
   841
     by the MenuEditor of ST/X."
fm@2051
   842
fm@2051
   843
    "Do not manually edit this!! If it is corrupted,
fm@2051
   844
     the MenuEditor may not be able to read the specification."
fm@2051
   845
fm@2051
   846
    "
fm@2051
   847
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#menu
fm@2051
   848
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menu)) startUp
fm@2051
   849
    "
fm@2051
   850
fm@2051
   851
    <resource: #menu>
fm@2051
   852
fm@2051
   853
    ^ 
fm@2051
   854
     #(Menu
fm@2051
   855
        (
fm@2051
   856
         (MenuItem
fm@2051
   857
            enabled: pastePreviousTranslationEnableHolder
fm@2051
   858
            label: 'Paste Previous Translation'
fm@2051
   859
            itemValue: pastePreviousTranslationInLanguageText
fm@2051
   860
            nameKey: pastePreviousTranslationInLanguageText
fm@2051
   861
            translateLabel: true
fm@2051
   862
          )
fm@2051
   863
         )
fm@2051
   864
        nil
fm@2051
   865
        nil
fm@2051
   866
      )
fm@2051
   867
!
fm@2051
   868
cg@2015
   869
menuToolBar
cg@2015
   870
    "This resource specification was automatically generated
cg@2015
   871
     by the MenuEditor of ST/X."
cg@2015
   872
cg@2015
   873
    "Do not manually edit this!! If it is corrupted,
cg@2015
   874
     the MenuEditor may not be able to read the specification."
cg@2015
   875
cg@2015
   876
    "
fm@2051
   877
     MenuEditor new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#menuToolBar
fm@2051
   878
     (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menuToolBar)) startUp
cg@2015
   879
    "
cg@2015
   880
cg@2015
   881
    <resource: #menu>
cg@2015
   882
cg@2015
   883
    ^ 
cg@2015
   884
     #(Menu
cg@2015
   885
        (
cg@2015
   886
         (MenuItem
cg@2015
   887
            label: 'Save'
fm@2051
   888
            itemValue: menuSave
cg@2015
   889
            translateLabel: true
cg@2015
   890
            labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon)
cg@2015
   891
          )
cg@2015
   892
         (MenuItem
cg@2015
   893
            label: '-'
cg@2015
   894
          )
cg@2015
   895
         (MenuItem
cg@2015
   896
            label: 'Add Translation'
cg@2015
   897
            itemValue: addTranslation
cg@2015
   898
            translateLabel: true
cg@2015
   899
            labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon)
cg@2015
   900
          )
cg@2015
   901
         (MenuItem
cg@2015
   902
            label: 'Remove Translation'
cg@2015
   903
            itemValue: removeTranslation
cg@2015
   904
            translateLabel: true
cg@2015
   905
            labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon)
cg@2015
   906
          )
cg@2015
   907
         (MenuItem
fm@2327
   908
            label: '-'
fm@2327
   909
          )
fm@2327
   910
         (MenuItem
fm@2327
   911
            label: 'Search'
fm@2327
   912
            itemValue: search
fm@2327
   913
            translateLabel: true
fm@2327
   914
            shortcutKey: Ctrlf
fm@2327
   915
            labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon)
fm@2327
   916
          )
fm@2327
   917
         (MenuItem
cg@2015
   918
            label: ''
cg@2015
   919
          )
cg@2015
   920
         (MenuItem
cg@2015
   921
            label: 'Stop Application'
cg@2015
   922
            itemValue: stopApplication
cg@2015
   923
            translateLabel: true
cg@2015
   924
            isVisible: stopApplicationIconVisibleHolder
cg@2015
   925
            labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon)
cg@2015
   926
          )
cg@2015
   927
         )
cg@2015
   928
        nil
cg@2015
   929
        nil
cg@2015
   930
      )
cg@2015
   931
! !
cg@2015
   932
cg@2433
   933
!InternationalLanguageTranslationEditor class methodsFor:'startup'!
cg@2433
   934
cg@2433
   935
openOnFile:aFilename
cg@2433
   936
    |fn|
cg@2433
   937
cg@2433
   938
    fn := aFilename asFilename.
cg@2433
   939
cg@2433
   940
    self new
cg@2433
   941
        allButOpen;
cg@2433
   942
        readResourceFile:fn asLanguage:fn withoutSuffix baseName;
cg@2433
   943
        openWindow.
cg@2433
   944
! !
cg@2433
   945
cg@2047
   946
!InternationalLanguageTranslationEditor class methodsFor:'tableColumns specs'!
cg@2047
   947
cg@2047
   948
keyTableColumn
cg@2047
   949
    "This resource specification was automatically generated
cg@2047
   950
     by the DataSetBuilder of ST/X."
cg@2047
   951
cg@2047
   952
    "Do not manually edit this!! If it is corrupted,
cg@2047
   953
     the DataSetBuilder may not be able to read the specification."
cg@2047
   954
cg@2047
   955
    "
cg@2047
   956
     DataSetBuilder new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#keyTableColumn
cg@2047
   957
    "
cg@2047
   958
cg@2047
   959
    <resource: #tableColumns>
cg@2047
   960
cg@2047
   961
    ^#(
cg@2047
   962
      (DataSetColumnSpec
cg@2047
   963
         label: 'Key'
cg@2047
   964
         labelButtonType: Button
cg@2047
   965
         minWidth: 50
cg@2047
   966
         model: keyStringInRow:
cg@2047
   967
       )
cg@2047
   968
      )
cg@2047
   969
!
cg@2047
   970
cg@2047
   971
languageTableColumn
cg@2047
   972
    "This resource specification was automatically generated
cg@2047
   973
     by the DataSetBuilder of ST/X."
cg@2047
   974
cg@2047
   975
    "Do not manually edit this!! If it is corrupted,
cg@2047
   976
     the DataSetBuilder may not be able to read the specification."
cg@2047
   977
cg@2047
   978
    "
fm@2049
   979
     DataSetBuilder new openOnClass:Tools::InternationalLanguageTranslationEditor andSelector:#languageTableColumn
cg@2047
   980
    "
cg@2047
   981
cg@2047
   982
    <resource: #tableColumns>
cg@2047
   983
cg@2047
   984
    ^#(
fm@2049
   985
      (DataSetColumnSpec
fm@2049
   986
         label: lang
fm@2049
   987
         labelButtonType: Button
fm@2049
   988
         minWidth: 50
fm@2049
   989
         editorType: None
fm@2049
   990
         model: columnInRow:at:
fm@2049
   991
         backgroundSelector: getBackgroundForRow:rowNr:col:
fm@2049
   992
       )
fm@2049
   993
      )
fm@2049
   994
! !
cg@2047
   995
fm@2049
   996
!InternationalLanguageTranslationEditor methodsFor:'accessing'!
fm@2049
   997
fm@2327
   998
currentSelectionIndex 
fm@2327
   999
fm@2327
  1000
    ^ self selectedKeyRow value
fm@2327
  1001
fm@2327
  1002
    "Created: / 16-06-2007 / 09:04:11 / Administrador"
fm@2327
  1003
    "Modified: / 19-06-2007 / 17:28:38 / Administrador"
fm@2327
  1004
!
fm@2327
  1005
fm@2327
  1006
exists: anObject
fm@2327
  1007
fm@2327
  1008
    ^self objectsList includes: anObject
fm@2327
  1009
fm@2327
  1010
    "Created: / 19-06-2007 / 16:42:22 / Administrador"
fm@2327
  1011
!
fm@2327
  1012
fm@2327
  1013
indexOf: anObject
fm@2327
  1014
fm@2327
  1015
    ^self objectsList indexOf: anObject
fm@2327
  1016
fm@2327
  1017
    "Created: / 19-06-2007 / 16:39:44 / Administrador"
fm@2327
  1018
!
fm@2327
  1019
fm@2049
  1020
newLanguageText
fm@2049
  1021
"/   languageEditor accept
fm@2163
  1022
    ^self languageTextHolder value isNil 
fm@2163
  1023
        ifTrue:['']
fm@2163
  1024
        ifFalse:[self languageTextHolder value asCollectionOfLines first.]
fm@2050
  1025
!
fm@2050
  1026
fm@2327
  1027
objectsList
fm@2327
  1028
fm@2327
  1029
    ^ keyStringsToLanguageMappings 
fm@2327
  1030
!
fm@2327
  1031
fm@2327
  1032
selectListIndex: rowIndex
fm@2327
  1033
"/    |selection list|
fm@2327
  1034
"/    list := self objectsList.
fm@2327
  1035
"/    list isEmpty ifTrue:[^self].
fm@2327
  1036
"/    selection := list at:rowIndex ifAbsent:nil.
fm@2327
  1037
    self selectedKeyRow value: rowIndex.
fm@2327
  1038
fm@2327
  1039
    "Created: / 16-06-2007 / 09:06:46 / Administrador"
fm@2327
  1040
    "Modified: / 22-06-2007 / 13:45:54 / Administrador"
fm@2327
  1041
!
fm@2327
  1042
fm@2050
  1043
selectedKey  
fm@2050
  1044
   "Returns the current selected key if there is one row seleted. Otherwise, returns nil"
fm@2050
  1045
     |rowSelectionIndex |
fm@2050
  1046
fm@2163
  1047
    keyStringsToLanguageMappings isNil ifTrue:[^nil].
fm@2163
  1048
    self selectedKeyRow value isNil ifTrue:[^nil].
fm@2050
  1049
    rowSelectionIndex := self selectedKeyRow value.
fm@2050
  1050
    rowSelectionIndex == 0 ifTrue:[^nil].
fm@2050
  1051
    ^ keyStringsToLanguageMappings keyAt:rowSelectionIndex.
fm@2327
  1052
!
fm@2327
  1053
fm@2327
  1054
tableView
fm@2327
  1055
fm@2327
  1056
    ^dataSetView scrolledView
fm@2327
  1057
fm@2327
  1058
    "Created: / 15-06-2007 / 18:59:51 / Administrador"
cg@2047
  1059
! !
cg@2047
  1060
fm@2051
  1061
!InternationalLanguageTranslationEditor methodsFor:'additionalFuncionalities'!
fm@2051
  1062
fm@2051
  1063
searchForSimilarTranslation
fm@2163
  1064
    "Looks for a quite similar translation for the key and display a dialog with available options"
fm@2327
  1065
    |similarTranslationsAssociations selectedTranslation key|
fm@2051
  1066
fm@2163
  1067
    self shouldSearchForSimilarTranslation ifFalse:[^self]. 
fm@2051
  1068
fm@2327
  1069
    key := self selectedKey.
fm@2327
  1070
    key isNil ifTrue:[^ self.].
fm@2327
  1071
    similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: key in: self currentLanguage.
fm@2163
  1072
    similarTranslationsAssociations isEmpty ifTrue:[^self].    
fm@2051
  1073
fm@2163
  1074
    similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
fm@2163
  1075
        collection detect:[:selectedAssociation |
fm@2163
  1076
            selectedAssociation value sameAs: association value] ifNone:[collection add: association].
fm@2163
  1077
        collection].
fm@2163
  1078
    selectedTranslation := Dialog 
fm@2163
  1079
        choose:'Choose one if you consider itīs usefull to translate: 
fm@2163
  1080
    ', 
fm@2327
  1081
        '<', key, '>  ', (self currentExampleLanguageText ifNil:[''])
fm@2163
  1082
        fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
fm@2163
  1083
        values: (similarTranslationsAssociations collect:[:each | each value])
fm@2163
  1084
        lines:10
fm@2163
  1085
        cancel: nil.      
fm@2051
  1086
fm@2163
  1087
    selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. 
fm@2051
  1088
! !
fm@2051
  1089
cg@2015
  1090
!InternationalLanguageTranslationEditor methodsFor:'aspects'!
cg@2015
  1091
fm@2053
  1092
alwaysWriteUTF8Holder
fm@2053
  1093
    alwaysWriteUTF8Holder isNil ifTrue:[alwaysWriteUTF8Holder := true asValue]. 
fm@2053
  1094
    ^ alwaysWriteUTF8Holder
fm@2053
  1095
!
fm@2053
  1096
fm@2050
  1097
autoAcceptHolder
fm@2050
  1098
    autoAcceptHolder isNil ifTrue:[autoAcceptHolder := true asValue]. 
fm@2050
  1099
    ^ autoAcceptHolder
fm@2050
  1100
!
fm@2050
  1101
fm@2050
  1102
exampleLanguageSelectionHolder
fm@2050
  1103
    exampleLanguageSelectionHolder isNil ifTrue:[
fm@2050
  1104
        exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue.         
fm@2050
  1105
        exampleLanguageSelectionHolder addDependent:self.
fm@2050
  1106
    ]. 
fm@2050
  1107
    ^ exampleLanguageSelectionHolder
fm@2050
  1108
!
fm@2050
  1109
fm@2050
  1110
exampleLanguageTextHolder
fm@2050
  1111
    exampleLanguageTextHolder isNil ifTrue:[
fm@2050
  1112
        exampleLanguageTextHolder := '' asValue.
fm@2050
  1113
    ].
fm@2050
  1114
    ^ exampleLanguageTextHolder.
fm@2050
  1115
!
fm@2050
  1116
fm@2327
  1117
ignoreCaseHolder
fm@2327
  1118
fm@2327
  1119
    ignoreCaseHolder isNil ifTrue:[
fm@2327
  1120
        ignoreCaseHolder := false asValue.
fm@2327
  1121
"/ if your app needs to be notified of changes, uncomment one of the lines below:
fm@2327
  1122
"/       ignoreCaseHolder addDependent:self.
fm@2327
  1123
        ignoreCaseHolder onChangeSend:#ignoreCaseHolderChanged to:self.
fm@2327
  1124
fm@2327
  1125
    ].
fm@2327
  1126
    ^ ignoreCaseHolder.
fm@2327
  1127
fm@2327
  1128
    "Created: / 16-06-2007 / 06:45:04 / Administrador"
fm@2327
  1129
    "Modified: / 16-06-2007 / 19:32:15 / Administrador"
fm@2327
  1130
!
fm@2327
  1131
cg@2015
  1132
keyStringAndLanguageSelectionTable
cg@2015
  1133
    keyStringsToLanguageMappings isNil ifTrue:[
cg@2015
  1134
        keyStringsToLanguageMappings := KeyStringsToLanguageMappings new.
cg@2015
  1135
    ].
cg@2015
  1136
    ^ keyStringsToLanguageMappings.
cg@2015
  1137
!
cg@2015
  1138
cg@2015
  1139
keyStringAndLanguageSelectionTableColumnDescriptionHolder
cg@2015
  1140
    keyStringAndLanguageSelectionTableColumnDescriptionHolder isNil ifTrue:[
cg@2015
  1141
        keyStringAndLanguageSelectionTableColumnDescriptionHolder := ValueHolder new.
cg@2015
  1142
        keyStringAndLanguageSelectionTableColumnDescriptionHolder value:(self keyStringAndLanguageSelectionTableColumnDescription).
cg@2015
  1143
    ].
cg@2015
  1144
    ^ keyStringAndLanguageSelectionTableColumnDescriptionHolder.
cg@2015
  1145
!
cg@2015
  1146
cg@2015
  1147
languageAtCol:colNr
cg@2015
  1148
    ^ shownLanguages at:colNr-1.
cg@2015
  1149
!
cg@2015
  1150
cg@2015
  1151
languageShownHolderFor:lang
cg@2015
  1152
    |holder|
cg@2015
  1153
cg@2015
  1154
    languageShownHolders isNil ifTrue:[
cg@2015
  1155
        languageShownHolders := Dictionary new
cg@2015
  1156
    ].
cg@2015
  1157
    holder := languageShownHolders 
cg@2015
  1158
                at:lang 
cg@2015
  1159
                ifAbsentPut:[ 
cg@2015
  1160
                    |h|
cg@2015
  1161
cg@2015
  1162
                    h := true asValue.
cg@2015
  1163
                    h onChangeEvaluate:[ 
cg@2015
  1164
                        h value ifTrue:[
cg@2015
  1165
                           self enableLanguageDisplayFor:lang     
cg@2015
  1166
                        ] ifFalse:[
cg@2015
  1167
                           self disableLanguageDisplayFor:lang     
cg@2015
  1168
                        ].
cg@2015
  1169
                    ].
cg@2015
  1170
                    h
cg@2015
  1171
                ].
cg@2015
  1172
    ^ holder.
cg@2015
  1173
!
cg@2015
  1174
cg@2048
  1175
languageTextAcceptHolder
cg@2048
  1176
    languageTextAcceptHolder isNil ifTrue:[
fm@2050
  1177
        languageTextAcceptHolder := false asValue.                        
cg@2048
  1178
    ].
cg@2048
  1179
    ^ languageTextAcceptHolder.
cg@2048
  1180
!
cg@2048
  1181
cg@2015
  1182
languageTextHolder
cg@2015
  1183
    languageTextHolder isNil ifTrue:[
cg@2015
  1184
        languageTextHolder := '' asValue.
cg@2015
  1185
    ].
cg@2015
  1186
    ^ languageTextHolder.
cg@2015
  1187
!
cg@2015
  1188
cg@2015
  1189
languageTextModifiedHolder
cg@2015
  1190
    languageTextModifiedHolder isNil ifTrue:[
cg@2015
  1191
        languageTextModifiedHolder := false asValue.
cg@2015
  1192
    ].
cg@2015
  1193
    ^ languageTextModifiedHolder.
cg@2015
  1194
!
cg@2015
  1195
cg@2015
  1196
languagesList
cg@2015
  1197
    languagesList isNil ifTrue:[
cg@2015
  1198
        languagesList := List withAll:(self keyStringAndLanguageSelectionTable languages).
cg@2015
  1199
    ].
cg@2015
  1200
    ^ languagesList.
cg@2015
  1201
!
cg@2015
  1202
cg@2015
  1203
originalTextHolder
cg@2015
  1204
    originalTextHolder isNil ifTrue:[
cg@2015
  1205
        originalTextHolder := '' asValue.
cg@2015
  1206
    ].
cg@2015
  1207
    ^ originalTextHolder.
cg@2015
  1208
!
cg@2015
  1209
cg@2015
  1210
originalTextModifiedHolder
cg@2015
  1211
    originalTextModifiedHolder isNil ifTrue:[
cg@2015
  1212
        originalTextModifiedHolder := false asValue.
cg@2015
  1213
    ].
cg@2015
  1214
    ^ originalTextModifiedHolder.
cg@2015
  1215
!
cg@2015
  1216
fm@2323
  1217
pasteOriginalEnableHolder
fm@2323
  1218
   pasteOriginalEnableHolder isNil ifTrue:[pasteOriginalEnableHolder := false asValue]. 
fm@2323
  1219
    ^ pasteOriginalEnableHolder
fm@2323
  1220
!
fm@2323
  1221
fm@2051
  1222
pastePreviousTranslationEnableHolder
fm@2051
  1223
   pastePreviousTranslationEnableHolder isNil ifTrue:[pastePreviousTranslationEnableHolder := false asValue]. 
fm@2051
  1224
    ^ pastePreviousTranslationEnableHolder
fm@2051
  1225
!
fm@2051
  1226
fm@2327
  1227
searchBarImageInfoLabelHolder
fm@2327
  1228
fm@2327
  1229
    searchBarImageInfoLabelHolder isNil ifTrue:[
fm@2327
  1230
        searchBarImageInfoLabelHolder := nil asValue .
fm@2327
  1231
    ].
fm@2327
  1232
    ^ searchBarImageInfoLabelHolder.
fm@2327
  1233
fm@2327
  1234
    "Created: / 16-06-2007 / 10:06:28 / Administrador"
fm@2327
  1235
!
fm@2327
  1236
fm@2327
  1237
searchBarInfoLabelHolder
fm@2327
  1238
fm@2327
  1239
    searchBarInfoLabelHolder isNil ifTrue:[
fm@2327
  1240
        searchBarInfoLabelHolder := '' asValue .
fm@2327
  1241
    ].
fm@2327
  1242
    ^ searchBarInfoLabelHolder.
fm@2327
  1243
fm@2327
  1244
    "Created: / 16-06-2007 / 06:20:49 / Administrador"
fm@2327
  1245
!
fm@2327
  1246
fm@2327
  1247
searchBoxVisible
fm@2327
  1248
fm@2327
  1249
    searchBoxVisible isNil ifTrue:[
fm@2327
  1250
        searchBoxVisible := false asValue.
fm@2327
  1251
    ].
fm@2327
  1252
    ^ searchBoxVisible.
fm@2327
  1253
fm@2327
  1254
    "Created: / 15-06-2007 / 18:15:52 / Administrador"
fm@2327
  1255
!
fm@2327
  1256
fm@2051
  1257
searchForSimilarTranslationEnableHolder
fm@2051
  1258
   searchForSimilarTranslationEnableHolder isNil 
fm@2051
  1259
        ifTrue:[searchForSimilarTranslationEnableHolder := true asValue]. 
fm@2051
  1260
    ^ searchForSimilarTranslationEnableHolder
fm@2051
  1261
!
fm@2051
  1262
fm@2327
  1263
searchTextHolder
fm@2327
  1264
fm@2327
  1265
    searchTextHolder isNil ifTrue:[
fm@2327
  1266
        searchTextHolder := ValueHolder new.
fm@2327
  1267
"/ if your app needs to be notified of changes, uncomment one of the lines below:
fm@2327
  1268
"/       userSelectedHolder addDependent:self.
fm@2327
  1269
"/       userSelectedHolder onChangeSend:#searchTextHolderChanged to:self.
fm@2327
  1270
    ].
fm@2327
  1271
    ^ searchTextHolder.
fm@2327
  1272
fm@2327
  1273
    "Created: / 15-06-2007 / 18:06:08 / Administrador"
fm@2327
  1274
!
fm@2327
  1275
fm@2327
  1276
searchTextModifiedHolder
fm@2327
  1277
fm@2327
  1278
    searchTextModifiedHolder isNil ifTrue:[
fm@2327
  1279
        searchTextModifiedHolder := false asValue .
fm@2327
  1280
"/ if your app needs to be notified of changes, uncomment one of the lines below:
fm@2327
  1281
"/       searchTextModifiedHolder addDependent:self.
fm@2327
  1282
       searchTextModifiedHolder onChangeSend:#searchTextModifiedHolderChanged to:self.
fm@2327
  1283
    ].
fm@2327
  1284
    ^ searchTextModifiedHolder.
fm@2327
  1285
fm@2327
  1286
    "Created: / 15-06-2007 / 18:07:19 / Administrador"
fm@2327
  1287
!
fm@2327
  1288
cg@2015
  1289
selectedKeyRow
cg@2015
  1290
    selectedKeyRow isNil ifTrue:[
cg@2015
  1291
        selectedKeyRow := ValueHolder new.
cg@2015
  1292
        selectedKeyRow onChangeSend:#selectionChanged to:self.
cg@2015
  1293
    ].
cg@2015
  1294
    ^ selectedKeyRow.
cg@2015
  1295
!
cg@2015
  1296
cg@2015
  1297
showMissingTranslationsOnly
cg@2015
  1298
    showMissingTranslationsOnly isNil ifTrue:[
cg@2015
  1299
        showMissingTranslationsOnly := false asValue.
fm@2051
  1300
        showMissingTranslationsOnly onChangeSend:#showMissingTranslationsOnlyChanged to:self.
cg@2015
  1301
    ].
cg@2015
  1302
    ^ showMissingTranslationsOnly.
cg@2015
  1303
!
cg@2015
  1304
cg@2015
  1305
shownLanguages
cg@2015
  1306
    shownLanguages isNil ifTrue:[
cg@2015
  1307
        shownLanguages := List new.
cg@2015
  1308
        shownLanguages addAll:(self languagesList).
cg@2015
  1309
        shownLanguages onChangeSend:#shownLanguagesChanged to:self.
cg@2015
  1310
    ].
cg@2015
  1311
    ^ shownLanguages.
cg@2015
  1312
!
cg@2015
  1313
cg@2015
  1314
stopApplicationIconVisibleHolder
cg@2015
  1315
    stopApplicationIconVisibleHolder isNil ifTrue:[
cg@2015
  1316
        stopApplicationIconVisibleHolder := false asValue.
cg@2015
  1317
    ].
cg@2015
  1318
    ^ stopApplicationIconVisibleHolder.
cg@2015
  1319
! !
cg@2015
  1320
cg@2048
  1321
!InternationalLanguageTranslationEditor methodsFor:'change & update'!
cg@2048
  1322
fm@2051
  1323
languageTextHolderValue: aString
fm@2051
  1324
fm@2163
  1325
    self languageTextHolder value: aString.
fm@2163
  1326
    self languageTextModifiedHolder value:true.
fm@2051
  1327
!
fm@2051
  1328
cg@2048
  1329
update:something with:aParameter from:changedObject
cg@2048
  1330
    changedObject == shownLanguages ifTrue:[
cg@2048
  1331
         self shownLanguagesChanged.
cg@2048
  1332
         ^ self.
cg@2048
  1333
    ].
fm@2049
  1334
    changedObject == languageTextAcceptHolder ifTrue:[
fm@2049
  1335
         self updateLanguageTextModification.
fm@2049
  1336
         ^ self.
fm@2049
  1337
    ].
fm@2050
  1338
    changedObject == exampleLanguageSelectionHolder ifTrue:[
fm@2050
  1339
        self updateExampleLanguageText.
fm@2050
  1340
        ^ self.
fm@2051
  1341
    ].    
fm@2051
  1342
    changedObject == showMissingTranslationsOnly ifTrue:[
fm@2051
  1343
        self showMissingTranslationsOnlyChanged.
fm@2051
  1344
        ^ self.
fm@2051
  1345
    ]. 
fm@2051
  1346
!
fm@2051
  1347
fm@2051
  1348
updateCopyPreviousTranslationButtonEnabled
fm@2051
  1349
fm@2163
  1350
     self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled
fm@2050
  1351
!
fm@2050
  1352
fm@2050
  1353
updateExampleLanguageText
fm@2050
  1354
fm@2050
  1355
    self selectedKeyRow value isNil ifTrue:[^ self].
fm@2050
  1356
    self exampleLanguageTextHolder value:self currentExampleLanguageText
fm@2049
  1357
!
fm@2049
  1358
fm@2049
  1359
updateKeyStringsToLanguageMappings           
fm@2049
  1360
fm@2049
  1361
      keyStringsToLanguageMappings 
fm@2049
  1362
        at:lastSelectedKey 
fm@2049
  1363
        language:lastLanguage 
fm@2049
  1364
        put: self newLanguageText.
fm@2049
  1365
!
fm@2049
  1366
fm@2050
  1367
updateLanguageAndKeySelection
fm@2050
  1368
fm@2050
  1369
    self originalTextHolder value: self selectedKey.
fm@2051
  1370
    self languageTextHolder value: (self languageTextFromSelectedKeyFor: self currentLanguage).
fm@2051
  1371
    lastLanguage := self currentLanguage.
fm@2050
  1372
    lastSelectedKey := self selectedKey. 
fm@2050
  1373
!
fm@2050
  1374
fm@2049
  1375
updateLanguageTextModification 
fm@2049
  1376
     self languageTextModifiedHolder value ifTrue:[ 
fm@2049
  1377
        (self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
fm@2049
  1378
            self languageTextModifiedHolder value:false.
fm@2049
  1379
            self languageTextHolder value:languageEditor contents.
fm@2049
  1380
            lastLanguage notNil ifTrue:[self updateKeyStringsToLanguageMappings.]
fm@2049
  1381
        ]
fm@2049
  1382
    ].
fm@2049
  1383
!
fm@2049
  1384
fm@2049
  1385
updateOriginalTextModification
fm@2049
  1386
fm@2163
  1387
    |answer|
fm@2049
  1388
fm@2163
  1389
        self originalTextModifiedHolder value ifTrue:[ 
fm@2163
  1390
            answer := OptionBox 
fm@2163
  1391
                          request:'Accept changed original text (key) ?' 
fm@2163
  1392
                          label:'Original text (key) changed'
fm@2163
  1393
                          image:(WarningBox iconBitmap)
fm@2163
  1394
                          buttonLabels:#('Cancel' 'Accept' 'Accept As New')
fm@2163
  1395
                          values:#(nil #accept #acceptAsNew)
fm@2163
  1396
                          default:#acceptAsNew.
fm@2049
  1397
fm@2163
  1398
            answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
fm@2163
  1399
            answer == #accept ifTrue:[
fm@2163
  1400
    self halt.        ].
fm@2163
  1401
            answer == #acceptAsNew ifTrue:[
fm@2163
  1402
    self halt.        ].
fm@2163
  1403
        ].
fm@2323
  1404
!
fm@2323
  1405
fm@2323
  1406
updatePasteOriginalButtonEnabled
fm@2323
  1407
fm@2323
  1408
     self pasteOriginalEnableHolder value: self shouldPasteOriginalButtonBeEnabled
cg@2048
  1409
! !
cg@2048
  1410
fm@2050
  1411
!InternationalLanguageTranslationEditor methodsFor:'dialogs'!
fm@2050
  1412
fm@2051
  1413
requestEncoderDialog
fm@2050
  1414
fm@2051
  1415
   |box val characterCollection|
fm@2051
  1416
fm@2051
  1417
    val := '' asValue.
fm@2051
  1418
    box := Dialog new.
fm@2051
  1419
    (box addTextLabel:'Select or write the encoder') adjust:#left.
fm@2051
  1420
    box addVerticalSpace.
fm@2051
  1421
    characterCollection := CharacterEncoder supportedExternalEncodings 
fm@2051
  1422
        inject: OrderedCollection new
fm@2051
  1423
        into:[:collection :each |
fm@2051
  1424
            collection add: each first;
fm@2051
  1425
                        yourself].
fm@2051
  1426
    (box addComboBoxOn:val) list: characterCollection.
fm@2051
  1427
    box addOkButton.
fm@2051
  1428
    box open.
fm@2051
  1429
    ^val value
fm@2051
  1430
!
fm@2051
  1431
fm@2051
  1432
requestEncoderStringFor: lang
fm@2051
  1433
  "Returns an encoder string and updates the language's info"
fm@2051
  1434
    |encoderString encoder|
fm@2051
  1435
    encoderString := self requestEncoderDialog.
fm@2051
  1436
    encoderString notEmpty ifTrue:[
fm@2051
  1437
        encoder := CharacterEncoder encoderFor: encoderString ifAbsent:nil.
fm@2051
  1438
        encoder notNil ifTrue:[keyStringsToLanguageMappings atLanguage: lang putEncoder: encoder.].
fm@2051
  1439
    ].
fm@2051
  1440
    ^encoderString
fm@2050
  1441
!
fm@2050
  1442
fm@2050
  1443
requestFilename  
fm@2050
  1444
fm@2050
  1445
    |aFilename|
fm@2050
  1446
fm@2050
  1447
    aFilename := Dialog 
cg@2410
  1448
        requestFileName:(resources string:'Name of resource file:')
fm@2050
  1449
        default:nil 
fm@2050
  1450
        pattern:'*.rs'.
fm@2050
  1451
fm@2050
  1452
    aFilename isEmptyOrNil ifTrue:[^ nil ].
fm@2050
  1453
    ^aFilename asFilename
fm@2050
  1454
!
fm@2050
  1455
fm@2051
  1456
requestFilenameFor: lang  
fm@2051
  1457
  "Returns a filename to save the language resource and updates the language's info"
fm@2051
  1458
    |aFilename|
fm@2051
  1459
fm@2051
  1460
    aFilename := Dialog 
cg@2410
  1461
        requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString)
fm@2051
  1462
        default:nil 
fm@2051
  1463
        pattern:'*.rs'.
fm@2051
  1464
fm@2051
  1465
    aFilename isEmptyOrNil ifTrue:[^ nil ].
fm@2051
  1466
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
fm@2051
  1467
    ^aFilename asFilename
fm@2051
  1468
!
fm@2051
  1469
fm@2050
  1470
requestLanguage
cg@2410
  1471
    ^ Dialog 
cg@2410
  1472
        choose:(resources string:'For which language ?') 
cg@2410
  1473
        fromList:languagesList 
cg@2410
  1474
        lines:10.
fm@2327
  1475
!
fm@2327
  1476
fm@2327
  1477
requestLanguageToSave
fm@2050
  1478
    ^ Dialog 
fm@2050
  1479
        choose:'Which language do you want to save?'
fm@2050
  1480
        fromList:languagesList
fm@2050
  1481
        lines:10
cg@2410
  1482
!
cg@2410
  1483
cg@2410
  1484
requestPackage
cg@2419
  1485
    |package allProjects projectsWithResources|
cg@2419
  1486
cg@2419
  1487
    allProjects := Smalltalk allProjectIDs.
cg@2419
  1488
    projectsWithResources := allProjects
cg@2419
  1489
                                select:[:pID |
cg@2419
  1490
                                    |dir|    
cg@2419
  1491
                                    dir := Smalltalk projectDirectoryForPackage:pID.    
cg@2419
  1492
                                    (dir asFilename construct:'resources') exists    
cg@2419
  1493
                                ].
cg@2410
  1494
cg@2410
  1495
    package := Dialog
cg@2410
  1496
        requestProject:(resources string:'Name of Package:') 
cg@2419
  1497
        from:projectsWithResources
cg@2410
  1498
        initialAnswer:LastProject 
cg@2410
  1499
        suggestions:nil.
cg@2410
  1500
cg@2410
  1501
    package isEmptyOrNil ifTrue:[^ nil ].
cg@2410
  1502
    LastProject := package.
cg@2410
  1503
    ^ package
fm@2050
  1504
! !
fm@2050
  1505
fm@2327
  1506
!InternationalLanguageTranslationEditor methodsFor:'images'!
fm@2327
  1507
fm@2327
  1508
restartSearchBarIcon
fm@2327
  1509
fm@2327
  1510
    ^ self class restartSearchBarIcon
fm@2327
  1511
!
fm@2327
  1512
fm@2327
  1513
warningSearchBarIcon
fm@2327
  1514
fm@2327
  1515
    ^ self class warningSearchBarIcon
fm@2327
  1516
! !
fm@2327
  1517
cg@2015
  1518
!InternationalLanguageTranslationEditor methodsFor:'initialization & release'!
cg@2015
  1519
cg@2015
  1520
closeRequest
cg@2015
  1521
    "asks for permission before closing"
cg@2015
  1522
cg@2015
  1523
    self hasUnsavedChanges ifTrue:[
cg@2015
  1524
        (Dialog 
cg@2015
  1525
            confirm:(resources string:'Close without saving ?')
cg@2015
  1526
            default:false) ifFalse:[
cg@2015
  1527
            ^ self
cg@2015
  1528
        ]
cg@2015
  1529
    ].
cg@2015
  1530
cg@2015
  1531
    super closeRequest
cg@2015
  1532
!
cg@2015
  1533
cg@2015
  1534
initialize
cg@2015
  1535
    modified := false.
cg@2031
  1536
    inSingleFileMode := false.
cg@2015
  1537
    super initialize
cg@2015
  1538
!
cg@2015
  1539
fm@2049
  1540
languageEditorBuilt:aView
fm@2049
  1541
    languageEditor := aView.
fm@2049
  1542
!
fm@2049
  1543
cg@2015
  1544
postBuildDataSet:aView
fm@2049
  1545
    dataSetView := aView.
fm@2049
  1546
    aView selectedColIndexHolder onChangeSend:#selectionChanged to:self.
cg@2015
  1547
! !
cg@2015
  1548
fm@2327
  1549
!InternationalLanguageTranslationEditor methodsFor:'initialize'!
fm@2327
  1550
fm@2327
  1551
postBuildSearchBoxView: aBoxView
fm@2327
  1552
fm@2327
  1553
    searchBoxView := aBoxView
fm@2327
  1554
fm@2327
  1555
    "Created: / 15-06-2007 / 18:02:38 / Administrador"
fm@2327
  1556
!
fm@2327
  1557
fm@2327
  1558
postBuildSearchTextView: anEditFieldView
fm@2327
  1559
fm@2327
  1560
    searchTextView := anEditFieldView
fm@2327
  1561
fm@2327
  1562
    "Created: / 15-06-2007 / 18:17:15 / Administrador"
fm@2327
  1563
!
fm@2327
  1564
fm@2327
  1565
postBuildTranslationsPanel: aPanel
fm@2327
  1566
fm@2327
  1567
    translationsPanel := aPanel
fm@2327
  1568
!
fm@2327
  1569
fm@2327
  1570
postBuildWith:aBuilder
fm@2327
  1571
fm@2327
  1572
    super postBuildWith:aBuilder.
fm@2327
  1573
    self updateToolVisibility.
fm@2327
  1574
! !
fm@2327
  1575
cg@2015
  1576
!InternationalLanguageTranslationEditor methodsFor:'menu actions'!
cg@2015
  1577
cg@2015
  1578
addLanguage
cg@2015
  1579
    |lang|
cg@2015
  1580
cg@2410
  1581
    lang := Dialog request:(resources string:'New language (ISO symbol):').
cg@2015
  1582
    lang isEmptyOrNil ifTrue:[^ self].
cg@2410
  1583
    self addLanguage:lang
cg@2410
  1584
!
cg@2410
  1585
cg@2410
  1586
addLanguage:langArg
cg@2410
  1587
    |lang|
cg@2410
  1588
cg@2410
  1589
    lang := langArg asSymbol.
cg@2015
  1590
    (keyStringsToLanguageMappings includesLanguage:lang) ifTrue:[^ self ].
cg@2015
  1591
cg@2015
  1592
    keyStringsToLanguageMappings addLanguage:lang.
cg@2015
  1593
    self languagesList add:lang.
cg@2015
  1594
    self shownLanguages add:lang.
cg@2015
  1595
    modified := true.
cg@2015
  1596
!
cg@2015
  1597
cg@2015
  1598
addTranslation
cg@2015
  1599
    |key index|
cg@2015
  1600
cg@2015
  1601
    key := Dialog request:'New Key:'.
fm@2051
  1602
    key isEmpty ifTrue:[^self].
fm@2163
  1603
    (self includesKey:key) ifFalse:[
cg@2015
  1604
        keyStringsToLanguageMappings addKey:key.
cg@2015
  1605
        modified := true.
cg@2015
  1606
    ].
fm@2051
  1607
   index := keyStringsToLanguageMappings indexOfKey:key.
fm@2051
  1608
   self selectedKeyRow value:index
cg@2015
  1609
!
cg@2015
  1610
fm@2163
  1611
changeLastNameSpace
fm@2163
  1612
fm@2163
  1613
    |nameSpace defaultNameSpace|
fm@2163
  1614
fm@2163
  1615
    lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name].
fm@2163
  1616
    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace.
fm@2163
  1617
    nameSpace isNil ifTrue:[^self].
fm@2163
  1618
    nameSpace := Smalltalk at:nameSpace asSymbol.
fm@2163
  1619
    nameSpace isNil ifTrue:[
fm@2327
  1620
        ^Dialog information:(resources string:'No such nameSpace exists.') 
fm@2163
  1621
    ].
fm@2163
  1622
    lastNameSpace := nameSpace.
fm@2163
  1623
!
fm@2163
  1624
fm@2327
  1625
changeLastPackage
fm@2327
  1626
fm@2327
  1627
    |package defaultPackage|
fm@2327
  1628
fm@2327
  1629
    lastPackage notNil ifTrue:[defaultPackage := lastPackage].
fm@2327
  1630
    package := Dialog
fm@2327
  1631
            requestProject:'Package:'
fm@2327
  1632
            initialAnswer:defaultPackage 
fm@2327
  1633
            suggestions:#('foo' 'bar' 'baz').
fm@2327
  1634
    package isNil ifTrue:[
cg@2410
  1635
        ^ self "/ Dialog information:(resources string:'No such package exists.') 
fm@2327
  1636
    ].
fm@2327
  1637
    lastPackage := package.
fm@2327
  1638
!
fm@2327
  1639
cg@2015
  1640
extractTranslationsFromClass
cg@2015
  1641
    |aClass newTranslations|
cg@2015
  1642
cg@2015
  1643
    aClass := Dialog 
cg@2015
  1644
                requestClass:'Class to extract translations from:'
cg@2015
  1645
                okLabel:'OK' 
cg@2015
  1646
                initialAnswer:(lastExtractedClass ? LastExtractedClass).
cg@2015
  1647
    aClass isNil ifTrue:[^ self ].
cg@2015
  1648
cg@2015
  1649
    lastExtractedClass := LastExtractedClass := aClass.
cg@2015
  1650
cg@2032
  1651
    newTranslations := self extractTranslationsFromClass:aClass.
cg@2032
  1652
    self addAllTranslations:newTranslations.
cg@2032
  1653
!
cg@2032
  1654
fm@2163
  1655
extractTranslationsFromNameSpace
fm@2163
  1656
fm@2163
  1657
    |newTranslations|
fm@2163
  1658
fm@2163
  1659
    self changeLastNameSpace.
fm@2163
  1660
    lastNameSpace isNil ifTrue:[^self.].
fm@2163
  1661
    newTranslations := OrderedCollection new.
fm@2163
  1662
    lastNameSpace allClassesDo:[:eachClass |
fm@2163
  1663
        newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
fm@2163
  1664
    ].
fm@2163
  1665
    self addAllTranslations:newTranslations.
fm@2163
  1666
!
fm@2163
  1667
cg@2032
  1668
extractTranslationsFromProject
cg@2032
  1669
    |box projectID newTranslations|
cg@2032
  1670
cg@2032
  1671
    box := ListSelectionBox new.
cg@2032
  1672
"/    box useComboBoxWithList:(Smalltalk allProjectIDs).
cg@2032
  1673
    box title:(resources string:'Project to extract translations from:').
cg@2032
  1674
    box list:Smalltalk allProjectIDs.
cg@2032
  1675
    box okAction:[:sel | projectID := sel].
cg@2032
  1676
    box initialText:(lastExtractedProject ? LastExtractedProject).
cg@2032
  1677
    box label:'Find Translations in Project'.
cg@2032
  1678
cg@2032
  1679
    box showAtPointer.
cg@2032
  1680
cg@2032
  1681
    projectID notNil ifTrue:[
cg@2032
  1682
        projectID := projectID withoutSeparators asSymbol.
cg@2032
  1683
    ].
cg@2032
  1684
    projectID isEmptyOrNil ifTrue:[^ self ].
cg@2032
  1685
cg@2032
  1686
    lastExtractedProject := LastExtractedProject := projectID.
cg@2032
  1687
cg@2015
  1688
    newTranslations := Set new.
cg@2015
  1689
cg@2032
  1690
    Smalltalk allClassesDo:[:eachClass |
cg@2032
  1691
        eachClass theNonMetaclass package == projectID ifTrue:[
cg@2032
  1692
"/ eachClass isLoaded ifTrue:[ self halt. ].
cg@2032
  1693
            newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
cg@2032
  1694
        ]
cg@2015
  1695
    ].
cg@2015
  1696
cg@2032
  1697
    self addAllTranslations:newTranslations.
cg@2015
  1698
!
cg@2015
  1699
fm@2327
  1700
importExistingTranslationsFromFile
cg@2410
  1701
    self information:'The import function is not available in this release'.
fm@2327
  1702
!
fm@2327
  1703
fm@2163
  1704
inspectCanvasMissingStrings
fm@2163
  1705
fm@2163
  1706
    |spec nameSpace missingStrings|
fm@2163
  1707
fm@2163
  1708
    missingStrings := OrderedCollection new.
fm@2163
  1709
    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil.
fm@2163
  1710
    nameSpace := Smalltalk at:nameSpace asSymbol.
fm@2163
  1711
    nameSpace isNil ifTrue:[
fm@2163
  1712
        ^Dialog information:(resources string:'No such nameSpace exists.?') 
fm@2163
  1713
    ].
fm@2163
  1714
fm@2163
  1715
    nameSpace allClassesDo:[:cls |
fm@2163
  1716
        cls theMetaclass methodsDo:[:m |
fm@2163
  1717
            m hasResource ifTrue:[
fm@2163
  1718
                (m resources includesKey:#canvas) ifTrue:[
fm@2163
  1719
                    spec := (cls perform:m selector) decodeAsLiteralArray.
fm@2163
  1720
                    spec do:[:eachComponent |
fm@2163
  1721
                        eachComponent translationKeysDo:[:k | 
fm@2163
  1722
                            (self includesKey: k) ifFalse:[
fm@2163
  1723
                                missingStrings add: k. 
fm@2163
  1724
                                Transcript showCR: k storeString, '                         ', m printString]]
fm@2163
  1725
                    ]
fm@2163
  1726
                ]
fm@2163
  1727
            ]
fm@2163
  1728
        ]
fm@2163
  1729
    ].
fm@2163
  1730
    missingStrings asSet inspect
fm@2163
  1731
!
fm@2163
  1732
cg@2015
  1733
menuNew
cg@2015
  1734
    modified ifTrue:[
cg@2015
  1735
        (Dialog 
cg@2015
  1736
            confirm:(resources stringWithCRs:'Modified translations have not been changed.\\Create new translations set anyway ?')
cg@2015
  1737
            default:false) ifFalse:[^ self].
cg@2015
  1738
    ].
cg@2015
  1739
cg@2015
  1740
    keyStringsToLanguageMappings initialize.
cg@2015
  1741
    keyStringsToLanguageMappings changed.
cg@2015
  1742
cg@2015
  1743
    self languagesList contents:self keyStringAndLanguageSelectionTable languages.
cg@2015
  1744
    self shownLanguages contents:self keyStringAndLanguageSelectionTable languages.
cg@2015
  1745
    modified := false.
cg@2015
  1746
!
cg@2015
  1747
cg@2015
  1748
menuOpen
fm@2050
  1749
    |aFilename|
cg@2015
  1750
fm@2163
  1751
    self withWaitCursorDo:[
fm@2163
  1752
        aFilename := self requestFilename.
fm@2163
  1753
        aFilename isNil ifTrue:[^ self ].
fm@2163
  1754
        self readResourceFile:aFilename.
fm@2163
  1755
    ]
cg@2015
  1756
!
cg@2015
  1757
cg@2410
  1758
menuOpenByPackage
cg@2410
  1759
    |package|
cg@2410
  1760
cg@2410
  1761
    self withWaitCursorDo:[
cg@2410
  1762
        package := self requestPackage.
cg@2410
  1763
        package isNil ifTrue:[^ self ].
cg@2410
  1764
        self readResourceFileForPackage:package.
cg@2410
  1765
    ]
cg@2410
  1766
!
cg@2410
  1767
cg@2015
  1768
menuSave
fm@2050
  1769
"Saves the language selected in the fileName from where the language resource was obtained."
fm@2053
  1770
    |lang|
cg@2015
  1771
fm@2327
  1772
    lang := self requestLanguageToSave.
fm@2050
  1773
    lang isNil ifTrue:[^ self].
fm@2053
  1774
    self saveLanguage: lang
fm@2053
  1775
!
fm@2053
  1776
fm@2053
  1777
menuSaveAll
fm@2053
  1778
"Saves all the languages in the fileName from where the language resource was obtained."
fm@2053
  1779
    keyStringsToLanguageMappings languagesInUse do:[:each | self saveLanguage: each]. 
cg@2015
  1780
!
cg@2015
  1781
cg@2015
  1782
menuSaveAs
fm@2050
  1783
"Saves the language selected in the specified fileName."
fm@2050
  1784
     |lang aFilename|
cg@2015
  1785
fm@2327
  1786
    lang := self requestLanguageToSave.
fm@2050
  1787
    lang isNil ifTrue:[^ self]. 
fm@2053
  1788
    aFilename := self requestFilenameFor:lang.
fm@2050
  1789
    aFilename isNil ifTrue:[^ self].
fm@2050
  1790
    self saveResourceFile:aFilename for:lang asSymbol
cg@2015
  1791
!
cg@2015
  1792
cg@2015
  1793
openAboutThisApplication
cg@2015
  1794
    "This method was generated by the Browser.
cg@2015
  1795
     It will be invoked when the menu-item 'help-about' is selected."
cg@2015
  1796
cg@2015
  1797
    "/ could open a customized aboutBox here ...
cg@2015
  1798
    super openAboutThisApplication
cg@2015
  1799
!
cg@2015
  1800
cg@2015
  1801
openDocumentation
cg@2015
  1802
    "This method was generated by the Browser.
cg@2015
  1803
     It will be invoked when the menu-item 'help-documentation' is selected."
cg@2015
  1804
cg@2015
  1805
    "/ change below as required ...
cg@2015
  1806
cg@2015
  1807
    "/ to open an HTML viewer on some document (under 'doc/online/<language>/' ):
cg@2413
  1808
    HTMLDocumentView openFullOnDocumentationFile:'tools/languageEditor/TOP.html'.
cg@2015
  1809
cg@2015
  1810
    "/ add application-specific help files under the 'doc/online/<language>/help/appName'
cg@2015
  1811
    "/ directory, and open a viewer with:
cg@2015
  1812
    "/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
cg@2015
  1813
!
cg@2015
  1814
cg@2015
  1815
readResourceFile:aFilename
cg@2031
  1816
    |lang|
cg@2031
  1817
fm@2327
  1818
    lang := self requestLanguage.
cg@2031
  1819
    lang isNil ifTrue:[^ self ].
cg@2031
  1820
cg@2031
  1821
    self readResourceFile:aFilename asLanguage:lang asSymbol
cg@2031
  1822
!
cg@2031
  1823
cg@2410
  1824
readResourceFileForPackage:aPackage
cg@2410
  1825
    |allLanguages lang packageDir resourceDir langFile|
cg@2410
  1826
cg@2410
  1827
    packageDir := Smalltalk packageDirectoryForPackageId:aPackage.
cg@2410
  1828
    resourceDir := packageDir asFilename construct:'resources'.
cg@2410
  1829
cg@2410
  1830
    allLanguages := Set new.
cg@2410
  1831
    resourceDir directoryContentsAsFilenamesDo:[:eachFile |
cg@2410
  1832
        eachFile suffix = 'rs' ifTrue:[
cg@2410
  1833
            (('##.rs' match:eachFile baseName)
cg@2410
  1834
            or:[('##-##.rs' match:eachFile baseName)]) ifTrue:[
cg@2410
  1835
                allLanguages add:(eachFile withoutSuffix baseName)
cg@2410
  1836
            ].
cg@2410
  1837
        ].
cg@2410
  1838
    ].
cg@2410
  1839
cg@2410
  1840
    allLanguages addAll:languagesList.
cg@2410
  1841
    allLanguages := allLanguages asSortedCollection.
cg@2410
  1842
cg@2410
  1843
    lang := Dialog 
cg@2410
  1844
        choose:(resources string:'For which language ?')
cg@2410
  1845
        fromList:allLanguages 
cg@2410
  1846
        values:allLanguages 
cg@2410
  1847
        buttons:(resources array:#('All')) 
cg@2410
  1848
        values:#(all) 
cg@2410
  1849
        lines:10 
cg@2410
  1850
        cancel:nil.
cg@2410
  1851
cg@2410
  1852
    lang isNil ifTrue:[^ self ].
cg@2410
  1853
cg@2410
  1854
    langFile := resourceDir construct:lang,'.rs'.
cg@2410
  1855
cg@2410
  1856
    lang == #all ifTrue:[
cg@2410
  1857
        allLanguages do:[:lang |
cg@2410
  1858
            self addLanguage:lang.
cg@2410
  1859
            self readResourceFile:(resourceDir construct:lang,'.rs') asLanguage:lang.
cg@2410
  1860
        ].
cg@2410
  1861
    ] ifFalse:[
cg@2410
  1862
        self readResourceFile:langFile asLanguage:lang asSymbol
cg@2410
  1863
    ].
cg@2410
  1864
!
cg@2410
  1865
fm@2050
  1866
removeLanguage
fm@2050
  1867
    |lang|
cg@2015
  1868
fm@2050
  1869
    lang := Dialog choose:'Which language do you want to remove?' fromList:languagesList lines:10.
fm@2050
  1870
    lang isNil ifTrue:[^ self ].
fm@2050
  1871
    (Dialog confirm: 'Are you sure to remove the language ', lang ) ifTrue:[
fm@2050
  1872
          self languagesList remove:lang.
fm@2050
  1873
          self shownLanguages remove:lang.
fm@2050
  1874
    ].      
cg@2015
  1875
!
cg@2015
  1876
cg@2015
  1877
removeTranslation
cg@2015
  1878
    |rowSelectionIndex selectedKey|
cg@2015
  1879
cg@2015
  1880
    rowSelectionIndex := self selectedKeyRow value.
fm@2163
  1881
    rowSelectionIndex isNil ifTrue:[^self].
cg@2015
  1882
    rowSelectionIndex ~~ 0 ifTrue:[
cg@2015
  1883
        selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil.
fm@2163
  1884
        selectedKey isNil ifTrue:[^self].
cg@2015
  1885
        (Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[
cg@2015
  1886
            keyStringsToLanguageMappings removeKey:selectedKey.
cg@2015
  1887
        ].
cg@2015
  1888
    ].
cg@2015
  1889
!
cg@2015
  1890
cg@2015
  1891
runApplicationAndCollectTranslations
cg@2047
  1892
    |applicationClass newTranslations pseudoPack app startSelector|
cg@2015
  1893
cg@2015
  1894
    monitoredApplication notNil ifTrue:[
cg@2015
  1895
        monitoredApplication terminate.
cg@2015
  1896
        [monitoredApplication notNil] whileTrue:[
cg@2015
  1897
            Delay waitForSeconds:0.1
cg@2015
  1898
        ].
cg@2015
  1899
    ].
cg@2015
  1900
cg@2015
  1901
    applicationClass := Dialog 
cg@2015
  1902
                requestClass:'Application class to start and collect translations from:'
cg@2015
  1903
                okLabel:'OK' 
cg@2015
  1904
                initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ).
cg@2015
  1905
    applicationClass isNil ifTrue:[^ self ].
cg@2047
  1906
    applicationClass isNamespace ifTrue:[
cg@2047
  1907
        Dialog warn:'Entered class is a NameSpace'.
cg@2047
  1908
        ^ self.
cg@2047
  1909
    ].
cg@2047
  1910
cg@2047
  1911
    applicationClass isVisualStartable ifTrue:[
cg@2047
  1912
        startSelector := #open
cg@2047
  1913
    ] ifFalse:[
cg@2047
  1914
        startSelector := Dialog
cg@2047
  1915
                    request:'Entered class seems to be no application class. Ok to start using selector:'
cg@2047
  1916
                    initialAnswer:((applicationClass respondsTo:#'start')
cg@2047
  1917
                                        ifTrue:#'start'
cg@2047
  1918
                                        ifFalse:#'new')
cg@2047
  1919
                    okLabel:'START'
cg@2047
  1920
                    title:'Start Application'.
cg@2047
  1921
        startSelector isNil ifTrue:[
cg@2047
  1922
            ^ self
cg@2047
  1923
        ].
cg@2047
  1924
        startSelector := startSelector asSymbol.
cg@2047
  1925
    ].
cg@2015
  1926
cg@2015
  1927
    lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass.
cg@2015
  1928
cg@2015
  1929
    newTranslations := Set new.
cg@2015
  1930
cg@2015
  1931
    pseudoPack := AccessCollectingPseudoResourcePack new.
cg@2015
  1932
    pseudoPack realResourcePack:(applicationClass classResources).
cg@2015
  1933
cg@2015
  1934
    self stopApplicationIconVisibleHolder value:true.
cg@2015
  1935
cg@2015
  1936
    monitoredApplication := [
cg@2015
  1937
        [
cg@2015
  1938
            app := applicationClass new.
cg@2047
  1939
            app perform:startSelector.
cg@2015
  1940
            app window waitUntilVisible.
cg@2015
  1941
            app window waitUntilClosed.
cg@2015
  1942
        ] ensure:[
cg@2015
  1943
            app closeRequest.
cg@2015
  1944
            self stopApplicationIconVisibleHolder value:false.
cg@2015
  1945
            monitoredApplication := nil.
cg@2015
  1946
        ].
cg@2015
  1947
    ] fork.
fm@2163
  1948
!
fm@2163
  1949
fm@2163
  1950
searchStringInLastNameSpace
fm@2163
  1951
fm@2323
  1952
    |selectedKey browser lastSearchPatterns|
fm@2163
  1953
fm@2163
  1954
    selectedKey := self selectedKey.
fm@2163
  1955
    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
fm@2163
  1956
    browser := NewSystemBrowser new "open".
fm@2163
  1957
    browser allButOpen.
fm@2323
  1958
    lastSearchPatterns := browser lastSearchPatterns.
fm@2323
  1959
    (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
fm@2163
  1960
        browser lastSearchPatterns addFirst: selectedKey
fm@2163
  1961
    ].
fm@2327
  1962
    SearchDialog lastStringSearchArea: #currentNameSpace.
fm@2163
  1963
    lastNameSpace isNil ifTrue:[
fm@2163
  1964
        self changeLastNameSpace.
fm@2163
  1965
    ].
fm@2163
  1966
    lastNameSpace notNil ifTrue:[
fm@2163
  1967
"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
fm@2163
  1968
        browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name).
fm@2163
  1969
        browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name).
fm@2163
  1970
    ].
fm@2163
  1971
    self withWaitCursorDo:[
fm@2163
  1972
        browser browseMenuMethodsWithString
fm@2163
  1973
    ].
fm@2327
  1974
!
fm@2327
  1975
fm@2327
  1976
searchStringInLastPackage
fm@2327
  1977
fm@2327
  1978
    | selectedKey browser lastSearchPatterns|
fm@2327
  1979
fm@2327
  1980
    selectedKey := self selectedKey.
fm@2327
  1981
    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
fm@2327
  1982
    browser := NewSystemBrowser new "open".
fm@2327
  1983
    browser allButOpen.
fm@2327
  1984
    lastSearchPatterns := browser lastSearchPatterns.
fm@2327
  1985
    (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
fm@2327
  1986
        browser lastSearchPatterns addFirst: selectedKey
fm@2327
  1987
    ].
fm@2327
  1988
    SearchDialog lastStringSearchArea: #currentPackage.
fm@2327
  1989
    lastPackage isNil ifTrue:[
fm@2327
  1990
        self changeLastPackage.
fm@2327
  1991
    ].
fm@2327
  1992
    lastPackage notNil ifTrue:[
fm@2327
  1993
"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
fm@2327
  1994
        browser navigationState packageFilter value: (OrderedCollection with:lastPackage).
fm@2327
  1995
        browser navigationState selectedProjects value: (OrderedCollection with:lastPackage).
fm@2327
  1996
    ].
fm@2327
  1997
    self withWaitCursorDo:[
fm@2327
  1998
        browser browseMenuMethodsWithString
fm@2327
  1999
    ].
cg@2015
  2000
! !
cg@2015
  2001
cg@2015
  2002
!InternationalLanguageTranslationEditor methodsFor:'menus dynamic'!
cg@2015
  2003
cg@2015
  2004
disableLanguageDisplayFor:lang
cg@2015
  2005
    self shownLanguages remove:lang ifAbsent:[]
cg@2015
  2006
!
cg@2015
  2007
cg@2015
  2008
enableLanguageDisplayFor:newLang
cg@2015
  2009
    |shownLanguagesInOrder|
cg@2015
  2010
cg@2015
  2011
    (self shownLanguages includes:newLang) ifFalse:[
cg@2048
  2012
"/        shownLanguagesInOrder := self languagesList
cg@2048
  2013
"/                                    select:[:lang | (self shownLanguages includes:lang)
cg@2048
  2014
"/                                                    or:[ lang = newLang ]].
cg@2048
  2015
"/        self shownLanguages contents:shownLanguagesInOrder.
cg@2048
  2016
        self shownLanguages add:newLang.
cg@2015
  2017
    ]
cg@2015
  2018
!
cg@2015
  2019
cg@2015
  2020
isLanguageShown:lang
cg@2015
  2021
    ^ self shownLanguages includes:lang
cg@2015
  2022
!
cg@2015
  2023
cg@2015
  2024
shownLanguagesMenu
cg@2015
  2025
    <resource: #programMenu >
cg@2015
  2026
cg@2015
  2027
    ^ [
cg@2015
  2028
        |m selected|
cg@2015
  2029
cg@2015
  2030
        m := Menu new.
cg@2015
  2031
cg@2015
  2032
        self languagesList do:[:lang |
cg@2015
  2033
            |item|
cg@2015
  2034
cg@2015
  2035
            item := MenuItem label:lang.
cg@2015
  2036
            item indication:(self languageShownHolderFor:lang).
cg@2015
  2037
            item hideMenuOnActivated:false.    
cg@2015
  2038
            m addItem:item.
cg@2015
  2039
        ].
cg@2015
  2040
        m
cg@2015
  2041
    ].
cg@2015
  2042
!
cg@2015
  2043
cg@2015
  2044
toggleLanguageDisplayFor:lang
cg@2015
  2045
    (self shownLanguages includes:lang) ifTrue:[
cg@2015
  2046
        self disableLanguageDisplayFor:lang
cg@2015
  2047
    ] ifFalse:[
cg@2015
  2048
        self enableLanguageDisplayFor:lang
cg@2015
  2049
    ].
cg@2015
  2050
! !
cg@2015
  2051
cg@2015
  2052
!InternationalLanguageTranslationEditor methodsFor:'private-key extraction'!
cg@2015
  2053
cg@2032
  2054
addAllTranslations:newTranslations
cg@2034
  2055
    |newTranslationKeys stringKeys nonStringKeys|
cg@2032
  2056
cg@2034
  2057
    newTranslationKeys := newTranslations select:[:k | k notEmpty and:[k isString not or:[k isBlank not]]].
cg@2032
  2058
    newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
cg@2034
  2059
    newTranslationKeys := newTranslationKeys 
cg@2034
  2060
                                collect:[:k | 
cg@2034
  2061
                                        (k endsWith:'...') ifTrue:[
cg@2034
  2062
                                            k copyWithoutLast:3.
cg@2034
  2063
                                        ] ifFalse:[
cg@2035
  2064
                                            ('.:?' includes:k last) ifTrue:[
cg@2034
  2065
                                                k copyWithoutLast:1.
cg@2034
  2066
                                            ] ifFalse:[
cg@2034
  2067
                                                k
cg@2034
  2068
                                        ]]].
cg@2034
  2069
    newTranslationKeys := newTranslationKeys asSet.
cg@2034
  2070
cg@2032
  2071
    newTranslationKeys notEmpty ifTrue:[
cg@2034
  2072
        stringKeys := newTranslationKeys select:[:k | k isString].
cg@2034
  2073
        nonStringKeys := newTranslationKeys select:[:k | k isString not].
cg@2034
  2074
cg@2034
  2075
        stringKeys := stringKeys asSortedCollection.
cg@2034
  2076
        keyStringsToLanguageMappings addKeys:stringKeys.
cg@2034
  2077
        keyStringsToLanguageMappings addKeys:nonStringKeys.
cg@2032
  2078
        modified := true.
cg@2032
  2079
    ].
cg@2032
  2080
!
cg@2032
  2081
cg@2032
  2082
extractTranslationsFromClass:aClass
cg@2032
  2083
    |newTranslations|
cg@2032
  2084
cg@2032
  2085
    newTranslations := Set new.
cg@2032
  2086
cg@2032
  2087
    self withWaitCursorDo:[
cg@2032
  2088
        "/ now, the hard part:
cg@2032
  2089
        "/ possible translations are in the specs,
cg@2032
  2090
        "/ and all arguments to (resources string:) messages.
cg@2032
  2091
        aClass instAndClassMethodsDo:[:eachMethod |
cg@2032
  2092
            newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ).
cg@2032
  2093
        ].
cg@2032
  2094
    ].
cg@2032
  2095
    ^ newTranslations
cg@2032
  2096
!
cg@2032
  2097
cg@2015
  2098
extractTranslationsFromHelpSpecMethod:aMethod
cg@2015
  2099
    |codeStrings matcher parseTree resourceKeys|
cg@2015
  2100
cg@2015
  2101
    parseTree := RBParser 
cg@2015
  2102
            parseMethod:aMethod source 
cg@2015
  2103
            onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
cg@2015
  2104
                                  nil].
cg@2015
  2105
    parseTree isNil ifTrue:[^ #() ].
cg@2015
  2106
cg@2015
  2107
    codeStrings  := 
cg@2015
  2108
        #(
cg@2015
  2109
                '`@dict addPairsFrom: `#helpKeysAndStrings'
cg@2015
  2110
        ).
cg@2015
  2111
cg@2015
  2112
    resourceKeys := Set new.
cg@2015
  2113
cg@2015
  2114
    matcher := ParseTreeSearcher new.
cg@2015
  2115
    matcher 
cg@2015
  2116
        matchesAnyOf: codeStrings 
cg@2015
  2117
        do: [:aNode :answer |
cg@2015
  2118
                |sel argNode arg|
cg@2015
  2119
cg@2015
  2120
                sel := aNode selector.
cg@2015
  2121
                (sel startsWith:'addPairsFrom:') ifTrue:[
cg@2015
  2122
                    argNode := aNode arguments at:1.
cg@2015
  2123
                    argNode isLiteral ifTrue:[
cg@2015
  2124
                        arg := argNode value.
cg@2015
  2125
                        arg isArray ifTrue:[
cg@2015
  2126
                            arg doWithIndex:[:el :index |
cg@2015
  2127
                                index even ifTrue:[
cg@2015
  2128
                                    el isString ifTrue:[    
cg@2015
  2129
                                        resourceKeys add:el.
cg@2015
  2130
                                    ]
cg@2015
  2131
                                ].
cg@2015
  2132
                            ].
cg@2015
  2133
                        ] ifFalse:[
cg@2015
  2134
                            Transcript 
cg@2015
  2135
                                showCR:(resources 
cg@2015
  2136
                                        string:'Cannot derive resourceKey from non-array in %1 in %2'
cg@2015
  2137
                                        with:argNode formattedCode
cg@2015
  2138
                                        with:aMethod selector).
cg@2015
  2139
                        ].
cg@2015
  2140
                    ] ifFalse:[
cg@2015
  2141
                        Transcript 
cg@2015
  2142
                            showCR:(resources 
cg@2015
  2143
                                        string:'Cannot derive resourceKey from non-literal: %1 in %2'
cg@2015
  2144
                                        with:argNode formattedCode
cg@2015
  2145
                                        with:aMethod selector).
cg@2015
  2146
                    ].
cg@2015
  2147
                ].
cg@2015
  2148
                aNode
cg@2015
  2149
            ].
cg@2015
  2150
cg@2015
  2151
    matcher executeTree: parseTree initialAnswer: nil.
cg@2015
  2152
    ^ resourceKeys
cg@2015
  2153
!
cg@2015
  2154
cg@2015
  2155
extractTranslationsFromMenuSpecMethod:aMethod
cg@2015
  2156
    |menu resourceKeys|
cg@2015
  2157
cg@2015
  2158
    menu := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2159
    menu isNil ifTrue:[ ^ #() ].
cg@2015
  2160
cg@2015
  2161
    (menu isKindOf:Menu) ifFalse:[
cg@2015
  2162
        menu := Menu new fromLiteralArrayEncoding:menu
cg@2015
  2163
    ].
cg@2015
  2164
cg@2015
  2165
    resourceKeys := Set new.
cg@2015
  2166
    menu allItemsDo:[:aMenuItem |
cg@2015
  2167
        aMenuItem translateLabel ifTrue:[
cg@2015
  2168
            aMenuItem isSeparatorItem ifFalse:[
cg@2015
  2169
                resourceKeys add:aMenuItem label.
cg@2015
  2170
            ]
cg@2015
  2171
        ]
cg@2015
  2172
    ].
cg@2015
  2173
    ^ resourceKeys
cg@2015
  2174
!
cg@2015
  2175
cg@2015
  2176
extractTranslationsFromMethod:aMethod
cg@2015
  2177
    |mResources|
cg@2015
  2178
cg@2015
  2179
    mResources := aMethod resources.
cg@2015
  2180
    mResources notNil ifTrue:[
cg@2015
  2181
        (mResources includesKey:#menu) ifTrue:[
cg@2015
  2182
             ^ self extractTranslationsFromMenuSpecMethod:aMethod.
cg@2015
  2183
        ].
cg@2015
  2184
        (mResources includesKey:#canvas) ifTrue:[
cg@2015
  2185
             ^ self extractTranslationsFromUISpecMethod:aMethod.
cg@2015
  2186
        ].
cg@2015
  2187
        (mResources includesKey:#help) ifTrue:[
cg@2015
  2188
             ^ self extractTranslationsFromHelpSpecMethod:aMethod.
cg@2015
  2189
        ].
cg@2015
  2190
        (mResources includesKey:#tableColumns) ifTrue:[
cg@2015
  2191
             ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod.
cg@2015
  2192
        ].
cg@2015
  2193
cg@2015
  2194
        ^ self extractTranslationsFromSpecMethod:aMethod.
cg@2015
  2195
    ].
cg@2015
  2196
    ^ self extractTranslationsFromMethodsCode:aMethod
cg@2015
  2197
!
cg@2015
  2198
cg@2015
  2199
extractTranslationsFromMethodsCode:aMethod
cg@2015
  2200
"/method:mthd selector:sel inClass:cls matchesParseTreeMatcher:aMatcher
cg@2015
  2201
    |codeStrings matcher parseTree resourceKeys|
cg@2015
  2202
cg@2015
  2203
    parseTree := RBParser 
cg@2015
  2204
            parseMethod:aMethod source 
cg@2015
  2205
            onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
cg@2015
  2206
                                  nil].
cg@2015
  2207
    parseTree isNil ifTrue:[^ #() ].
cg@2015
  2208
cg@2015
  2209
    codeStrings  := 
cg@2015
  2210
        #(
cg@2015
  2211
                'resources `@msg: `@args'
cg@2015
  2212
                'self resources `@msg: `@args'
cg@2015
  2213
                'self class resources `@msg: `@args'
cg@2015
  2214
                'self classResources `@msg: `@args'
cg@2015
  2215
        ).
cg@2015
  2216
cg@2015
  2217
    resourceKeys := Set new.
cg@2015
  2218
cg@2015
  2219
    matcher := ParseTreeSearcher new.
cg@2015
  2220
    matcher 
cg@2015
  2221
        matchesAnyOf: codeStrings 
cg@2015
  2222
        do: [:aNode :answer |
cg@2015
  2223
                |sel keyStringArgNode keyStringArg|
cg@2015
  2224
cg@2015
  2225
                sel := aNode selector.
cg@2015
  2226
                ((sel startsWith:'string:') or:[(sel startsWith:'at:')]) ifTrue:[
cg@2015
  2227
                    keyStringArgNode := aNode arguments at:1.
cg@2015
  2228
                    keyStringArgNode isLiteral ifTrue:[
cg@2015
  2229
                        keyStringArg := keyStringArgNode value.
cg@2015
  2230
                        keyStringArg isString ifTrue:[
cg@2015
  2231
                            resourceKeys add:keyStringArg.
cg@2015
  2232
                        ] ifFalse:[
cg@2015
  2233
                            Transcript 
cg@2015
  2234
                                showCR:(resources 
cg@2015
  2235
                                        string:'Cannot derive resourceKey from non-string: %1 in %2'
cg@2015
  2236
                                        with:keyStringArgNode formattedCode
cg@2015
  2237
                                        with:aMethod selector).
cg@2015
  2238
                        ].
cg@2015
  2239
                    ] ifFalse:[
cg@2015
  2240
                        Transcript 
cg@2015
  2241
                            showCR:(resources 
cg@2015
  2242
                                        string:'Cannot derive resourceKey from non-literal: %1 in %2'
cg@2015
  2243
                                        with:keyStringArgNode formattedCode
cg@2015
  2244
                                        with:aMethod selector).
cg@2015
  2245
                    ].
cg@2015
  2246
                ].
cg@2015
  2247
                aNode
cg@2015
  2248
            ].
cg@2015
  2249
cg@2015
  2250
    matcher executeTree: parseTree initialAnswer: nil.
cg@2015
  2251
    ^ resourceKeys
cg@2015
  2252
!
cg@2015
  2253
cg@2015
  2254
extractTranslationsFromSpecMethod:aMethod
cg@2015
  2255
    ^ #()
cg@2015
  2256
!
cg@2015
  2257
cg@2015
  2258
extractTranslationsFromTableColumnsSpecMethod:aMethod
cg@2015
  2259
    |columnDescription resourceKeys|
cg@2015
  2260
cg@2015
  2261
    columnDescription := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2262
    columnDescription isNil ifTrue:[ ^ #() ].
cg@2015
  2263
cg@2015
  2264
    (columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[
cg@2015
  2265
        columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el].
cg@2015
  2266
    ].
cg@2015
  2267
cg@2015
  2268
    resourceKeys := Set new.
cg@2015
  2269
    columnDescription do:[:aColumnSpec |
cg@2015
  2270
        aColumnSpec translateLabel ifTrue:[
cg@2015
  2271
            resourceKeys add:aColumnSpec label.
cg@2015
  2272
        ]
cg@2015
  2273
    ].
cg@2015
  2274
    ^ resourceKeys
cg@2015
  2275
!
cg@2015
  2276
cg@2015
  2277
extractTranslationsFromUISpecMethod:aMethod
cg@2015
  2278
    |spec resourceKeys visitor|
cg@2015
  2279
cg@2015
  2280
    spec := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2281
    spec isNil ifTrue:[ ^ #() ].
cg@2015
  2282
cg@2015
  2283
    (spec isKindOf:UISpecification) ifFalse:[
cg@2015
  2284
        spec := UISpecification from:spec
cg@2015
  2285
    ].
cg@2015
  2286
cg@2015
  2287
    resourceKeys := Set new.
cg@2015
  2288
cg@2015
  2289
    visitor := UISpecVisitor new.
cg@2015
  2290
    spec acceptVisitor:visitor.
cg@2015
  2291
cg@2015
  2292
    ^ visitor translatedLabels
cg@2015
  2293
! !
cg@2015
  2294
cg@2015
  2295
!InternationalLanguageTranslationEditor methodsFor:'queries'!
cg@2015
  2296
fm@2050
  2297
autoAccept                                                   
fm@2050
  2298
fm@2050
  2299
    ^ self autoAcceptHolder value
fm@2050
  2300
!
fm@2050
  2301
fm@2050
  2302
currentExampleLanguageText           
fm@2050
  2303
   "Returns the language text corresponding for the current selected key and the example language selection"
fm@2050
  2304
fm@2050
  2305
  ^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value
fm@2050
  2306
!
fm@2050
  2307
fm@2051
  2308
currentLanguage
fm@2051
  2309
fm@2163
  2310
    |colSelectionIndex |
fm@2051
  2311
fm@2051
  2312
    colSelectionIndex := dataSetView selectedColIndex.
fm@2051
  2313
    ^colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil.
fm@2051
  2314
!
fm@2051
  2315
fm@2050
  2316
exampleLanguageByDefault
fm@2050
  2317
fm@2163
  2318
    ^self shownLanguages isEmpty
fm@2163
  2319
        ifTrue:[nil]
fm@2163
  2320
        ifFalse:[self shownLanguages first]
fm@2050
  2321
!
fm@2050
  2322
fm@2051
  2323
hasFirstRowSelection
fm@2051
  2324
    self selectedKeyRow isNil ifTrue:[^false].
fm@2051
  2325
    ^ self selectedKeyRow value > 1
fm@2051
  2326
!
fm@2051
  2327
fm@2051
  2328
hasLanguageSelection
fm@2051
  2329
    dataSetView selectedColIndex isNil ifTrue:[^false].
fm@2051
  2330
    ^ dataSetView selectedColIndex > 1
fm@2051
  2331
!
fm@2051
  2332
cg@2015
  2333
hasUnsavedChanges
cg@2015
  2334
    ^ modified
fm@2050
  2335
!
fm@2050
  2336
fm@2163
  2337
includesKey: aKey
fm@2163
  2338
    keyStringsToLanguageMappings isNil ifTrue:[^false].
fm@2163
  2339
    ^keyStringsToLanguageMappings includesKey:aKey
fm@2163
  2340
!
fm@2163
  2341
fm@2051
  2342
isSearchForSimilarTranslationEnabled
fm@2051
  2343
fm@2163
  2344
    ^self searchForSimilarTranslationEnableHolder value
fm@2051
  2345
!
fm@2051
  2346
fm@2051
  2347
languageTextFromKey: aKeyIndex for: language
fm@2051
  2348
    "Returns the language text corresponding for the aKeyIndex and the received language"    
fm@2051
  2349
fm@2051
  2350
    language isNil ifTrue:[^''].
fm@2051
  2351
    ^keyStringsToLanguageMappings at: aKeyIndex language:language.   
fm@2051
  2352
!
fm@2051
  2353
fm@2050
  2354
languageTextFromSelectedKeyFor: language
fm@2050
  2355
    "Returns the language text corresponding for the current selected key and the received language"    
fm@2050
  2356
fm@2051
  2357
    ^self languageTextFromKey: self selectedKey for: language 
fm@2051
  2358
!
fm@2051
  2359
fm@2051
  2360
shouldCopyPreviousTranslationButtonBeEnabled
fm@2051
  2361
    ^ self hasLanguageSelection 
fm@2051
  2362
        and:[self hasFirstRowSelection]
fm@2051
  2363
!
fm@2051
  2364
fm@2323
  2365
shouldPasteOriginalButtonBeEnabled
fm@2323
  2366
    ^ self hasLanguageSelection 
fm@2323
  2367
        and:[self hasFirstRowSelection]
fm@2323
  2368
!
fm@2323
  2369
fm@2051
  2370
shouldSearchForSimilarTranslation
fm@2051
  2371
fm@2163
  2372
    self isSearchForSimilarTranslationEnabled ifFalse:[^false].
fm@2163
  2373
    (self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false].
fm@2163
  2374
    (self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false].
fm@2163
  2375
    ^true
fm@2050
  2376
! !
fm@2050
  2377
fm@2050
  2378
!InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'!
fm@2050
  2379
fm@2053
  2380
encoderAt: lang
fm@2053
  2381
fm@2163
  2382
    self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8].
fm@2163
  2383
    ^keyStringsToLanguageMappings encoderAt: lang.
fm@2053
  2384
!
fm@2053
  2385
fm@2050
  2386
printEditingWarningOn: aStream
fm@2050
  2387
fm@2163
  2388
    aStream nextPutAll: ';';
fm@2163
  2389
            cr;
fm@2163
  2390
            nextPutAll: '; WARNING:';
fm@2163
  2391
            cr;
fm@2163
  2392
            nextPutAll: '; this file contains national characters';
fm@2163
  2393
            cr;
fm@2163
  2394
            nextPutAll: '; DONT EDIT this file with an old vi !!';
fm@2163
  2395
            cr;
fm@2163
  2396
            nextPutAll: ';';
fm@2163
  2397
            cr; 
fm@2163
  2398
            cr.
fm@2050
  2399
!
fm@2050
  2400
fm@2050
  2401
printEncoderFor: lang on: aStream
fm@2163
  2402
    |characterEncoder encoderString|
fm@2050
  2403
fm@2163
  2404
    characterEncoder := self encoderAt: lang.
fm@2163
  2405
    encoderString := characterEncoder isNil 
fm@2163
  2406
        ifTrue:[self requestEncoderStringFor: lang]
fm@2163
  2407
        ifFalse:[characterEncoder nameOfEncoding printString].
fm@2050
  2408
fm@2163
  2409
    aStream nextPutAll: '#encoding';
fm@2163
  2410
            space;
fm@2163
  2411
            nextPutAll: encoderString;
fm@2163
  2412
            cr;
fm@2163
  2413
            cr.
fm@2050
  2414
!
fm@2050
  2415
fm@2050
  2416
printLanguage: lang on: aStream
fm@2050
  2417
fm@2163
  2418
    self printEncoderFor: lang on: aStream.
fm@2163
  2419
    self printEditingWarningOn: aStream.
fm@2163
  2420
    self printLanguageMappingsFor: lang on: aStream.
fm@2050
  2421
!
fm@2050
  2422
fm@2050
  2423
printLanguageMappingsFor: lang on: aStream
fm@2050
  2424
fm@2163
  2425
    |orderedAssociations maxKeySize characterEncoder|   
fm@2050
  2426
fm@2163
  2427
    characterEncoder := self encoderAt: lang.
fm@2163
  2428
    characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
fm@2163
  2429
    orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. 
fm@2050
  2430
fm@2163
  2431
    maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.     
fm@2050
  2432
fm@2163
  2433
    orderedAssociations do:[:association |
fm@2163
  2434
        aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; 
fm@2163
  2435
            nextPutAll: (String new: 10);
fm@2163
  2436
            nextPutAll: (characterEncoder encodeString: association value) storeString;
fm@2163
  2437
            cr.
fm@2163
  2438
        ].
fm@2050
  2439
!
fm@2050
  2440
fm@2050
  2441
readResourceFile:aFilename asLanguage:lang
fm@2050
  2442
    |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
fm@2050
  2443
cg@2410
  2444
    aFilename exists ifFalse:[
cg@2410
  2445
        Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName).
cg@2410
  2446
        ^ self 
cg@2410
  2447
    ].
fm@2050
  2448
fm@2050
  2449
    resourcePack := ResourcePack new.
fm@2050
  2450
fm@2050
  2451
    inStream := aFilename readStream.
fm@2050
  2452
    [inStream atEnd] whileFalse:[
fm@2050
  2453
        lineString := inStream nextLine.
fm@2050
  2454
        (lineString notEmpty 
fm@2050
  2455
        and:[ (lineString startsWith:';') not ]) ifTrue:[
fm@2050
  2456
            ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
fm@2050
  2457
                lineString := (lineString copyFrom:2) withoutSeparators.
fm@2050
  2458
                (lineString startsWith:'encoding ') ifTrue:[
fm@2050
  2459
                    encoding := ResourcePack extractEncodingFromLine:lineString.
fm@2050
  2460
                    decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
fm@2050
  2461
                ].
fm@2050
  2462
            ] ifFalse:[
fm@2050
  2463
                ResourcePack
fm@2050
  2464
                    processResourceLine:lineString 
fm@2050
  2465
                    encoding:decoder 
fm@2050
  2466
                    file:aFilename pathName 
fm@2050
  2467
                    printErrorWith:[:msg | Transcript showCR:msg ] 
fm@2050
  2468
                    for:resourcePack
fm@2050
  2469
                    keepUselessTranslations:true.
fm@2050
  2470
            ].
fm@2050
  2471
        ].
fm@2050
  2472
    ].
fm@2050
  2473
    inStream close.                                                  
fm@2050
  2474
fm@2050
  2475
    sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
fm@2050
  2476
    remainingKeys := resourcePack keys select:[:k | k isString not].
fm@2050
  2477
fm@2050
  2478
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
cg@2410
  2479
    keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder.
fm@2050
  2480
fm@2050
  2481
    sortedKeys do:[:k |
cg@2410
  2482
        keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
fm@2050
  2483
    ].
fm@2050
  2484
    remainingKeys do:[:k |
cg@2410
  2485
        keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
fm@2050
  2486
    ].
cg@2410
  2487
    keyStringsToLanguageMappings changed.
fm@2050
  2488
!
fm@2050
  2489
fm@2053
  2490
saveLanguage: lang
fm@2053
  2491
"Saves the language in the fileName from where the language resource was obtained."
fm@2053
  2492
    |aFilename|
fm@2053
  2493
fm@2053
  2494
    lang isNil ifTrue:[^ self].
fm@2053
  2495
    aFilename := keyStringsToLanguageMappings filenameAt:lang.
fm@2053
  2496
    aFilename isNil ifTrue:[
fm@2053
  2497
        aFilename := self requestFilenameFor: lang.
fm@2053
  2498
        aFilename isNil ifTrue:[^ self].
fm@2053
  2499
    ].
fm@2053
  2500
    self saveResourceFile:aFilename for:lang asSymbol
fm@2053
  2501
!
fm@2053
  2502
fm@2050
  2503
saveResourceFile: aFilename for: lang
fm@2050
  2504
fm@2163
  2505
    |aStream |
fm@2050
  2506
fm@2163
  2507
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
fm@2163
  2508
    aStream := FileStream newFileNamed: aFilename.  
fm@2163
  2509
    self printLanguage: lang on: aStream.
fm@2163
  2510
    aStream flush;
fm@2163
  2511
            close.
fm@2163
  2512
    DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
cg@2015
  2513
! !
cg@2015
  2514
fm@2327
  2515
!InternationalLanguageTranslationEditor methodsFor:'searching'!
fm@2327
  2516
fm@2327
  2517
ignoreCaseHolderChanged
fm@2327
  2518
fm@2327
  2519
    self searchNextTextIncludingCurrentSelection: true.
fm@2327
  2520
fm@2327
  2521
    "Created: / 16-06-2007 / 09:33:33 / Administrador"
fm@2327
  2522
!
fm@2327
  2523
fm@2327
  2524
searchNextText
fm@2327
  2525
fm@2327
  2526
    self searchNextTextIncludingCurrentSelection: false.
fm@2327
  2527
fm@2327
  2528
    "Modified: / 16-06-2007 / 09:21:14 / Administrador"
fm@2327
  2529
!
fm@2327
  2530
fm@2327
  2531
searchNextTextFromBeginning
fm@2327
  2532
    |searchText rowFoundIndex|
fm@2327
  2533
fm@2327
  2534
    searchText := searchTextView contents.
fm@2327
  2535
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2536
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2537
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2538
                from:1
fm@2327
  2539
                to:self objectsList size
fm@2327
  2540
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2541
    rowFoundIndex isNil ifTrue:[
fm@2327
  2542
        self searchTextNotFound.
fm@2327
  2543
        ^self
fm@2327
  2544
    ].
fm@2327
  2545
    self selectListIndex: rowFoundIndex
fm@2327
  2546
fm@2327
  2547
    "Created: / 16-06-2007 / 10:54:51 / Administrador"
fm@2327
  2548
    "Modified: / 19-06-2007 / 15:38:59 / Administrador"
fm@2327
  2549
!
fm@2327
  2550
fm@2327
  2551
searchNextTextIncludingCurrentSelection: includeCurrentSelection
fm@2327
  2552
    |searchText currentSelectionIndex rowFoundIndex fromIndex listSize|
fm@2327
  2553
fm@2327
  2554
    self searchTextStarted.
fm@2327
  2555
    searchText := searchTextView contents.
fm@2327
  2556
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2557
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2558
    currentSelectionIndex := self currentSelectionIndex.
fm@2327
  2559
    (currentSelectionIndex isNil or:[currentSelectionIndex == 0]) ifTrue:[
fm@2327
  2560
        self searchNextTextFromBeginning.
fm@2327
  2561
        ^self.
fm@2327
  2562
    ].
fm@2327
  2563
    listSize := self objectsList size.
fm@2327
  2564
    (currentSelectionIndex == listSize and:[includeCurrentSelection not]) ifTrue:[
fm@2327
  2565
        self searchNextTextReachEnd.
fm@2327
  2566
        ^self.
fm@2327
  2567
    ].
fm@2327
  2568
    fromIndex := includeCurrentSelection
fm@2327
  2569
        ifTrue:[currentSelectionIndex]
fm@2327
  2570
        ifFalse:[currentSelectionIndex + 1].
fm@2327
  2571
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2572
                from:fromIndex
fm@2327
  2573
                to:listSize
fm@2327
  2574
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2575
    rowFoundIndex isNil ifTrue:[
fm@2327
  2576
        self searchNextTextReachEnd.
fm@2327
  2577
        ^self
fm@2327
  2578
    ].
fm@2327
  2579
    self selectListIndex: rowFoundIndex
fm@2327
  2580
fm@2327
  2581
    "Created: / 16-06-2007 / 09:20:57 / Administrador"
fm@2327
  2582
    "Modified: / 19-06-2007 / 15:38:06 / Administrador"
fm@2327
  2583
!
fm@2327
  2584
fm@2327
  2585
searchNextTextReachEnd
fm@2327
  2586
    |message|
fm@2327
  2587
    message := 'End of list reached, starting from the beginning'.
fm@2327
  2588
    self searchTextRestarted: message.
fm@2330
  2589
    Smalltalk beep.
fm@2327
  2590
    self searchNextTextFromBeginning.
fm@2327
  2591
fm@2327
  2592
    "Created: / 16-06-2007 / 11:00:59 / Administrador"
fm@2327
  2593
!
fm@2327
  2594
fm@2327
  2595
searchPreviousText
fm@2327
  2596
fm@2327
  2597
    |searchText currentSelectionIndex rowFoundIndex fromIndex|
fm@2327
  2598
fm@2327
  2599
    self searchTextStarted.
fm@2327
  2600
    searchText := searchTextView contents.
fm@2327
  2601
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2602
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2603
    currentSelectionIndex := self currentSelectionIndex.
fm@2327
  2604
    currentSelectionIndex == 1 ifTrue:[
fm@2327
  2605
        self searchPreviousTextReachBeginning.
fm@2327
  2606
        ^self.
fm@2327
  2607
    ].
fm@2327
  2608
    (currentSelectionIndex isNil or:[currentSelectionIndex == 0])
fm@2327
  2609
        ifTrue:[
fm@2327
  2610
            self searchPreviousTextFromEnd.
fm@2327
  2611
            ^self.
fm@2327
  2612
        ]
fm@2327
  2613
        ifFalse:[fromIndex := currentSelectionIndex - 1].
fm@2327
  2614
    rowFoundIndex := self tableView findFirstRowWithString: searchText 
fm@2327
  2615
                from: fromIndex
fm@2327
  2616
                to: 1
fm@2327
  2617
                by: -1
fm@2327
  2618
                ignoreCase:self ignoreCaseHolder value.
fm@2327
  2619
    rowFoundIndex isNil ifTrue:[
fm@2327
  2620
        self searchPreviousTextReachBeginning.
fm@2327
  2621
        ^self
fm@2327
  2622
    ].
fm@2327
  2623
    self selectListIndex: rowFoundIndex.
fm@2327
  2624
fm@2327
  2625
    "Modified: / 19-06-2007 / 15:38:16 / Administrador"
fm@2327
  2626
!
fm@2327
  2627
fm@2327
  2628
searchPreviousTextFromEnd
fm@2327
  2629
fm@2327
  2630
    |searchText rowFoundIndex|
fm@2327
  2631
fm@2327