Tools__InternationalLanguageTranslationEditor.st
author Claus Gittinger <cg@exept.de>
Wed, 29 Jul 2009 20:02:02 +0200
changeset 2570 4e663bc64364
parent 2434 6ad1f853d2e9
child 2880 263e41303b0a
permissions -rw-r--r--
changed #requestPackage
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@2434
    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@2434
    80
								[exBegin]
cg@2015
    81
    InternationalLanguageTranslationEditor open
cg@2015
    82
cg@2434
    83
								[exEnd]
cg@2015
    84
cg@2015
    85
  more examples to be added:
cg@2434
    86
								[exBegin]
cg@2434
    87
    ... add code fragment for
cg@2015
    88
    ... executable example here ...
cg@2434
    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
cg@2434
   115
	constantNamed:#'Psiware::SystemManagement class closeSearchBar'
cg@2434
   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
cg@2434
   143
	constantNamed:#'Psiware::SystemManagement class restartSearchBarIcon'
cg@2434
   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
cg@2434
   177
	constantNamed:#'Psiware::SystemManagement class searchNextIcon'
cg@2434
   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
cg@2434
   203
	constantNamed:#'Psiware::SystemManagement class searchPreviousIcon'
cg@2434
   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
cg@2434
   229
	constantNamed:#'Psiware::SystemManagement class searchToolBarIcon'
cg@2434
   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
cg@2434
   266
	constantNamed:#'Psiware::SystemManagement class warningSearchBarIcon'
cg@2434
   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@2434
   301
    ^
cg@2015
   302
     #(FullSpec
cg@2434
   303
	name: windowSpec
cg@2434
   304
	window:
cg@2015
   305
       (WindowSpec
cg@2434
   306
	  label: 'InternationalLanguageTranslationEditor'
cg@2434
   307
	  name: 'InternationalLanguageTranslationEditor'
cg@2434
   308
	  min: (Point 10 10)
cg@2434
   309
	  bounds: (Rectangle 0 0 774 610)
cg@2434
   310
	  menu: mainMenu
cg@2434
   311
	)
cg@2434
   312
	component:
cg@2015
   313
       (SpecCollection
cg@2434
   314
	  collection: (
cg@2434
   315
	   (MenuPanelSpec
cg@2434
   316
	      name: 'ToolBar'
cg@2434
   317
	      layout: (LayoutFrame 0 0 0 0 0 1 30 0)
cg@2434
   318
	      menu: menuToolBar
cg@2434
   319
	      textDefault: true
cg@2434
   320
	    )
cg@2434
   321
	   (VariableVerticalPanelSpec
cg@2434
   322
	      name: 'TranslationsVariableVerticalPanel'
cg@2434
   323
	      layout: (LayoutFrame 0 0 30 0 0 1 -32 1)
cg@2434
   324
	      component:
cg@2434
   325
	     (SpecCollection
cg@2434
   326
		collection: (
cg@2434
   327
		 (DataSetSpec
cg@2434
   328
		    name: 'KeyStringAndLanguageSelectionTable'
cg@2434
   329
		    model: selectedKeyRow
cg@2434
   330
		    menu: keyStringAndLanguageSelectionTableMenu
cg@2434
   331
		    hasHorizontalScrollBar: true
cg@2434
   332
		    hasVerticalScrollBar: true
cg@2434
   333
		    dataList: keyStringAndLanguageSelectionTable
cg@2434
   334
		    columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
cg@2434
   335
		    beDependentOfRows: true
cg@2434
   336
		    columnAdaptor: yourself
cg@2434
   337
		    postBuildCallback: postBuildDataSet:
cg@2434
   338
		  )
cg@2434
   339
		 (VariableVerticalPanelSpec
cg@2434
   340
		    name: 'VariableVerticalPanel1'
cg@2434
   341
		    component:
cg@2434
   342
		   (SpecCollection
cg@2434
   343
		      collection: (
cg@2434
   344
		       (ViewSpec
cg@2434
   345
			  name: 'Box1'
cg@2434
   346
			  component:
cg@2434
   347
			 (SpecCollection
cg@2434
   348
			    collection: (
cg@2434
   349
			     (LabelSpec
cg@2434
   350
				label: 'Original String (Key):'
cg@2434
   351
				name: 'Label2'
cg@2434
   352
				layout: (LayoutFrame 0 0 -2 0 0 1 28 0)
cg@2434
   353
				translateLabel: true
cg@2434
   354
				adjust: left
cg@2434
   355
			      )
cg@2434
   356
			     (TextEditorSpec
cg@2434
   357
				name: 'OriginalText'
cg@2434
   358
				layout: (LayoutFrame 0 0 27 0 0 1 -2 1)
cg@2434
   359
				model: originalTextHolder
cg@2434
   360
				hasHorizontalScrollBar: true
cg@2434
   361
				hasVerticalScrollBar: true
cg@2434
   362
				modifiedChannel: originalTextModifiedHolder
cg@2434
   363
				acceptCallBack: languageTextAccepted
cg@2434
   364
			      )
cg@2434
   365
			     )
cg@2434
   366
cg@2434
   367
			  )
cg@2434
   368
			)
cg@2434
   369
		       (ViewSpec
cg@2434
   370
			  name: 'Box3'
cg@2434
   371
			  component:
cg@2434
   372
			 (SpecCollection
cg@2434
   373
			    collection: (
cg@2434
   374
			     (LabelSpec
cg@2434
   375
				label: 'Select Another Language as example:'
cg@2434
   376
				name: 'Label3'
cg@2434
   377
				layout: (LayoutFrame 0 0 -6 0 0 1 24 0)
cg@2434
   378
				translateLabel: true
cg@2434
   379
				adjust: left
cg@2434
   380
			      )
cg@2434
   381
			     (ComboBoxSpec
cg@2434
   382
				name: 'ComboBox1'
cg@2434
   383
				layout: (LayoutFrame 197 0 -2 0 322 0 18 0)
cg@2434
   384
				model: exampleLanguageSelectionHolder
cg@2434
   385
				immediateAccept: false
cg@2434
   386
				acceptOnLeave: true
cg@2434
   387
				acceptOnLostFocus: true
cg@2434
   388
				acceptOnPointerLeave: false
cg@2434
   389
				comboList: shownLanguages
cg@2434
   390
				useIndex: false
cg@2434
   391
			      )
cg@2434
   392
			     (TextEditorSpec
cg@2434
   393
				name: 'ExampleLanguageText'
cg@2434
   394
				layout: (LayoutFrame 0 0 30 0 0 1 0 1)
cg@2434
   395
				model: exampleLanguageTextHolder
cg@2434
   396
				hasHorizontalScrollBar: true
cg@2434
   397
				hasVerticalScrollBar: true
cg@2434
   398
				isReadOnly: true
cg@2434
   399
			      )
cg@2434
   400
			     )
cg@2434
   401
cg@2434
   402
			  )
cg@2434
   403
			)
cg@2434
   404
		       (ViewSpec
cg@2434
   405
			  name: 'Box2'
cg@2434
   406
			  component:
cg@2434
   407
			 (SpecCollection
cg@2434
   408
			    collection: (
cg@2434
   409
			     (LabelSpec
cg@2434
   410
				label: 'Translated String:'
cg@2434
   411
				name: 'Label1'
cg@2434
   412
				layout: (LayoutFrame 0 0 0 0 0 1 30 0)
cg@2434
   413
				translateLabel: true
cg@2434
   414
				adjust: left
cg@2434
   415
			      )
cg@2434
   416
			     (TextEditorSpec
cg@2434
   417
				name: 'LanguageText'
cg@2434
   418
				layout: (LayoutFrame 0 0 30 0 0 1 0 1)
cg@2434
   419
				model: languageTextHolder
cg@2434
   420
				hasHorizontalScrollBar: true
cg@2434
   421
				hasVerticalScrollBar: true
cg@2434
   422
				acceptChannel: languageTextAcceptHolder
cg@2434
   423
				modifiedChannel: languageTextModifiedHolder
cg@2434
   424
				acceptCallBack: languageTextAccepted
cg@2434
   425
				postBuildCallback: languageEditorBuilt:
cg@2434
   426
			      )
cg@2434
   427
			     (ActionButtonSpec
cg@2434
   428
				label: 'Paste Previous'
cg@2434
   429
				name: 'pastePreviousTranslation'
cg@2434
   430
				layout: (LayoutOrigin 0 0.83085250338295 0 0.03448275862069)
cg@2434
   431
				translateLabel: true
cg@2434
   432
				model: pastePreviousTranslationInLanguageText
cg@2434
   433
				enableChannel: pastePreviousTranslationEnableHolder
cg@2434
   434
				disabledLogo: 'Paste Previous'
cg@2434
   435
			      )
cg@2434
   436
			     (ActionButtonSpec
cg@2434
   437
				label: 'Paste Original'
cg@2434
   438
				name: 'Button1'
cg@2434
   439
				layout: (LayoutOrigin -95 0.83085250338295 0 0.03448275862069)
cg@2434
   440
				translateLabel: true
cg@2434
   441
				model: pasteOriginalInLanguageText
cg@2434
   442
				enableChannel: pasteOriginalEnableHolder
cg@2434
   443
				disabledLogo: 'Paste Original'
cg@2434
   444
			      )
cg@2434
   445
			     )
cg@2434
   446
cg@2434
   447
			  )
cg@2434
   448
			)
cg@2434
   449
		       )
cg@2434
   450
cg@2434
   451
		    )
cg@2434
   452
		    handles: (Any 0.33333333333333 0.66666666666667 1.0)
cg@2434
   453
		  )
cg@2434
   454
		 )
cg@2434
   455
cg@2434
   456
	      )
cg@2434
   457
	      handles: (Any 0.5 1.0)
cg@2434
   458
	      postBuildCallback: postBuildTranslationsPanel:
cg@2434
   459
	    )
cg@2434
   460
	   (ViewSpec
cg@2434
   461
	      name: 'SearchBox'
cg@2434
   462
	      layout: (LayoutFrame 0 0 -32 1 0 1 0 1)
cg@2434
   463
	      level: -1
cg@2434
   464
	      visibilityChannel: searchBoxVisible
cg@2434
   465
	      component:
cg@2434
   466
	     (SpecCollection
cg@2434
   467
		collection: (
cg@2434
   468
		 (ActionButtonSpec
cg@2434
   469
		    label: 'closeSearchBarIcon'
cg@2434
   470
		    name: 'closeSearchBarButton'
cg@2434
   471
		    layout: (LayoutFrame 4 0 5 0 25 0 26 0)
cg@2434
   472
		    hasCharacterOrientedLabel: false
cg@2434
   473
		    translateLabel: true
cg@2434
   474
		    model: closeSearchBar
cg@2434
   475
		  )
cg@2434
   476
		 (LabelSpec
cg@2434
   477
		    label: 'Search:'
cg@2434
   478
		    name: 'SearchLabel'
cg@2434
   479
		    layout: (LayoutFrame 30 0 5 0 81 0 27 0)
cg@2434
   480
		    translateLabel: true
cg@2434
   481
		    adjust: right
cg@2434
   482
		  )
cg@2434
   483
		 (InputFieldSpec
cg@2434
   484
		    name: 'SearchEntryField'
cg@2434
   485
		    layout: (LayoutFrame 87 0 5 0 244 0 27 0)
cg@2434
   486
		    model: searchTextHolder
cg@2434
   487
		    immediateAccept: true
cg@2434
   488
		    acceptOnReturn: true
cg@2434
   489
		    acceptOnTab: true
cg@2434
   490
		    acceptOnLostFocus: true
cg@2434
   491
		    modifiedChannel: searchTextModifiedHolder
cg@2434
   492
		    acceptOnPointerLeave: false
cg@2434
   493
		    postBuildCallback: postBuildSearchTextView:
cg@2434
   494
		  )
cg@2434
   495
		 (ActionButtonSpec
cg@2434
   496
		    label: 'searchNextIcon'
cg@2434
   497
		    name: 'SearchNextButton'
cg@2434
   498
		    layout: (LayoutFrame 251 0 5 0 272 0 26 0)
cg@2434
   499
		    hasCharacterOrientedLabel: false
cg@2434
   500
		    translateLabel: true
cg@2434
   501
		    model: searchNextText
cg@2434
   502
		  )
cg@2434
   503
		 (ActionButtonSpec
cg@2434
   504
		    label: 'searchPreviousIcon'
cg@2434
   505
		    name: 'searchPreviousButton'
cg@2434
   506
		    layout: (LayoutFrame 279 0 5 0 300 0 26 0)
cg@2434
   507
		    hasCharacterOrientedLabel: false
cg@2434
   508
		    translateLabel: true
cg@2434
   509
		    model: searchPreviousText
cg@2434
   510
		  )
cg@2434
   511
		 (CheckBoxSpec
cg@2434
   512
		    label: 'Ignore case'
cg@2434
   513
		    name: 'IgnoreCaseCheckBox'
cg@2434
   514
		    layout: (LayoutFrame 309 0 5 0 505 0 27 0)
cg@2434
   515
		    model: ignoreCaseHolder
cg@2434
   516
		    translateLabel: true
cg@2434
   517
		  )
cg@2434
   518
		 (LabelSpec
cg@2434
   519
		    label: 'SearchBarImageInfoLabel'
cg@2434
   520
		    name: 'SearchBarImageInfoLabel'
cg@2434
   521
		    layout: (LayoutFrame 511 0 5 0 535 0 27 0)
cg@2434
   522
		    hasCharacterOrientedLabel: false
cg@2434
   523
		    translateLabel: true
cg@2434
   524
		    labelChannel: searchBarImageInfoLabelHolder
cg@2434
   525
		  )
cg@2434
   526
		 (LabelSpec
cg@2434
   527
		    label: 'SearchBarInfoLabel'
cg@2434
   528
		    name: 'SearchBarInfoLabel'
cg@2434
   529
		    layout: (LayoutFrame 538 0 5 0 816 0 27 0)
cg@2434
   530
		    translateLabel: true
cg@2434
   531
		    labelChannel: searchBarInfoLabelHolder
cg@2434
   532
		    adjust: left
cg@2434
   533
		  )
cg@2434
   534
		 )
cg@2434
   535
cg@2434
   536
	      )
cg@2434
   537
	      postBuildCallback: postBuildSearchBoxView:
cg@2434
   538
	    )
cg@2434
   539
	   )
cg@2434
   540
cg@2434
   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
cg@2434
   561
    ^
fm@2163
   562
     #(Menu
cg@2434
   563
	(
cg@2434
   564
	 (MenuItem
cg@2434
   565
	    label: 'Set Current NameSpace'
cg@2434
   566
	    itemValue: changeLastNameSpace
cg@2434
   567
	    translateLabel: true
cg@2434
   568
	  )
cg@2434
   569
	 (MenuItem
cg@2434
   570
	    label: 'Search String in Current NameSpace'
cg@2434
   571
	    itemValue: searchStringInLastNameSpace
cg@2434
   572
	    translateLabel: true
cg@2434
   573
	  )
cg@2434
   574
	 (MenuItem
cg@2434
   575
	    label: '-'
cg@2434
   576
	    isVisible: #false
cg@2434
   577
	  )
cg@2434
   578
	 (MenuItem
cg@2434
   579
	    label: 'Set Current Package'
cg@2434
   580
	    itemValue: changeLastPackage
cg@2434
   581
	    translateLabel: true
cg@2434
   582
	    isVisible: #false
cg@2434
   583
	  )
cg@2434
   584
	 (MenuItem
cg@2434
   585
	    label: 'Search String in Current Package'
cg@2434
   586
	    itemValue: searchStringInLastPackage
cg@2434
   587
	    translateLabel: true
cg@2434
   588
	    isVisible: #false
cg@2434
   589
	  )
cg@2434
   590
	 )
cg@2434
   591
	nil
cg@2434
   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@2434
   610
    ^
cg@2015
   611
     #(Menu
cg@2434
   612
	(
cg@2434
   613
	 (MenuItem
cg@2434
   614
	    label: 'File'
cg@2434
   615
	    translateLabel: true
cg@2434
   616
	    submenu:
cg@2434
   617
	   (Menu
cg@2434
   618
	      (
cg@2434
   619
	       (MenuItem
cg@2434
   620
		  label: 'New'
cg@2434
   621
		  itemValue: menuNew
cg@2434
   622
		  translateLabel: true
cg@2434
   623
		)
cg@2434
   624
	       (MenuItem
cg@2434
   625
		  label: '-'
cg@2434
   626
		)
cg@2434
   627
	       (MenuItem
cg@2434
   628
		  label: 'Open Resources for Package or Project...'
cg@2434
   629
		  itemValue: menuOpenByPackage
cg@2434
   630
		  translateLabel: true
cg@2434
   631
		)
cg@2434
   632
	       (MenuItem
cg@2434
   633
		  label: 'Open Resource File...'
cg@2434
   634
		  itemValue: menuOpen
cg@2434
   635
		  translateLabel: true
cg@2434
   636
		)
cg@2434
   637
	       (MenuItem
cg@2434
   638
		  label: '-'
cg@2434
   639
		)
cg@2434
   640
	       (MenuItem
cg@2434
   641
		  label: 'Save All Resource Files'
cg@2434
   642
		  itemValue: menuSaveAll
cg@2434
   643
		  translateLabel: true
cg@2434
   644
		)
cg@2434
   645
	       (MenuItem
cg@2434
   646
		  label: 'Save Resource File'
cg@2434
   647
		  itemValue: menuSave
cg@2434
   648
		  translateLabel: true
cg@2434
   649
		)
cg@2434
   650
	       (MenuItem
cg@2434
   651
		  label: 'Save Resource File As...'
cg@2434
   652
		  itemValue: menuSaveAs
cg@2434
   653
		  translateLabel: true
cg@2434
   654
		)
cg@2434
   655
	       (MenuItem
cg@2434
   656
		  label: '-'
cg@2434
   657
		)
cg@2434
   658
	       (MenuItem
cg@2434
   659
		  label: 'Import existing translations from file...'
cg@2434
   660
		  itemValue: importExistingTranslationsFromFile
cg@2434
   661
		  translateLabel: true
cg@2434
   662
		)
cg@2434
   663
	       (MenuItem
cg@2434
   664
		  label: '-'
cg@2434
   665
		)
cg@2434
   666
	       (MenuItem
cg@2434
   667
		  label: 'Set Current NameSpace'
cg@2434
   668
		  itemValue: changeLastNameSpace
cg@2434
   669
		  translateLabel: true
cg@2434
   670
		)
cg@2434
   671
	       (MenuItem
cg@2434
   672
		  label: 'Set Current Package'
cg@2434
   673
		  itemValue: changeLastPackage
cg@2434
   674
		  translateLabel: true
cg@2434
   675
		  isVisible: #false
cg@2434
   676
		)
cg@2434
   677
	       (MenuItem
cg@2434
   678
		  label: '-'
cg@2434
   679
		)
cg@2434
   680
	       (MenuItem
cg@2434
   681
		  label: 'Exit'
cg@2434
   682
		  itemValue: closeRequest
cg@2434
   683
		  translateLabel: true
cg@2434
   684
		)
cg@2434
   685
	       )
cg@2434
   686
	      nil
cg@2434
   687
	      nil
cg@2434
   688
	    )
cg@2434
   689
	  )
cg@2434
   690
	 (MenuItem
cg@2434
   691
	    label: 'View'
cg@2434
   692
	    translateLabel: true
cg@2434
   693
	    submenu:
cg@2434
   694
	   (Menu
cg@2434
   695
	      (
cg@2434
   696
	       (MenuItem
cg@2434
   697
		  label: 'Show Missing Translations Only'
cg@2434
   698
		  translateLabel: true
cg@2434
   699
		  indication: showMissingTranslationsOnly
cg@2434
   700
		)
cg@2434
   701
	       (MenuItem
cg@2434
   702
		  label: '-'
cg@2434
   703
		)
cg@2434
   704
	       (MenuItem
cg@2434
   705
		  label: 'Shown Languages'
cg@2434
   706
		  translateLabel: true
cg@2434
   707
		  submenuChannel: shownLanguagesMenu
cg@2434
   708
		)
cg@2434
   709
	       )
cg@2434
   710
	      nil
cg@2434
   711
	      nil
cg@2434
   712
	    )
cg@2434
   713
	  )
cg@2434
   714
	 (MenuItem
cg@2434
   715
	    label: 'Languages'
cg@2434
   716
	    translateLabel: true
cg@2434
   717
	    submenu:
cg@2434
   718
	   (Menu
cg@2434
   719
	      (
cg@2434
   720
	       (MenuItem
cg@2434
   721
		  label: 'Add Language...'
cg@2434
   722
		  itemValue: addLanguage
cg@2434
   723
		  translateLabel: true
cg@2434
   724
		)
cg@2434
   725
	       (MenuItem
cg@2434
   726
		  label: 'Remove Language...'
cg@2434
   727
		  itemValue: removeLanguage
cg@2434
   728
		  translateLabel: true
cg@2434
   729
		)
cg@2434
   730
	       )
cg@2434
   731
	      nil
cg@2434
   732
	      nil
cg@2434
   733
	    )
cg@2434
   734
	  )
cg@2434
   735
	 (MenuItem
cg@2434
   736
	    label: 'Translations'
cg@2434
   737
	    translateLabel: true
cg@2434
   738
	    submenu:
cg@2434
   739
	   (Menu
cg@2434
   740
	      (
cg@2434
   741
	       (MenuItem
cg@2434
   742
		  label: 'Add Translation...'
cg@2434
   743
		  itemValue: addTranslation
cg@2434
   744
		  translateLabel: true
cg@2434
   745
		)
cg@2434
   746
	       (MenuItem
cg@2434
   747
		  label: 'Remove Translation...'
cg@2434
   748
		  itemValue: removeTranslation
cg@2434
   749
		  translateLabel: true
cg@2434
   750
		)
cg@2434
   751
	       (MenuItem
cg@2434
   752
		  label: '-'
cg@2434
   753
		)
cg@2434
   754
	       (MenuItem
cg@2434
   755
		  label: 'Extract from Class...'
cg@2434
   756
		  itemValue: extractTranslationsFromClass
cg@2434
   757
		  translateLabel: true
cg@2434
   758
		)
cg@2434
   759
	       (MenuItem
cg@2434
   760
		  label: 'Extract from Project...'
cg@2434
   761
		  itemValue: extractTranslationsFromProject
cg@2434
   762
		  translateLabel: true
cg@2434
   763
		)
cg@2434
   764
	       (MenuItem
cg@2434
   765
		  label: 'Extract from NameSpace...'
cg@2434
   766
		  itemValue: extractTranslationsFromNameSpace
cg@2434
   767
		  translateLabel: true
cg@2434
   768
		)
cg@2434
   769
	       (MenuItem
cg@2434
   770
		  label: '-'
cg@2434
   771
		)
cg@2434
   772
	       (MenuItem
cg@2434
   773
		  label: 'Run Application and Collect Translations...'
cg@2434
   774
		  itemValue: runApplicationAndCollectTranslations
cg@2434
   775
		  translateLabel: true
cg@2434
   776
		)
cg@2434
   777
	       )
cg@2434
   778
	      nil
cg@2434
   779
	      nil
cg@2434
   780
	    )
cg@2434
   781
	  )
cg@2434
   782
	 (MenuItem
cg@2434
   783
	    label: 'Preferences'
cg@2434
   784
	    translateLabel: true
cg@2434
   785
	    submenu:
cg@2434
   786
	   (Menu
cg@2434
   787
	      (
cg@2434
   788
	       (MenuItem
cg@2434
   789
		  label: 'Auto Accept Changes'
cg@2434
   790
		  translateLabel: true
cg@2434
   791
		  indication: autoAcceptHolder
cg@2434
   792
		)
cg@2434
   793
	       (MenuItem
cg@2434
   794
		  label: 'Search For Similar Translations'
cg@2434
   795
		  translateLabel: true
cg@2434
   796
		  indication: searchForSimilarTranslationEnableHolder
cg@2434
   797
		)
cg@2434
   798
	       (MenuItem
cg@2434
   799
		  label: 'Always Write UTF8'
cg@2434
   800
		  translateLabel: true
cg@2434
   801
		  indication: alwaysWriteUTF8Holder
cg@2434
   802
		)
cg@2434
   803
	       )
cg@2434
   804
	      nil
cg@2434
   805
	      nil
cg@2434
   806
	    )
cg@2434
   807
	  )
cg@2434
   808
	 (MenuItem
cg@2434
   809
	    label: 'Help'
cg@2434
   810
	    translateLabel: true
cg@2434
   811
	    startGroup: right
cg@2434
   812
	    submenu:
cg@2434
   813
	   (Menu
cg@2434
   814
	      (
cg@2434
   815
	       (MenuItem
cg@2434
   816
		  label: 'Documentation'
cg@2434
   817
		  itemValue: openDocumentation
cg@2434
   818
		  translateLabel: true
cg@2434
   819
		)
cg@2434
   820
	       (MenuItem
cg@2434
   821
		  label: '-'
cg@2434
   822
		)
cg@2434
   823
	       (MenuItem
cg@2434
   824
		  label: 'About this Application...'
cg@2434
   825
		  itemValue: openAboutThisApplication
cg@2434
   826
		  translateLabel: true
cg@2434
   827
		)
cg@2434
   828
	       )
cg@2434
   829
	      nil
cg@2434
   830
	      nil
cg@2434
   831
	    )
cg@2434
   832
	  )
cg@2434
   833
	 )
cg@2434
   834
	nil
cg@2434
   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
cg@2434
   853
    ^
fm@2051
   854
     #(Menu
cg@2434
   855
	(
cg@2434
   856
	 (MenuItem
cg@2434
   857
	    enabled: pastePreviousTranslationEnableHolder
cg@2434
   858
	    label: 'Paste Previous Translation'
cg@2434
   859
	    itemValue: pastePreviousTranslationInLanguageText
cg@2434
   860
	    nameKey: pastePreviousTranslationInLanguageText
cg@2434
   861
	    translateLabel: true
cg@2434
   862
	  )
cg@2434
   863
	 )
cg@2434
   864
	nil
cg@2434
   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@2434
   883
    ^
cg@2015
   884
     #(Menu
cg@2434
   885
	(
cg@2434
   886
	 (MenuItem
cg@2434
   887
	    label: 'Save'
cg@2434
   888
	    itemValue: menuSave
cg@2434
   889
	    translateLabel: true
cg@2434
   890
	    labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon)
cg@2434
   891
	  )
cg@2434
   892
	 (MenuItem
cg@2434
   893
	    label: '-'
cg@2434
   894
	  )
cg@2434
   895
	 (MenuItem
cg@2434
   896
	    label: 'Add Translation'
cg@2434
   897
	    itemValue: addTranslation
cg@2434
   898
	    translateLabel: true
cg@2434
   899
	    labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon)
cg@2434
   900
	  )
cg@2434
   901
	 (MenuItem
cg@2434
   902
	    label: 'Remove Translation'
cg@2434
   903
	    itemValue: removeTranslation
cg@2434
   904
	    translateLabel: true
cg@2434
   905
	    labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon)
cg@2434
   906
	  )
cg@2434
   907
	 (MenuItem
cg@2434
   908
	    label: '-'
cg@2434
   909
	  )
cg@2434
   910
	 (MenuItem
cg@2434
   911
	    label: 'Search'
cg@2434
   912
	    itemValue: search
cg@2434
   913
	    translateLabel: true
cg@2434
   914
	    shortcutKey: Ctrlf
cg@2434
   915
	    labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon)
cg@2434
   916
	  )
cg@2434
   917
	 (MenuItem
cg@2434
   918
	    label: ''
cg@2434
   919
	  )
cg@2434
   920
	 (MenuItem
cg@2434
   921
	    label: 'Stop Application'
cg@2434
   922
	    itemValue: stopApplication
cg@2434
   923
	    translateLabel: true
cg@2434
   924
	    isVisible: stopApplicationIconVisibleHolder
cg@2434
   925
	    labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon)
cg@2434
   926
	  )
cg@2434
   927
	 )
cg@2434
   928
	nil
cg@2434
   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@2434
   941
	allButOpen;
cg@2434
   942
	readResourceFile:fn asLanguage:fn withoutSuffix baseName;
cg@2434
   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@2434
   963
	 label: 'Key'
cg@2434
   964
	 labelButtonType: Button
cg@2434
   965
	 minWidth: 50
cg@2434
   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
cg@2434
   986
	 label: lang
cg@2434
   987
	 labelButtonType: Button
cg@2434
   988
	 minWidth: 50
cg@2434
   989
	 editorType: None
cg@2434
   990
	 model: columnInRow:at:
cg@2434
   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
cg@2434
   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
cg@2434
  1022
    ^self languageTextHolder value isNil
cg@2434
  1023
	ifTrue:['']
cg@2434
  1024
	ifFalse:[self languageTextHolder value asCollectionOfLines first.]
fm@2050
  1025
!
fm@2050
  1026
fm@2327
  1027
objectsList
fm@2327
  1028
cg@2434
  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
cg@2434
  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
cg@2434
  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.
cg@2434
  1072
    similarTranslationsAssociations isEmpty ifTrue:[^self].
fm@2051
  1073
fm@2163
  1074
    similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
cg@2434
  1075
	collection detect:[:selectedAssociation |
cg@2434
  1076
	    selectedAssociation value sameAs: association value] ifNone:[collection add: association].
cg@2434
  1077
	collection].
cg@2434
  1078
    selectedTranslation := Dialog
cg@2434
  1079
	choose:'Choose one if you consider itīs usefull to translate:
cg@2434
  1080
    ',
cg@2434
  1081
	'<', key, '>  ', (self currentExampleLanguageText ifNil:[''])
cg@2434
  1082
	fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
cg@2434
  1083
	values: (similarTranslationsAssociations collect:[:each | each value])
cg@2434
  1084
	lines:10
cg@2434
  1085
	cancel: nil.
cg@2434
  1086
cg@2434
  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
cg@2434
  1093
    alwaysWriteUTF8Holder isNil ifTrue:[alwaysWriteUTF8Holder := true asValue].
fm@2053
  1094
    ^ alwaysWriteUTF8Holder
fm@2053
  1095
!
fm@2053
  1096
fm@2050
  1097
autoAcceptHolder
cg@2434
  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:[
cg@2434
  1104
	exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue.
cg@2434
  1105
	exampleLanguageSelectionHolder addDependent:self.
cg@2434
  1106
    ].
fm@2050
  1107
    ^ exampleLanguageSelectionHolder
fm@2050
  1108
!
fm@2050
  1109
fm@2050
  1110
exampleLanguageTextHolder
fm@2050
  1111
    exampleLanguageTextHolder isNil ifTrue:[
cg@2434
  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:[
cg@2434
  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.
cg@2434
  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@2434
  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@2434
  1141
	keyStringAndLanguageSelectionTableColumnDescriptionHolder := ValueHolder new.
cg@2434
  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@2434
  1155
	languageShownHolders := Dictionary new
cg@2015
  1156
    ].
cg@2434
  1157
    holder := languageShownHolders
cg@2434
  1158
		at:lang
cg@2434
  1159
		ifAbsentPut:[
cg@2434
  1160
		    |h|
cg@2434
  1161
cg@2434
  1162
		    h := true asValue.
cg@2434
  1163
		    h onChangeEvaluate:[
cg@2434
  1164
			h value ifTrue:[
cg@2434
  1165
			   self enableLanguageDisplayFor:lang
cg@2434
  1166
			] ifFalse:[
cg@2434
  1167
			   self disableLanguageDisplayFor:lang
cg@2434
  1168
			].
cg@2434
  1169
		    ].
cg@2434
  1170
		    h
cg@2434
  1171
		].
cg@2015
  1172
    ^ holder.
cg@2015
  1173
!
cg@2015
  1174
cg@2048
  1175
languageTextAcceptHolder
cg@2048
  1176
    languageTextAcceptHolder isNil ifTrue:[
cg@2434
  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@2434
  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@2434
  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@2434
  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@2434
  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@2434
  1212
	originalTextModifiedHolder := false asValue.
cg@2015
  1213
    ].
cg@2015
  1214
    ^ originalTextModifiedHolder.
cg@2015
  1215
!
cg@2015
  1216
fm@2323
  1217
pasteOriginalEnableHolder
cg@2434
  1218
   pasteOriginalEnableHolder isNil ifTrue:[pasteOriginalEnableHolder := false asValue].
fm@2323
  1219
    ^ pasteOriginalEnableHolder
fm@2323
  1220
!
fm@2323
  1221
fm@2051
  1222
pastePreviousTranslationEnableHolder
cg@2434
  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:[
cg@2434
  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:[
cg@2434
  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:[
cg@2434
  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
cg@2434
  1258
   searchForSimilarTranslationEnableHolder isNil
cg@2434
  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:[
cg@2434
  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:[
cg@2434
  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@2434
  1291
	selectedKeyRow := ValueHolder new.
cg@2434
  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@2434
  1299
	showMissingTranslationsOnly := false asValue.
cg@2434
  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@2434
  1307
	shownLanguages := List new.
cg@2434
  1308
	shownLanguages addAll:(self languagesList).
cg@2434
  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@2434
  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@2434
  1331
	 self shownLanguagesChanged.
cg@2434
  1332
	 ^ self.
cg@2048
  1333
    ].
fm@2049
  1334
    changedObject == languageTextAcceptHolder ifTrue:[
cg@2434
  1335
	 self updateLanguageTextModification.
cg@2434
  1336
	 ^ self.
fm@2049
  1337
    ].
fm@2050
  1338
    changedObject == exampleLanguageSelectionHolder ifTrue:[
cg@2434
  1339
	self updateExampleLanguageText.
cg@2434
  1340
	^ self.
cg@2434
  1341
    ].
fm@2051
  1342
    changedObject == showMissingTranslationsOnly ifTrue:[
cg@2434
  1343
	self showMissingTranslationsOnlyChanged.
cg@2434
  1344
	^ self.
cg@2434
  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
cg@2434
  1359
updateKeyStringsToLanguageMappings
cg@2434
  1360
cg@2434
  1361
      keyStringsToLanguageMappings
cg@2434
  1362
	at:lastSelectedKey
cg@2434
  1363
	language:lastLanguage
cg@2434
  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.
cg@2434
  1372
    lastSelectedKey := self selectedKey.
fm@2050
  1373
!
fm@2050
  1374
cg@2434
  1375
updateLanguageTextModification
cg@2434
  1376
     self languageTextModifiedHolder value ifTrue:[
cg@2434
  1377
	(self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
cg@2434
  1378
	    self languageTextModifiedHolder value:false.
cg@2434
  1379
	    self languageTextHolder value:languageEditor contents.
cg@2434
  1380
	    lastLanguage notNil ifTrue:[self updateKeyStringsToLanguageMappings.]
cg@2434
  1381
	]
fm@2049
  1382
    ].
fm@2049
  1383
!
fm@2049
  1384
fm@2049
  1385
updateOriginalTextModification
fm@2049
  1386
fm@2163
  1387
    |answer|
fm@2049
  1388
cg@2434
  1389
	self originalTextModifiedHolder value ifTrue:[
cg@2434
  1390
	    answer := OptionBox
cg@2434
  1391
			  request:'Accept changed original text (key) ?'
cg@2434
  1392
			  label:'Original text (key) changed'
cg@2434
  1393
			  image:(WarningBox iconBitmap)
cg@2434
  1394
			  buttonLabels:#('Cancel' 'Accept' 'Accept As New')
cg@2434
  1395
			  values:#(nil #accept #acceptAsNew)
cg@2434
  1396
			  default:#acceptAsNew.
cg@2434
  1397
cg@2434
  1398
	    answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
cg@2434
  1399
	    answer == #accept ifTrue:[
fm@2163
  1400
    self halt.        ].
cg@2434
  1401
	    answer == #acceptAsNew ifTrue:[
fm@2163
  1402
    self halt.        ].
cg@2434
  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.
cg@2434
  1421
    characterCollection := CharacterEncoder supportedExternalEncodings
cg@2434
  1422
	inject: OrderedCollection new
cg@2434
  1423
	into:[:collection :each |
cg@2434
  1424
	    collection add: each first;
cg@2434
  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:[
cg@2434
  1437
	encoder := CharacterEncoder encoderFor: encoderString ifAbsent:nil.
cg@2434
  1438
	encoder notNil ifTrue:[keyStringsToLanguageMappings atLanguage: lang putEncoder: encoder.].
fm@2051
  1439
    ].
fm@2051
  1440
    ^encoderString
fm@2050
  1441
!
fm@2050
  1442
cg@2434
  1443
requestFilename
fm@2050
  1444
fm@2050
  1445
    |aFilename|
fm@2050
  1446
cg@2434
  1447
    aFilename := Dialog
cg@2434
  1448
	requestFileName:(resources string:'Name of resource file:')
cg@2434
  1449
	default:nil
cg@2434
  1450
	pattern:'*.rs'.
fm@2050
  1451
fm@2050
  1452
    aFilename isEmptyOrNil ifTrue:[^ nil ].
fm@2050
  1453
    ^aFilename asFilename
fm@2050
  1454
!
fm@2050
  1455
cg@2434
  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
cg@2434
  1460
    aFilename := Dialog
cg@2434
  1461
	requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString)
cg@2434
  1462
	default:nil
cg@2434
  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@2434
  1471
    ^ Dialog
cg@2434
  1472
	choose:(resources string:'For which language ?')
cg@2434
  1473
	fromList:languagesList
cg@2434
  1474
	lines:10.
fm@2327
  1475
!
fm@2327
  1476
fm@2327
  1477
requestLanguageToSave
cg@2434
  1478
    ^ Dialog
cg@2434
  1479
	choose:'Which language do you want to save?'
cg@2434
  1480
	fromList:languagesList
cg@2434
  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@2570
  1489
                                select:[:pID |
cg@2570
  1490
                                    |dir|
cg@2570
  1491
                                    dir := Smalltalk projectDirectoryForPackage:pID.
cg@2570
  1492
                                    dir notNil and:[
cg@2570
  1493
                                    (dir asFilename construct:'resources') exists]
cg@2570
  1494
                                ].
cg@2410
  1495
cg@2410
  1496
    package := Dialog
cg@2570
  1497
        requestProject:(resources string:'Name of Package:')
cg@2570
  1498
        from:projectsWithResources
cg@2570
  1499
        initialAnswer:LastProject
cg@2570
  1500
        suggestions:nil.
cg@2410
  1501
cg@2410
  1502
    package isEmptyOrNil ifTrue:[^ nil ].
cg@2410
  1503
    LastProject := package.
cg@2410
  1504
    ^ package
fm@2050
  1505
! !
fm@2050
  1506
fm@2327
  1507
!InternationalLanguageTranslationEditor methodsFor:'images'!
fm@2327
  1508
fm@2327
  1509
restartSearchBarIcon
fm@2327
  1510
fm@2327
  1511
    ^ self class restartSearchBarIcon
fm@2327
  1512
!
fm@2327
  1513
fm@2327
  1514
warningSearchBarIcon
fm@2327
  1515
fm@2327
  1516
    ^ self class warningSearchBarIcon
fm@2327
  1517
! !
fm@2327
  1518
cg@2015
  1519
!InternationalLanguageTranslationEditor methodsFor:'initialization & release'!
cg@2015
  1520
cg@2015
  1521
closeRequest
cg@2015
  1522
    "asks for permission before closing"
cg@2015
  1523
cg@2015
  1524
    self hasUnsavedChanges ifTrue:[
cg@2434
  1525
	(Dialog
cg@2434
  1526
	    confirm:(resources string:'Close without saving ?')
cg@2434
  1527
	    default:false) ifFalse:[
cg@2434
  1528
	    ^ self
cg@2434
  1529
	]
cg@2015
  1530
    ].
cg@2015
  1531
cg@2015
  1532
    super closeRequest
cg@2015
  1533
!
cg@2015
  1534
cg@2015
  1535
initialize
cg@2015
  1536
    modified := false.
cg@2031
  1537
    inSingleFileMode := false.
cg@2015
  1538
    super initialize
cg@2015
  1539
!
cg@2015
  1540
fm@2049
  1541
languageEditorBuilt:aView
fm@2049
  1542
    languageEditor := aView.
fm@2049
  1543
!
fm@2049
  1544
cg@2015
  1545
postBuildDataSet:aView
fm@2049
  1546
    dataSetView := aView.
fm@2049
  1547
    aView selectedColIndexHolder onChangeSend:#selectionChanged to:self.
cg@2015
  1548
! !
cg@2015
  1549
fm@2327
  1550
!InternationalLanguageTranslationEditor methodsFor:'initialize'!
fm@2327
  1551
fm@2327
  1552
postBuildSearchBoxView: aBoxView
fm@2327
  1553
fm@2327
  1554
    searchBoxView := aBoxView
fm@2327
  1555
fm@2327
  1556
    "Created: / 15-06-2007 / 18:02:38 / Administrador"
fm@2327
  1557
!
fm@2327
  1558
fm@2327
  1559
postBuildSearchTextView: anEditFieldView
fm@2327
  1560
fm@2327
  1561
    searchTextView := anEditFieldView
fm@2327
  1562
fm@2327
  1563
    "Created: / 15-06-2007 / 18:17:15 / Administrador"
fm@2327
  1564
!
fm@2327
  1565
fm@2327
  1566
postBuildTranslationsPanel: aPanel
fm@2327
  1567
fm@2327
  1568
    translationsPanel := aPanel
fm@2327
  1569
!
fm@2327
  1570
fm@2327
  1571
postBuildWith:aBuilder
fm@2327
  1572
fm@2327
  1573
    super postBuildWith:aBuilder.
fm@2327
  1574
    self updateToolVisibility.
fm@2327
  1575
! !
fm@2327
  1576
cg@2015
  1577
!InternationalLanguageTranslationEditor methodsFor:'menu actions'!
cg@2015
  1578
cg@2015
  1579
addLanguage
cg@2015
  1580
    |lang|
cg@2015
  1581
cg@2410
  1582
    lang := Dialog request:(resources string:'New language (ISO symbol):').
cg@2015
  1583
    lang isEmptyOrNil ifTrue:[^ self].
cg@2410
  1584
    self addLanguage:lang
cg@2410
  1585
!
cg@2410
  1586
cg@2410
  1587
addLanguage:langArg
cg@2410
  1588
    |lang|
cg@2410
  1589
cg@2410
  1590
    lang := langArg asSymbol.
cg@2015
  1591
    (keyStringsToLanguageMappings includesLanguage:lang) ifTrue:[^ self ].
cg@2015
  1592
cg@2015
  1593
    keyStringsToLanguageMappings addLanguage:lang.
cg@2015
  1594
    self languagesList add:lang.
cg@2015
  1595
    self shownLanguages add:lang.
cg@2015
  1596
    modified := true.
cg@2015
  1597
!
cg@2015
  1598
cg@2015
  1599
addTranslation
cg@2015
  1600
    |key index|
cg@2015
  1601
cg@2015
  1602
    key := Dialog request:'New Key:'.
fm@2051
  1603
    key isEmpty ifTrue:[^self].
fm@2163
  1604
    (self includesKey:key) ifFalse:[
cg@2434
  1605
	keyStringsToLanguageMappings addKey:key.
cg@2434
  1606
	modified := true.
cg@2015
  1607
    ].
fm@2051
  1608
   index := keyStringsToLanguageMappings indexOfKey:key.
fm@2051
  1609
   self selectedKeyRow value:index
cg@2015
  1610
!
cg@2015
  1611
fm@2163
  1612
changeLastNameSpace
fm@2163
  1613
fm@2163
  1614
    |nameSpace defaultNameSpace|
fm@2163
  1615
fm@2163
  1616
    lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name].
fm@2163
  1617
    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace.
fm@2163
  1618
    nameSpace isNil ifTrue:[^self].
fm@2163
  1619
    nameSpace := Smalltalk at:nameSpace asSymbol.
fm@2163
  1620
    nameSpace isNil ifTrue:[
cg@2434
  1621
	^Dialog information:(resources string:'No such nameSpace exists.')
fm@2163
  1622
    ].
fm@2163
  1623
    lastNameSpace := nameSpace.
fm@2163
  1624
!
fm@2163
  1625
fm@2327
  1626
changeLastPackage
fm@2327
  1627
fm@2327
  1628
    |package defaultPackage|
fm@2327
  1629
fm@2327
  1630
    lastPackage notNil ifTrue:[defaultPackage := lastPackage].
fm@2327
  1631
    package := Dialog
cg@2434
  1632
	    requestProject:'Package:'
cg@2434
  1633
	    initialAnswer:defaultPackage
cg@2434
  1634
	    suggestions:#('foo' 'bar' 'baz').
fm@2327
  1635
    package isNil ifTrue:[
cg@2434
  1636
	^ self "/ Dialog information:(resources string:'No such package exists.')
fm@2327
  1637
    ].
fm@2327
  1638
    lastPackage := package.
fm@2327
  1639
!
fm@2327
  1640
cg@2015
  1641
extractTranslationsFromClass
cg@2015
  1642
    |aClass newTranslations|
cg@2015
  1643
cg@2434
  1644
    aClass := Dialog
cg@2434
  1645
		requestClass:'Class to extract translations from:'
cg@2434
  1646
		okLabel:'OK'
cg@2434
  1647
		initialAnswer:(lastExtractedClass ? LastExtractedClass).
cg@2015
  1648
    aClass isNil ifTrue:[^ self ].
cg@2015
  1649
cg@2015
  1650
    lastExtractedClass := LastExtractedClass := aClass.
cg@2015
  1651
cg@2032
  1652
    newTranslations := self extractTranslationsFromClass:aClass.
cg@2032
  1653
    self addAllTranslations:newTranslations.
cg@2032
  1654
!
cg@2032
  1655
fm@2163
  1656
extractTranslationsFromNameSpace
fm@2163
  1657
fm@2163
  1658
    |newTranslations|
fm@2163
  1659
fm@2163
  1660
    self changeLastNameSpace.
fm@2163
  1661
    lastNameSpace isNil ifTrue:[^self.].
fm@2163
  1662
    newTranslations := OrderedCollection new.
fm@2163
  1663
    lastNameSpace allClassesDo:[:eachClass |
cg@2434
  1664
	newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
fm@2163
  1665
    ].
fm@2163
  1666
    self addAllTranslations:newTranslations.
fm@2163
  1667
!
fm@2163
  1668
cg@2032
  1669
extractTranslationsFromProject
cg@2032
  1670
    |box projectID newTranslations|
cg@2032
  1671
cg@2032
  1672
    box := ListSelectionBox new.
cg@2032
  1673
"/    box useComboBoxWithList:(Smalltalk allProjectIDs).
cg@2032
  1674
    box title:(resources string:'Project to extract translations from:').
cg@2032
  1675
    box list:Smalltalk allProjectIDs.
cg@2032
  1676
    box okAction:[:sel | projectID := sel].
cg@2032
  1677
    box initialText:(lastExtractedProject ? LastExtractedProject).
cg@2032
  1678
    box label:'Find Translations in Project'.
cg@2032
  1679
cg@2032
  1680
    box showAtPointer.
cg@2032
  1681
cg@2032
  1682
    projectID notNil ifTrue:[
cg@2434
  1683
	projectID := projectID withoutSeparators asSymbol.
cg@2032
  1684
    ].
cg@2032
  1685
    projectID isEmptyOrNil ifTrue:[^ self ].
cg@2032
  1686
cg@2032
  1687
    lastExtractedProject := LastExtractedProject := projectID.
cg@2032
  1688
cg@2015
  1689
    newTranslations := Set new.
cg@2015
  1690
cg@2032
  1691
    Smalltalk allClassesDo:[:eachClass |
cg@2434
  1692
	eachClass theNonMetaclass package == projectID ifTrue:[
cg@2032
  1693
"/ eachClass isLoaded ifTrue:[ self halt. ].
cg@2434
  1694
	    newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
cg@2434
  1695
	]
cg@2015
  1696
    ].
cg@2015
  1697
cg@2032
  1698
    self addAllTranslations:newTranslations.
cg@2015
  1699
!
cg@2015
  1700
fm@2327
  1701
importExistingTranslationsFromFile
cg@2410
  1702
    self information:'The import function is not available in this release'.
fm@2327
  1703
!
fm@2327
  1704
fm@2163
  1705
inspectCanvasMissingStrings
fm@2163
  1706
fm@2163
  1707
    |spec nameSpace missingStrings|
fm@2163
  1708
fm@2163
  1709
    missingStrings := OrderedCollection new.
fm@2163
  1710
    nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil.
fm@2163
  1711
    nameSpace := Smalltalk at:nameSpace asSymbol.
fm@2163
  1712
    nameSpace isNil ifTrue:[
cg@2434
  1713
	^Dialog information:(resources string:'No such nameSpace exists.?')
fm@2163
  1714
    ].
fm@2163
  1715
fm@2163
  1716
    nameSpace allClassesDo:[:cls |
cg@2434
  1717
	cls theMetaclass methodsDo:[:m |
cg@2434
  1718
	    m hasResource ifTrue:[
cg@2434
  1719
		(m resources includesKey:#canvas) ifTrue:[
cg@2434
  1720
		    spec := (cls perform:m selector) decodeAsLiteralArray.
cg@2434
  1721
		    spec do:[:eachComponent |
cg@2434
  1722
			eachComponent translationKeysDo:[:k |
cg@2434
  1723
			    (self includesKey: k) ifFalse:[
cg@2434
  1724
				missingStrings add: k.
cg@2434
  1725
				Transcript showCR: k storeString, '                         ', m printString]]
cg@2434
  1726
		    ]
cg@2434
  1727
		]
cg@2434
  1728
	    ]
cg@2434
  1729
	]
fm@2163
  1730
    ].
fm@2163
  1731
    missingStrings asSet inspect
fm@2163
  1732
!
fm@2163
  1733
cg@2015
  1734
menuNew
cg@2015
  1735
    modified ifTrue:[
cg@2434
  1736
	(Dialog
cg@2434
  1737
	    confirm:(resources stringWithCRs:'Modified translations have not been changed.\\Create new translations set anyway ?')
cg@2434
  1738
	    default:false) ifFalse:[^ self].
cg@2015
  1739
    ].
cg@2015
  1740
cg@2015
  1741
    keyStringsToLanguageMappings initialize.
cg@2015
  1742
    keyStringsToLanguageMappings changed.
cg@2015
  1743
cg@2015
  1744
    self languagesList contents:self keyStringAndLanguageSelectionTable languages.
cg@2015
  1745
    self shownLanguages contents:self keyStringAndLanguageSelectionTable languages.
cg@2015
  1746
    modified := false.
cg@2015
  1747
!
cg@2015
  1748
cg@2015
  1749
menuOpen
fm@2050
  1750
    |aFilename|
cg@2015
  1751
fm@2163
  1752
    self withWaitCursorDo:[
cg@2434
  1753
	aFilename := self requestFilename.
cg@2434
  1754
	aFilename isNil ifTrue:[^ self ].
cg@2434
  1755
	self readResourceFile:aFilename.
fm@2163
  1756
    ]
cg@2015
  1757
!
cg@2015
  1758
cg@2410
  1759
menuOpenByPackage
cg@2410
  1760
    |package|
cg@2410
  1761
cg@2410
  1762
    self withWaitCursorDo:[
cg@2434
  1763
	package := self requestPackage.
cg@2434
  1764
	package isNil ifTrue:[^ self ].
cg@2434
  1765
	self readResourceFileForPackage:package.
cg@2410
  1766
    ]
cg@2410
  1767
!
cg@2410
  1768
cg@2015
  1769
menuSave
fm@2050
  1770
"Saves the language selected in the fileName from where the language resource was obtained."
fm@2053
  1771
    |lang|
cg@2015
  1772
fm@2327
  1773
    lang := self requestLanguageToSave.
fm@2050
  1774
    lang isNil ifTrue:[^ self].
fm@2053
  1775
    self saveLanguage: lang
fm@2053
  1776
!
fm@2053
  1777
fm@2053
  1778
menuSaveAll
fm@2053
  1779
"Saves all the languages in the fileName from where the language resource was obtained."
cg@2434
  1780
    keyStringsToLanguageMappings languagesInUse do:[:each | self saveLanguage: each].
cg@2015
  1781
!
cg@2015
  1782
cg@2015
  1783
menuSaveAs
fm@2050
  1784
"Saves the language selected in the specified fileName."
fm@2050
  1785
     |lang aFilename|
cg@2015
  1786
fm@2327
  1787
    lang := self requestLanguageToSave.
cg@2434
  1788
    lang isNil ifTrue:[^ self].
fm@2053
  1789
    aFilename := self requestFilenameFor:lang.
fm@2050
  1790
    aFilename isNil ifTrue:[^ self].
fm@2050
  1791
    self saveResourceFile:aFilename for:lang asSymbol
cg@2015
  1792
!
cg@2015
  1793
cg@2015
  1794
openAboutThisApplication
cg@2015
  1795
    "This method was generated by the Browser.
cg@2015
  1796
     It will be invoked when the menu-item 'help-about' is selected."
cg@2015
  1797
cg@2015
  1798
    "/ could open a customized aboutBox here ...
cg@2015
  1799
    super openAboutThisApplication
cg@2015
  1800
!
cg@2015
  1801
cg@2015
  1802
openDocumentation
cg@2015
  1803
    "This method was generated by the Browser.
cg@2015
  1804
     It will be invoked when the menu-item 'help-documentation' is selected."
cg@2015
  1805
cg@2015
  1806
    "/ change below as required ...
cg@2015
  1807
cg@2015
  1808
    "/ to open an HTML viewer on some document (under 'doc/online/<language>/' ):
cg@2413
  1809
    HTMLDocumentView openFullOnDocumentationFile:'tools/languageEditor/TOP.html'.
cg@2015
  1810
cg@2015
  1811
    "/ add application-specific help files under the 'doc/online/<language>/help/appName'
cg@2015
  1812
    "/ directory, and open a viewer with:
cg@2015
  1813
    "/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
cg@2015
  1814
!
cg@2015
  1815
cg@2015
  1816
readResourceFile:aFilename
cg@2031
  1817
    |lang|
cg@2031
  1818
fm@2327
  1819
    lang := self requestLanguage.
cg@2031
  1820
    lang isNil ifTrue:[^ self ].
cg@2031
  1821
cg@2031
  1822
    self readResourceFile:aFilename asLanguage:lang asSymbol
cg@2031
  1823
!
cg@2031
  1824
cg@2410
  1825
readResourceFileForPackage:aPackage
cg@2410
  1826
    |allLanguages lang packageDir resourceDir langFile|
cg@2410
  1827
cg@2410
  1828
    packageDir := Smalltalk packageDirectoryForPackageId:aPackage.
cg@2410
  1829
    resourceDir := packageDir asFilename construct:'resources'.
cg@2410
  1830
cg@2410
  1831
    allLanguages := Set new.
cg@2410
  1832
    resourceDir directoryContentsAsFilenamesDo:[:eachFile |
cg@2434
  1833
	eachFile suffix = 'rs' ifTrue:[
cg@2434
  1834
	    (('##.rs' match:eachFile baseName)
cg@2434
  1835
	    or:[('##-##.rs' match:eachFile baseName)]) ifTrue:[
cg@2434
  1836
		allLanguages add:(eachFile withoutSuffix baseName)
cg@2434
  1837
	    ].
cg@2434
  1838
	].
cg@2410
  1839
    ].
cg@2410
  1840
cg@2410
  1841
    allLanguages addAll:languagesList.
cg@2410
  1842
    allLanguages := allLanguages asSortedCollection.
cg@2410
  1843
cg@2434
  1844
    lang := Dialog
cg@2434
  1845
	choose:(resources string:'For which language ?')
cg@2434
  1846
	fromList:allLanguages
cg@2434
  1847
	values:allLanguages
cg@2434
  1848
	buttons:(resources array:#('All'))
cg@2434
  1849
	values:#(all)
cg@2434
  1850
	lines:10
cg@2434
  1851
	cancel:nil.
cg@2410
  1852
cg@2410
  1853
    lang isNil ifTrue:[^ self ].
cg@2410
  1854
cg@2410
  1855
    langFile := resourceDir construct:lang,'.rs'.
cg@2410
  1856
cg@2410
  1857
    lang == #all ifTrue:[
cg@2434
  1858
	allLanguages do:[:lang |
cg@2434
  1859
	    self addLanguage:lang.
cg@2434
  1860
	    self readResourceFile:(resourceDir construct:lang,'.rs') asLanguage:lang.
cg@2434
  1861
	].
cg@2410
  1862
    ] ifFalse:[
cg@2434
  1863
	self readResourceFile:langFile asLanguage:lang asSymbol
cg@2410
  1864
    ].
cg@2410
  1865
!
cg@2410
  1866
fm@2050
  1867
removeLanguage
fm@2050
  1868
    |lang|
cg@2015
  1869
fm@2050
  1870
    lang := Dialog choose:'Which language do you want to remove?' fromList:languagesList lines:10.
fm@2050
  1871
    lang isNil ifTrue:[^ self ].
fm@2050
  1872
    (Dialog confirm: 'Are you sure to remove the language ', lang ) ifTrue:[
cg@2434
  1873
	  self languagesList remove:lang.
cg@2434
  1874
	  self shownLanguages remove:lang.
cg@2434
  1875
    ].
cg@2015
  1876
!
cg@2015
  1877
cg@2015
  1878
removeTranslation
cg@2015
  1879
    |rowSelectionIndex selectedKey|
cg@2015
  1880
cg@2015
  1881
    rowSelectionIndex := self selectedKeyRow value.
fm@2163
  1882
    rowSelectionIndex isNil ifTrue:[^self].
cg@2015
  1883
    rowSelectionIndex ~~ 0 ifTrue:[
cg@2434
  1884
	selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil.
cg@2434
  1885
	selectedKey isNil ifTrue:[^self].
cg@2434
  1886
	(Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[
cg@2434
  1887
	    keyStringsToLanguageMappings removeKey:selectedKey.
cg@2434
  1888
	].
cg@2015
  1889
    ].
cg@2015
  1890
!
cg@2015
  1891
cg@2015
  1892
runApplicationAndCollectTranslations
cg@2047
  1893
    |applicationClass newTranslations pseudoPack app startSelector|
cg@2015
  1894
cg@2015
  1895
    monitoredApplication notNil ifTrue:[
cg@2434
  1896
	monitoredApplication terminate.
cg@2434
  1897
	[monitoredApplication notNil] whileTrue:[
cg@2434
  1898
	    Delay waitForSeconds:0.1
cg@2434
  1899
	].
cg@2015
  1900
    ].
cg@2015
  1901
cg@2434
  1902
    applicationClass := Dialog
cg@2434
  1903
		requestClass:'Application class to start and collect translations from:'
cg@2434
  1904
		okLabel:'OK'
cg@2434
  1905
		initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ).
cg@2015
  1906
    applicationClass isNil ifTrue:[^ self ].
cg@2047
  1907
    applicationClass isNamespace ifTrue:[
cg@2434
  1908
	Dialog warn:'Entered class is a NameSpace'.
cg@2434
  1909
	^ self.
cg@2047
  1910
    ].
cg@2047
  1911
cg@2047
  1912
    applicationClass isVisualStartable ifTrue:[
cg@2434
  1913
	startSelector := #open
cg@2047
  1914
    ] ifFalse:[
cg@2434
  1915
	startSelector := Dialog
cg@2434
  1916
		    request:'Entered class seems to be no application class. Ok to start using selector:'
cg@2434
  1917
		    initialAnswer:((applicationClass respondsTo:#'start')
cg@2434
  1918
					ifTrue:#'start'
cg@2434
  1919
					ifFalse:#'new')
cg@2434
  1920
		    okLabel:'START'
cg@2434
  1921
		    title:'Start Application'.
cg@2434
  1922
	startSelector isNil ifTrue:[
cg@2434
  1923
	    ^ self
cg@2434
  1924
	].
cg@2434
  1925
	startSelector := startSelector asSymbol.
cg@2047
  1926
    ].
cg@2015
  1927
cg@2015
  1928
    lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass.
cg@2015
  1929
cg@2015
  1930
    newTranslations := Set new.
cg@2015
  1931
cg@2015
  1932
    pseudoPack := AccessCollectingPseudoResourcePack new.
cg@2015
  1933
    pseudoPack realResourcePack:(applicationClass classResources).
cg@2015
  1934
cg@2015
  1935
    self stopApplicationIconVisibleHolder value:true.
cg@2015
  1936
cg@2015
  1937
    monitoredApplication := [
cg@2434
  1938
	[
cg@2434
  1939
	    app := applicationClass new.
cg@2434
  1940
	    app perform:startSelector.
cg@2434
  1941
	    app window waitUntilVisible.
cg@2434
  1942
	    app window waitUntilClosed.
cg@2434
  1943
	] ensure:[
cg@2434
  1944
	    app closeRequest.
cg@2434
  1945
	    self stopApplicationIconVisibleHolder value:false.
cg@2434
  1946
	    monitoredApplication := nil.
cg@2434
  1947
	].
cg@2015
  1948
    ] fork.
fm@2163
  1949
!
fm@2163
  1950
fm@2163
  1951
searchStringInLastNameSpace
fm@2163
  1952
fm@2323
  1953
    |selectedKey browser lastSearchPatterns|
fm@2163
  1954
fm@2163
  1955
    selectedKey := self selectedKey.
fm@2163
  1956
    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
fm@2163
  1957
    browser := NewSystemBrowser new "open".
fm@2163
  1958
    browser allButOpen.
fm@2323
  1959
    lastSearchPatterns := browser lastSearchPatterns.
fm@2323
  1960
    (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
cg@2434
  1961
	browser lastSearchPatterns addFirst: selectedKey
fm@2163
  1962
    ].
fm@2327
  1963
    SearchDialog lastStringSearchArea: #currentNameSpace.
fm@2163
  1964
    lastNameSpace isNil ifTrue:[
cg@2434
  1965
	self changeLastNameSpace.
fm@2163
  1966
    ].
fm@2163
  1967
    lastNameSpace notNil ifTrue:[
fm@2163
  1968
"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
cg@2434
  1969
	browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name).
cg@2434
  1970
	browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name).
fm@2163
  1971
    ].
fm@2163
  1972
    self withWaitCursorDo:[
cg@2434
  1973
	browser browseMenuMethodsWithString
fm@2163
  1974
    ].
fm@2327
  1975
!
fm@2327
  1976
fm@2327
  1977
searchStringInLastPackage
fm@2327
  1978
fm@2327
  1979
    | selectedKey browser lastSearchPatterns|
fm@2327
  1980
fm@2327
  1981
    selectedKey := self selectedKey.
fm@2327
  1982
    selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
fm@2327
  1983
    browser := NewSystemBrowser new "open".
fm@2327
  1984
    browser allButOpen.
fm@2327
  1985
    lastSearchPatterns := browser lastSearchPatterns.
fm@2327
  1986
    (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
cg@2434
  1987
	browser lastSearchPatterns addFirst: selectedKey
fm@2327
  1988
    ].
fm@2327
  1989
    SearchDialog lastStringSearchArea: #currentPackage.
fm@2327
  1990
    lastPackage isNil ifTrue:[
cg@2434
  1991
	self changeLastPackage.
fm@2327
  1992
    ].
fm@2327
  1993
    lastPackage notNil ifTrue:[
fm@2327
  1994
"/        browser navigationState selectedClasses value: lastNameSpace allClasses.
cg@2434
  1995
	browser navigationState packageFilter value: (OrderedCollection with:lastPackage).
cg@2434
  1996
	browser navigationState selectedProjects value: (OrderedCollection with:lastPackage).
fm@2327
  1997
    ].
fm@2327
  1998
    self withWaitCursorDo:[
cg@2434
  1999
	browser browseMenuMethodsWithString
fm@2327
  2000
    ].
cg@2015
  2001
! !
cg@2015
  2002
cg@2015
  2003
!InternationalLanguageTranslationEditor methodsFor:'menus dynamic'!
cg@2015
  2004
cg@2015
  2005
disableLanguageDisplayFor:lang
cg@2015
  2006
    self shownLanguages remove:lang ifAbsent:[]
cg@2015
  2007
!
cg@2015
  2008
cg@2015
  2009
enableLanguageDisplayFor:newLang
cg@2015
  2010
    |shownLanguagesInOrder|
cg@2015
  2011
cg@2015
  2012
    (self shownLanguages includes:newLang) ifFalse:[
cg@2048
  2013
"/        shownLanguagesInOrder := self languagesList
cg@2048
  2014
"/                                    select:[:lang | (self shownLanguages includes:lang)
cg@2048
  2015
"/                                                    or:[ lang = newLang ]].
cg@2048
  2016
"/        self shownLanguages contents:shownLanguagesInOrder.
cg@2434
  2017
	self shownLanguages add:newLang.
cg@2015
  2018
    ]
cg@2015
  2019
!
cg@2015
  2020
cg@2015
  2021
isLanguageShown:lang
cg@2015
  2022
    ^ self shownLanguages includes:lang
cg@2015
  2023
!
cg@2015
  2024
cg@2015
  2025
shownLanguagesMenu
cg@2015
  2026
    <resource: #programMenu >
cg@2015
  2027
cg@2015
  2028
    ^ [
cg@2434
  2029
	|m selected|
cg@2434
  2030
cg@2434
  2031
	m := Menu new.
cg@2434
  2032
cg@2434
  2033
	self languagesList do:[:lang |
cg@2434
  2034
	    |item|
cg@2434
  2035
cg@2434
  2036
	    item := MenuItem label:lang.
cg@2434
  2037
	    item indication:(self languageShownHolderFor:lang).
cg@2434
  2038
	    item hideMenuOnActivated:false.
cg@2434
  2039
	    m addItem:item.
cg@2434
  2040
	].
cg@2434
  2041
	m
cg@2015
  2042
    ].
cg@2015
  2043
!
cg@2015
  2044
cg@2015
  2045
toggleLanguageDisplayFor:lang
cg@2015
  2046
    (self shownLanguages includes:lang) ifTrue:[
cg@2434
  2047
	self disableLanguageDisplayFor:lang
cg@2015
  2048
    ] ifFalse:[
cg@2434
  2049
	self enableLanguageDisplayFor:lang
cg@2015
  2050
    ].
cg@2015
  2051
! !
cg@2015
  2052
cg@2015
  2053
!InternationalLanguageTranslationEditor methodsFor:'private-key extraction'!
cg@2015
  2054
cg@2032
  2055
addAllTranslations:newTranslations
cg@2034
  2056
    |newTranslationKeys stringKeys nonStringKeys|
cg@2032
  2057
cg@2034
  2058
    newTranslationKeys := newTranslations select:[:k | k notEmpty and:[k isString not or:[k isBlank not]]].
cg@2032
  2059
    newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
cg@2434
  2060
    newTranslationKeys := newTranslationKeys
cg@2434
  2061
				collect:[:k |
cg@2434
  2062
					(k endsWith:'...') ifTrue:[
cg@2434
  2063
					    k copyWithoutLast:3.
cg@2434
  2064
					] ifFalse:[
cg@2434
  2065
					    ('.:?' includes:k last) ifTrue:[
cg@2434
  2066
						k copyWithoutLast:1.
cg@2434
  2067
					    ] ifFalse:[
cg@2434
  2068
						k
cg@2434
  2069
					]]].
cg@2034
  2070
    newTranslationKeys := newTranslationKeys asSet.
cg@2034
  2071
cg@2032
  2072
    newTranslationKeys notEmpty ifTrue:[
cg@2434
  2073
	stringKeys := newTranslationKeys select:[:k | k isString].
cg@2434
  2074
	nonStringKeys := newTranslationKeys select:[:k | k isString not].
cg@2434
  2075
cg@2434
  2076
	stringKeys := stringKeys asSortedCollection.
cg@2434
  2077
	keyStringsToLanguageMappings addKeys:stringKeys.
cg@2434
  2078
	keyStringsToLanguageMappings addKeys:nonStringKeys.
cg@2434
  2079
	modified := true.
cg@2032
  2080
    ].
cg@2032
  2081
!
cg@2032
  2082
cg@2032
  2083
extractTranslationsFromClass:aClass
cg@2032
  2084
    |newTranslations|
cg@2032
  2085
cg@2032
  2086
    newTranslations := Set new.
cg@2032
  2087
cg@2032
  2088
    self withWaitCursorDo:[
cg@2434
  2089
	"/ now, the hard part:
cg@2434
  2090
	"/ possible translations are in the specs,
cg@2434
  2091
	"/ and all arguments to (resources string:) messages.
cg@2434
  2092
	aClass instAndClassMethodsDo:[:eachMethod |
cg@2434
  2093
	    newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ).
cg@2434
  2094
	].
cg@2032
  2095
    ].
cg@2032
  2096
    ^ newTranslations
cg@2032
  2097
!
cg@2032
  2098
cg@2015
  2099
extractTranslationsFromHelpSpecMethod:aMethod
cg@2015
  2100
    |codeStrings matcher parseTree resourceKeys|
cg@2015
  2101
cg@2434
  2102
    parseTree := RBParser
cg@2434
  2103
	    parseMethod:aMethod source
cg@2434
  2104
	    onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
cg@2434
  2105
				  nil].
cg@2015
  2106
    parseTree isNil ifTrue:[^ #() ].
cg@2015
  2107
cg@2434
  2108
    codeStrings  :=
cg@2434
  2109
	#(
cg@2434
  2110
		'`@dict addPairsFrom: `#helpKeysAndStrings'
cg@2434
  2111
	).
cg@2015
  2112
cg@2015
  2113
    resourceKeys := Set new.
cg@2015
  2114
cg@2015
  2115
    matcher := ParseTreeSearcher new.
cg@2434
  2116
    matcher
cg@2434
  2117
	matchesAnyOf: codeStrings
cg@2434
  2118
	do: [:aNode :answer |
cg@2434
  2119
		|sel argNode arg|
cg@2434
  2120
cg@2434
  2121
		sel := aNode selector.
cg@2434
  2122
		(sel startsWith:'addPairsFrom:') ifTrue:[
cg@2434
  2123
		    argNode := aNode arguments at:1.
cg@2434
  2124
		    argNode isLiteral ifTrue:[
cg@2434
  2125
			arg := argNode value.
cg@2434
  2126
			arg isArray ifTrue:[
cg@2434
  2127
			    arg doWithIndex:[:el :index |
cg@2434
  2128
				index even ifTrue:[
cg@2434
  2129
				    el isString ifTrue:[
cg@2434
  2130
					resourceKeys add:el.
cg@2434
  2131
				    ]
cg@2434
  2132
				].
cg@2434
  2133
			    ].
cg@2434
  2134
			] ifFalse:[
cg@2434
  2135
			    Transcript
cg@2434
  2136
				showCR:(resources
cg@2434
  2137
					string:'Cannot derive resourceKey from non-array in %1 in %2'
cg@2434
  2138
					with:argNode formattedCode
cg@2434
  2139
					with:aMethod selector).
cg@2434
  2140
			].
cg@2434
  2141
		    ] ifFalse:[
cg@2434
  2142
			Transcript
cg@2434
  2143
			    showCR:(resources
cg@2434
  2144
					string:'Cannot derive resourceKey from non-literal: %1 in %2'
cg@2434
  2145
					with:argNode formattedCode
cg@2434
  2146
					with:aMethod selector).
cg@2434
  2147
		    ].
cg@2434
  2148
		].
cg@2434
  2149
		aNode
cg@2434
  2150
	    ].
cg@2015
  2151
cg@2015
  2152
    matcher executeTree: parseTree initialAnswer: nil.
cg@2015
  2153
    ^ resourceKeys
cg@2015
  2154
!
cg@2015
  2155
cg@2015
  2156
extractTranslationsFromMenuSpecMethod:aMethod
cg@2015
  2157
    |menu resourceKeys|
cg@2015
  2158
cg@2015
  2159
    menu := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2160
    menu isNil ifTrue:[ ^ #() ].
cg@2015
  2161
cg@2015
  2162
    (menu isKindOf:Menu) ifFalse:[
cg@2434
  2163
	menu := Menu new fromLiteralArrayEncoding:menu
cg@2015
  2164
    ].
cg@2015
  2165
cg@2015
  2166
    resourceKeys := Set new.
cg@2015
  2167
    menu allItemsDo:[:aMenuItem |
cg@2434
  2168
	aMenuItem translateLabel ifTrue:[
cg@2434
  2169
	    aMenuItem isSeparatorItem ifFalse:[
cg@2434
  2170
		resourceKeys add:aMenuItem label.
cg@2434
  2171
	    ]
cg@2434
  2172
	]
cg@2015
  2173
    ].
cg@2015
  2174
    ^ resourceKeys
cg@2015
  2175
!
cg@2015
  2176
cg@2015
  2177
extractTranslationsFromMethod:aMethod
cg@2015
  2178
    |mResources|
cg@2015
  2179
cg@2015
  2180
    mResources := aMethod resources.
cg@2015
  2181
    mResources notNil ifTrue:[
cg@2434
  2182
	(mResources includesKey:#menu) ifTrue:[
cg@2434
  2183
	     ^ self extractTranslationsFromMenuSpecMethod:aMethod.
cg@2434
  2184
	].
cg@2434
  2185
	(mResources includesKey:#canvas) ifTrue:[
cg@2434
  2186
	     ^ self extractTranslationsFromUISpecMethod:aMethod.
cg@2434
  2187
	].
cg@2434
  2188
	(mResources includesKey:#help) ifTrue:[
cg@2434
  2189
	     ^ self extractTranslationsFromHelpSpecMethod:aMethod.
cg@2434
  2190
	].
cg@2434
  2191
	(mResources includesKey:#tableColumns) ifTrue:[
cg@2434
  2192
	     ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod.
cg@2434
  2193
	].
cg@2434
  2194
cg@2434
  2195
	^ self extractTranslationsFromSpecMethod:aMethod.
cg@2015
  2196
    ].
cg@2015
  2197
    ^ self extractTranslationsFromMethodsCode:aMethod
cg@2015
  2198
!
cg@2015
  2199
cg@2015
  2200
extractTranslationsFromMethodsCode:aMethod
cg@2015
  2201
"/method:mthd selector:sel inClass:cls matchesParseTreeMatcher:aMatcher
cg@2015
  2202
    |codeStrings matcher parseTree resourceKeys|
cg@2015
  2203
cg@2434
  2204
    parseTree := RBParser
cg@2434
  2205
	    parseMethod:aMethod source
cg@2434
  2206
	    onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
cg@2434
  2207
				  nil].
cg@2015
  2208
    parseTree isNil ifTrue:[^ #() ].
cg@2015
  2209
cg@2434
  2210
    codeStrings  :=
cg@2434
  2211
	#(
cg@2434
  2212
		'resources `@msg: `@args'
cg@2434
  2213
		'self resources `@msg: `@args'
cg@2434
  2214
		'self class resources `@msg: `@args'
cg@2434
  2215
		'self classResources `@msg: `@args'
cg@2434
  2216
	).
cg@2015
  2217
cg@2015
  2218
    resourceKeys := Set new.
cg@2015
  2219
cg@2015
  2220
    matcher := ParseTreeSearcher new.
cg@2434
  2221
    matcher
cg@2434
  2222
	matchesAnyOf: codeStrings
cg@2434
  2223
	do: [:aNode :answer |
cg@2434
  2224
		|sel keyStringArgNode keyStringArg|
cg@2434
  2225
cg@2434
  2226
		sel := aNode selector.
cg@2434
  2227
		((sel startsWith:'string:') or:[(sel startsWith:'at:')]) ifTrue:[
cg@2434
  2228
		    keyStringArgNode := aNode arguments at:1.
cg@2434
  2229
		    keyStringArgNode isLiteral ifTrue:[
cg@2434
  2230
			keyStringArg := keyStringArgNode value.
cg@2434
  2231
			keyStringArg isString ifTrue:[
cg@2434
  2232
			    resourceKeys add:keyStringArg.
cg@2434
  2233
			] ifFalse:[
cg@2434
  2234
			    Transcript
cg@2434
  2235
				showCR:(resources
cg@2434
  2236
					string:'Cannot derive resourceKey from non-string: %1 in %2'
cg@2434
  2237
					with:keyStringArgNode formattedCode
cg@2434
  2238
					with:aMethod selector).
cg@2434
  2239
			].
cg@2434
  2240
		    ] ifFalse:[
cg@2434
  2241
			Transcript
cg@2434
  2242
			    showCR:(resources
cg@2434
  2243
					string:'Cannot derive resourceKey from non-literal: %1 in %2'
cg@2434
  2244
					with:keyStringArgNode formattedCode
cg@2434
  2245
					with:aMethod selector).
cg@2434
  2246
		    ].
cg@2434
  2247
		].
cg@2434
  2248
		aNode
cg@2434
  2249
	    ].
cg@2015
  2250
cg@2015
  2251
    matcher executeTree: parseTree initialAnswer: nil.
cg@2015
  2252
    ^ resourceKeys
cg@2015
  2253
!
cg@2015
  2254
cg@2015
  2255
extractTranslationsFromSpecMethod:aMethod
cg@2015
  2256
    ^ #()
cg@2015
  2257
!
cg@2015
  2258
cg@2015
  2259
extractTranslationsFromTableColumnsSpecMethod:aMethod
cg@2015
  2260
    |columnDescription resourceKeys|
cg@2015
  2261
cg@2015
  2262
    columnDescription := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2263
    columnDescription isNil ifTrue:[ ^ #() ].
cg@2015
  2264
cg@2015
  2265
    (columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[
cg@2434
  2266
	columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el].
cg@2015
  2267
    ].
cg@2015
  2268
cg@2015
  2269
    resourceKeys := Set new.
cg@2015
  2270
    columnDescription do:[:aColumnSpec |
cg@2434
  2271
	aColumnSpec translateLabel ifTrue:[
cg@2434
  2272
	    resourceKeys add:aColumnSpec label.
cg@2434
  2273
	]
cg@2015
  2274
    ].
cg@2015
  2275
    ^ resourceKeys
cg@2015
  2276
!
cg@2015
  2277
cg@2015
  2278
extractTranslationsFromUISpecMethod:aMethod
cg@2015
  2279
    |spec resourceKeys visitor|
cg@2015
  2280
cg@2015
  2281
    spec := aMethod mclass theNonMetaclass perform:aMethod selector.
cg@2015
  2282
    spec isNil ifTrue:[ ^ #() ].
cg@2015
  2283
cg@2015
  2284
    (spec isKindOf:UISpecification) ifFalse:[
cg@2434
  2285
	spec := UISpecification from:spec
cg@2015
  2286
    ].
cg@2015
  2287
cg@2015
  2288
    resourceKeys := Set new.
cg@2015
  2289
cg@2015
  2290
    visitor := UISpecVisitor new.
cg@2015
  2291
    spec acceptVisitor:visitor.
cg@2015
  2292
cg@2015
  2293
    ^ visitor translatedLabels
cg@2015
  2294
! !
cg@2015
  2295
cg@2015
  2296
!InternationalLanguageTranslationEditor methodsFor:'queries'!
cg@2015
  2297
cg@2434
  2298
autoAccept
fm@2050
  2299
fm@2050
  2300
    ^ self autoAcceptHolder value
fm@2050
  2301
!
fm@2050
  2302
cg@2434
  2303
currentExampleLanguageText
fm@2050
  2304
   "Returns the language text corresponding for the current selected key and the example language selection"
fm@2050
  2305
fm@2050
  2306
  ^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value
fm@2050
  2307
!
fm@2050
  2308
fm@2051
  2309
currentLanguage
fm@2051
  2310
fm@2163
  2311
    |colSelectionIndex |
fm@2051
  2312
fm@2051
  2313
    colSelectionIndex := dataSetView selectedColIndex.
fm@2051
  2314
    ^colSelectionIndex > 1 ifTrue:[ shownLanguages at:colSelectionIndex-1 ] ifFalse:nil.
fm@2051
  2315
!
fm@2051
  2316
fm@2050
  2317
exampleLanguageByDefault
fm@2050
  2318
fm@2163
  2319
    ^self shownLanguages isEmpty
cg@2434
  2320
	ifTrue:[nil]
cg@2434
  2321
	ifFalse:[self shownLanguages first]
fm@2050
  2322
!
fm@2050
  2323
fm@2051
  2324
hasFirstRowSelection
fm@2051
  2325
    self selectedKeyRow isNil ifTrue:[^false].
fm@2051
  2326
    ^ self selectedKeyRow value > 1
fm@2051
  2327
!
fm@2051
  2328
fm@2051
  2329
hasLanguageSelection
fm@2051
  2330
    dataSetView selectedColIndex isNil ifTrue:[^false].
fm@2051
  2331
    ^ dataSetView selectedColIndex > 1
fm@2051
  2332
!
fm@2051
  2333
cg@2015
  2334
hasUnsavedChanges
cg@2015
  2335
    ^ modified
fm@2050
  2336
!
fm@2050
  2337
fm@2163
  2338
includesKey: aKey
fm@2163
  2339
    keyStringsToLanguageMappings isNil ifTrue:[^false].
fm@2163
  2340
    ^keyStringsToLanguageMappings includesKey:aKey
fm@2163
  2341
!
fm@2163
  2342
fm@2051
  2343
isSearchForSimilarTranslationEnabled
fm@2051
  2344
fm@2163
  2345
    ^self searchForSimilarTranslationEnableHolder value
fm@2051
  2346
!
fm@2051
  2347
fm@2051
  2348
languageTextFromKey: aKeyIndex for: language
cg@2434
  2349
    "Returns the language text corresponding for the aKeyIndex and the received language"
fm@2051
  2350
fm@2051
  2351
    language isNil ifTrue:[^''].
cg@2434
  2352
    ^keyStringsToLanguageMappings at: aKeyIndex language:language.
fm@2051
  2353
!
fm@2051
  2354
fm@2050
  2355
languageTextFromSelectedKeyFor: language
cg@2434
  2356
    "Returns the language text corresponding for the current selected key and the received language"
cg@2434
  2357
cg@2434
  2358
    ^self languageTextFromKey: self selectedKey for: language
fm@2051
  2359
!
fm@2051
  2360
fm@2051
  2361
shouldCopyPreviousTranslationButtonBeEnabled
cg@2434
  2362
    ^ self hasLanguageSelection
cg@2434
  2363
	and:[self hasFirstRowSelection]
fm@2051
  2364
!
fm@2051
  2365
fm@2323
  2366
shouldPasteOriginalButtonBeEnabled
cg@2434
  2367
    ^ self hasLanguageSelection
cg@2434
  2368
	and:[self hasFirstRowSelection]
fm@2323
  2369
!
fm@2323
  2370
fm@2051
  2371
shouldSearchForSimilarTranslation
fm@2051
  2372
fm@2163
  2373
    self isSearchForSimilarTranslationEnabled ifFalse:[^false].
fm@2163
  2374
    (self languageTextHolder value notNil and:[self languageTextHolder value notEmpty]) ifTrue:[^false].
fm@2163
  2375
    (self hasLanguageSelection and:[self selectedKeyRow notNil]) ifFalse:[^false].
fm@2163
  2376
    ^true
fm@2050
  2377
! !
fm@2050
  2378
fm@2050
  2379
!InternationalLanguageTranslationEditor methodsFor:'read/write resourceFile'!
fm@2050
  2380
fm@2053
  2381
encoderAt: lang
fm@2053
  2382
fm@2163
  2383
    self alwaysWriteUTF8Holder value ifTrue:[^CharacterEncoder encoderForUTF8].
fm@2163
  2384
    ^keyStringsToLanguageMappings encoderAt: lang.
fm@2053
  2385
!
fm@2053
  2386
fm@2050
  2387
printEditingWarningOn: aStream
fm@2050
  2388
fm@2163
  2389
    aStream nextPutAll: ';';
cg@2434
  2390
	    cr;
cg@2434
  2391
	    nextPutAll: '; WARNING:';
cg@2434
  2392
	    cr;
cg@2434
  2393
	    nextPutAll: '; this file contains national characters';
cg@2434
  2394
	    cr;
cg@2434
  2395
	    nextPutAll: '; DONT EDIT this file with an old vi !!';
cg@2434
  2396
	    cr;
cg@2434
  2397
	    nextPutAll: ';';
cg@2434
  2398
	    cr;
cg@2434
  2399
	    cr.
fm@2050
  2400
!
fm@2050
  2401
fm@2050
  2402
printEncoderFor: lang on: aStream
fm@2163
  2403
    |characterEncoder encoderString|
fm@2050
  2404
fm@2163
  2405
    characterEncoder := self encoderAt: lang.
cg@2434
  2406
    encoderString := characterEncoder isNil
cg@2434
  2407
	ifTrue:[self requestEncoderStringFor: lang]
cg@2434
  2408
	ifFalse:[characterEncoder nameOfEncoding printString].
fm@2050
  2409
fm@2163
  2410
    aStream nextPutAll: '#encoding';
cg@2434
  2411
	    space;
cg@2434
  2412
	    nextPutAll: encoderString;
cg@2434
  2413
	    cr;
cg@2434
  2414
	    cr.
fm@2050
  2415
!
fm@2050
  2416
fm@2050
  2417
printLanguage: lang on: aStream
fm@2050
  2418
fm@2163
  2419
    self printEncoderFor: lang on: aStream.
fm@2163
  2420
    self printEditingWarningOn: aStream.
fm@2163
  2421
    self printLanguageMappingsFor: lang on: aStream.
fm@2050
  2422
!
fm@2050
  2423
fm@2050
  2424
printLanguageMappingsFor: lang on: aStream
fm@2050
  2425
cg@2434
  2426
    |orderedAssociations maxKeySize characterEncoder|
fm@2050
  2427
fm@2163
  2428
    characterEncoder := self encoderAt: lang.
fm@2163
  2429
    characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
cg@2434
  2430
    orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang.
cg@2434
  2431
cg@2434
  2432
    maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.
fm@2050
  2433
fm@2163
  2434
    orderedAssociations do:[:association |
cg@2434
  2435
	aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ;
cg@2434
  2436
	    nextPutAll: (String new: 10);
cg@2434
  2437
	    nextPutAll: (characterEncoder encodeString: association value) storeString;
cg@2434
  2438
	    cr.
cg@2434
  2439
	].
fm@2050
  2440
!
fm@2050
  2441
fm@2050
  2442
readResourceFile:aFilename asLanguage:lang
fm@2050
  2443
    |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
fm@2050
  2444
cg@2410
  2445
    aFilename exists ifFalse:[
cg@2434
  2446
	Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName).
cg@2434
  2447
	^ self
cg@2410
  2448
    ].
fm@2050
  2449
fm@2050
  2450
    resourcePack := ResourcePack new.
fm@2050
  2451
fm@2050
  2452
    inStream := aFilename readStream.
fm@2050
  2453
    [inStream atEnd] whileFalse:[
cg@2434
  2454
	lineString := inStream nextLine.
cg@2434
  2455
	(lineString notEmpty
cg@2434
  2456
	and:[ (lineString startsWith:';') not ]) ifTrue:[
cg@2434
  2457
	    ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
cg@2434
  2458
		lineString := (lineString copyFrom:2) withoutSeparators.
cg@2434
  2459
		(lineString startsWith:'encoding ') ifTrue:[
cg@2434
  2460
		    encoding := ResourcePack extractEncodingFromLine:lineString.
cg@2434
  2461
		    decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
cg@2434
  2462
		].
cg@2434
  2463
	    ] ifFalse:[
cg@2434
  2464
		ResourcePack
cg@2434
  2465
		    processResourceLine:lineString
cg@2434
  2466
		    encoding:decoder
cg@2434
  2467
		    file:aFilename pathName
cg@2434
  2468
		    printErrorWith:[:msg | Transcript showCR:msg ]
cg@2434
  2469
		    for:resourcePack
cg@2434
  2470
		    keepUselessTranslations:true.
cg@2434
  2471
	    ].
cg@2434
  2472
	].
fm@2050
  2473
    ].
cg@2434
  2474
    inStream close.
fm@2050
  2475
fm@2050
  2476
    sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
fm@2050
  2477
    remainingKeys := resourcePack keys select:[:k | k isString not].
fm@2050
  2478
fm@2050
  2479
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
cg@2410
  2480
    keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder.
fm@2050
  2481
fm@2050
  2482
    sortedKeys do:[:k |
cg@2434
  2483
	keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
fm@2050
  2484
    ].
fm@2050
  2485
    remainingKeys do:[:k |
cg@2434
  2486
	keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
fm@2050
  2487
    ].
cg@2410
  2488
    keyStringsToLanguageMappings changed.
fm@2050
  2489
!
fm@2050
  2490
fm@2053
  2491
saveLanguage: lang
fm@2053
  2492
"Saves the language in the fileName from where the language resource was obtained."
fm@2053
  2493
    |aFilename|
fm@2053
  2494
fm@2053
  2495
    lang isNil ifTrue:[^ self].
fm@2053
  2496
    aFilename := keyStringsToLanguageMappings filenameAt:lang.
fm@2053
  2497
    aFilename isNil ifTrue:[
cg@2434
  2498
	aFilename := self requestFilenameFor: lang.
cg@2434
  2499
	aFilename isNil ifTrue:[^ self].
fm@2053
  2500
    ].
fm@2053
  2501
    self saveResourceFile:aFilename for:lang asSymbol
fm@2053
  2502
!
fm@2053
  2503
fm@2050
  2504
saveResourceFile: aFilename for: lang
fm@2050
  2505
fm@2163
  2506
    |aStream |
fm@2050
  2507
fm@2163
  2508
    keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
cg@2434
  2509
    aStream := FileStream newFileNamed: aFilename.
fm@2163
  2510
    self printLanguage: lang on: aStream.
fm@2163
  2511
    aStream flush;
cg@2434
  2512
	    close.
fm@2163
  2513
    DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
cg@2015
  2514
! !
cg@2015
  2515
fm@2327
  2516
!InternationalLanguageTranslationEditor methodsFor:'searching'!
fm@2327
  2517
fm@2327
  2518
ignoreCaseHolderChanged
fm@2327
  2519
fm@2327
  2520
    self searchNextTextIncludingCurrentSelection: true.
fm@2327
  2521
fm@2327
  2522
    "Created: / 16-06-2007 / 09:33:33 / Administrador"
fm@2327
  2523
!
fm@2327
  2524
fm@2327
  2525
searchNextText
fm@2327
  2526
fm@2327
  2527
    self searchNextTextIncludingCurrentSelection: false.
fm@2327
  2528
fm@2327
  2529
    "Modified: / 16-06-2007 / 09:21:14 / Administrador"
fm@2327
  2530
!
fm@2327
  2531
fm@2327
  2532
searchNextTextFromBeginning
fm@2327
  2533
    |searchText rowFoundIndex|
fm@2327
  2534
fm@2327
  2535
    searchText := searchTextView contents.
fm@2327
  2536
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2537
    self objectsList isEmpty ifTrue:[^self].
cg@2434
  2538
    rowFoundIndex := self tableView findFirstRowWithString: searchText
cg@2434
  2539
		from:1
cg@2434
  2540
		to:self objectsList size
cg@2434
  2541
		ignoreCase:self ignoreCaseHolder value.
fm@2327
  2542
    rowFoundIndex isNil ifTrue:[
cg@2434
  2543
	self searchTextNotFound.
cg@2434
  2544
	^self
fm@2327
  2545
    ].
fm@2327
  2546
    self selectListIndex: rowFoundIndex
fm@2327
  2547
fm@2327
  2548
    "Created: / 16-06-2007 / 10:54:51 / Administrador"
fm@2327
  2549
    "Modified: / 19-06-2007 / 15:38:59 / Administrador"
fm@2327
  2550
!
fm@2327
  2551
fm@2327
  2552
searchNextTextIncludingCurrentSelection: includeCurrentSelection
fm@2327
  2553
    |searchText currentSelectionIndex rowFoundIndex fromIndex listSize|
fm@2327
  2554
fm@2327
  2555
    self searchTextStarted.
fm@2327
  2556
    searchText := searchTextView contents.
fm@2327
  2557
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2558
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2559
    currentSelectionIndex := self currentSelectionIndex.
fm@2327
  2560
    (currentSelectionIndex isNil or:[currentSelectionIndex == 0]) ifTrue:[
cg@2434
  2561
	self searchNextTextFromBeginning.
cg@2434
  2562
	^self.
fm@2327
  2563
    ].
fm@2327
  2564
    listSize := self objectsList size.
fm@2327
  2565
    (currentSelectionIndex == listSize and:[includeCurrentSelection not]) ifTrue:[
cg@2434
  2566
	self searchNextTextReachEnd.
cg@2434
  2567
	^self.
fm@2327
  2568
    ].
fm@2327
  2569
    fromIndex := includeCurrentSelection
cg@2434
  2570
	ifTrue:[currentSelectionIndex]
cg@2434
  2571
	ifFalse:[currentSelectionIndex + 1].
cg@2434
  2572
    rowFoundIndex := self tableView findFirstRowWithString: searchText
cg@2434
  2573
		from:fromIndex
cg@2434
  2574
		to:listSize
cg@2434
  2575
		ignoreCase:self ignoreCaseHolder value.
fm@2327
  2576
    rowFoundIndex isNil ifTrue:[
cg@2434
  2577
	self searchNextTextReachEnd.
cg@2434
  2578
	^self
fm@2327
  2579
    ].
fm@2327
  2580
    self selectListIndex: rowFoundIndex
fm@2327
  2581
fm@2327
  2582
    "Created: / 16-06-2007 / 09:20:57 / Administrador"
fm@2327
  2583
    "Modified: / 19-06-2007 / 15:38:06 / Administrador"
fm@2327
  2584
!
fm@2327
  2585
fm@2327
  2586
searchNextTextReachEnd
fm@2327
  2587
    |message|
fm@2327
  2588
    message := 'End of list reached, starting from the beginning'.
fm@2327
  2589
    self searchTextRestarted: message.
fm@2330
  2590
    Smalltalk beep.
fm@2327
  2591
    self searchNextTextFromBeginning.
fm@2327
  2592
fm@2327
  2593
    "Created: / 16-06-2007 / 11:00:59 / Administrador"
fm@2327
  2594
!
fm@2327
  2595
fm@2327
  2596
searchPreviousText
fm@2327
  2597
fm@2327
  2598
    |searchText currentSelectionIndex rowFoundIndex fromIndex|
fm@2327
  2599
fm@2327
  2600
    self searchTextStarted.
fm@2327
  2601
    searchText := searchTextView contents.
fm@2327
  2602
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2603
    self objectsList isEmpty ifTrue:[^self].
fm@2327
  2604
    currentSelectionIndex := self currentSelectionIndex.
fm@2327
  2605
    currentSelectionIndex == 1 ifTrue:[
cg@2434
  2606
	self searchPreviousTextReachBeginning.
cg@2434
  2607
	^self.
fm@2327
  2608
    ].
fm@2327
  2609
    (currentSelectionIndex isNil or:[currentSelectionIndex == 0])
cg@2434
  2610
	ifTrue:[
cg@2434
  2611
	    self searchPreviousTextFromEnd.
cg@2434
  2612
	    ^self.
cg@2434
  2613
	]
cg@2434
  2614
	ifFalse:[fromIndex := currentSelectionIndex - 1].
cg@2434
  2615
    rowFoundIndex := self tableView findFirstRowWithString: searchText
cg@2434
  2616
		from: fromIndex
cg@2434
  2617
		to: 1
cg@2434
  2618
		by: -1
cg@2434
  2619
		ignoreCase:self ignoreCaseHolder value.
fm@2327
  2620
    rowFoundIndex isNil ifTrue:[
cg@2434
  2621
	self searchPreviousTextReachBeginning.
cg@2434
  2622
	^self
fm@2327
  2623
    ].
fm@2327
  2624
    self selectListIndex: rowFoundIndex.
fm@2327
  2625
fm@2327
  2626
    "Modified: / 19-06-2007 / 15:38:16 / Administrador"
fm@2327
  2627
!
fm@2327
  2628
fm@2327
  2629
searchPreviousTextFromEnd
fm@2327
  2630
fm@2327
  2631
    |searchText rowFoundIndex|
fm@2327
  2632
fm@2327
  2633
    searchText := searchTextView contents.
fm@2327
  2634
    searchText isEmptyOrNil ifTrue:[^self].
fm@2327
  2635
    self objectsList isEmpty ifTrue:[^self].
cg@2434
  2636
    rowFoundIndex := self tableView findFirstRowWithString: searchText
cg@2434
  2637
		from: self objectsList size
cg@2434
  2638
		to: 1
cg@2434
  2639
		by: -1