Tools__InternationalLanguageTranslationEditor.st
changeset 2434 6ad1f853d2e9
parent 2433 88fbe1703c31
child 2570 4e663bc64364
equal deleted inserted replaced
2433:88fbe1703c31 2434:6ad1f853d2e9
    61 documentation
    61 documentation
    62 "
    62 "
    63     documentation to be added.
    63     documentation to be added.
    64 
    64 
    65     [author:]
    65     [author:]
    66         cg (cg@FUSI)
    66 	cg (cg@FUSI)
    67 
    67 
    68     [instance variables:]
    68     [instance variables:]
    69 
    69 
    70     [class variables:]
    70     [class variables:]
    71 
    71 
    75 !
    75 !
    76 
    76 
    77 examples
    77 examples
    78 "
    78 "
    79   Starting the application:
    79   Starting the application:
    80                                                                 [exBegin]
    80 								[exBegin]
    81     InternationalLanguageTranslationEditor open
    81     InternationalLanguageTranslationEditor open
    82 
    82 
    83                                                                 [exEnd]
    83 								[exEnd]
    84 
    84 
    85   more examples to be added:
    85   more examples to be added:
    86                                                                 [exBegin]
    86 								[exBegin]
    87     ... add code fragment for 
    87     ... add code fragment for
    88     ... executable example here ...
    88     ... executable example here ...
    89                                                                 [exEnd]
    89 								[exEnd]
    90 "
    90 "
    91 !
    91 !
    92 
    92 
    93 history
    93 history
    94     "Created: / 04-03-2006 / 09:07:19 / cg"
    94     "Created: / 04-03-2006 / 09:07:19 / cg"
   110     "
   110     "
   111 
   111 
   112     <resource: #image>
   112     <resource: #image>
   113 
   113 
   114     ^Icon
   114     ^Icon
   115         constantNamed:#'Psiware::SystemManagement class closeSearchBar'
   115 	constantNamed:#'Psiware::SystemManagement class closeSearchBar'
   116         ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   116 	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   117 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GQ\SD1LSD1LSD1LSD1LWGP@@@@@@
   117 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@GQ\SD1LSD1LSD1LSD1LWGP@@@@@@
   118 @ATGA@HA@PDA@PDA@PHDA1T@@@@@@@@TAENG!!(VB XA?_''57QPPT@@@@@@@@E NJ^V)&X%)UTT5IV7 KE @@@@@@@A A"7Q,#&9VS%^MQ$E<DQ @@@@@@@@Z
   118 @ATGA@HA@PDA@PDA@PHDA1T@@@@@@@@TAENG!!(VB XA?_''57QPPT@@@@@@@@E NJ^V)&X%)UTT5IV7 KE @@@@@@@A A"7Q,#&9VS%^MQ$E<DQ @@@@@@@@Z
   119 @X%-#9NRX52R$80:^1@Z@@@@@@@@F0FHY6>R$9JR$9ION''(PF0@@@@@@@A<A 5ABT)FS$9D=KR13C1<@@@@@@@@)@WUCND*Q$9NQM"T!!XP8)@@@@@@@@K E2
   119 @X%-#9NRX52R$80:^1@Z@@@@@@@@F0FHY6>R$9JR$9ION''(PF0@@@@@@@A<A 5ABT)FS$9D=KR13C1<@@@@@@@@)@WUCND*Q$9NQM"T!!XP8)@@@@@@@@K E2
   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%(
   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%(
   121 YVQ W59]VU 4CD @@@@@@@AGFP4F@PDA@PDA@PDFCQ%G@@@@@@@@K41TUEQTUEQTUEQTUEQLK0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   121 YVQ W59]VU 4CD @@@@@@@AGFP4F@PDA@PDA@PDFCQ%G@@@@@@@@K41TUEQTUEQTUEQTUEQLK0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   138     "
   138     "
   139 
   139 
   140     <resource: #image>
   140     <resource: #image>
   141 
   141 
   142     ^Icon
   142     ^Icon
   143         constantNamed:#'Psiware::SystemManagement class restartSearchBarIcon'
   143 	constantNamed:#'Psiware::SystemManagement class restartSearchBarIcon'
   144         ifAbsentPut:[(Depth24Image new) width: 20; height: 20; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
   144 	ifAbsentPut:[(Depth24Image new) width: 20; height: 20; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
   145 @@@@@@@@@@@@@@@@@@@@@@@@?>SX?>''V?>;)?>O!!?>G]?>WY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=3\:[>''5;JF/Y-.+XY),(U.
   145 @@@@@@@@@@@@@@@@@@@@@@@@?>SX?>''V?>;)?>O!!?>G]?>WY@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?=3\:[>''5;JF/Y-.+XY),(U.
   146 6JZK?=J1?>V<>.+I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>?'':+:!!19]U6*-Q?]Y/?>RC?>*!!?>F_>+=939UL2Y!!L>MJT??W[@@@@@@@@@@@@@@@@@@@@
   146 6JZK?=J1?>V<>.+I@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>?'':+:!!19]U6*-Q?]Y/?>RC?>*!!?>F_>+=939UL2Y!!L>MJT??W[@@@@@@@@@@@@@@@@@@@@
   147 @@@@??[-=\^&1IEP=<Q[?>1/?=5$?=52?>NT?=^Q?>BP?>FG>;1]6JEO8;^H?]3I@@@@@@@@@@@@@@@@@@@@?\*95Y-)<+!!$??.F?>)17+-U8,E40Y-.09I)
   147 @@@@??[-=\^&1IEP=<Q[?>1/?=5$?=52?>NT?=^Q?>BP?>FG>;1]6JEO8;^H?]3I@@@@@@@@@@@@@@@@@@@@?\*95Y-)<+!!$??.F?>)17+-U8,E40Y-.09I)
   148 :Z1-?=I??=)8?<1.>K597;NL??K,@@@@@@@@@@@@?=#M6I>B>+:@?>2U=,]]5[IN7,^C5LB[<MWL?]#O=,BZ7)=\>;Y[??FP?=>O1YEW8<B$;=WH@@@@@@@@
   148 :Z1-?=I??=)8?<1.>K597;NL??K,@@@@@@@@@@@@?=#M6I>B>+:@?>2U=,]]5[IN7,^C5LB[<MWL?]#O=,BZ7)=\>;Y[??FP?=>O1YEW8<B$;=WH@@@@@@@@
   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?=?/?
   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?=?/?
   172     "
   172     "
   173 
   173 
   174     <resource: #image>
   174     <resource: #image>
   175 
   175 
   176     ^Icon
   176     ^Icon
   177         constantNamed:#'Psiware::SystemManagement class searchNextIcon'
   177 	constantNamed:#'Psiware::SystemManagement class searchNextIcon'
   178         ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   178 	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   179 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@
   179 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@
   180 @@@@@@AFF XA@PXUQ @@@@@@@@@@@@@@@@@*@Q5G^WX6E0D*@@@@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@A[@U==\F-"VUQOUSLAV0@@@@@@@@@@
   180 @@@@@@AFF XA@PXUQ @@@@@@@@@@@@@@@@@*@Q5G^WX6E0D*@@@@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@A[@U==\F-"VUQOUSLAV0@@@@@@@@@@
   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
   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
   182 ]F$<II&YH3H>N2 H# @@@@@@@@@''GG)*Y2$9NRIDO4DQHP@@@@@@@@@@!!@EP[6U]I"UIQTL.@XP@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@@@@EDA
   182 ]F$<II&YH3H>N2 H# @@@@@@@@@''GG)*Y2$9NRIDO4DQHP@@@@@@@@@@!!@EP[6U]I"UIQTL.@XP@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@@@@EDA
   183 FSQ!!VC@T@UD@@@@@@@@@@@@@@@@@#R,I@PDIJ84@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   183 FSQ!!VC@T@UD@@@@@@@@@@@@@@@@@#R,I@PDIJ84@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   198     "
   198     "
   199 
   199 
   200     <resource: #image>
   200     <resource: #image>
   201 
   201 
   202     ^Icon
   202     ^Icon
   203         constantNamed:#'Psiware::SystemManagement class searchPreviousIcon'
   203 	constantNamed:#'Psiware::SystemManagement class searchPreviousIcon'
   204         ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   204 	ifAbsentPut:[(Depth8Image new) width: 22; height: 22; photometric:(#palette); bitsPerSample:(#[8]); samplesPerPixel:(1); bits:(ByteArray fromPackedString:'
   205 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@
   205 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%)^W% @@@@@@@@@@@@@@
   206 @@@@@@BMJ0$A@P$+#P@@@@@@@@@@@@@@@@AQ@Q$4XU 0E@EQ@@@@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@BD@UA/YU4&IT%EP28A!!@@@@@@@@@@@
   206 @@@@@@BMJ0$A@P$+#P@@@@@@@@@@@@@@@@AQ@Q$4XU 0E@EQ@@@@@@@@@@@@@@ALAD-.XE]VS$(/@$0@@@@@@@@@@@BD@UA/YU4&IT%EP28A!!@@@@@@@@@@@
   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
   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
   208 T5JY&Y&Y&Y%RLR4G  @@@@@@@@@_G&4RC08MC@,JDC\SG0@@@@@@@@@@V0E__WA+X%%TS5T3@U,@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@@@@B(A
   208 T5JY&Y&Y&Y%RLR4G  @@@@@@@@@_G&4RC08MC@,JDC\SG0@@@@@@@@@@V0E__WA+X%%TS5T3@U,@@@@@@@@@@@@,AVQ?\&1#W&X8@20@@@@@@@@@@@@@@B(A
   209 GT]9]#XW@R(@@@@@@@@@@@@@@@@@Q!!(F@PDFETX@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   209 GT]9]#XW@R(@@@@@@@@@@@@@@@@@Q!!(F@PDFETX@@@@@@@@@@@@@@@@@@@@@ZE)ZZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   224     "
   224     "
   225 
   225 
   226     <resource: #image>
   226     <resource: #image>
   227 
   227 
   228     ^Icon
   228     ^Icon
   229         constantNamed:#'Psiware::SystemManagement class searchToolBarIcon'
   229 	constantNamed:#'Psiware::SystemManagement class searchToolBarIcon'
   230         ifAbsentPut:[(Depth24Image new) width: 22; height: 22; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
   230 	ifAbsentPut:[(Depth24Image new) width: 22; height: 22; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
   231 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   231 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   232 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   232 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   233 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   233 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>4][>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   234 @@@@@@@@@@@@@@@@@@@@@@@@@@@@;>#8/L#+!!:KS!!:KS/,'',;>''9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2];>^)WH
   234 @@@@@@@@@@@@@@@@@@@@@@@@@@@@;>#8/L#+!!:KS!!:KS/,'',;>''9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2];>^)WH
   235 NE:+KU*:J5&9NE6*_I#K4^S>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>RV3DLER"SWR6$K#0#;[.SGJ4L5"''UG_N4][>@@@@
   235 NE:+KU*:J5&9NE6*_I#K4^S>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@4][>RV3DLER"SWR6$K#0#;[.SGJ4L5"''UG_N4][>@@@@
   261     "
   261     "
   262 
   262 
   263     <resource: #image>
   263     <resource: #image>
   264 
   264 
   265     ^Icon
   265     ^Icon
   266         constantNamed:#'Psiware::SystemManagement class warningSearchBarIcon'
   266 	constantNamed:#'Psiware::SystemManagement class warningSearchBarIcon'
   267         ifAbsentPut:[(Depth24Image new) width: 22; height: 19; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
   267 	ifAbsentPut:[(Depth24Image new) width: 22; height: 19; photometric:(#rgb); bitsPerSample:(#[8 8 8]); samplesPerPixel:(3); bits:(ByteArray fromPackedString:'
   268 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?:.+<Y"P??C\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>_;?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   268 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?:.+<Y"P??C\@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>_;?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   269 @@@@?]SZ)5]X.6!! -HM2??''*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>39-7*B4H&G>[N+%%MJ>\#A@@@@@@@@
   269 @@@@?]SZ)5]X.6!! -HM2??''*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?>39-7*B4H&G>[N+%%MJ>\#A@@@@@@@@
   270 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<+R?*U1&?=CN?>W^4HJ@+FY$?>+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   270 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<+R?*U1&?=CN?>W^4HJ@+FY$?>+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   271 @@@@@@@@@@@@@@@@@@@@?>G_)U!!^>Z^->,B><+"4?*^-%C8?;;Z+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@??#1-(E;.65+?<#H
   271 @@@@@@@@@@@@@@@@@@@@?>G_)U!!^>Z^->,B><+"4?*^-%C8?;;Z+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@??#1-(E;.65+?<#H
   272 ?=_T?=GP?::65W-=(EQF?>WQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?\#D*VAY?;61<;"0;,C@6J^+;*"0>ZN$&CX)6(-:@@@@@@@@
   272 ?=_T?=GP?::65W-=(EQF?>WQ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@?\#D*VAY?;61<;"0;,C@6J^+;*"0>ZN$&CX)6(-:@@@@@@@@
   296      Tools::InternationalLanguageTranslationEditor open
   296      Tools::InternationalLanguageTranslationEditor open
   297     "
   297     "
   298 
   298 
   299     <resource: #canvas>
   299     <resource: #canvas>
   300 
   300 
   301     ^ 
   301     ^
   302      #(FullSpec
   302      #(FullSpec
   303         name: windowSpec
   303 	name: windowSpec
   304         window: 
   304 	window:
   305        (WindowSpec
   305        (WindowSpec
   306           label: 'InternationalLanguageTranslationEditor'
   306 	  label: 'InternationalLanguageTranslationEditor'
   307           name: 'InternationalLanguageTranslationEditor'
   307 	  name: 'InternationalLanguageTranslationEditor'
   308           min: (Point 10 10)
   308 	  min: (Point 10 10)
   309           bounds: (Rectangle 0 0 774 610)
   309 	  bounds: (Rectangle 0 0 774 610)
   310           menu: mainMenu
   310 	  menu: mainMenu
   311         )
   311 	)
   312         component: 
   312 	component:
   313        (SpecCollection
   313        (SpecCollection
   314           collection: (
   314 	  collection: (
   315            (MenuPanelSpec
   315 	   (MenuPanelSpec
   316               name: 'ToolBar'
   316 	      name: 'ToolBar'
   317               layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   317 	      layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   318               menu: menuToolBar
   318 	      menu: menuToolBar
   319               textDefault: true
   319 	      textDefault: true
   320             )
   320 	    )
   321            (VariableVerticalPanelSpec
   321 	   (VariableVerticalPanelSpec
   322               name: 'TranslationsVariableVerticalPanel'
   322 	      name: 'TranslationsVariableVerticalPanel'
   323               layout: (LayoutFrame 0 0 30 0 0 1 -32 1)
   323 	      layout: (LayoutFrame 0 0 30 0 0 1 -32 1)
   324               component: 
   324 	      component:
   325              (SpecCollection
   325 	     (SpecCollection
   326                 collection: (
   326 		collection: (
   327                  (DataSetSpec
   327 		 (DataSetSpec
   328                     name: 'KeyStringAndLanguageSelectionTable'
   328 		    name: 'KeyStringAndLanguageSelectionTable'
   329                     model: selectedKeyRow
   329 		    model: selectedKeyRow
   330                     menu: keyStringAndLanguageSelectionTableMenu
   330 		    menu: keyStringAndLanguageSelectionTableMenu
   331                     hasHorizontalScrollBar: true
   331 		    hasHorizontalScrollBar: true
   332                     hasVerticalScrollBar: true
   332 		    hasVerticalScrollBar: true
   333                     dataList: keyStringAndLanguageSelectionTable
   333 		    dataList: keyStringAndLanguageSelectionTable
   334                     columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
   334 		    columnHolder: keyStringAndLanguageSelectionTableColumnDescriptionHolder
   335                     beDependentOfRows: true
   335 		    beDependentOfRows: true
   336                     columnAdaptor: yourself
   336 		    columnAdaptor: yourself
   337                     postBuildCallback: postBuildDataSet:
   337 		    postBuildCallback: postBuildDataSet:
   338                   )
   338 		  )
   339                  (VariableVerticalPanelSpec
   339 		 (VariableVerticalPanelSpec
   340                     name: 'VariableVerticalPanel1'
   340 		    name: 'VariableVerticalPanel1'
   341                     component: 
   341 		    component:
   342                    (SpecCollection
   342 		   (SpecCollection
   343                       collection: (
   343 		      collection: (
   344                        (ViewSpec
   344 		       (ViewSpec
   345                           name: 'Box1'
   345 			  name: 'Box1'
   346                           component: 
   346 			  component:
   347                          (SpecCollection
   347 			 (SpecCollection
   348                             collection: (
   348 			    collection: (
   349                              (LabelSpec
   349 			     (LabelSpec
   350                                 label: 'Original String (Key):'
   350 				label: 'Original String (Key):'
   351                                 name: 'Label2'
   351 				name: 'Label2'
   352                                 layout: (LayoutFrame 0 0 -2 0 0 1 28 0)
   352 				layout: (LayoutFrame 0 0 -2 0 0 1 28 0)
   353                                 translateLabel: true
   353 				translateLabel: true
   354                                 adjust: left
   354 				adjust: left
   355                               )
   355 			      )
   356                              (TextEditorSpec
   356 			     (TextEditorSpec
   357                                 name: 'OriginalText'
   357 				name: 'OriginalText'
   358                                 layout: (LayoutFrame 0 0 27 0 0 1 -2 1)
   358 				layout: (LayoutFrame 0 0 27 0 0 1 -2 1)
   359                                 model: originalTextHolder
   359 				model: originalTextHolder
   360                                 hasHorizontalScrollBar: true
   360 				hasHorizontalScrollBar: true
   361                                 hasVerticalScrollBar: true
   361 				hasVerticalScrollBar: true
   362                                 modifiedChannel: originalTextModifiedHolder
   362 				modifiedChannel: originalTextModifiedHolder
   363                                 acceptCallBack: languageTextAccepted
   363 				acceptCallBack: languageTextAccepted
   364                               )
   364 			      )
   365                              )
   365 			     )
   366                            
   366 
   367                           )
   367 			  )
   368                         )
   368 			)
   369                        (ViewSpec
   369 		       (ViewSpec
   370                           name: 'Box3'
   370 			  name: 'Box3'
   371                           component: 
   371 			  component:
   372                          (SpecCollection
   372 			 (SpecCollection
   373                             collection: (
   373 			    collection: (
   374                              (LabelSpec
   374 			     (LabelSpec
   375                                 label: 'Select Another Language as example:'
   375 				label: 'Select Another Language as example:'
   376                                 name: 'Label3'
   376 				name: 'Label3'
   377                                 layout: (LayoutFrame 0 0 -6 0 0 1 24 0)
   377 				layout: (LayoutFrame 0 0 -6 0 0 1 24 0)
   378                                 translateLabel: true
   378 				translateLabel: true
   379                                 adjust: left
   379 				adjust: left
   380                               )
   380 			      )
   381                              (ComboBoxSpec
   381 			     (ComboBoxSpec
   382                                 name: 'ComboBox1'
   382 				name: 'ComboBox1'
   383                                 layout: (LayoutFrame 197 0 -2 0 322 0 18 0)
   383 				layout: (LayoutFrame 197 0 -2 0 322 0 18 0)
   384                                 model: exampleLanguageSelectionHolder
   384 				model: exampleLanguageSelectionHolder
   385                                 immediateAccept: false
   385 				immediateAccept: false
   386                                 acceptOnLeave: true
   386 				acceptOnLeave: true
   387                                 acceptOnLostFocus: true
   387 				acceptOnLostFocus: true
   388                                 acceptOnPointerLeave: false
   388 				acceptOnPointerLeave: false
   389                                 comboList: shownLanguages
   389 				comboList: shownLanguages
   390                                 useIndex: false
   390 				useIndex: false
   391                               )
   391 			      )
   392                              (TextEditorSpec
   392 			     (TextEditorSpec
   393                                 name: 'ExampleLanguageText'
   393 				name: 'ExampleLanguageText'
   394                                 layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   394 				layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   395                                 model: exampleLanguageTextHolder
   395 				model: exampleLanguageTextHolder
   396                                 hasHorizontalScrollBar: true
   396 				hasHorizontalScrollBar: true
   397                                 hasVerticalScrollBar: true
   397 				hasVerticalScrollBar: true
   398                                 isReadOnly: true
   398 				isReadOnly: true
   399                               )
   399 			      )
   400                              )
   400 			     )
   401                            
   401 
   402                           )
   402 			  )
   403                         )
   403 			)
   404                        (ViewSpec
   404 		       (ViewSpec
   405                           name: 'Box2'
   405 			  name: 'Box2'
   406                           component: 
   406 			  component:
   407                          (SpecCollection
   407 			 (SpecCollection
   408                             collection: (
   408 			    collection: (
   409                              (LabelSpec
   409 			     (LabelSpec
   410                                 label: 'Translated String:'
   410 				label: 'Translated String:'
   411                                 name: 'Label1'
   411 				name: 'Label1'
   412                                 layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   412 				layout: (LayoutFrame 0 0 0 0 0 1 30 0)
   413                                 translateLabel: true
   413 				translateLabel: true
   414                                 adjust: left
   414 				adjust: left
   415                               )
   415 			      )
   416                              (TextEditorSpec
   416 			     (TextEditorSpec
   417                                 name: 'LanguageText'
   417 				name: 'LanguageText'
   418                                 layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   418 				layout: (LayoutFrame 0 0 30 0 0 1 0 1)
   419                                 model: languageTextHolder
   419 				model: languageTextHolder
   420                                 hasHorizontalScrollBar: true
   420 				hasHorizontalScrollBar: true
   421                                 hasVerticalScrollBar: true
   421 				hasVerticalScrollBar: true
   422                                 acceptChannel: languageTextAcceptHolder
   422 				acceptChannel: languageTextAcceptHolder
   423                                 modifiedChannel: languageTextModifiedHolder
   423 				modifiedChannel: languageTextModifiedHolder
   424                                 acceptCallBack: languageTextAccepted
   424 				acceptCallBack: languageTextAccepted
   425                                 postBuildCallback: languageEditorBuilt:
   425 				postBuildCallback: languageEditorBuilt:
   426                               )
   426 			      )
   427                              (ActionButtonSpec
   427 			     (ActionButtonSpec
   428                                 label: 'Paste Previous'
   428 				label: 'Paste Previous'
   429                                 name: 'pastePreviousTranslation'
   429 				name: 'pastePreviousTranslation'
   430                                 layout: (LayoutOrigin 0 0.83085250338295 0 0.03448275862069)
   430 				layout: (LayoutOrigin 0 0.83085250338295 0 0.03448275862069)
   431                                 translateLabel: true
   431 				translateLabel: true
   432                                 model: pastePreviousTranslationInLanguageText
   432 				model: pastePreviousTranslationInLanguageText
   433                                 enableChannel: pastePreviousTranslationEnableHolder
   433 				enableChannel: pastePreviousTranslationEnableHolder
   434                                 disabledLogo: 'Paste Previous'
   434 				disabledLogo: 'Paste Previous'
   435                               )
   435 			      )
   436                              (ActionButtonSpec
   436 			     (ActionButtonSpec
   437                                 label: 'Paste Original'
   437 				label: 'Paste Original'
   438                                 name: 'Button1'
   438 				name: 'Button1'
   439                                 layout: (LayoutOrigin -95 0.83085250338295 0 0.03448275862069)
   439 				layout: (LayoutOrigin -95 0.83085250338295 0 0.03448275862069)
   440                                 translateLabel: true
   440 				translateLabel: true
   441                                 model: pasteOriginalInLanguageText
   441 				model: pasteOriginalInLanguageText
   442                                 enableChannel: pasteOriginalEnableHolder
   442 				enableChannel: pasteOriginalEnableHolder
   443                                 disabledLogo: 'Paste Original'
   443 				disabledLogo: 'Paste Original'
   444                               )
   444 			      )
   445                              )
   445 			     )
   446                            
   446 
   447                           )
   447 			  )
   448                         )
   448 			)
   449                        )
   449 		       )
   450                      
   450 
   451                     )
   451 		    )
   452                     handles: (Any 0.33333333333333 0.66666666666667 1.0)
   452 		    handles: (Any 0.33333333333333 0.66666666666667 1.0)
   453                   )
   453 		  )
   454                  )
   454 		 )
   455                
   455 
   456               )
   456 	      )
   457               handles: (Any 0.5 1.0)
   457 	      handles: (Any 0.5 1.0)
   458               postBuildCallback: postBuildTranslationsPanel:
   458 	      postBuildCallback: postBuildTranslationsPanel:
   459             )
   459 	    )
   460            (ViewSpec
   460 	   (ViewSpec
   461               name: 'SearchBox'
   461 	      name: 'SearchBox'
   462               layout: (LayoutFrame 0 0 -32 1 0 1 0 1)
   462 	      layout: (LayoutFrame 0 0 -32 1 0 1 0 1)
   463               level: -1
   463 	      level: -1
   464               visibilityChannel: searchBoxVisible
   464 	      visibilityChannel: searchBoxVisible
   465               component: 
   465 	      component:
   466              (SpecCollection
   466 	     (SpecCollection
   467                 collection: (
   467 		collection: (
   468                  (ActionButtonSpec
   468 		 (ActionButtonSpec
   469                     label: 'closeSearchBarIcon'
   469 		    label: 'closeSearchBarIcon'
   470                     name: 'closeSearchBarButton'
   470 		    name: 'closeSearchBarButton'
   471                     layout: (LayoutFrame 4 0 5 0 25 0 26 0)
   471 		    layout: (LayoutFrame 4 0 5 0 25 0 26 0)
   472                     hasCharacterOrientedLabel: false
   472 		    hasCharacterOrientedLabel: false
   473                     translateLabel: true
   473 		    translateLabel: true
   474                     model: closeSearchBar
   474 		    model: closeSearchBar
   475                   )
   475 		  )
   476                  (LabelSpec
   476 		 (LabelSpec
   477                     label: 'Search:'
   477 		    label: 'Search:'
   478                     name: 'SearchLabel'
   478 		    name: 'SearchLabel'
   479                     layout: (LayoutFrame 30 0 5 0 81 0 27 0)
   479 		    layout: (LayoutFrame 30 0 5 0 81 0 27 0)
   480                     translateLabel: true
   480 		    translateLabel: true
   481                     adjust: right
   481 		    adjust: right
   482                   )
   482 		  )
   483                  (InputFieldSpec
   483 		 (InputFieldSpec
   484                     name: 'SearchEntryField'
   484 		    name: 'SearchEntryField'
   485                     layout: (LayoutFrame 87 0 5 0 244 0 27 0)
   485 		    layout: (LayoutFrame 87 0 5 0 244 0 27 0)
   486                     model: searchTextHolder
   486 		    model: searchTextHolder
   487                     immediateAccept: true
   487 		    immediateAccept: true
   488                     acceptOnReturn: true
   488 		    acceptOnReturn: true
   489                     acceptOnTab: true
   489 		    acceptOnTab: true
   490                     acceptOnLostFocus: true
   490 		    acceptOnLostFocus: true
   491                     modifiedChannel: searchTextModifiedHolder
   491 		    modifiedChannel: searchTextModifiedHolder
   492                     acceptOnPointerLeave: false
   492 		    acceptOnPointerLeave: false
   493                     postBuildCallback: postBuildSearchTextView:
   493 		    postBuildCallback: postBuildSearchTextView:
   494                   )
   494 		  )
   495                  (ActionButtonSpec
   495 		 (ActionButtonSpec
   496                     label: 'searchNextIcon'
   496 		    label: 'searchNextIcon'
   497                     name: 'SearchNextButton'
   497 		    name: 'SearchNextButton'
   498                     layout: (LayoutFrame 251 0 5 0 272 0 26 0)
   498 		    layout: (LayoutFrame 251 0 5 0 272 0 26 0)
   499                     hasCharacterOrientedLabel: false
   499 		    hasCharacterOrientedLabel: false
   500                     translateLabel: true
   500 		    translateLabel: true
   501                     model: searchNextText
   501 		    model: searchNextText
   502                   )
   502 		  )
   503                  (ActionButtonSpec
   503 		 (ActionButtonSpec
   504                     label: 'searchPreviousIcon'
   504 		    label: 'searchPreviousIcon'
   505                     name: 'searchPreviousButton'
   505 		    name: 'searchPreviousButton'
   506                     layout: (LayoutFrame 279 0 5 0 300 0 26 0)
   506 		    layout: (LayoutFrame 279 0 5 0 300 0 26 0)
   507                     hasCharacterOrientedLabel: false
   507 		    hasCharacterOrientedLabel: false
   508                     translateLabel: true
   508 		    translateLabel: true
   509                     model: searchPreviousText
   509 		    model: searchPreviousText
   510                   )
   510 		  )
   511                  (CheckBoxSpec
   511 		 (CheckBoxSpec
   512                     label: 'Ignore case'
   512 		    label: 'Ignore case'
   513                     name: 'IgnoreCaseCheckBox'
   513 		    name: 'IgnoreCaseCheckBox'
   514                     layout: (LayoutFrame 309 0 5 0 505 0 27 0)
   514 		    layout: (LayoutFrame 309 0 5 0 505 0 27 0)
   515                     model: ignoreCaseHolder
   515 		    model: ignoreCaseHolder
   516                     translateLabel: true
   516 		    translateLabel: true
   517                   )
   517 		  )
   518                  (LabelSpec
   518 		 (LabelSpec
   519                     label: 'SearchBarImageInfoLabel'
   519 		    label: 'SearchBarImageInfoLabel'
   520                     name: 'SearchBarImageInfoLabel'
   520 		    name: 'SearchBarImageInfoLabel'
   521                     layout: (LayoutFrame 511 0 5 0 535 0 27 0)
   521 		    layout: (LayoutFrame 511 0 5 0 535 0 27 0)
   522                     hasCharacterOrientedLabel: false
   522 		    hasCharacterOrientedLabel: false
   523                     translateLabel: true
   523 		    translateLabel: true
   524                     labelChannel: searchBarImageInfoLabelHolder
   524 		    labelChannel: searchBarImageInfoLabelHolder
   525                   )
   525 		  )
   526                  (LabelSpec
   526 		 (LabelSpec
   527                     label: 'SearchBarInfoLabel'
   527 		    label: 'SearchBarInfoLabel'
   528                     name: 'SearchBarInfoLabel'
   528 		    name: 'SearchBarInfoLabel'
   529                     layout: (LayoutFrame 538 0 5 0 816 0 27 0)
   529 		    layout: (LayoutFrame 538 0 5 0 816 0 27 0)
   530                     translateLabel: true
   530 		    translateLabel: true
   531                     labelChannel: searchBarInfoLabelHolder
   531 		    labelChannel: searchBarInfoLabelHolder
   532                     adjust: left
   532 		    adjust: left
   533                   )
   533 		  )
   534                  )
   534 		 )
   535                
   535 
   536               )
   536 	      )
   537               postBuildCallback: postBuildSearchBoxView:
   537 	      postBuildCallback: postBuildSearchBoxView:
   538             )
   538 	    )
   539            )
   539 	   )
   540          
   540 
   541         )
   541 	)
   542       )
   542       )
   543 ! !
   543 ! !
   544 
   544 
   545 !InternationalLanguageTranslationEditor class methodsFor:'menu specs'!
   545 !InternationalLanguageTranslationEditor class methodsFor:'menu specs'!
   546 
   546 
   556      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp
   556      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor keyStringAndLanguageSelectionTableMenu)) startUp
   557     "
   557     "
   558 
   558 
   559     <resource: #menu>
   559     <resource: #menu>
   560 
   560 
   561     ^ 
   561     ^
   562      #(Menu
   562      #(Menu
   563         (
   563 	(
   564          (MenuItem
   564 	 (MenuItem
   565             label: 'Set Current NameSpace'
   565 	    label: 'Set Current NameSpace'
   566             itemValue: changeLastNameSpace
   566 	    itemValue: changeLastNameSpace
   567             translateLabel: true
   567 	    translateLabel: true
   568           )
   568 	  )
   569          (MenuItem
   569 	 (MenuItem
   570             label: 'Search String in Current NameSpace'
   570 	    label: 'Search String in Current NameSpace'
   571             itemValue: searchStringInLastNameSpace
   571 	    itemValue: searchStringInLastNameSpace
   572             translateLabel: true
   572 	    translateLabel: true
   573           )
   573 	  )
   574          (MenuItem
   574 	 (MenuItem
   575             label: '-'
   575 	    label: '-'
   576             isVisible: #false
   576 	    isVisible: #false
   577           )
   577 	  )
   578          (MenuItem
   578 	 (MenuItem
   579             label: 'Set Current Package'
   579 	    label: 'Set Current Package'
   580             itemValue: changeLastPackage
   580 	    itemValue: changeLastPackage
   581             translateLabel: true
   581 	    translateLabel: true
   582             isVisible: #false
   582 	    isVisible: #false
   583           )
   583 	  )
   584          (MenuItem
   584 	 (MenuItem
   585             label: 'Search String in Current Package'
   585 	    label: 'Search String in Current Package'
   586             itemValue: searchStringInLastPackage
   586 	    itemValue: searchStringInLastPackage
   587             translateLabel: true
   587 	    translateLabel: true
   588             isVisible: #false
   588 	    isVisible: #false
   589           )
   589 	  )
   590          )
   590 	 )
   591         nil
   591 	nil
   592         nil
   592 	nil
   593       )
   593       )
   594 !
   594 !
   595 
   595 
   596 mainMenu
   596 mainMenu
   597     "This resource specification was automatically generated
   597     "This resource specification was automatically generated
   605      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor mainMenu)) startUp
   605      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor mainMenu)) startUp
   606     "
   606     "
   607 
   607 
   608     <resource: #menu>
   608     <resource: #menu>
   609 
   609 
   610     ^ 
   610     ^
   611      #(Menu
   611      #(Menu
   612         (
   612 	(
   613          (MenuItem
   613 	 (MenuItem
   614             label: 'File'
   614 	    label: 'File'
   615             translateLabel: true
   615 	    translateLabel: true
   616             submenu: 
   616 	    submenu:
   617            (Menu
   617 	   (Menu
   618               (
   618 	      (
   619                (MenuItem
   619 	       (MenuItem
   620                   label: 'New'
   620 		  label: 'New'
   621                   itemValue: menuNew
   621 		  itemValue: menuNew
   622                   translateLabel: true
   622 		  translateLabel: true
   623                 )
   623 		)
   624                (MenuItem
   624 	       (MenuItem
   625                   label: '-'
   625 		  label: '-'
   626                 )
   626 		)
   627                (MenuItem
   627 	       (MenuItem
   628                   label: 'Open Resources for Package or Project...'
   628 		  label: 'Open Resources for Package or Project...'
   629                   itemValue: menuOpenByPackage
   629 		  itemValue: menuOpenByPackage
   630                   translateLabel: true
   630 		  translateLabel: true
   631                 )
   631 		)
   632                (MenuItem
   632 	       (MenuItem
   633                   label: 'Open Resource File...'
   633 		  label: 'Open Resource File...'
   634                   itemValue: menuOpen
   634 		  itemValue: menuOpen
   635                   translateLabel: true
   635 		  translateLabel: true
   636                 )
   636 		)
   637                (MenuItem
   637 	       (MenuItem
   638                   label: '-'
   638 		  label: '-'
   639                 )
   639 		)
   640                (MenuItem
   640 	       (MenuItem
   641                   label: 'Save All Resource Files'
   641 		  label: 'Save All Resource Files'
   642                   itemValue: menuSaveAll
   642 		  itemValue: menuSaveAll
   643                   translateLabel: true
   643 		  translateLabel: true
   644                 )
   644 		)
   645                (MenuItem
   645 	       (MenuItem
   646                   label: 'Save Resource File'
   646 		  label: 'Save Resource File'
   647                   itemValue: menuSave
   647 		  itemValue: menuSave
   648                   translateLabel: true
   648 		  translateLabel: true
   649                 )
   649 		)
   650                (MenuItem
   650 	       (MenuItem
   651                   label: 'Save Resource File As...'
   651 		  label: 'Save Resource File As...'
   652                   itemValue: menuSaveAs
   652 		  itemValue: menuSaveAs
   653                   translateLabel: true
   653 		  translateLabel: true
   654                 )
   654 		)
   655                (MenuItem
   655 	       (MenuItem
   656                   label: '-'
   656 		  label: '-'
   657                 )
   657 		)
   658                (MenuItem
   658 	       (MenuItem
   659                   label: 'Import existing translations from file...'
   659 		  label: 'Import existing translations from file...'
   660                   itemValue: importExistingTranslationsFromFile
   660 		  itemValue: importExistingTranslationsFromFile
   661                   translateLabel: true
   661 		  translateLabel: true
   662                 )
   662 		)
   663                (MenuItem
   663 	       (MenuItem
   664                   label: '-'
   664 		  label: '-'
   665                 )
   665 		)
   666                (MenuItem
   666 	       (MenuItem
   667                   label: 'Set Current NameSpace'
   667 		  label: 'Set Current NameSpace'
   668                   itemValue: changeLastNameSpace
   668 		  itemValue: changeLastNameSpace
   669                   translateLabel: true
   669 		  translateLabel: true
   670                 )
   670 		)
   671                (MenuItem
   671 	       (MenuItem
   672                   label: 'Set Current Package'
   672 		  label: 'Set Current Package'
   673                   itemValue: changeLastPackage
   673 		  itemValue: changeLastPackage
   674                   translateLabel: true
   674 		  translateLabel: true
   675                   isVisible: #false
   675 		  isVisible: #false
   676                 )
   676 		)
   677                (MenuItem
   677 	       (MenuItem
   678                   label: '-'
   678 		  label: '-'
   679                 )
   679 		)
   680                (MenuItem
   680 	       (MenuItem
   681                   label: 'Exit'
   681 		  label: 'Exit'
   682                   itemValue: closeRequest
   682 		  itemValue: closeRequest
   683                   translateLabel: true
   683 		  translateLabel: true
   684                 )
   684 		)
   685                )
   685 	       )
   686               nil
   686 	      nil
   687               nil
   687 	      nil
   688             )
   688 	    )
   689           )
   689 	  )
   690          (MenuItem
   690 	 (MenuItem
   691             label: 'View'
   691 	    label: 'View'
   692             translateLabel: true
   692 	    translateLabel: true
   693             submenu: 
   693 	    submenu:
   694            (Menu
   694 	   (Menu
   695               (
   695 	      (
   696                (MenuItem
   696 	       (MenuItem
   697                   label: 'Show Missing Translations Only'
   697 		  label: 'Show Missing Translations Only'
   698                   translateLabel: true
   698 		  translateLabel: true
   699                   indication: showMissingTranslationsOnly
   699 		  indication: showMissingTranslationsOnly
   700                 )
   700 		)
   701                (MenuItem
   701 	       (MenuItem
   702                   label: '-'
   702 		  label: '-'
   703                 )
   703 		)
   704                (MenuItem
   704 	       (MenuItem
   705                   label: 'Shown Languages'
   705 		  label: 'Shown Languages'
   706                   translateLabel: true
   706 		  translateLabel: true
   707                   submenuChannel: shownLanguagesMenu
   707 		  submenuChannel: shownLanguagesMenu
   708                 )
   708 		)
   709                )
   709 	       )
   710               nil
   710 	      nil
   711               nil
   711 	      nil
   712             )
   712 	    )
   713           )
   713 	  )
   714          (MenuItem
   714 	 (MenuItem
   715             label: 'Languages'
   715 	    label: 'Languages'
   716             translateLabel: true
   716 	    translateLabel: true
   717             submenu: 
   717 	    submenu:
   718            (Menu
   718 	   (Menu
   719               (
   719 	      (
   720                (MenuItem
   720 	       (MenuItem
   721                   label: 'Add Language...'
   721 		  label: 'Add Language...'
   722                   itemValue: addLanguage
   722 		  itemValue: addLanguage
   723                   translateLabel: true
   723 		  translateLabel: true
   724                 )
   724 		)
   725                (MenuItem
   725 	       (MenuItem
   726                   label: 'Remove Language...'
   726 		  label: 'Remove Language...'
   727                   itemValue: removeLanguage
   727 		  itemValue: removeLanguage
   728                   translateLabel: true
   728 		  translateLabel: true
   729                 )
   729 		)
   730                )
   730 	       )
   731               nil
   731 	      nil
   732               nil
   732 	      nil
   733             )
   733 	    )
   734           )
   734 	  )
   735          (MenuItem
   735 	 (MenuItem
   736             label: 'Translations'
   736 	    label: 'Translations'
   737             translateLabel: true
   737 	    translateLabel: true
   738             submenu: 
   738 	    submenu:
   739            (Menu
   739 	   (Menu
   740               (
   740 	      (
   741                (MenuItem
   741 	       (MenuItem
   742                   label: 'Add Translation...'
   742 		  label: 'Add Translation...'
   743                   itemValue: addTranslation
   743 		  itemValue: addTranslation
   744                   translateLabel: true
   744 		  translateLabel: true
   745                 )
   745 		)
   746                (MenuItem
   746 	       (MenuItem
   747                   label: 'Remove Translation...'
   747 		  label: 'Remove Translation...'
   748                   itemValue: removeTranslation
   748 		  itemValue: removeTranslation
   749                   translateLabel: true
   749 		  translateLabel: true
   750                 )
   750 		)
   751                (MenuItem
   751 	       (MenuItem
   752                   label: '-'
   752 		  label: '-'
   753                 )
   753 		)
   754                (MenuItem
   754 	       (MenuItem
   755                   label: 'Extract from Class...'
   755 		  label: 'Extract from Class...'
   756                   itemValue: extractTranslationsFromClass
   756 		  itemValue: extractTranslationsFromClass
   757                   translateLabel: true
   757 		  translateLabel: true
   758                 )
   758 		)
   759                (MenuItem
   759 	       (MenuItem
   760                   label: 'Extract from Project...'
   760 		  label: 'Extract from Project...'
   761                   itemValue: extractTranslationsFromProject
   761 		  itemValue: extractTranslationsFromProject
   762                   translateLabel: true
   762 		  translateLabel: true
   763                 )
   763 		)
   764                (MenuItem
   764 	       (MenuItem
   765                   label: 'Extract from NameSpace...'
   765 		  label: 'Extract from NameSpace...'
   766                   itemValue: extractTranslationsFromNameSpace
   766 		  itemValue: extractTranslationsFromNameSpace
   767                   translateLabel: true
   767 		  translateLabel: true
   768                 )
   768 		)
   769                (MenuItem
   769 	       (MenuItem
   770                   label: '-'
   770 		  label: '-'
   771                 )
   771 		)
   772                (MenuItem
   772 	       (MenuItem
   773                   label: 'Run Application and Collect Translations...'
   773 		  label: 'Run Application and Collect Translations...'
   774                   itemValue: runApplicationAndCollectTranslations
   774 		  itemValue: runApplicationAndCollectTranslations
   775                   translateLabel: true
   775 		  translateLabel: true
   776                 )
   776 		)
   777                )
   777 	       )
   778               nil
   778 	      nil
   779               nil
   779 	      nil
   780             )
   780 	    )
   781           )
   781 	  )
   782          (MenuItem
   782 	 (MenuItem
   783             label: 'Preferences'
   783 	    label: 'Preferences'
   784             translateLabel: true
   784 	    translateLabel: true
   785             submenu: 
   785 	    submenu:
   786            (Menu
   786 	   (Menu
   787               (
   787 	      (
   788                (MenuItem
   788 	       (MenuItem
   789                   label: 'Auto Accept Changes'
   789 		  label: 'Auto Accept Changes'
   790                   translateLabel: true
   790 		  translateLabel: true
   791                   indication: autoAcceptHolder
   791 		  indication: autoAcceptHolder
   792                 )
   792 		)
   793                (MenuItem
   793 	       (MenuItem
   794                   label: 'Search For Similar Translations'
   794 		  label: 'Search For Similar Translations'
   795                   translateLabel: true
   795 		  translateLabel: true
   796                   indication: searchForSimilarTranslationEnableHolder
   796 		  indication: searchForSimilarTranslationEnableHolder
   797                 )
   797 		)
   798                (MenuItem
   798 	       (MenuItem
   799                   label: 'Always Write UTF8'
   799 		  label: 'Always Write UTF8'
   800                   translateLabel: true
   800 		  translateLabel: true
   801                   indication: alwaysWriteUTF8Holder
   801 		  indication: alwaysWriteUTF8Holder
   802                 )
   802 		)
   803                )
   803 	       )
   804               nil
   804 	      nil
   805               nil
   805 	      nil
   806             )
   806 	    )
   807           )
   807 	  )
   808          (MenuItem
   808 	 (MenuItem
   809             label: 'Help'
   809 	    label: 'Help'
   810             translateLabel: true
   810 	    translateLabel: true
   811             startGroup: right
   811 	    startGroup: right
   812             submenu: 
   812 	    submenu:
   813            (Menu
   813 	   (Menu
   814               (
   814 	      (
   815                (MenuItem
   815 	       (MenuItem
   816                   label: 'Documentation'
   816 		  label: 'Documentation'
   817                   itemValue: openDocumentation
   817 		  itemValue: openDocumentation
   818                   translateLabel: true
   818 		  translateLabel: true
   819                 )
   819 		)
   820                (MenuItem
   820 	       (MenuItem
   821                   label: '-'
   821 		  label: '-'
   822                 )
   822 		)
   823                (MenuItem
   823 	       (MenuItem
   824                   label: 'About this Application...'
   824 		  label: 'About this Application...'
   825                   itemValue: openAboutThisApplication
   825 		  itemValue: openAboutThisApplication
   826                   translateLabel: true
   826 		  translateLabel: true
   827                 )
   827 		)
   828                )
   828 	       )
   829               nil
   829 	      nil
   830               nil
   830 	      nil
   831             )
   831 	    )
   832           )
   832 	  )
   833          )
   833 	 )
   834         nil
   834 	nil
   835         nil
   835 	nil
   836       )
   836       )
   837 !
   837 !
   838 
   838 
   839 menuItemsEditLanguage
   839 menuItemsEditLanguage
   840     "This resource specification was automatically generated
   840     "This resource specification was automatically generated
   848      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menu)) startUp
   848      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menu)) startUp
   849     "
   849     "
   850 
   850 
   851     <resource: #menu>
   851     <resource: #menu>
   852 
   852 
   853     ^ 
   853     ^
   854      #(Menu
   854      #(Menu
   855         (
   855 	(
   856          (MenuItem
   856 	 (MenuItem
   857             enabled: pastePreviousTranslationEnableHolder
   857 	    enabled: pastePreviousTranslationEnableHolder
   858             label: 'Paste Previous Translation'
   858 	    label: 'Paste Previous Translation'
   859             itemValue: pastePreviousTranslationInLanguageText
   859 	    itemValue: pastePreviousTranslationInLanguageText
   860             nameKey: pastePreviousTranslationInLanguageText
   860 	    nameKey: pastePreviousTranslationInLanguageText
   861             translateLabel: true
   861 	    translateLabel: true
   862           )
   862 	  )
   863          )
   863 	 )
   864         nil
   864 	nil
   865         nil
   865 	nil
   866       )
   866       )
   867 !
   867 !
   868 
   868 
   869 menuToolBar
   869 menuToolBar
   870     "This resource specification was automatically generated
   870     "This resource specification was automatically generated
   878      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menuToolBar)) startUp
   878      (Menu new fromLiteralArrayEncoding:(Tools::InternationalLanguageTranslationEditor menuToolBar)) startUp
   879     "
   879     "
   880 
   880 
   881     <resource: #menu>
   881     <resource: #menu>
   882 
   882 
   883     ^ 
   883     ^
   884      #(Menu
   884      #(Menu
   885         (
   885 	(
   886          (MenuItem
   886 	 (MenuItem
   887             label: 'Save'
   887 	    label: 'Save'
   888             itemValue: menuSave
   888 	    itemValue: menuSave
   889             translateLabel: true
   889 	    translateLabel: true
   890             labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon)
   890 	    labelImage: (ResourceRetriever XPToolbarIconLibrary saveImageIcon)
   891           )
   891 	  )
   892          (MenuItem
   892 	 (MenuItem
   893             label: '-'
   893 	    label: '-'
   894           )
   894 	  )
   895          (MenuItem
   895 	 (MenuItem
   896             label: 'Add Translation'
   896 	    label: 'Add Translation'
   897             itemValue: addTranslation
   897 	    itemValue: addTranslation
   898             translateLabel: true
   898 	    translateLabel: true
   899             labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon)
   899 	    labelImage: (ResourceRetriever XPToolbarIconLibrary newRowIcon)
   900           )
   900 	  )
   901          (MenuItem
   901 	 (MenuItem
   902             label: 'Remove Translation'
   902 	    label: 'Remove Translation'
   903             itemValue: removeTranslation
   903 	    itemValue: removeTranslation
   904             translateLabel: true
   904 	    translateLabel: true
   905             labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon)
   905 	    labelImage: (ResourceRetriever XPToolbarIconLibrary removeRowIcon)
   906           )
   906 	  )
   907          (MenuItem
   907 	 (MenuItem
   908             label: '-'
   908 	    label: '-'
   909           )
   909 	  )
   910          (MenuItem
   910 	 (MenuItem
   911             label: 'Search'
   911 	    label: 'Search'
   912             itemValue: search
   912 	    itemValue: search
   913             translateLabel: true
   913 	    translateLabel: true
   914             shortcutKey: Ctrlf
   914 	    shortcutKey: Ctrlf
   915             labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon)
   915 	    labelImage: (ResourceRetriever #'Tools::InternationalLanguageTranslationEditor' searchToolBarIcon)
   916           )
   916 	  )
   917          (MenuItem
   917 	 (MenuItem
   918             label: ''
   918 	    label: ''
   919           )
   919 	  )
   920          (MenuItem
   920 	 (MenuItem
   921             label: 'Stop Application'
   921 	    label: 'Stop Application'
   922             itemValue: stopApplication
   922 	    itemValue: stopApplication
   923             translateLabel: true
   923 	    translateLabel: true
   924             isVisible: stopApplicationIconVisibleHolder
   924 	    isVisible: stopApplicationIconVisibleHolder
   925             labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon)
   925 	    labelImage: (ResourceRetriever XPToolbarIconLibrary stop16x16Icon)
   926           )
   926 	  )
   927          )
   927 	 )
   928         nil
   928 	nil
   929         nil
   929 	nil
   930       )
   930       )
   931 ! !
   931 ! !
   932 
   932 
   933 !InternationalLanguageTranslationEditor class methodsFor:'startup'!
   933 !InternationalLanguageTranslationEditor class methodsFor:'startup'!
   934 
   934 
   936     |fn|
   936     |fn|
   937 
   937 
   938     fn := aFilename asFilename.
   938     fn := aFilename asFilename.
   939 
   939 
   940     self new
   940     self new
   941         allButOpen;
   941 	allButOpen;
   942         readResourceFile:fn asLanguage:fn withoutSuffix baseName;
   942 	readResourceFile:fn asLanguage:fn withoutSuffix baseName;
   943         openWindow.
   943 	openWindow.
   944 ! !
   944 ! !
   945 
   945 
   946 !InternationalLanguageTranslationEditor class methodsFor:'tableColumns specs'!
   946 !InternationalLanguageTranslationEditor class methodsFor:'tableColumns specs'!
   947 
   947 
   948 keyTableColumn
   948 keyTableColumn
   958 
   958 
   959     <resource: #tableColumns>
   959     <resource: #tableColumns>
   960 
   960 
   961     ^#(
   961     ^#(
   962       (DataSetColumnSpec
   962       (DataSetColumnSpec
   963          label: 'Key'
   963 	 label: 'Key'
   964          labelButtonType: Button
   964 	 labelButtonType: Button
   965          minWidth: 50
   965 	 minWidth: 50
   966          model: keyStringInRow:
   966 	 model: keyStringInRow:
   967        )
   967        )
   968       )
   968       )
   969 !
   969 !
   970 
   970 
   971 languageTableColumn
   971 languageTableColumn
   981 
   981 
   982     <resource: #tableColumns>
   982     <resource: #tableColumns>
   983 
   983 
   984     ^#(
   984     ^#(
   985       (DataSetColumnSpec
   985       (DataSetColumnSpec
   986          label: lang
   986 	 label: lang
   987          labelButtonType: Button
   987 	 labelButtonType: Button
   988          minWidth: 50
   988 	 minWidth: 50
   989          editorType: None
   989 	 editorType: None
   990          model: columnInRow:at:
   990 	 model: columnInRow:at:
   991          backgroundSelector: getBackgroundForRow:rowNr:col:
   991 	 backgroundSelector: getBackgroundForRow:rowNr:col:
   992        )
   992        )
   993       )
   993       )
   994 ! !
   994 ! !
   995 
   995 
   996 !InternationalLanguageTranslationEditor methodsFor:'accessing'!
   996 !InternationalLanguageTranslationEditor methodsFor:'accessing'!
   997 
   997 
   998 currentSelectionIndex 
   998 currentSelectionIndex
   999 
   999 
  1000     ^ self selectedKeyRow value
  1000     ^ self selectedKeyRow value
  1001 
  1001 
  1002     "Created: / 16-06-2007 / 09:04:11 / Administrador"
  1002     "Created: / 16-06-2007 / 09:04:11 / Administrador"
  1003     "Modified: / 19-06-2007 / 17:28:38 / Administrador"
  1003     "Modified: / 19-06-2007 / 17:28:38 / Administrador"
  1017     "Created: / 19-06-2007 / 16:39:44 / Administrador"
  1017     "Created: / 19-06-2007 / 16:39:44 / Administrador"
  1018 !
  1018 !
  1019 
  1019 
  1020 newLanguageText
  1020 newLanguageText
  1021 "/   languageEditor accept
  1021 "/   languageEditor accept
  1022     ^self languageTextHolder value isNil 
  1022     ^self languageTextHolder value isNil
  1023         ifTrue:['']
  1023 	ifTrue:['']
  1024         ifFalse:[self languageTextHolder value asCollectionOfLines first.]
  1024 	ifFalse:[self languageTextHolder value asCollectionOfLines first.]
  1025 !
  1025 !
  1026 
  1026 
  1027 objectsList
  1027 objectsList
  1028 
  1028 
  1029     ^ keyStringsToLanguageMappings 
  1029     ^ keyStringsToLanguageMappings
  1030 !
  1030 !
  1031 
  1031 
  1032 selectListIndex: rowIndex
  1032 selectListIndex: rowIndex
  1033 "/    |selection list|
  1033 "/    |selection list|
  1034 "/    list := self objectsList.
  1034 "/    list := self objectsList.
  1038 
  1038 
  1039     "Created: / 16-06-2007 / 09:06:46 / Administrador"
  1039     "Created: / 16-06-2007 / 09:06:46 / Administrador"
  1040     "Modified: / 22-06-2007 / 13:45:54 / Administrador"
  1040     "Modified: / 22-06-2007 / 13:45:54 / Administrador"
  1041 !
  1041 !
  1042 
  1042 
  1043 selectedKey  
  1043 selectedKey
  1044    "Returns the current selected key if there is one row seleted. Otherwise, returns nil"
  1044    "Returns the current selected key if there is one row seleted. Otherwise, returns nil"
  1045      |rowSelectionIndex |
  1045      |rowSelectionIndex |
  1046 
  1046 
  1047     keyStringsToLanguageMappings isNil ifTrue:[^nil].
  1047     keyStringsToLanguageMappings isNil ifTrue:[^nil].
  1048     self selectedKeyRow value isNil ifTrue:[^nil].
  1048     self selectedKeyRow value isNil ifTrue:[^nil].
  1062 
  1062 
  1063 searchForSimilarTranslation
  1063 searchForSimilarTranslation
  1064     "Looks for a quite similar translation for the key and display a dialog with available options"
  1064     "Looks for a quite similar translation for the key and display a dialog with available options"
  1065     |similarTranslationsAssociations selectedTranslation key|
  1065     |similarTranslationsAssociations selectedTranslation key|
  1066 
  1066 
  1067     self shouldSearchForSimilarTranslation ifFalse:[^self]. 
  1067     self shouldSearchForSimilarTranslation ifFalse:[^self].
  1068 
  1068 
  1069     key := self selectedKey.
  1069     key := self selectedKey.
  1070     key isNil ifTrue:[^ self.].
  1070     key isNil ifTrue:[^ self.].
  1071     similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: key in: self currentLanguage.
  1071     similarTranslationsAssociations := keyStringsToLanguageMappings searchForSimilarTranslation: key in: self currentLanguage.
  1072     similarTranslationsAssociations isEmpty ifTrue:[^self].    
  1072     similarTranslationsAssociations isEmpty ifTrue:[^self].
  1073 
  1073 
  1074     similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
  1074     similarTranslationsAssociations := similarTranslationsAssociations associations inject: OrderedCollection new into:[:collection :association |
  1075         collection detect:[:selectedAssociation |
  1075 	collection detect:[:selectedAssociation |
  1076             selectedAssociation value sameAs: association value] ifNone:[collection add: association].
  1076 	    selectedAssociation value sameAs: association value] ifNone:[collection add: association].
  1077         collection].
  1077 	collection].
  1078     selectedTranslation := Dialog 
  1078     selectedTranslation := Dialog
  1079         choose:'Choose one if you consider it´s usefull to translate: 
  1079 	choose:'Choose one if you consider it´s usefull to translate:
  1080     ', 
  1080     ',
  1081         '<', key, '>  ', (self currentExampleLanguageText ifNil:[''])
  1081 	'<', key, '>  ', (self currentExampleLanguageText ifNil:[''])
  1082         fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
  1082 	fromList: (similarTranslationsAssociations collect:[:each |  '<', each key, '>  ', each value])
  1083         values: (similarTranslationsAssociations collect:[:each | each value])
  1083 	values: (similarTranslationsAssociations collect:[:each | each value])
  1084         lines:10
  1084 	lines:10
  1085         cancel: nil.      
  1085 	cancel: nil.
  1086 
  1086 
  1087     selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation]. 
  1087     selectedTranslation notNil ifTrue:[self languageTextHolderValue: selectedTranslation].
  1088 ! !
  1088 ! !
  1089 
  1089 
  1090 !InternationalLanguageTranslationEditor methodsFor:'aspects'!
  1090 !InternationalLanguageTranslationEditor methodsFor:'aspects'!
  1091 
  1091 
  1092 alwaysWriteUTF8Holder
  1092 alwaysWriteUTF8Holder
  1093     alwaysWriteUTF8Holder isNil ifTrue:[alwaysWriteUTF8Holder := true asValue]. 
  1093     alwaysWriteUTF8Holder isNil ifTrue:[alwaysWriteUTF8Holder := true asValue].
  1094     ^ alwaysWriteUTF8Holder
  1094     ^ alwaysWriteUTF8Holder
  1095 !
  1095 !
  1096 
  1096 
  1097 autoAcceptHolder
  1097 autoAcceptHolder
  1098     autoAcceptHolder isNil ifTrue:[autoAcceptHolder := true asValue]. 
  1098     autoAcceptHolder isNil ifTrue:[autoAcceptHolder := true asValue].
  1099     ^ autoAcceptHolder
  1099     ^ autoAcceptHolder
  1100 !
  1100 !
  1101 
  1101 
  1102 exampleLanguageSelectionHolder
  1102 exampleLanguageSelectionHolder
  1103     exampleLanguageSelectionHolder isNil ifTrue:[
  1103     exampleLanguageSelectionHolder isNil ifTrue:[
  1104         exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue.         
  1104 	exampleLanguageSelectionHolder := self exampleLanguageByDefault asValue.
  1105         exampleLanguageSelectionHolder addDependent:self.
  1105 	exampleLanguageSelectionHolder addDependent:self.
  1106     ]. 
  1106     ].
  1107     ^ exampleLanguageSelectionHolder
  1107     ^ exampleLanguageSelectionHolder
  1108 !
  1108 !
  1109 
  1109 
  1110 exampleLanguageTextHolder
  1110 exampleLanguageTextHolder
  1111     exampleLanguageTextHolder isNil ifTrue:[
  1111     exampleLanguageTextHolder isNil ifTrue:[
  1112         exampleLanguageTextHolder := '' asValue.
  1112 	exampleLanguageTextHolder := '' asValue.
  1113     ].
  1113     ].
  1114     ^ exampleLanguageTextHolder.
  1114     ^ exampleLanguageTextHolder.
  1115 !
  1115 !
  1116 
  1116 
  1117 ignoreCaseHolder
  1117 ignoreCaseHolder
  1118 
  1118 
  1119     ignoreCaseHolder isNil ifTrue:[
  1119     ignoreCaseHolder isNil ifTrue:[
  1120         ignoreCaseHolder := false asValue.
  1120 	ignoreCaseHolder := false asValue.
  1121 "/ if your app needs to be notified of changes, uncomment one of the lines below:
  1121 "/ if your app needs to be notified of changes, uncomment one of the lines below:
  1122 "/       ignoreCaseHolder addDependent:self.
  1122 "/       ignoreCaseHolder addDependent:self.
  1123         ignoreCaseHolder onChangeSend:#ignoreCaseHolderChanged to:self.
  1123 	ignoreCaseHolder onChangeSend:#ignoreCaseHolderChanged to:self.
  1124 
  1124 
  1125     ].
  1125     ].
  1126     ^ ignoreCaseHolder.
  1126     ^ ignoreCaseHolder.
  1127 
  1127 
  1128     "Created: / 16-06-2007 / 06:45:04 / Administrador"
  1128     "Created: / 16-06-2007 / 06:45:04 / Administrador"
  1129     "Modified: / 16-06-2007 / 19:32:15 / Administrador"
  1129     "Modified: / 16-06-2007 / 19:32:15 / Administrador"
  1130 !
  1130 !
  1131 
  1131 
  1132 keyStringAndLanguageSelectionTable
  1132 keyStringAndLanguageSelectionTable
  1133     keyStringsToLanguageMappings isNil ifTrue:[
  1133     keyStringsToLanguageMappings isNil ifTrue:[
  1134         keyStringsToLanguageMappings := KeyStringsToLanguageMappings new.
  1134 	keyStringsToLanguageMappings := KeyStringsToLanguageMappings new.
  1135     ].
  1135     ].
  1136     ^ keyStringsToLanguageMappings.
  1136     ^ keyStringsToLanguageMappings.
  1137 !
  1137 !
  1138 
  1138 
  1139 keyStringAndLanguageSelectionTableColumnDescriptionHolder
  1139 keyStringAndLanguageSelectionTableColumnDescriptionHolder
  1140     keyStringAndLanguageSelectionTableColumnDescriptionHolder isNil ifTrue:[
  1140     keyStringAndLanguageSelectionTableColumnDescriptionHolder isNil ifTrue:[
  1141         keyStringAndLanguageSelectionTableColumnDescriptionHolder := ValueHolder new.
  1141 	keyStringAndLanguageSelectionTableColumnDescriptionHolder := ValueHolder new.
  1142         keyStringAndLanguageSelectionTableColumnDescriptionHolder value:(self keyStringAndLanguageSelectionTableColumnDescription).
  1142 	keyStringAndLanguageSelectionTableColumnDescriptionHolder value:(self keyStringAndLanguageSelectionTableColumnDescription).
  1143     ].
  1143     ].
  1144     ^ keyStringAndLanguageSelectionTableColumnDescriptionHolder.
  1144     ^ keyStringAndLanguageSelectionTableColumnDescriptionHolder.
  1145 !
  1145 !
  1146 
  1146 
  1147 languageAtCol:colNr
  1147 languageAtCol:colNr
  1150 
  1150 
  1151 languageShownHolderFor:lang
  1151 languageShownHolderFor:lang
  1152     |holder|
  1152     |holder|
  1153 
  1153 
  1154     languageShownHolders isNil ifTrue:[
  1154     languageShownHolders isNil ifTrue:[
  1155         languageShownHolders := Dictionary new
  1155 	languageShownHolders := Dictionary new
  1156     ].
  1156     ].
  1157     holder := languageShownHolders 
  1157     holder := languageShownHolders
  1158                 at:lang 
  1158 		at:lang
  1159                 ifAbsentPut:[ 
  1159 		ifAbsentPut:[
  1160                     |h|
  1160 		    |h|
  1161 
  1161 
  1162                     h := true asValue.
  1162 		    h := true asValue.
  1163                     h onChangeEvaluate:[ 
  1163 		    h onChangeEvaluate:[
  1164                         h value ifTrue:[
  1164 			h value ifTrue:[
  1165                            self enableLanguageDisplayFor:lang     
  1165 			   self enableLanguageDisplayFor:lang
  1166                         ] ifFalse:[
  1166 			] ifFalse:[
  1167                            self disableLanguageDisplayFor:lang     
  1167 			   self disableLanguageDisplayFor:lang
  1168                         ].
  1168 			].
  1169                     ].
  1169 		    ].
  1170                     h
  1170 		    h
  1171                 ].
  1171 		].
  1172     ^ holder.
  1172     ^ holder.
  1173 !
  1173 !
  1174 
  1174 
  1175 languageTextAcceptHolder
  1175 languageTextAcceptHolder
  1176     languageTextAcceptHolder isNil ifTrue:[
  1176     languageTextAcceptHolder isNil ifTrue:[
  1177         languageTextAcceptHolder := false asValue.                        
  1177 	languageTextAcceptHolder := false asValue.
  1178     ].
  1178     ].
  1179     ^ languageTextAcceptHolder.
  1179     ^ languageTextAcceptHolder.
  1180 !
  1180 !
  1181 
  1181 
  1182 languageTextHolder
  1182 languageTextHolder
  1183     languageTextHolder isNil ifTrue:[
  1183     languageTextHolder isNil ifTrue:[
  1184         languageTextHolder := '' asValue.
  1184 	languageTextHolder := '' asValue.
  1185     ].
  1185     ].
  1186     ^ languageTextHolder.
  1186     ^ languageTextHolder.
  1187 !
  1187 !
  1188 
  1188 
  1189 languageTextModifiedHolder
  1189 languageTextModifiedHolder
  1190     languageTextModifiedHolder isNil ifTrue:[
  1190     languageTextModifiedHolder isNil ifTrue:[
  1191         languageTextModifiedHolder := false asValue.
  1191 	languageTextModifiedHolder := false asValue.
  1192     ].
  1192     ].
  1193     ^ languageTextModifiedHolder.
  1193     ^ languageTextModifiedHolder.
  1194 !
  1194 !
  1195 
  1195 
  1196 languagesList
  1196 languagesList
  1197     languagesList isNil ifTrue:[
  1197     languagesList isNil ifTrue:[
  1198         languagesList := List withAll:(self keyStringAndLanguageSelectionTable languages).
  1198 	languagesList := List withAll:(self keyStringAndLanguageSelectionTable languages).
  1199     ].
  1199     ].
  1200     ^ languagesList.
  1200     ^ languagesList.
  1201 !
  1201 !
  1202 
  1202 
  1203 originalTextHolder
  1203 originalTextHolder
  1204     originalTextHolder isNil ifTrue:[
  1204     originalTextHolder isNil ifTrue:[
  1205         originalTextHolder := '' asValue.
  1205 	originalTextHolder := '' asValue.
  1206     ].
  1206     ].
  1207     ^ originalTextHolder.
  1207     ^ originalTextHolder.
  1208 !
  1208 !
  1209 
  1209 
  1210 originalTextModifiedHolder
  1210 originalTextModifiedHolder
  1211     originalTextModifiedHolder isNil ifTrue:[
  1211     originalTextModifiedHolder isNil ifTrue:[
  1212         originalTextModifiedHolder := false asValue.
  1212 	originalTextModifiedHolder := false asValue.
  1213     ].
  1213     ].
  1214     ^ originalTextModifiedHolder.
  1214     ^ originalTextModifiedHolder.
  1215 !
  1215 !
  1216 
  1216 
  1217 pasteOriginalEnableHolder
  1217 pasteOriginalEnableHolder
  1218    pasteOriginalEnableHolder isNil ifTrue:[pasteOriginalEnableHolder := false asValue]. 
  1218    pasteOriginalEnableHolder isNil ifTrue:[pasteOriginalEnableHolder := false asValue].
  1219     ^ pasteOriginalEnableHolder
  1219     ^ pasteOriginalEnableHolder
  1220 !
  1220 !
  1221 
  1221 
  1222 pastePreviousTranslationEnableHolder
  1222 pastePreviousTranslationEnableHolder
  1223    pastePreviousTranslationEnableHolder isNil ifTrue:[pastePreviousTranslationEnableHolder := false asValue]. 
  1223    pastePreviousTranslationEnableHolder isNil ifTrue:[pastePreviousTranslationEnableHolder := false asValue].
  1224     ^ pastePreviousTranslationEnableHolder
  1224     ^ pastePreviousTranslationEnableHolder
  1225 !
  1225 !
  1226 
  1226 
  1227 searchBarImageInfoLabelHolder
  1227 searchBarImageInfoLabelHolder
  1228 
  1228 
  1229     searchBarImageInfoLabelHolder isNil ifTrue:[
  1229     searchBarImageInfoLabelHolder isNil ifTrue:[
  1230         searchBarImageInfoLabelHolder := nil asValue .
  1230 	searchBarImageInfoLabelHolder := nil asValue .
  1231     ].
  1231     ].
  1232     ^ searchBarImageInfoLabelHolder.
  1232     ^ searchBarImageInfoLabelHolder.
  1233 
  1233 
  1234     "Created: / 16-06-2007 / 10:06:28 / Administrador"
  1234     "Created: / 16-06-2007 / 10:06:28 / Administrador"
  1235 !
  1235 !
  1236 
  1236 
  1237 searchBarInfoLabelHolder
  1237 searchBarInfoLabelHolder
  1238 
  1238 
  1239     searchBarInfoLabelHolder isNil ifTrue:[
  1239     searchBarInfoLabelHolder isNil ifTrue:[
  1240         searchBarInfoLabelHolder := '' asValue .
  1240 	searchBarInfoLabelHolder := '' asValue .
  1241     ].
  1241     ].
  1242     ^ searchBarInfoLabelHolder.
  1242     ^ searchBarInfoLabelHolder.
  1243 
  1243 
  1244     "Created: / 16-06-2007 / 06:20:49 / Administrador"
  1244     "Created: / 16-06-2007 / 06:20:49 / Administrador"
  1245 !
  1245 !
  1246 
  1246 
  1247 searchBoxVisible
  1247 searchBoxVisible
  1248 
  1248 
  1249     searchBoxVisible isNil ifTrue:[
  1249     searchBoxVisible isNil ifTrue:[
  1250         searchBoxVisible := false asValue.
  1250 	searchBoxVisible := false asValue.
  1251     ].
  1251     ].
  1252     ^ searchBoxVisible.
  1252     ^ searchBoxVisible.
  1253 
  1253 
  1254     "Created: / 15-06-2007 / 18:15:52 / Administrador"
  1254     "Created: / 15-06-2007 / 18:15:52 / Administrador"
  1255 !
  1255 !
  1256 
  1256 
  1257 searchForSimilarTranslationEnableHolder
  1257 searchForSimilarTranslationEnableHolder
  1258    searchForSimilarTranslationEnableHolder isNil 
  1258    searchForSimilarTranslationEnableHolder isNil
  1259         ifTrue:[searchForSimilarTranslationEnableHolder := true asValue]. 
  1259 	ifTrue:[searchForSimilarTranslationEnableHolder := true asValue].
  1260     ^ searchForSimilarTranslationEnableHolder
  1260     ^ searchForSimilarTranslationEnableHolder
  1261 !
  1261 !
  1262 
  1262 
  1263 searchTextHolder
  1263 searchTextHolder
  1264 
  1264 
  1265     searchTextHolder isNil ifTrue:[
  1265     searchTextHolder isNil ifTrue:[
  1266         searchTextHolder := ValueHolder new.
  1266 	searchTextHolder := ValueHolder new.
  1267 "/ if your app needs to be notified of changes, uncomment one of the lines below:
  1267 "/ if your app needs to be notified of changes, uncomment one of the lines below:
  1268 "/       userSelectedHolder addDependent:self.
  1268 "/       userSelectedHolder addDependent:self.
  1269 "/       userSelectedHolder onChangeSend:#searchTextHolderChanged to:self.
  1269 "/       userSelectedHolder onChangeSend:#searchTextHolderChanged to:self.
  1270     ].
  1270     ].
  1271     ^ searchTextHolder.
  1271     ^ searchTextHolder.
  1274 !
  1274 !
  1275 
  1275 
  1276 searchTextModifiedHolder
  1276 searchTextModifiedHolder
  1277 
  1277 
  1278     searchTextModifiedHolder isNil ifTrue:[
  1278     searchTextModifiedHolder isNil ifTrue:[
  1279         searchTextModifiedHolder := false asValue .
  1279 	searchTextModifiedHolder := false asValue .
  1280 "/ if your app needs to be notified of changes, uncomment one of the lines below:
  1280 "/ if your app needs to be notified of changes, uncomment one of the lines below:
  1281 "/       searchTextModifiedHolder addDependent:self.
  1281 "/       searchTextModifiedHolder addDependent:self.
  1282        searchTextModifiedHolder onChangeSend:#searchTextModifiedHolderChanged to:self.
  1282        searchTextModifiedHolder onChangeSend:#searchTextModifiedHolderChanged to:self.
  1283     ].
  1283     ].
  1284     ^ searchTextModifiedHolder.
  1284     ^ searchTextModifiedHolder.
  1286     "Created: / 15-06-2007 / 18:07:19 / Administrador"
  1286     "Created: / 15-06-2007 / 18:07:19 / Administrador"
  1287 !
  1287 !
  1288 
  1288 
  1289 selectedKeyRow
  1289 selectedKeyRow
  1290     selectedKeyRow isNil ifTrue:[
  1290     selectedKeyRow isNil ifTrue:[
  1291         selectedKeyRow := ValueHolder new.
  1291 	selectedKeyRow := ValueHolder new.
  1292         selectedKeyRow onChangeSend:#selectionChanged to:self.
  1292 	selectedKeyRow onChangeSend:#selectionChanged to:self.
  1293     ].
  1293     ].
  1294     ^ selectedKeyRow.
  1294     ^ selectedKeyRow.
  1295 !
  1295 !
  1296 
  1296 
  1297 showMissingTranslationsOnly
  1297 showMissingTranslationsOnly
  1298     showMissingTranslationsOnly isNil ifTrue:[
  1298     showMissingTranslationsOnly isNil ifTrue:[
  1299         showMissingTranslationsOnly := false asValue.
  1299 	showMissingTranslationsOnly := false asValue.
  1300         showMissingTranslationsOnly onChangeSend:#showMissingTranslationsOnlyChanged to:self.
  1300 	showMissingTranslationsOnly onChangeSend:#showMissingTranslationsOnlyChanged to:self.
  1301     ].
  1301     ].
  1302     ^ showMissingTranslationsOnly.
  1302     ^ showMissingTranslationsOnly.
  1303 !
  1303 !
  1304 
  1304 
  1305 shownLanguages
  1305 shownLanguages
  1306     shownLanguages isNil ifTrue:[
  1306     shownLanguages isNil ifTrue:[
  1307         shownLanguages := List new.
  1307 	shownLanguages := List new.
  1308         shownLanguages addAll:(self languagesList).
  1308 	shownLanguages addAll:(self languagesList).
  1309         shownLanguages onChangeSend:#shownLanguagesChanged to:self.
  1309 	shownLanguages onChangeSend:#shownLanguagesChanged to:self.
  1310     ].
  1310     ].
  1311     ^ shownLanguages.
  1311     ^ shownLanguages.
  1312 !
  1312 !
  1313 
  1313 
  1314 stopApplicationIconVisibleHolder
  1314 stopApplicationIconVisibleHolder
  1315     stopApplicationIconVisibleHolder isNil ifTrue:[
  1315     stopApplicationIconVisibleHolder isNil ifTrue:[
  1316         stopApplicationIconVisibleHolder := false asValue.
  1316 	stopApplicationIconVisibleHolder := false asValue.
  1317     ].
  1317     ].
  1318     ^ stopApplicationIconVisibleHolder.
  1318     ^ stopApplicationIconVisibleHolder.
  1319 ! !
  1319 ! !
  1320 
  1320 
  1321 !InternationalLanguageTranslationEditor methodsFor:'change & update'!
  1321 !InternationalLanguageTranslationEditor methodsFor:'change & update'!
  1326     self languageTextModifiedHolder value:true.
  1326     self languageTextModifiedHolder value:true.
  1327 !
  1327 !
  1328 
  1328 
  1329 update:something with:aParameter from:changedObject
  1329 update:something with:aParameter from:changedObject
  1330     changedObject == shownLanguages ifTrue:[
  1330     changedObject == shownLanguages ifTrue:[
  1331          self shownLanguagesChanged.
  1331 	 self shownLanguagesChanged.
  1332          ^ self.
  1332 	 ^ self.
  1333     ].
  1333     ].
  1334     changedObject == languageTextAcceptHolder ifTrue:[
  1334     changedObject == languageTextAcceptHolder ifTrue:[
  1335          self updateLanguageTextModification.
  1335 	 self updateLanguageTextModification.
  1336          ^ self.
  1336 	 ^ self.
  1337     ].
  1337     ].
  1338     changedObject == exampleLanguageSelectionHolder ifTrue:[
  1338     changedObject == exampleLanguageSelectionHolder ifTrue:[
  1339         self updateExampleLanguageText.
  1339 	self updateExampleLanguageText.
  1340         ^ self.
  1340 	^ self.
  1341     ].    
  1341     ].
  1342     changedObject == showMissingTranslationsOnly ifTrue:[
  1342     changedObject == showMissingTranslationsOnly ifTrue:[
  1343         self showMissingTranslationsOnlyChanged.
  1343 	self showMissingTranslationsOnlyChanged.
  1344         ^ self.
  1344 	^ self.
  1345     ]. 
  1345     ].
  1346 !
  1346 !
  1347 
  1347 
  1348 updateCopyPreviousTranslationButtonEnabled
  1348 updateCopyPreviousTranslationButtonEnabled
  1349 
  1349 
  1350      self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled
  1350      self pastePreviousTranslationEnableHolder value: self shouldCopyPreviousTranslationButtonBeEnabled
  1354 
  1354 
  1355     self selectedKeyRow value isNil ifTrue:[^ self].
  1355     self selectedKeyRow value isNil ifTrue:[^ self].
  1356     self exampleLanguageTextHolder value:self currentExampleLanguageText
  1356     self exampleLanguageTextHolder value:self currentExampleLanguageText
  1357 !
  1357 !
  1358 
  1358 
  1359 updateKeyStringsToLanguageMappings           
  1359 updateKeyStringsToLanguageMappings
  1360 
  1360 
  1361       keyStringsToLanguageMappings 
  1361       keyStringsToLanguageMappings
  1362         at:lastSelectedKey 
  1362 	at:lastSelectedKey
  1363         language:lastLanguage 
  1363 	language:lastLanguage
  1364         put: self newLanguageText.
  1364 	put: self newLanguageText.
  1365 !
  1365 !
  1366 
  1366 
  1367 updateLanguageAndKeySelection
  1367 updateLanguageAndKeySelection
  1368 
  1368 
  1369     self originalTextHolder value: self selectedKey.
  1369     self originalTextHolder value: self selectedKey.
  1370     self languageTextHolder value: (self languageTextFromSelectedKeyFor: self currentLanguage).
  1370     self languageTextHolder value: (self languageTextFromSelectedKeyFor: self currentLanguage).
  1371     lastLanguage := self currentLanguage.
  1371     lastLanguage := self currentLanguage.
  1372     lastSelectedKey := self selectedKey. 
  1372     lastSelectedKey := self selectedKey.
  1373 !
  1373 !
  1374 
  1374 
  1375 updateLanguageTextModification 
  1375 updateLanguageTextModification
  1376      self languageTextModifiedHolder value ifTrue:[ 
  1376      self languageTextModifiedHolder value ifTrue:[
  1377         (self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
  1377 	(self autoAccept or:[Dialog confirm:'Accept changed translation ?']) ifTrue:[
  1378             self languageTextModifiedHolder value:false.
  1378 	    self languageTextModifiedHolder value:false.
  1379             self languageTextHolder value:languageEditor contents.
  1379 	    self languageTextHolder value:languageEditor contents.
  1380             lastLanguage notNil ifTrue:[self updateKeyStringsToLanguageMappings.]
  1380 	    lastLanguage notNil ifTrue:[self updateKeyStringsToLanguageMappings.]
  1381         ]
  1381 	]
  1382     ].
  1382     ].
  1383 !
  1383 !
  1384 
  1384 
  1385 updateOriginalTextModification
  1385 updateOriginalTextModification
  1386 
  1386 
  1387     |answer|
  1387     |answer|
  1388 
  1388 
  1389         self originalTextModifiedHolder value ifTrue:[ 
  1389 	self originalTextModifiedHolder value ifTrue:[
  1390             answer := OptionBox 
  1390 	    answer := OptionBox
  1391                           request:'Accept changed original text (key) ?' 
  1391 			  request:'Accept changed original text (key) ?'
  1392                           label:'Original text (key) changed'
  1392 			  label:'Original text (key) changed'
  1393                           image:(WarningBox iconBitmap)
  1393 			  image:(WarningBox iconBitmap)
  1394                           buttonLabels:#('Cancel' 'Accept' 'Accept As New')
  1394 			  buttonLabels:#('Cancel' 'Accept' 'Accept As New')
  1395                           values:#(nil #accept #acceptAsNew)
  1395 			  values:#(nil #accept #acceptAsNew)
  1396                           default:#acceptAsNew.
  1396 			  default:#acceptAsNew.
  1397 
  1397 
  1398             answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
  1398 	    answer isNil ifTrue:[^ self originalTextModifiedHolder value:false. ].
  1399             answer == #accept ifTrue:[
  1399 	    answer == #accept ifTrue:[
  1400     self halt.        ].
  1400     self halt.        ].
  1401             answer == #acceptAsNew ifTrue:[
  1401 	    answer == #acceptAsNew ifTrue:[
  1402     self halt.        ].
  1402     self halt.        ].
  1403         ].
  1403 	].
  1404 !
  1404 !
  1405 
  1405 
  1406 updatePasteOriginalButtonEnabled
  1406 updatePasteOriginalButtonEnabled
  1407 
  1407 
  1408      self pasteOriginalEnableHolder value: self shouldPasteOriginalButtonBeEnabled
  1408      self pasteOriginalEnableHolder value: self shouldPasteOriginalButtonBeEnabled
  1416 
  1416 
  1417     val := '' asValue.
  1417     val := '' asValue.
  1418     box := Dialog new.
  1418     box := Dialog new.
  1419     (box addTextLabel:'Select or write the encoder') adjust:#left.
  1419     (box addTextLabel:'Select or write the encoder') adjust:#left.
  1420     box addVerticalSpace.
  1420     box addVerticalSpace.
  1421     characterCollection := CharacterEncoder supportedExternalEncodings 
  1421     characterCollection := CharacterEncoder supportedExternalEncodings
  1422         inject: OrderedCollection new
  1422 	inject: OrderedCollection new
  1423         into:[:collection :each |
  1423 	into:[:collection :each |
  1424             collection add: each first;
  1424 	    collection add: each first;
  1425                         yourself].
  1425 			yourself].
  1426     (box addComboBoxOn:val) list: characterCollection.
  1426     (box addComboBoxOn:val) list: characterCollection.
  1427     box addOkButton.
  1427     box addOkButton.
  1428     box open.
  1428     box open.
  1429     ^val value
  1429     ^val value
  1430 !
  1430 !
  1432 requestEncoderStringFor: lang
  1432 requestEncoderStringFor: lang
  1433   "Returns an encoder string and updates the language's info"
  1433   "Returns an encoder string and updates the language's info"
  1434     |encoderString encoder|
  1434     |encoderString encoder|
  1435     encoderString := self requestEncoderDialog.
  1435     encoderString := self requestEncoderDialog.
  1436     encoderString notEmpty ifTrue:[
  1436     encoderString notEmpty ifTrue:[
  1437         encoder := CharacterEncoder encoderFor: encoderString ifAbsent:nil.
  1437 	encoder := CharacterEncoder encoderFor: encoderString ifAbsent:nil.
  1438         encoder notNil ifTrue:[keyStringsToLanguageMappings atLanguage: lang putEncoder: encoder.].
  1438 	encoder notNil ifTrue:[keyStringsToLanguageMappings atLanguage: lang putEncoder: encoder.].
  1439     ].
  1439     ].
  1440     ^encoderString
  1440     ^encoderString
  1441 !
  1441 !
  1442 
  1442 
  1443 requestFilename  
  1443 requestFilename
  1444 
  1444 
  1445     |aFilename|
  1445     |aFilename|
  1446 
  1446 
  1447     aFilename := Dialog 
  1447     aFilename := Dialog
  1448         requestFileName:(resources string:'Name of resource file:')
  1448 	requestFileName:(resources string:'Name of resource file:')
  1449         default:nil 
  1449 	default:nil
  1450         pattern:'*.rs'.
  1450 	pattern:'*.rs'.
  1451 
  1451 
  1452     aFilename isEmptyOrNil ifTrue:[^ nil ].
  1452     aFilename isEmptyOrNil ifTrue:[^ nil ].
  1453     ^aFilename asFilename
  1453     ^aFilename asFilename
  1454 !
  1454 !
  1455 
  1455 
  1456 requestFilenameFor: lang  
  1456 requestFilenameFor: lang
  1457   "Returns a filename to save the language resource and updates the language's info"
  1457   "Returns a filename to save the language resource and updates the language's info"
  1458     |aFilename|
  1458     |aFilename|
  1459 
  1459 
  1460     aFilename := Dialog 
  1460     aFilename := Dialog
  1461         requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString)
  1461 	requestFileName:(resources string:'Name of resource file to save %1:' with:lang asString)
  1462         default:nil 
  1462 	default:nil
  1463         pattern:'*.rs'.
  1463 	pattern:'*.rs'.
  1464 
  1464 
  1465     aFilename isEmptyOrNil ifTrue:[^ nil ].
  1465     aFilename isEmptyOrNil ifTrue:[^ nil ].
  1466     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
  1466     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
  1467     ^aFilename asFilename
  1467     ^aFilename asFilename
  1468 !
  1468 !
  1469 
  1469 
  1470 requestLanguage
  1470 requestLanguage
  1471     ^ Dialog 
  1471     ^ Dialog
  1472         choose:(resources string:'For which language ?') 
  1472 	choose:(resources string:'For which language ?')
  1473         fromList:languagesList 
  1473 	fromList:languagesList
  1474         lines:10.
  1474 	lines:10.
  1475 !
  1475 !
  1476 
  1476 
  1477 requestLanguageToSave
  1477 requestLanguageToSave
  1478     ^ Dialog 
  1478     ^ Dialog
  1479         choose:'Which language do you want to save?'
  1479 	choose:'Which language do you want to save?'
  1480         fromList:languagesList
  1480 	fromList:languagesList
  1481         lines:10
  1481 	lines:10
  1482 !
  1482 !
  1483 
  1483 
  1484 requestPackage
  1484 requestPackage
  1485     |package allProjects projectsWithResources|
  1485     |package allProjects projectsWithResources|
  1486 
  1486 
  1487     allProjects := Smalltalk allProjectIDs.
  1487     allProjects := Smalltalk allProjectIDs.
  1488     projectsWithResources := allProjects
  1488     projectsWithResources := allProjects
  1489                                 select:[:pID |
  1489 				select:[:pID |
  1490                                     |dir|    
  1490 				    |dir|
  1491                                     dir := Smalltalk projectDirectoryForPackage:pID.    
  1491 				    dir := Smalltalk projectDirectoryForPackage:pID.
  1492                                     (dir asFilename construct:'resources') exists    
  1492 				    (dir asFilename construct:'resources') exists
  1493                                 ].
  1493 				].
  1494 
  1494 
  1495     package := Dialog
  1495     package := Dialog
  1496         requestProject:(resources string:'Name of Package:') 
  1496 	requestProject:(resources string:'Name of Package:')
  1497         from:projectsWithResources
  1497 	from:projectsWithResources
  1498         initialAnswer:LastProject 
  1498 	initialAnswer:LastProject
  1499         suggestions:nil.
  1499 	suggestions:nil.
  1500 
  1500 
  1501     package isEmptyOrNil ifTrue:[^ nil ].
  1501     package isEmptyOrNil ifTrue:[^ nil ].
  1502     LastProject := package.
  1502     LastProject := package.
  1503     ^ package
  1503     ^ package
  1504 ! !
  1504 ! !
  1519 
  1519 
  1520 closeRequest
  1520 closeRequest
  1521     "asks for permission before closing"
  1521     "asks for permission before closing"
  1522 
  1522 
  1523     self hasUnsavedChanges ifTrue:[
  1523     self hasUnsavedChanges ifTrue:[
  1524         (Dialog 
  1524 	(Dialog
  1525             confirm:(resources string:'Close without saving ?')
  1525 	    confirm:(resources string:'Close without saving ?')
  1526             default:false) ifFalse:[
  1526 	    default:false) ifFalse:[
  1527             ^ self
  1527 	    ^ self
  1528         ]
  1528 	]
  1529     ].
  1529     ].
  1530 
  1530 
  1531     super closeRequest
  1531     super closeRequest
  1532 !
  1532 !
  1533 
  1533 
  1599     |key index|
  1599     |key index|
  1600 
  1600 
  1601     key := Dialog request:'New Key:'.
  1601     key := Dialog request:'New Key:'.
  1602     key isEmpty ifTrue:[^self].
  1602     key isEmpty ifTrue:[^self].
  1603     (self includesKey:key) ifFalse:[
  1603     (self includesKey:key) ifFalse:[
  1604         keyStringsToLanguageMappings addKey:key.
  1604 	keyStringsToLanguageMappings addKey:key.
  1605         modified := true.
  1605 	modified := true.
  1606     ].
  1606     ].
  1607    index := keyStringsToLanguageMappings indexOfKey:key.
  1607    index := keyStringsToLanguageMappings indexOfKey:key.
  1608    self selectedKeyRow value:index
  1608    self selectedKeyRow value:index
  1609 !
  1609 !
  1610 
  1610 
  1615     lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name].
  1615     lastNameSpace notNil ifTrue:[defaultNameSpace := lastNameSpace name].
  1616     nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace.
  1616     nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Search String in Name Space:' initialAnswer:defaultNameSpace.
  1617     nameSpace isNil ifTrue:[^self].
  1617     nameSpace isNil ifTrue:[^self].
  1618     nameSpace := Smalltalk at:nameSpace asSymbol.
  1618     nameSpace := Smalltalk at:nameSpace asSymbol.
  1619     nameSpace isNil ifTrue:[
  1619     nameSpace isNil ifTrue:[
  1620         ^Dialog information:(resources string:'No such nameSpace exists.') 
  1620 	^Dialog information:(resources string:'No such nameSpace exists.')
  1621     ].
  1621     ].
  1622     lastNameSpace := nameSpace.
  1622     lastNameSpace := nameSpace.
  1623 !
  1623 !
  1624 
  1624 
  1625 changeLastPackage
  1625 changeLastPackage
  1626 
  1626 
  1627     |package defaultPackage|
  1627     |package defaultPackage|
  1628 
  1628 
  1629     lastPackage notNil ifTrue:[defaultPackage := lastPackage].
  1629     lastPackage notNil ifTrue:[defaultPackage := lastPackage].
  1630     package := Dialog
  1630     package := Dialog
  1631             requestProject:'Package:'
  1631 	    requestProject:'Package:'
  1632             initialAnswer:defaultPackage 
  1632 	    initialAnswer:defaultPackage
  1633             suggestions:#('foo' 'bar' 'baz').
  1633 	    suggestions:#('foo' 'bar' 'baz').
  1634     package isNil ifTrue:[
  1634     package isNil ifTrue:[
  1635         ^ self "/ Dialog information:(resources string:'No such package exists.') 
  1635 	^ self "/ Dialog information:(resources string:'No such package exists.')
  1636     ].
  1636     ].
  1637     lastPackage := package.
  1637     lastPackage := package.
  1638 !
  1638 !
  1639 
  1639 
  1640 extractTranslationsFromClass
  1640 extractTranslationsFromClass
  1641     |aClass newTranslations|
  1641     |aClass newTranslations|
  1642 
  1642 
  1643     aClass := Dialog 
  1643     aClass := Dialog
  1644                 requestClass:'Class to extract translations from:'
  1644 		requestClass:'Class to extract translations from:'
  1645                 okLabel:'OK' 
  1645 		okLabel:'OK'
  1646                 initialAnswer:(lastExtractedClass ? LastExtractedClass).
  1646 		initialAnswer:(lastExtractedClass ? LastExtractedClass).
  1647     aClass isNil ifTrue:[^ self ].
  1647     aClass isNil ifTrue:[^ self ].
  1648 
  1648 
  1649     lastExtractedClass := LastExtractedClass := aClass.
  1649     lastExtractedClass := LastExtractedClass := aClass.
  1650 
  1650 
  1651     newTranslations := self extractTranslationsFromClass:aClass.
  1651     newTranslations := self extractTranslationsFromClass:aClass.
  1658 
  1658 
  1659     self changeLastNameSpace.
  1659     self changeLastNameSpace.
  1660     lastNameSpace isNil ifTrue:[^self.].
  1660     lastNameSpace isNil ifTrue:[^self.].
  1661     newTranslations := OrderedCollection new.
  1661     newTranslations := OrderedCollection new.
  1662     lastNameSpace allClassesDo:[:eachClass |
  1662     lastNameSpace allClassesDo:[:eachClass |
  1663         newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
  1663 	newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
  1664     ].
  1664     ].
  1665     self addAllTranslations:newTranslations.
  1665     self addAllTranslations:newTranslations.
  1666 !
  1666 !
  1667 
  1667 
  1668 extractTranslationsFromProject
  1668 extractTranslationsFromProject
  1677     box label:'Find Translations in Project'.
  1677     box label:'Find Translations in Project'.
  1678 
  1678 
  1679     box showAtPointer.
  1679     box showAtPointer.
  1680 
  1680 
  1681     projectID notNil ifTrue:[
  1681     projectID notNil ifTrue:[
  1682         projectID := projectID withoutSeparators asSymbol.
  1682 	projectID := projectID withoutSeparators asSymbol.
  1683     ].
  1683     ].
  1684     projectID isEmptyOrNil ifTrue:[^ self ].
  1684     projectID isEmptyOrNil ifTrue:[^ self ].
  1685 
  1685 
  1686     lastExtractedProject := LastExtractedProject := projectID.
  1686     lastExtractedProject := LastExtractedProject := projectID.
  1687 
  1687 
  1688     newTranslations := Set new.
  1688     newTranslations := Set new.
  1689 
  1689 
  1690     Smalltalk allClassesDo:[:eachClass |
  1690     Smalltalk allClassesDo:[:eachClass |
  1691         eachClass theNonMetaclass package == projectID ifTrue:[
  1691 	eachClass theNonMetaclass package == projectID ifTrue:[
  1692 "/ eachClass isLoaded ifTrue:[ self halt. ].
  1692 "/ eachClass isLoaded ifTrue:[ self halt. ].
  1693             newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
  1693 	    newTranslations addAll:( self extractTranslationsFromClass:eachClass theNonMetaclass).
  1694         ]
  1694 	]
  1695     ].
  1695     ].
  1696 
  1696 
  1697     self addAllTranslations:newTranslations.
  1697     self addAllTranslations:newTranslations.
  1698 !
  1698 !
  1699 
  1699 
  1707 
  1707 
  1708     missingStrings := OrderedCollection new.
  1708     missingStrings := OrderedCollection new.
  1709     nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil.
  1709     nameSpace := Dialog requestNameSpace:'NameSpace:' title:'Specify NameSpace to look for missing strings' initialAnswer:nil.
  1710     nameSpace := Smalltalk at:nameSpace asSymbol.
  1710     nameSpace := Smalltalk at:nameSpace asSymbol.
  1711     nameSpace isNil ifTrue:[
  1711     nameSpace isNil ifTrue:[
  1712         ^Dialog information:(resources string:'No such nameSpace exists.?') 
  1712 	^Dialog information:(resources string:'No such nameSpace exists.?')
  1713     ].
  1713     ].
  1714 
  1714 
  1715     nameSpace allClassesDo:[:cls |
  1715     nameSpace allClassesDo:[:cls |
  1716         cls theMetaclass methodsDo:[:m |
  1716 	cls theMetaclass methodsDo:[:m |
  1717             m hasResource ifTrue:[
  1717 	    m hasResource ifTrue:[
  1718                 (m resources includesKey:#canvas) ifTrue:[
  1718 		(m resources includesKey:#canvas) ifTrue:[
  1719                     spec := (cls perform:m selector) decodeAsLiteralArray.
  1719 		    spec := (cls perform:m selector) decodeAsLiteralArray.
  1720                     spec do:[:eachComponent |
  1720 		    spec do:[:eachComponent |
  1721                         eachComponent translationKeysDo:[:k | 
  1721 			eachComponent translationKeysDo:[:k |
  1722                             (self includesKey: k) ifFalse:[
  1722 			    (self includesKey: k) ifFalse:[
  1723                                 missingStrings add: k. 
  1723 				missingStrings add: k.
  1724                                 Transcript showCR: k storeString, '                         ', m printString]]
  1724 				Transcript showCR: k storeString, '                         ', m printString]]
  1725                     ]
  1725 		    ]
  1726                 ]
  1726 		]
  1727             ]
  1727 	    ]
  1728         ]
  1728 	]
  1729     ].
  1729     ].
  1730     missingStrings asSet inspect
  1730     missingStrings asSet inspect
  1731 !
  1731 !
  1732 
  1732 
  1733 menuNew
  1733 menuNew
  1734     modified ifTrue:[
  1734     modified ifTrue:[
  1735         (Dialog 
  1735 	(Dialog
  1736             confirm:(resources stringWithCRs:'Modified translations have not been changed.\\Create new translations set anyway ?')
  1736 	    confirm:(resources stringWithCRs:'Modified translations have not been changed.\\Create new translations set anyway ?')
  1737             default:false) ifFalse:[^ self].
  1737 	    default:false) ifFalse:[^ self].
  1738     ].
  1738     ].
  1739 
  1739 
  1740     keyStringsToLanguageMappings initialize.
  1740     keyStringsToLanguageMappings initialize.
  1741     keyStringsToLanguageMappings changed.
  1741     keyStringsToLanguageMappings changed.
  1742 
  1742 
  1747 
  1747 
  1748 menuOpen
  1748 menuOpen
  1749     |aFilename|
  1749     |aFilename|
  1750 
  1750 
  1751     self withWaitCursorDo:[
  1751     self withWaitCursorDo:[
  1752         aFilename := self requestFilename.
  1752 	aFilename := self requestFilename.
  1753         aFilename isNil ifTrue:[^ self ].
  1753 	aFilename isNil ifTrue:[^ self ].
  1754         self readResourceFile:aFilename.
  1754 	self readResourceFile:aFilename.
  1755     ]
  1755     ]
  1756 !
  1756 !
  1757 
  1757 
  1758 menuOpenByPackage
  1758 menuOpenByPackage
  1759     |package|
  1759     |package|
  1760 
  1760 
  1761     self withWaitCursorDo:[
  1761     self withWaitCursorDo:[
  1762         package := self requestPackage.
  1762 	package := self requestPackage.
  1763         package isNil ifTrue:[^ self ].
  1763 	package isNil ifTrue:[^ self ].
  1764         self readResourceFileForPackage:package.
  1764 	self readResourceFileForPackage:package.
  1765     ]
  1765     ]
  1766 !
  1766 !
  1767 
  1767 
  1768 menuSave
  1768 menuSave
  1769 "Saves the language selected in the fileName from where the language resource was obtained."
  1769 "Saves the language selected in the fileName from where the language resource was obtained."
  1774     self saveLanguage: lang
  1774     self saveLanguage: lang
  1775 !
  1775 !
  1776 
  1776 
  1777 menuSaveAll
  1777 menuSaveAll
  1778 "Saves all the languages in the fileName from where the language resource was obtained."
  1778 "Saves all the languages in the fileName from where the language resource was obtained."
  1779     keyStringsToLanguageMappings languagesInUse do:[:each | self saveLanguage: each]. 
  1779     keyStringsToLanguageMappings languagesInUse do:[:each | self saveLanguage: each].
  1780 !
  1780 !
  1781 
  1781 
  1782 menuSaveAs
  1782 menuSaveAs
  1783 "Saves the language selected in the specified fileName."
  1783 "Saves the language selected in the specified fileName."
  1784      |lang aFilename|
  1784      |lang aFilename|
  1785 
  1785 
  1786     lang := self requestLanguageToSave.
  1786     lang := self requestLanguageToSave.
  1787     lang isNil ifTrue:[^ self]. 
  1787     lang isNil ifTrue:[^ self].
  1788     aFilename := self requestFilenameFor:lang.
  1788     aFilename := self requestFilenameFor:lang.
  1789     aFilename isNil ifTrue:[^ self].
  1789     aFilename isNil ifTrue:[^ self].
  1790     self saveResourceFile:aFilename for:lang asSymbol
  1790     self saveResourceFile:aFilename for:lang asSymbol
  1791 !
  1791 !
  1792 
  1792 
  1827     packageDir := Smalltalk packageDirectoryForPackageId:aPackage.
  1827     packageDir := Smalltalk packageDirectoryForPackageId:aPackage.
  1828     resourceDir := packageDir asFilename construct:'resources'.
  1828     resourceDir := packageDir asFilename construct:'resources'.
  1829 
  1829 
  1830     allLanguages := Set new.
  1830     allLanguages := Set new.
  1831     resourceDir directoryContentsAsFilenamesDo:[:eachFile |
  1831     resourceDir directoryContentsAsFilenamesDo:[:eachFile |
  1832         eachFile suffix = 'rs' ifTrue:[
  1832 	eachFile suffix = 'rs' ifTrue:[
  1833             (('##.rs' match:eachFile baseName)
  1833 	    (('##.rs' match:eachFile baseName)
  1834             or:[('##-##.rs' match:eachFile baseName)]) ifTrue:[
  1834 	    or:[('##-##.rs' match:eachFile baseName)]) ifTrue:[
  1835                 allLanguages add:(eachFile withoutSuffix baseName)
  1835 		allLanguages add:(eachFile withoutSuffix baseName)
  1836             ].
  1836 	    ].
  1837         ].
  1837 	].
  1838     ].
  1838     ].
  1839 
  1839 
  1840     allLanguages addAll:languagesList.
  1840     allLanguages addAll:languagesList.
  1841     allLanguages := allLanguages asSortedCollection.
  1841     allLanguages := allLanguages asSortedCollection.
  1842 
  1842 
  1843     lang := Dialog 
  1843     lang := Dialog
  1844         choose:(resources string:'For which language ?')
  1844 	choose:(resources string:'For which language ?')
  1845         fromList:allLanguages 
  1845 	fromList:allLanguages
  1846         values:allLanguages 
  1846 	values:allLanguages
  1847         buttons:(resources array:#('All')) 
  1847 	buttons:(resources array:#('All'))
  1848         values:#(all) 
  1848 	values:#(all)
  1849         lines:10 
  1849 	lines:10
  1850         cancel:nil.
  1850 	cancel:nil.
  1851 
  1851 
  1852     lang isNil ifTrue:[^ self ].
  1852     lang isNil ifTrue:[^ self ].
  1853 
  1853 
  1854     langFile := resourceDir construct:lang,'.rs'.
  1854     langFile := resourceDir construct:lang,'.rs'.
  1855 
  1855 
  1856     lang == #all ifTrue:[
  1856     lang == #all ifTrue:[
  1857         allLanguages do:[:lang |
  1857 	allLanguages do:[:lang |
  1858             self addLanguage:lang.
  1858 	    self addLanguage:lang.
  1859             self readResourceFile:(resourceDir construct:lang,'.rs') asLanguage:lang.
  1859 	    self readResourceFile:(resourceDir construct:lang,'.rs') asLanguage:lang.
  1860         ].
  1860 	].
  1861     ] ifFalse:[
  1861     ] ifFalse:[
  1862         self readResourceFile:langFile asLanguage:lang asSymbol
  1862 	self readResourceFile:langFile asLanguage:lang asSymbol
  1863     ].
  1863     ].
  1864 !
  1864 !
  1865 
  1865 
  1866 removeLanguage
  1866 removeLanguage
  1867     |lang|
  1867     |lang|
  1868 
  1868 
  1869     lang := Dialog choose:'Which language do you want to remove?' fromList:languagesList lines:10.
  1869     lang := Dialog choose:'Which language do you want to remove?' fromList:languagesList lines:10.
  1870     lang isNil ifTrue:[^ self ].
  1870     lang isNil ifTrue:[^ self ].
  1871     (Dialog confirm: 'Are you sure to remove the language ', lang ) ifTrue:[
  1871     (Dialog confirm: 'Are you sure to remove the language ', lang ) ifTrue:[
  1872           self languagesList remove:lang.
  1872 	  self languagesList remove:lang.
  1873           self shownLanguages remove:lang.
  1873 	  self shownLanguages remove:lang.
  1874     ].      
  1874     ].
  1875 !
  1875 !
  1876 
  1876 
  1877 removeTranslation
  1877 removeTranslation
  1878     |rowSelectionIndex selectedKey|
  1878     |rowSelectionIndex selectedKey|
  1879 
  1879 
  1880     rowSelectionIndex := self selectedKeyRow value.
  1880     rowSelectionIndex := self selectedKeyRow value.
  1881     rowSelectionIndex isNil ifTrue:[^self].
  1881     rowSelectionIndex isNil ifTrue:[^self].
  1882     rowSelectionIndex ~~ 0 ifTrue:[
  1882     rowSelectionIndex ~~ 0 ifTrue:[
  1883         selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil.
  1883 	selectedKey := keyStringsToLanguageMappings keyAt:rowSelectionIndex ifAbsent:nil.
  1884         selectedKey isNil ifTrue:[^self].
  1884 	selectedKey isNil ifTrue:[^self].
  1885         (Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[
  1885 	(Dialog confirm:(resources string:'Really remove key %1' with:selectedKey)) ifTrue:[
  1886             keyStringsToLanguageMappings removeKey:selectedKey.
  1886 	    keyStringsToLanguageMappings removeKey:selectedKey.
  1887         ].
  1887 	].
  1888     ].
  1888     ].
  1889 !
  1889 !
  1890 
  1890 
  1891 runApplicationAndCollectTranslations
  1891 runApplicationAndCollectTranslations
  1892     |applicationClass newTranslations pseudoPack app startSelector|
  1892     |applicationClass newTranslations pseudoPack app startSelector|
  1893 
  1893 
  1894     monitoredApplication notNil ifTrue:[
  1894     monitoredApplication notNil ifTrue:[
  1895         monitoredApplication terminate.
  1895 	monitoredApplication terminate.
  1896         [monitoredApplication notNil] whileTrue:[
  1896 	[monitoredApplication notNil] whileTrue:[
  1897             Delay waitForSeconds:0.1
  1897 	    Delay waitForSeconds:0.1
  1898         ].
  1898 	].
  1899     ].
  1899     ].
  1900 
  1900 
  1901     applicationClass := Dialog 
  1901     applicationClass := Dialog
  1902                 requestClass:'Application class to start and collect translations from:'
  1902 		requestClass:'Application class to start and collect translations from:'
  1903                 okLabel:'OK' 
  1903 		okLabel:'OK'
  1904                 initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ).
  1904 		initialAnswer:(lastExtractedApplicationClass ? LastExtractedApplicationClass ).
  1905     applicationClass isNil ifTrue:[^ self ].
  1905     applicationClass isNil ifTrue:[^ self ].
  1906     applicationClass isNamespace ifTrue:[
  1906     applicationClass isNamespace ifTrue:[
  1907         Dialog warn:'Entered class is a NameSpace'.
  1907 	Dialog warn:'Entered class is a NameSpace'.
  1908         ^ self.
  1908 	^ self.
  1909     ].
  1909     ].
  1910 
  1910 
  1911     applicationClass isVisualStartable ifTrue:[
  1911     applicationClass isVisualStartable ifTrue:[
  1912         startSelector := #open
  1912 	startSelector := #open
  1913     ] ifFalse:[
  1913     ] ifFalse:[
  1914         startSelector := Dialog
  1914 	startSelector := Dialog
  1915                     request:'Entered class seems to be no application class. Ok to start using selector:'
  1915 		    request:'Entered class seems to be no application class. Ok to start using selector:'
  1916                     initialAnswer:((applicationClass respondsTo:#'start')
  1916 		    initialAnswer:((applicationClass respondsTo:#'start')
  1917                                         ifTrue:#'start'
  1917 					ifTrue:#'start'
  1918                                         ifFalse:#'new')
  1918 					ifFalse:#'new')
  1919                     okLabel:'START'
  1919 		    okLabel:'START'
  1920                     title:'Start Application'.
  1920 		    title:'Start Application'.
  1921         startSelector isNil ifTrue:[
  1921 	startSelector isNil ifTrue:[
  1922             ^ self
  1922 	    ^ self
  1923         ].
  1923 	].
  1924         startSelector := startSelector asSymbol.
  1924 	startSelector := startSelector asSymbol.
  1925     ].
  1925     ].
  1926 
  1926 
  1927     lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass.
  1927     lastExtractedApplicationClass := LastExtractedApplicationClass := applicationClass.
  1928 
  1928 
  1929     newTranslations := Set new.
  1929     newTranslations := Set new.
  1932     pseudoPack realResourcePack:(applicationClass classResources).
  1932     pseudoPack realResourcePack:(applicationClass classResources).
  1933 
  1933 
  1934     self stopApplicationIconVisibleHolder value:true.
  1934     self stopApplicationIconVisibleHolder value:true.
  1935 
  1935 
  1936     monitoredApplication := [
  1936     monitoredApplication := [
  1937         [
  1937 	[
  1938             app := applicationClass new.
  1938 	    app := applicationClass new.
  1939             app perform:startSelector.
  1939 	    app perform:startSelector.
  1940             app window waitUntilVisible.
  1940 	    app window waitUntilVisible.
  1941             app window waitUntilClosed.
  1941 	    app window waitUntilClosed.
  1942         ] ensure:[
  1942 	] ensure:[
  1943             app closeRequest.
  1943 	    app closeRequest.
  1944             self stopApplicationIconVisibleHolder value:false.
  1944 	    self stopApplicationIconVisibleHolder value:false.
  1945             monitoredApplication := nil.
  1945 	    monitoredApplication := nil.
  1946         ].
  1946 	].
  1947     ] fork.
  1947     ] fork.
  1948 !
  1948 !
  1949 
  1949 
  1950 searchStringInLastNameSpace
  1950 searchStringInLastNameSpace
  1951 
  1951 
  1955     selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
  1955     selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
  1956     browser := NewSystemBrowser new "open".
  1956     browser := NewSystemBrowser new "open".
  1957     browser allButOpen.
  1957     browser allButOpen.
  1958     lastSearchPatterns := browser lastSearchPatterns.
  1958     lastSearchPatterns := browser lastSearchPatterns.
  1959     (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
  1959     (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
  1960         browser lastSearchPatterns addFirst: selectedKey
  1960 	browser lastSearchPatterns addFirst: selectedKey
  1961     ].
  1961     ].
  1962     SearchDialog lastStringSearchArea: #currentNameSpace.
  1962     SearchDialog lastStringSearchArea: #currentNameSpace.
  1963     lastNameSpace isNil ifTrue:[
  1963     lastNameSpace isNil ifTrue:[
  1964         self changeLastNameSpace.
  1964 	self changeLastNameSpace.
  1965     ].
  1965     ].
  1966     lastNameSpace notNil ifTrue:[
  1966     lastNameSpace notNil ifTrue:[
  1967 "/        browser navigationState selectedClasses value: lastNameSpace allClasses.
  1967 "/        browser navigationState selectedClasses value: lastNameSpace allClasses.
  1968         browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name).
  1968 	browser navigationState nameSpaceFilter value: (OrderedCollection with:lastNameSpace name).
  1969         browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name).
  1969 	browser navigationState selectedNamespaces value: (OrderedCollection with:lastNameSpace name).
  1970     ].
  1970     ].
  1971     self withWaitCursorDo:[
  1971     self withWaitCursorDo:[
  1972         browser browseMenuMethodsWithString
  1972 	browser browseMenuMethodsWithString
  1973     ].
  1973     ].
  1974 !
  1974 !
  1975 
  1975 
  1976 searchStringInLastPackage
  1976 searchStringInLastPackage
  1977 
  1977 
  1981     selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
  1981     selectedKey isNil ifTrue:[^Dialog information: 'No selected key'].
  1982     browser := NewSystemBrowser new "open".
  1982     browser := NewSystemBrowser new "open".
  1983     browser allButOpen.
  1983     browser allButOpen.
  1984     lastSearchPatterns := browser lastSearchPatterns.
  1984     lastSearchPatterns := browser lastSearchPatterns.
  1985     (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
  1985     (lastSearchPatterns notNil and:[lastSearchPatterns first ~= selectedKey]) ifTrue:[
  1986         browser lastSearchPatterns addFirst: selectedKey
  1986 	browser lastSearchPatterns addFirst: selectedKey
  1987     ].
  1987     ].
  1988     SearchDialog lastStringSearchArea: #currentPackage.
  1988     SearchDialog lastStringSearchArea: #currentPackage.
  1989     lastPackage isNil ifTrue:[
  1989     lastPackage isNil ifTrue:[
  1990         self changeLastPackage.
  1990 	self changeLastPackage.
  1991     ].
  1991     ].
  1992     lastPackage notNil ifTrue:[
  1992     lastPackage notNil ifTrue:[
  1993 "/        browser navigationState selectedClasses value: lastNameSpace allClasses.
  1993 "/        browser navigationState selectedClasses value: lastNameSpace allClasses.
  1994         browser navigationState packageFilter value: (OrderedCollection with:lastPackage).
  1994 	browser navigationState packageFilter value: (OrderedCollection with:lastPackage).
  1995         browser navigationState selectedProjects value: (OrderedCollection with:lastPackage).
  1995 	browser navigationState selectedProjects value: (OrderedCollection with:lastPackage).
  1996     ].
  1996     ].
  1997     self withWaitCursorDo:[
  1997     self withWaitCursorDo:[
  1998         browser browseMenuMethodsWithString
  1998 	browser browseMenuMethodsWithString
  1999     ].
  1999     ].
  2000 ! !
  2000 ! !
  2001 
  2001 
  2002 !InternationalLanguageTranslationEditor methodsFor:'menus dynamic'!
  2002 !InternationalLanguageTranslationEditor methodsFor:'menus dynamic'!
  2003 
  2003 
  2011     (self shownLanguages includes:newLang) ifFalse:[
  2011     (self shownLanguages includes:newLang) ifFalse:[
  2012 "/        shownLanguagesInOrder := self languagesList
  2012 "/        shownLanguagesInOrder := self languagesList
  2013 "/                                    select:[:lang | (self shownLanguages includes:lang)
  2013 "/                                    select:[:lang | (self shownLanguages includes:lang)
  2014 "/                                                    or:[ lang = newLang ]].
  2014 "/                                                    or:[ lang = newLang ]].
  2015 "/        self shownLanguages contents:shownLanguagesInOrder.
  2015 "/        self shownLanguages contents:shownLanguagesInOrder.
  2016         self shownLanguages add:newLang.
  2016 	self shownLanguages add:newLang.
  2017     ]
  2017     ]
  2018 !
  2018 !
  2019 
  2019 
  2020 isLanguageShown:lang
  2020 isLanguageShown:lang
  2021     ^ self shownLanguages includes:lang
  2021     ^ self shownLanguages includes:lang
  2023 
  2023 
  2024 shownLanguagesMenu
  2024 shownLanguagesMenu
  2025     <resource: #programMenu >
  2025     <resource: #programMenu >
  2026 
  2026 
  2027     ^ [
  2027     ^ [
  2028         |m selected|
  2028 	|m selected|
  2029 
  2029 
  2030         m := Menu new.
  2030 	m := Menu new.
  2031 
  2031 
  2032         self languagesList do:[:lang |
  2032 	self languagesList do:[:lang |
  2033             |item|
  2033 	    |item|
  2034 
  2034 
  2035             item := MenuItem label:lang.
  2035 	    item := MenuItem label:lang.
  2036             item indication:(self languageShownHolderFor:lang).
  2036 	    item indication:(self languageShownHolderFor:lang).
  2037             item hideMenuOnActivated:false.    
  2037 	    item hideMenuOnActivated:false.
  2038             m addItem:item.
  2038 	    m addItem:item.
  2039         ].
  2039 	].
  2040         m
  2040 	m
  2041     ].
  2041     ].
  2042 !
  2042 !
  2043 
  2043 
  2044 toggleLanguageDisplayFor:lang
  2044 toggleLanguageDisplayFor:lang
  2045     (self shownLanguages includes:lang) ifTrue:[
  2045     (self shownLanguages includes:lang) ifTrue:[
  2046         self disableLanguageDisplayFor:lang
  2046 	self disableLanguageDisplayFor:lang
  2047     ] ifFalse:[
  2047     ] ifFalse:[
  2048         self enableLanguageDisplayFor:lang
  2048 	self enableLanguageDisplayFor:lang
  2049     ].
  2049     ].
  2050 ! !
  2050 ! !
  2051 
  2051 
  2052 !InternationalLanguageTranslationEditor methodsFor:'private-key extraction'!
  2052 !InternationalLanguageTranslationEditor methodsFor:'private-key extraction'!
  2053 
  2053 
  2054 addAllTranslations:newTranslations
  2054 addAllTranslations:newTranslations
  2055     |newTranslationKeys stringKeys nonStringKeys|
  2055     |newTranslationKeys stringKeys nonStringKeys|
  2056 
  2056 
  2057     newTranslationKeys := newTranslations select:[:k | k notEmpty and:[k isString not or:[k isBlank not]]].
  2057     newTranslationKeys := newTranslations select:[:k | k notEmpty and:[k isString not or:[k isBlank not]]].
  2058     newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
  2058     newTranslationKeys := newTranslationKeys select:[:k | (keyStringsToLanguageMappings includesKey:k) not].
  2059     newTranslationKeys := newTranslationKeys 
  2059     newTranslationKeys := newTranslationKeys
  2060                                 collect:[:k | 
  2060 				collect:[:k |
  2061                                         (k endsWith:'...') ifTrue:[
  2061 					(k endsWith:'...') ifTrue:[
  2062                                             k copyWithoutLast:3.
  2062 					    k copyWithoutLast:3.
  2063                                         ] ifFalse:[
  2063 					] ifFalse:[
  2064                                             ('.:?' includes:k last) ifTrue:[
  2064 					    ('.:?' includes:k last) ifTrue:[
  2065                                                 k copyWithoutLast:1.
  2065 						k copyWithoutLast:1.
  2066                                             ] ifFalse:[
  2066 					    ] ifFalse:[
  2067                                                 k
  2067 						k
  2068                                         ]]].
  2068 					]]].
  2069     newTranslationKeys := newTranslationKeys asSet.
  2069     newTranslationKeys := newTranslationKeys asSet.
  2070 
  2070 
  2071     newTranslationKeys notEmpty ifTrue:[
  2071     newTranslationKeys notEmpty ifTrue:[
  2072         stringKeys := newTranslationKeys select:[:k | k isString].
  2072 	stringKeys := newTranslationKeys select:[:k | k isString].
  2073         nonStringKeys := newTranslationKeys select:[:k | k isString not].
  2073 	nonStringKeys := newTranslationKeys select:[:k | k isString not].
  2074 
  2074 
  2075         stringKeys := stringKeys asSortedCollection.
  2075 	stringKeys := stringKeys asSortedCollection.
  2076         keyStringsToLanguageMappings addKeys:stringKeys.
  2076 	keyStringsToLanguageMappings addKeys:stringKeys.
  2077         keyStringsToLanguageMappings addKeys:nonStringKeys.
  2077 	keyStringsToLanguageMappings addKeys:nonStringKeys.
  2078         modified := true.
  2078 	modified := true.
  2079     ].
  2079     ].
  2080 !
  2080 !
  2081 
  2081 
  2082 extractTranslationsFromClass:aClass
  2082 extractTranslationsFromClass:aClass
  2083     |newTranslations|
  2083     |newTranslations|
  2084 
  2084 
  2085     newTranslations := Set new.
  2085     newTranslations := Set new.
  2086 
  2086 
  2087     self withWaitCursorDo:[
  2087     self withWaitCursorDo:[
  2088         "/ now, the hard part:
  2088 	"/ now, the hard part:
  2089         "/ possible translations are in the specs,
  2089 	"/ possible translations are in the specs,
  2090         "/ and all arguments to (resources string:) messages.
  2090 	"/ and all arguments to (resources string:) messages.
  2091         aClass instAndClassMethodsDo:[:eachMethod |
  2091 	aClass instAndClassMethodsDo:[:eachMethod |
  2092             newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ).
  2092 	    newTranslations addAll:( self extractTranslationsFromMethod:eachMethod ).
  2093         ].
  2093 	].
  2094     ].
  2094     ].
  2095     ^ newTranslations
  2095     ^ newTranslations
  2096 !
  2096 !
  2097 
  2097 
  2098 extractTranslationsFromHelpSpecMethod:aMethod
  2098 extractTranslationsFromHelpSpecMethod:aMethod
  2099     |codeStrings matcher parseTree resourceKeys|
  2099     |codeStrings matcher parseTree resourceKeys|
  2100 
  2100 
  2101     parseTree := RBParser 
  2101     parseTree := RBParser
  2102             parseMethod:aMethod source 
  2102 	    parseMethod:aMethod source
  2103             onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
  2103 	    onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
  2104                                   nil].
  2104 				  nil].
  2105     parseTree isNil ifTrue:[^ #() ].
  2105     parseTree isNil ifTrue:[^ #() ].
  2106 
  2106 
  2107     codeStrings  := 
  2107     codeStrings  :=
  2108         #(
  2108 	#(
  2109                 '`@dict addPairsFrom: `#helpKeysAndStrings'
  2109 		'`@dict addPairsFrom: `#helpKeysAndStrings'
  2110         ).
  2110 	).
  2111 
  2111 
  2112     resourceKeys := Set new.
  2112     resourceKeys := Set new.
  2113 
  2113 
  2114     matcher := ParseTreeSearcher new.
  2114     matcher := ParseTreeSearcher new.
  2115     matcher 
  2115     matcher
  2116         matchesAnyOf: codeStrings 
  2116 	matchesAnyOf: codeStrings
  2117         do: [:aNode :answer |
  2117 	do: [:aNode :answer |
  2118                 |sel argNode arg|
  2118 		|sel argNode arg|
  2119 
  2119 
  2120                 sel := aNode selector.
  2120 		sel := aNode selector.
  2121                 (sel startsWith:'addPairsFrom:') ifTrue:[
  2121 		(sel startsWith:'addPairsFrom:') ifTrue:[
  2122                     argNode := aNode arguments at:1.
  2122 		    argNode := aNode arguments at:1.
  2123                     argNode isLiteral ifTrue:[
  2123 		    argNode isLiteral ifTrue:[
  2124                         arg := argNode value.
  2124 			arg := argNode value.
  2125                         arg isArray ifTrue:[
  2125 			arg isArray ifTrue:[
  2126                             arg doWithIndex:[:el :index |
  2126 			    arg doWithIndex:[:el :index |
  2127                                 index even ifTrue:[
  2127 				index even ifTrue:[
  2128                                     el isString ifTrue:[    
  2128 				    el isString ifTrue:[
  2129                                         resourceKeys add:el.
  2129 					resourceKeys add:el.
  2130                                     ]
  2130 				    ]
  2131                                 ].
  2131 				].
  2132                             ].
  2132 			    ].
  2133                         ] ifFalse:[
  2133 			] ifFalse:[
  2134                             Transcript 
  2134 			    Transcript
  2135                                 showCR:(resources 
  2135 				showCR:(resources
  2136                                         string:'Cannot derive resourceKey from non-array in %1 in %2'
  2136 					string:'Cannot derive resourceKey from non-array in %1 in %2'
  2137                                         with:argNode formattedCode
  2137 					with:argNode formattedCode
  2138                                         with:aMethod selector).
  2138 					with:aMethod selector).
  2139                         ].
  2139 			].
  2140                     ] ifFalse:[
  2140 		    ] ifFalse:[
  2141                         Transcript 
  2141 			Transcript
  2142                             showCR:(resources 
  2142 			    showCR:(resources
  2143                                         string:'Cannot derive resourceKey from non-literal: %1 in %2'
  2143 					string:'Cannot derive resourceKey from non-literal: %1 in %2'
  2144                                         with:argNode formattedCode
  2144 					with:argNode formattedCode
  2145                                         with:aMethod selector).
  2145 					with:aMethod selector).
  2146                     ].
  2146 		    ].
  2147                 ].
  2147 		].
  2148                 aNode
  2148 		aNode
  2149             ].
  2149 	    ].
  2150 
  2150 
  2151     matcher executeTree: parseTree initialAnswer: nil.
  2151     matcher executeTree: parseTree initialAnswer: nil.
  2152     ^ resourceKeys
  2152     ^ resourceKeys
  2153 !
  2153 !
  2154 
  2154 
  2157 
  2157 
  2158     menu := aMethod mclass theNonMetaclass perform:aMethod selector.
  2158     menu := aMethod mclass theNonMetaclass perform:aMethod selector.
  2159     menu isNil ifTrue:[ ^ #() ].
  2159     menu isNil ifTrue:[ ^ #() ].
  2160 
  2160 
  2161     (menu isKindOf:Menu) ifFalse:[
  2161     (menu isKindOf:Menu) ifFalse:[
  2162         menu := Menu new fromLiteralArrayEncoding:menu
  2162 	menu := Menu new fromLiteralArrayEncoding:menu
  2163     ].
  2163     ].
  2164 
  2164 
  2165     resourceKeys := Set new.
  2165     resourceKeys := Set new.
  2166     menu allItemsDo:[:aMenuItem |
  2166     menu allItemsDo:[:aMenuItem |
  2167         aMenuItem translateLabel ifTrue:[
  2167 	aMenuItem translateLabel ifTrue:[
  2168             aMenuItem isSeparatorItem ifFalse:[
  2168 	    aMenuItem isSeparatorItem ifFalse:[
  2169                 resourceKeys add:aMenuItem label.
  2169 		resourceKeys add:aMenuItem label.
  2170             ]
  2170 	    ]
  2171         ]
  2171 	]
  2172     ].
  2172     ].
  2173     ^ resourceKeys
  2173     ^ resourceKeys
  2174 !
  2174 !
  2175 
  2175 
  2176 extractTranslationsFromMethod:aMethod
  2176 extractTranslationsFromMethod:aMethod
  2177     |mResources|
  2177     |mResources|
  2178 
  2178 
  2179     mResources := aMethod resources.
  2179     mResources := aMethod resources.
  2180     mResources notNil ifTrue:[
  2180     mResources notNil ifTrue:[
  2181         (mResources includesKey:#menu) ifTrue:[
  2181 	(mResources includesKey:#menu) ifTrue:[
  2182              ^ self extractTranslationsFromMenuSpecMethod:aMethod.
  2182 	     ^ self extractTranslationsFromMenuSpecMethod:aMethod.
  2183         ].
  2183 	].
  2184         (mResources includesKey:#canvas) ifTrue:[
  2184 	(mResources includesKey:#canvas) ifTrue:[
  2185              ^ self extractTranslationsFromUISpecMethod:aMethod.
  2185 	     ^ self extractTranslationsFromUISpecMethod:aMethod.
  2186         ].
  2186 	].
  2187         (mResources includesKey:#help) ifTrue:[
  2187 	(mResources includesKey:#help) ifTrue:[
  2188              ^ self extractTranslationsFromHelpSpecMethod:aMethod.
  2188 	     ^ self extractTranslationsFromHelpSpecMethod:aMethod.
  2189         ].
  2189 	].
  2190         (mResources includesKey:#tableColumns) ifTrue:[
  2190 	(mResources includesKey:#tableColumns) ifTrue:[
  2191              ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod.
  2191 	     ^ self extractTranslationsFromTableColumnsSpecMethod:aMethod.
  2192         ].
  2192 	].
  2193 
  2193 
  2194         ^ self extractTranslationsFromSpecMethod:aMethod.
  2194 	^ self extractTranslationsFromSpecMethod:aMethod.
  2195     ].
  2195     ].
  2196     ^ self extractTranslationsFromMethodsCode:aMethod
  2196     ^ self extractTranslationsFromMethodsCode:aMethod
  2197 !
  2197 !
  2198 
  2198 
  2199 extractTranslationsFromMethodsCode:aMethod
  2199 extractTranslationsFromMethodsCode:aMethod
  2200 "/method:mthd selector:sel inClass:cls matchesParseTreeMatcher:aMatcher
  2200 "/method:mthd selector:sel inClass:cls matchesParseTreeMatcher:aMatcher
  2201     |codeStrings matcher parseTree resourceKeys|
  2201     |codeStrings matcher parseTree resourceKeys|
  2202 
  2202 
  2203     parseTree := RBParser 
  2203     parseTree := RBParser
  2204             parseMethod:aMethod source 
  2204 	    parseMethod:aMethod source
  2205             onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
  2205 	    onError: [:str :pos | Transcript showCR:str. Transcript showCR:pos.
  2206                                   nil].
  2206 				  nil].
  2207     parseTree isNil ifTrue:[^ #() ].
  2207     parseTree isNil ifTrue:[^ #() ].
  2208 
  2208 
  2209     codeStrings  := 
  2209     codeStrings  :=
  2210         #(
  2210 	#(
  2211                 'resources `@msg: `@args'
  2211 		'resources `@msg: `@args'
  2212                 'self resources `@msg: `@args'
  2212 		'self resources `@msg: `@args'
  2213                 'self class resources `@msg: `@args'
  2213 		'self class resources `@msg: `@args'
  2214                 'self classResources `@msg: `@args'
  2214 		'self classResources `@msg: `@args'
  2215         ).
  2215 	).
  2216 
  2216 
  2217     resourceKeys := Set new.
  2217     resourceKeys := Set new.
  2218 
  2218 
  2219     matcher := ParseTreeSearcher new.
  2219     matcher := ParseTreeSearcher new.
  2220     matcher 
  2220     matcher
  2221         matchesAnyOf: codeStrings 
  2221 	matchesAnyOf: codeStrings
  2222         do: [:aNode :answer |
  2222 	do: [:aNode :answer |
  2223                 |sel keyStringArgNode keyStringArg|
  2223 		|sel keyStringArgNode keyStringArg|
  2224 
  2224 
  2225                 sel := aNode selector.
  2225 		sel := aNode selector.
  2226                 ((sel startsWith:'string:') or:[(sel startsWith:'at:')]) ifTrue:[
  2226 		((sel startsWith:'string:') or:[(sel startsWith:'at:')]) ifTrue:[
  2227                     keyStringArgNode := aNode arguments at:1.
  2227 		    keyStringArgNode := aNode arguments at:1.
  2228                     keyStringArgNode isLiteral ifTrue:[
  2228 		    keyStringArgNode isLiteral ifTrue:[
  2229                         keyStringArg := keyStringArgNode value.
  2229 			keyStringArg := keyStringArgNode value.
  2230                         keyStringArg isString ifTrue:[
  2230 			keyStringArg isString ifTrue:[
  2231                             resourceKeys add:keyStringArg.
  2231 			    resourceKeys add:keyStringArg.
  2232                         ] ifFalse:[
  2232 			] ifFalse:[
  2233                             Transcript 
  2233 			    Transcript
  2234                                 showCR:(resources 
  2234 				showCR:(resources
  2235                                         string:'Cannot derive resourceKey from non-string: %1 in %2'
  2235 					string:'Cannot derive resourceKey from non-string: %1 in %2'
  2236                                         with:keyStringArgNode formattedCode
  2236 					with:keyStringArgNode formattedCode
  2237                                         with:aMethod selector).
  2237 					with:aMethod selector).
  2238                         ].
  2238 			].
  2239                     ] ifFalse:[
  2239 		    ] ifFalse:[
  2240                         Transcript 
  2240 			Transcript
  2241                             showCR:(resources 
  2241 			    showCR:(resources
  2242                                         string:'Cannot derive resourceKey from non-literal: %1 in %2'
  2242 					string:'Cannot derive resourceKey from non-literal: %1 in %2'
  2243                                         with:keyStringArgNode formattedCode
  2243 					with:keyStringArgNode formattedCode
  2244                                         with:aMethod selector).
  2244 					with:aMethod selector).
  2245                     ].
  2245 		    ].
  2246                 ].
  2246 		].
  2247                 aNode
  2247 		aNode
  2248             ].
  2248 	    ].
  2249 
  2249 
  2250     matcher executeTree: parseTree initialAnswer: nil.
  2250     matcher executeTree: parseTree initialAnswer: nil.
  2251     ^ resourceKeys
  2251     ^ resourceKeys
  2252 !
  2252 !
  2253 
  2253 
  2260 
  2260 
  2261     columnDescription := aMethod mclass theNonMetaclass perform:aMethod selector.
  2261     columnDescription := aMethod mclass theNonMetaclass perform:aMethod selector.
  2262     columnDescription isNil ifTrue:[ ^ #() ].
  2262     columnDescription isNil ifTrue:[ ^ #() ].
  2263 
  2263 
  2264     (columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[
  2264     (columnDescription first isKindOf:DataSetColumnSpec) ifFalse:[
  2265         columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el].
  2265 	columnDescription := columnDescription collect:[:el | DataSetColumnSpec new fromLiteralArrayEncoding:el].
  2266     ].
  2266     ].
  2267 
  2267 
  2268     resourceKeys := Set new.
  2268     resourceKeys := Set new.
  2269     columnDescription do:[:aColumnSpec |
  2269     columnDescription do:[:aColumnSpec |
  2270         aColumnSpec translateLabel ifTrue:[
  2270 	aColumnSpec translateLabel ifTrue:[
  2271             resourceKeys add:aColumnSpec label.
  2271 	    resourceKeys add:aColumnSpec label.
  2272         ]
  2272 	]
  2273     ].
  2273     ].
  2274     ^ resourceKeys
  2274     ^ resourceKeys
  2275 !
  2275 !
  2276 
  2276 
  2277 extractTranslationsFromUISpecMethod:aMethod
  2277 extractTranslationsFromUISpecMethod:aMethod
  2279 
  2279 
  2280     spec := aMethod mclass theNonMetaclass perform:aMethod selector.
  2280     spec := aMethod mclass theNonMetaclass perform:aMethod selector.
  2281     spec isNil ifTrue:[ ^ #() ].
  2281     spec isNil ifTrue:[ ^ #() ].
  2282 
  2282 
  2283     (spec isKindOf:UISpecification) ifFalse:[
  2283     (spec isKindOf:UISpecification) ifFalse:[
  2284         spec := UISpecification from:spec
  2284 	spec := UISpecification from:spec
  2285     ].
  2285     ].
  2286 
  2286 
  2287     resourceKeys := Set new.
  2287     resourceKeys := Set new.
  2288 
  2288 
  2289     visitor := UISpecVisitor new.
  2289     visitor := UISpecVisitor new.
  2292     ^ visitor translatedLabels
  2292     ^ visitor translatedLabels
  2293 ! !
  2293 ! !
  2294 
  2294 
  2295 !InternationalLanguageTranslationEditor methodsFor:'queries'!
  2295 !InternationalLanguageTranslationEditor methodsFor:'queries'!
  2296 
  2296 
  2297 autoAccept                                                   
  2297 autoAccept
  2298 
  2298 
  2299     ^ self autoAcceptHolder value
  2299     ^ self autoAcceptHolder value
  2300 !
  2300 !
  2301 
  2301 
  2302 currentExampleLanguageText           
  2302 currentExampleLanguageText
  2303    "Returns the language text corresponding for the current selected key and the example language selection"
  2303    "Returns the language text corresponding for the current selected key and the example language selection"
  2304 
  2304 
  2305   ^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value
  2305   ^self languageTextFromSelectedKeyFor: self exampleLanguageSelectionHolder value
  2306 !
  2306 !
  2307 
  2307 
  2314 !
  2314 !
  2315 
  2315 
  2316 exampleLanguageByDefault
  2316 exampleLanguageByDefault
  2317 
  2317 
  2318     ^self shownLanguages isEmpty
  2318     ^self shownLanguages isEmpty
  2319         ifTrue:[nil]
  2319 	ifTrue:[nil]
  2320         ifFalse:[self shownLanguages first]
  2320 	ifFalse:[self shownLanguages first]
  2321 !
  2321 !
  2322 
  2322 
  2323 hasFirstRowSelection
  2323 hasFirstRowSelection
  2324     self selectedKeyRow isNil ifTrue:[^false].
  2324     self selectedKeyRow isNil ifTrue:[^false].
  2325     ^ self selectedKeyRow value > 1
  2325     ^ self selectedKeyRow value > 1
  2343 
  2343 
  2344     ^self searchForSimilarTranslationEnableHolder value
  2344     ^self searchForSimilarTranslationEnableHolder value
  2345 !
  2345 !
  2346 
  2346 
  2347 languageTextFromKey: aKeyIndex for: language
  2347 languageTextFromKey: aKeyIndex for: language
  2348     "Returns the language text corresponding for the aKeyIndex and the received language"    
  2348     "Returns the language text corresponding for the aKeyIndex and the received language"
  2349 
  2349 
  2350     language isNil ifTrue:[^''].
  2350     language isNil ifTrue:[^''].
  2351     ^keyStringsToLanguageMappings at: aKeyIndex language:language.   
  2351     ^keyStringsToLanguageMappings at: aKeyIndex language:language.
  2352 !
  2352 !
  2353 
  2353 
  2354 languageTextFromSelectedKeyFor: language
  2354 languageTextFromSelectedKeyFor: language
  2355     "Returns the language text corresponding for the current selected key and the received language"    
  2355     "Returns the language text corresponding for the current selected key and the received language"
  2356 
  2356 
  2357     ^self languageTextFromKey: self selectedKey for: language 
  2357     ^self languageTextFromKey: self selectedKey for: language
  2358 !
  2358 !
  2359 
  2359 
  2360 shouldCopyPreviousTranslationButtonBeEnabled
  2360 shouldCopyPreviousTranslationButtonBeEnabled
  2361     ^ self hasLanguageSelection 
  2361     ^ self hasLanguageSelection
  2362         and:[self hasFirstRowSelection]
  2362 	and:[self hasFirstRowSelection]
  2363 !
  2363 !
  2364 
  2364 
  2365 shouldPasteOriginalButtonBeEnabled
  2365 shouldPasteOriginalButtonBeEnabled
  2366     ^ self hasLanguageSelection 
  2366     ^ self hasLanguageSelection
  2367         and:[self hasFirstRowSelection]
  2367 	and:[self hasFirstRowSelection]
  2368 !
  2368 !
  2369 
  2369 
  2370 shouldSearchForSimilarTranslation
  2370 shouldSearchForSimilarTranslation
  2371 
  2371 
  2372     self isSearchForSimilarTranslationEnabled ifFalse:[^false].
  2372     self isSearchForSimilarTranslationEnabled ifFalse:[^false].
  2384 !
  2384 !
  2385 
  2385 
  2386 printEditingWarningOn: aStream
  2386 printEditingWarningOn: aStream
  2387 
  2387 
  2388     aStream nextPutAll: ';';
  2388     aStream nextPutAll: ';';
  2389             cr;
  2389 	    cr;
  2390             nextPutAll: '; WARNING:';
  2390 	    nextPutAll: '; WARNING:';
  2391             cr;
  2391 	    cr;
  2392             nextPutAll: '; this file contains national characters';
  2392 	    nextPutAll: '; this file contains national characters';
  2393             cr;
  2393 	    cr;
  2394             nextPutAll: '; DONT EDIT this file with an old vi !!';
  2394 	    nextPutAll: '; DONT EDIT this file with an old vi !!';
  2395             cr;
  2395 	    cr;
  2396             nextPutAll: ';';
  2396 	    nextPutAll: ';';
  2397             cr; 
  2397 	    cr;
  2398             cr.
  2398 	    cr.
  2399 !
  2399 !
  2400 
  2400 
  2401 printEncoderFor: lang on: aStream
  2401 printEncoderFor: lang on: aStream
  2402     |characterEncoder encoderString|
  2402     |characterEncoder encoderString|
  2403 
  2403 
  2404     characterEncoder := self encoderAt: lang.
  2404     characterEncoder := self encoderAt: lang.
  2405     encoderString := characterEncoder isNil 
  2405     encoderString := characterEncoder isNil
  2406         ifTrue:[self requestEncoderStringFor: lang]
  2406 	ifTrue:[self requestEncoderStringFor: lang]
  2407         ifFalse:[characterEncoder nameOfEncoding printString].
  2407 	ifFalse:[characterEncoder nameOfEncoding printString].
  2408 
  2408 
  2409     aStream nextPutAll: '#encoding';
  2409     aStream nextPutAll: '#encoding';
  2410             space;
  2410 	    space;
  2411             nextPutAll: encoderString;
  2411 	    nextPutAll: encoderString;
  2412             cr;
  2412 	    cr;
  2413             cr.
  2413 	    cr.
  2414 !
  2414 !
  2415 
  2415 
  2416 printLanguage: lang on: aStream
  2416 printLanguage: lang on: aStream
  2417 
  2417 
  2418     self printEncoderFor: lang on: aStream.
  2418     self printEncoderFor: lang on: aStream.
  2420     self printLanguageMappingsFor: lang on: aStream.
  2420     self printLanguageMappingsFor: lang on: aStream.
  2421 !
  2421 !
  2422 
  2422 
  2423 printLanguageMappingsFor: lang on: aStream
  2423 printLanguageMappingsFor: lang on: aStream
  2424 
  2424 
  2425     |orderedAssociations maxKeySize characterEncoder|   
  2425     |orderedAssociations maxKeySize characterEncoder|
  2426 
  2426 
  2427     characterEncoder := self encoderAt: lang.
  2427     characterEncoder := self encoderAt: lang.
  2428     characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
  2428     characterEncoder isNil ifTrue:[ characterEncoder := CharacterEncoder::NullEncoder ].
  2429     orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang. 
  2429     orderedAssociations := keyStringsToLanguageMappings orderedLanguageMappingsAssociationsFor: lang.
  2430 
  2430 
  2431     maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.     
  2431     maxKeySize := keyStringsToLanguageMappings maxKeySizeForLanguage: lang.
  2432 
  2432 
  2433     orderedAssociations do:[:association |
  2433     orderedAssociations do:[:association |
  2434         aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ; 
  2434 	aStream nextPutAll: (association key storeString paddedTo: maxKeySize) ;
  2435             nextPutAll: (String new: 10);
  2435 	    nextPutAll: (String new: 10);
  2436             nextPutAll: (characterEncoder encodeString: association value) storeString;
  2436 	    nextPutAll: (characterEncoder encodeString: association value) storeString;
  2437             cr.
  2437 	    cr.
  2438         ].
  2438 	].
  2439 !
  2439 !
  2440 
  2440 
  2441 readResourceFile:aFilename asLanguage:lang
  2441 readResourceFile:aFilename asLanguage:lang
  2442     |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
  2442     |resourcePack inStream lineString encoding decoder sortedKeys remainingKeys|
  2443 
  2443 
  2444     aFilename exists ifFalse:[
  2444     aFilename exists ifFalse:[
  2445         Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName).
  2445 	Dialog information:(resources string:'Language file: "%1" does not exist' with:aFilename baseName).
  2446         ^ self 
  2446 	^ self
  2447     ].
  2447     ].
  2448 
  2448 
  2449     resourcePack := ResourcePack new.
  2449     resourcePack := ResourcePack new.
  2450 
  2450 
  2451     inStream := aFilename readStream.
  2451     inStream := aFilename readStream.
  2452     [inStream atEnd] whileFalse:[
  2452     [inStream atEnd] whileFalse:[
  2453         lineString := inStream nextLine.
  2453 	lineString := inStream nextLine.
  2454         (lineString notEmpty 
  2454 	(lineString notEmpty
  2455         and:[ (lineString startsWith:';') not ]) ifTrue:[
  2455 	and:[ (lineString startsWith:';') not ]) ifTrue:[
  2456             ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
  2456 	    ((lineString startsWith:'#') and:[(lineString startsWith:'#(') not]) ifTrue:[
  2457                 lineString := (lineString copyFrom:2) withoutSeparators.
  2457 		lineString := (lineString copyFrom:2) withoutSeparators.
  2458                 (lineString startsWith:'encoding ') ifTrue:[
  2458 		(lineString startsWith:'encoding ') ifTrue:[
  2459                     encoding := ResourcePack extractEncodingFromLine:lineString.
  2459 		    encoding := ResourcePack extractEncodingFromLine:lineString.
  2460                     decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
  2460 		    decoder := CharacterEncoder encoderFor:encoding ifAbsent:nil.
  2461                 ].
  2461 		].
  2462             ] ifFalse:[
  2462 	    ] ifFalse:[
  2463                 ResourcePack
  2463 		ResourcePack
  2464                     processResourceLine:lineString 
  2464 		    processResourceLine:lineString
  2465                     encoding:decoder 
  2465 		    encoding:decoder
  2466                     file:aFilename pathName 
  2466 		    file:aFilename pathName
  2467                     printErrorWith:[:msg | Transcript showCR:msg ] 
  2467 		    printErrorWith:[:msg | Transcript showCR:msg ]
  2468                     for:resourcePack
  2468 		    for:resourcePack
  2469                     keepUselessTranslations:true.
  2469 		    keepUselessTranslations:true.
  2470             ].
  2470 	    ].
  2471         ].
  2471 	].
  2472     ].
  2472     ].
  2473     inStream close.                                                  
  2473     inStream close.
  2474 
  2474 
  2475     sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
  2475     sortedKeys := (resourcePack keys select:[:k | k isString]) asSortedCollection.
  2476     remainingKeys := resourcePack keys select:[:k | k isString not].
  2476     remainingKeys := resourcePack keys select:[:k | k isString not].
  2477 
  2477 
  2478     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
  2478     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
  2479     keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder.
  2479     keyStringsToLanguageMappings atLanguage: lang putEncoder: decoder.
  2480 
  2480 
  2481     sortedKeys do:[:k |
  2481     sortedKeys do:[:k |
  2482         keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
  2482 	keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
  2483     ].
  2483     ].
  2484     remainingKeys do:[:k |
  2484     remainingKeys do:[:k |
  2485         keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
  2485 	keyStringsToLanguageMappings at:k language:lang put:(resourcePack at:k) sendChange:false
  2486     ].
  2486     ].
  2487     keyStringsToLanguageMappings changed.
  2487     keyStringsToLanguageMappings changed.
  2488 !
  2488 !
  2489 
  2489 
  2490 saveLanguage: lang
  2490 saveLanguage: lang
  2492     |aFilename|
  2492     |aFilename|
  2493 
  2493 
  2494     lang isNil ifTrue:[^ self].
  2494     lang isNil ifTrue:[^ self].
  2495     aFilename := keyStringsToLanguageMappings filenameAt:lang.
  2495     aFilename := keyStringsToLanguageMappings filenameAt:lang.
  2496     aFilename isNil ifTrue:[
  2496     aFilename isNil ifTrue:[
  2497         aFilename := self requestFilenameFor: lang.
  2497 	aFilename := self requestFilenameFor: lang.
  2498         aFilename isNil ifTrue:[^ self].
  2498 	aFilename isNil ifTrue:[^ self].
  2499     ].
  2499     ].
  2500     self saveResourceFile:aFilename for:lang asSymbol
  2500     self saveResourceFile:aFilename for:lang asSymbol
  2501 !
  2501 !
  2502 
  2502 
  2503 saveResourceFile: aFilename for: lang
  2503 saveResourceFile: aFilename for: lang
  2504 
  2504 
  2505     |aStream |
  2505     |aStream |
  2506 
  2506 
  2507     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
  2507     keyStringsToLanguageMappings atLanguage: lang putFilename: aFilename.
  2508     aStream := FileStream newFileNamed: aFilename.  
  2508     aStream := FileStream newFileNamed: aFilename.
  2509     self printLanguage: lang on: aStream.
  2509     self printLanguage: lang on: aStream.
  2510     aStream flush;
  2510     aStream flush;
  2511             close.
  2511 	    close.
  2512     DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
  2512     DialogBox information: 'The resource file for the language ', lang printString storeString, ' was saved in the file: ', aFilename nameString
  2513 ! !
  2513 ! !
  2514 
  2514 
  2515 !InternationalLanguageTranslationEditor methodsFor:'searching'!
  2515 !InternationalLanguageTranslationEditor methodsFor:'searching'!
  2516 
  2516 
  2532     |searchText rowFoundIndex|
  2532     |searchText rowFoundIndex|
  2533 
  2533 
  2534     searchText := searchTextView contents.
  2534     searchText := searchTextView contents.
  2535     searchText isEmptyOrNil ifTrue:[^self].
  2535     searchText isEmptyOrNil ifTrue:[^self].
  2536     self objectsList isEmpty ifTrue:[^self].
  2536     self objectsList isEmpty ifTrue:[^self].
  2537     rowFoundIndex := self tableView findFirstRowWithString: searchText 
  2537     rowFoundIndex := self tableView findFirstRowWithString: searchText
  2538                 from:1
  2538 		from:1
  2539                 to:self objectsList size
  2539 		to:self objectsList size
  2540                 ignoreCase:self ignoreCaseHolder value.
  2540 		ignoreCase:self ignoreCaseHolder value.
  2541     rowFoundIndex isNil ifTrue:[
  2541     rowFoundIndex isNil ifTrue:[
  2542         self searchTextNotFound.
  2542 	self searchTextNotFound.
  2543         ^self
  2543 	^self
  2544     ].
  2544     ].
  2545     self selectListIndex: rowFoundIndex
  2545     self selectListIndex: rowFoundIndex
  2546 
  2546 
  2547     "Created: / 16-06-2007 / 10:54:51 / Administrador"
  2547     "Created: / 16-06-2007 / 10:54:51 / Administrador"
  2548     "Modified: / 19-06-2007 / 15:38:59 / Administrador"
  2548     "Modified: / 19-06-2007 / 15:38:59 / Administrador"
  2555     searchText := searchTextView contents.
  2555     searchText := searchTextView contents.
  2556     searchText isEmptyOrNil ifTrue:[^self].
  2556     searchText isEmptyOrNil ifTrue:[^self].
  2557     self objectsList isEmpty ifTrue:[^self].
  2557     self objectsList isEmpty ifTrue:[^self].
  2558     currentSelectionIndex := self currentSelectionIndex.
  2558     currentSelectionIndex := self currentSelectionIndex.
  2559     (currentSelectionIndex isNil or:[currentSelectionIndex == 0]) ifTrue:[
  2559     (currentSelectionIndex isNil or:[currentSelectionIndex == 0]) ifTrue:[
  2560         self searchNextTextFromBeginning.
  2560 	self searchNextTextFromBeginning.
  2561         ^self.
  2561 	^self.
  2562     ].
  2562     ].
  2563     listSize := self objectsList size.
  2563     listSize := self objectsList size.
  2564     (currentSelectionIndex == listSize and:[includeCurrentSelection not]) ifTrue:[
  2564     (currentSelectionIndex == listSize and:[includeCurrentSelection not]) ifTrue:[
  2565         self searchNextTextReachEnd.
  2565 	self searchNextTextReachEnd.
  2566         ^self.
  2566 	^self.
  2567     ].
  2567     ].
  2568     fromIndex := includeCurrentSelection
  2568     fromIndex := includeCurrentSelection
  2569         ifTrue:[currentSelectionIndex]
  2569 	ifTrue:[currentSelectionIndex]
  2570         ifFalse:[currentSelectionIndex + 1].
  2570 	ifFalse:[currentSelectionIndex + 1].
  2571     rowFoundIndex := self tableView findFirstRowWithString: searchText 
  2571     rowFoundIndex := self tableView findFirstRowWithString: searchText
  2572                 from:fromIndex
  2572 		from:fromIndex
  2573                 to:listSize
  2573 		to:listSize
  2574                 ignoreCase:self ignoreCaseHolder value.
  2574 		ignoreCase:self ignoreCaseHolder value.
  2575     rowFoundIndex isNil ifTrue:[
  2575     rowFoundIndex isNil ifTrue:[
  2576         self searchNextTextReachEnd.
  2576 	self searchNextTextReachEnd.
  2577         ^self
  2577 	^self
  2578     ].
  2578     ].
  2579     self selectListIndex: rowFoundIndex
  2579     self selectListIndex: rowFoundIndex
  2580 
  2580 
  2581     "Created: / 16-06-2007 / 09:20:57 / Administrador"
  2581     "Created: / 16-06-2007 / 09:20:57 / Administrador"
  2582     "Modified: / 19-06-2007 / 15:38:06 / Administrador"
  2582     "Modified: / 19-06-2007 / 15:38:06 / Administrador"
  2600     searchText := searchTextView contents.
  2600     searchText := searchTextView contents.
  2601     searchText isEmptyOrNil ifTrue:[^self].
  2601     searchText isEmptyOrNil ifTrue:[^self].
  2602     self objectsList isEmpty ifTrue:[^self].
  2602     self objectsList isEmpty ifTrue:[^self].
  2603     currentSelectionIndex := self currentSelectionIndex.
  2603     currentSelectionIndex := self currentSelectionIndex.
  2604     currentSelectionIndex == 1 ifTrue:[
  2604     currentSelectionIndex == 1 ifTrue:[
  2605         self searchPreviousTextReachBeginning.
  2605 	self searchPreviousTextReachBeginning.
  2606         ^self.
  2606 	^self.
  2607     ].
  2607     ].
  2608     (currentSelectionIndex isNil or:[currentSelectionIndex == 0])
  2608     (currentSelectionIndex isNil or:[currentSelectionIndex == 0])
  2609         ifTrue:[
  2609 	ifTrue:[
  2610             self searchPreviousTextFromEnd.
  2610 	    self searchPreviousTextFromEnd.
  2611             ^self.
  2611 	    ^self.
  2612         ]
  2612 	]
  2613         ifFalse:[fromIndex := currentSelectionIndex - 1].
  2613 	ifFalse:[fromIndex := currentSelectionIndex - 1].
  2614     rowFoundIndex := self tableView findFirstRowWithString: searchText 
  2614     rowFoundIndex := self tableView findFirstRowWithString: searchText
  2615                 from: fromIndex
  2615 		from: fromIndex
  2616                 to: 1
  2616 		to: 1
  2617                 by: -1
  2617 		by: -1
  2618                 ignoreCase:self ignoreCaseHolder value.
  2618 		ignoreCase:self ignoreCaseHolder value.
  2619     rowFoundIndex isNil ifTrue:[
  2619     rowFoundIndex isNil ifTrue:[
  2620         self searchPreviousTextReachBeginning.
  2620 	self searchPreviousTextReachBeginning.
  2621         ^self
  2621 	^self
  2622     ].
  2622     ].
  2623     self selectListIndex: rowFoundIndex.
  2623     self selectListIndex: rowFoundIndex.
  2624 
  2624 
  2625     "Modified: / 19-06-2007 / 15:38:16 / Administrador"
  2625     "Modified: / 19-06-2007 / 15:38:16 / Administrador"
  2626 !
  2626 !
  2630     |searchText rowFoundIndex|
  2630     |searchText rowFoundIndex|
  2631 
  2631 
  2632     searchText := searchTextView contents.
  2632     searchText := searchTextView contents.
  2633     searchText isEmptyOrNil ifTrue:[^self].
  2633     searchText isEmptyOrNil ifTrue:[^self].
  2634     self objectsList isEmpty ifTrue:[^self].
  2634     self objectsList isEmpty ifTrue:[^self].
  2635     rowFoundIndex := self tableView findFirstRowWithString: searchText 
  2635     rowFoundIndex := self tableView findFirstRowWithString: searchText
  2636                 from: self objectsList size
  2636 		from: self objectsList size
  2637                 to: 1
  2637 		to: 1
  2638                 by: -1
  2638 		by: -1
  2639                 ignoreCase:self ignoreCaseHolder value.
  2639 		ignoreCase:self ignoreCaseHolder value.
  2640     rowFoundIndex isNil ifTrue:[
  2640     rowFoundIndex isNil ifTrue:[
  2641         self searchTextNotFound.
  2641 	self searchTextNotFound.
  2642         ^self
  2642 	^self
  2643     ].
  2643     ].
  2644     self selectListIndex: rowFoundIndex.
  2644     self selectListIndex: rowFoundIndex.
  2645 
  2645 
  2646     "Created: / 16-06-2007 / 10:55:43 / Administrador"
  2646     "Created: / 16-06-2007 / 10:55:43 / Administrador"
  2647     "Modified: / 19-06-2007 / 15:38:26 / Administrador"
  2647     "Modified: / 19-06-2007 / 15:38:26 / Administrador"
  2738     spec := OrderedCollection new.
  2738     spec := OrderedCollection new.
  2739 
  2739 
  2740     spec add:(self class keyTableColumn first).
  2740     spec add:(self class keyTableColumn first).
  2741 
  2741 
  2742     self shownLanguages do:[:lang |
  2742     self shownLanguages do:[:lang |
  2743         |entry|
  2743 	|entry|
  2744 
  2744 
  2745         entry := self class languageTableColumn first.
  2745 	entry := self class languageTableColumn first.
  2746         entry := entry copy replaceAll:#lang with:lang.
  2746 	entry := entry copy replaceAll:#lang with:lang.
  2747         spec add: entry 
  2747 	spec add: entry
  2748     ].
  2748     ].
  2749     ^ spec
  2749     ^ spec
  2750 !
  2750 !
  2751 
  2751 
  2752 keyStringInRow:row
  2752 keyStringInRow:row
  2760 
  2760 
  2761     bottomOffset := 0.
  2761     bottomOffset := 0.
  2762 
  2762 
  2763     searchBarVisible := self searchBoxVisible value.
  2763     searchBarVisible := self searchBoxVisible value.
  2764     searchBarVisible ifTrue:[
  2764     searchBarVisible ifTrue:[
  2765         bottomOffset := bottomOffset - searchBoxView height.
  2765 	bottomOffset := bottomOffset - searchBoxView height.
  2766     ].
  2766     ].
  2767     translationsPanel layout bottomOffset:bottomOffset-1.
  2767     translationsPanel layout bottomOffset:bottomOffset-1.
  2768     translationsPanel container notNil ifTrue:[
  2768     translationsPanel container notNil ifTrue:[
  2769         translationsPanel containerChangedSize.
  2769 	translationsPanel containerChangedSize.
  2770     ].
  2770     ].
  2771 
  2771 
  2772     "Created: / 16-06-2007 / 11:58:25 / Administrador"
  2772     "Created: / 16-06-2007 / 11:58:25 / Administrador"
  2773 ! !
  2773 ! !
  2774 
  2774 
  2786 exampleLanguageSelectionChanged
  2786 exampleLanguageSelectionChanged
  2787 
  2787 
  2788    self updateExampleLanguageText.
  2788    self updateExampleLanguageText.
  2789 !
  2789 !
  2790 
  2790 
  2791 languageTextAccepted                                   
  2791 languageTextAccepted
  2792     |nextRowIndex selRow|
  2792     |nextRowIndex selRow|
  2793 
  2793 
  2794     selRow := self selectedKeyRow value.
  2794     selRow := self selectedKeyRow value.
  2795     selRow notNil ifTrue:[
  2795     selRow notNil ifTrue:[
  2796         keyStringsToLanguageMappings size = selRow
  2796 	keyStringsToLanguageMappings size = selRow
  2797             ifTrue:[ self updateLanguageTextModification.]
  2797 	    ifTrue:[ self updateLanguageTextModification.]
  2798             ifFalse:[ 
  2798 	    ifFalse:[
  2799                 nextRowIndex := selRow + 1.
  2799 		nextRowIndex := selRow + 1.
  2800                 self selectedKeyRow value: nextRowIndex]
  2800 		self selectedKeyRow value: nextRowIndex]
  2801     ].
  2801     ].
  2802 !
  2802 !
  2803 
  2803 
  2804 pasteOriginalInLanguageText
  2804 pasteOriginalInLanguageText
  2805     <resource: #uiCallback>
  2805     <resource: #uiCallback>
  2812     self languageTextModifiedHolder value:true.
  2812     self languageTextModifiedHolder value:true.
  2813 !
  2813 !
  2814 
  2814 
  2815 pastePreviousTranslationInLanguageText
  2815 pastePreviousTranslationInLanguageText
  2816     "Obtain the text from the previous translation and paste it into the languageTextEditor"
  2816     "Obtain the text from the previous translation and paste it into the languageTextEditor"
  2817     
  2817 
  2818     | previousLanguageText previousLanguageRow|
  2818     | previousLanguageText previousLanguageRow|
  2819 
  2819 
  2820     previousLanguageRow := dataSetView at:self selectedKeyRow value - 1
  2820     previousLanguageRow := dataSetView at:self selectedKeyRow value - 1
  2821                 ifAbsent:[^self].
  2821 		ifAbsent:[^self].
  2822     previousLanguageText := previousLanguageRow atLanguage: self currentLanguage.
  2822     previousLanguageText := previousLanguageRow atLanguage: self currentLanguage.
  2823     languageEditor selectAll.
  2823     languageEditor selectAll.
  2824     languageEditor pasteOrReplace:previousLanguageText.
  2824     languageEditor pasteOrReplace:previousLanguageText.
  2825     self languageTextModifiedHolder value:true.
  2825     self languageTextModifiedHolder value:true.
  2826 !
  2826 !
  2832     searchTextView takeFocus.
  2832     searchTextView takeFocus.
  2833 
  2833 
  2834     "Modified: / 16-06-2007 / 11:58:44 / Administrador"
  2834     "Modified: / 16-06-2007 / 11:58:44 / Administrador"
  2835 !
  2835 !
  2836 
  2836 
  2837 selectionChanged                
  2837 selectionChanged
  2838 
  2838 
  2839    self updateOriginalTextModification.
  2839    self updateOriginalTextModification.
  2840    self updateLanguageTextModification.
  2840    self updateLanguageTextModification.
  2841    self updateLanguageAndKeySelection.
  2841    self updateLanguageAndKeySelection.
  2842    self updateExampleLanguageText.
  2842    self updateExampleLanguageText.
  2852 
  2852 
  2853 showMissingTranslationsOnlyChanged
  2853 showMissingTranslationsOnlyChanged
  2854 !
  2854 !
  2855 
  2855 
  2856 shownLanguagesChanged
  2856 shownLanguagesChanged
  2857     self keyStringAndLanguageSelectionTableColumnDescriptionHolder 
  2857     self keyStringAndLanguageSelectionTableColumnDescriptionHolder
  2858         value:(self keyStringAndLanguageSelectionTableColumnDescription).
  2858 	value:(self keyStringAndLanguageSelectionTableColumnDescription).
  2859 !
  2859 !
  2860 
  2860 
  2861 stopApplication
  2861 stopApplication
  2862     |p|
  2862     |p|
  2863 
  2863 
  2864     (p := monitoredApplication) notNil ifTrue:[
  2864     (p := monitoredApplication) notNil ifTrue:[
  2865         p terminate.
  2865 	p terminate.
  2866     ].
  2866     ].
  2867 ! !
  2867 ! !
  2868 
  2868 
  2869 !InternationalLanguageTranslationEditor::AccessCollectingPseudoResourcePack methodsFor:'accessing'!
  2869 !InternationalLanguageTranslationEditor::AccessCollectingPseudoResourcePack methodsFor:'accessing'!
  2870 
  2870 
  2884     self addKey:aKey sendChange:true
  2884     self addKey:aKey sendChange:true
  2885 !
  2885 !
  2886 
  2886 
  2887 addKey:aKey sendChange:aBoolean
  2887 addKey:aKey sendChange:aBoolean
  2888     (keys includes:aKey) ifFalse:[
  2888     (keys includes:aKey) ifFalse:[
  2889         keys add:aKey.
  2889 	keys add:aKey.
  2890         aBoolean ifTrue:[ self changed ].
  2890 	aBoolean ifTrue:[ self changed ].
  2891     ]
  2891     ]
  2892 !
  2892 !
  2893 
  2893 
  2894 addKeys:aCollectionOfKey
  2894 addKeys:aCollectionOfKey
  2895     keys addAll:aCollectionOfKey.
  2895     keys addAll:aCollectionOfKey.
  2896     self changed.
  2896     self changed.
  2897 !
  2897 !
  2898 
  2898 
  2899 addLanguage:lang
  2899 addLanguage:lang
  2900     (languages includes:lang) ifFalse:[
  2900     (languages includes:lang) ifFalse:[
  2901         languages add:lang.
  2901 	languages add:lang.
  2902         perLanguageMappings at:lang put:(OrderedDictionary new).
  2902 	perLanguageMappings at:lang put:(OrderedDictionary new).
  2903     ]
  2903     ]
  2904 !
  2904 !
  2905 
  2905 
  2906 at:aKey language:language
  2906 at:aKey language:language
  2907     ^ (perLanguageMappings at:language) at:aKey ifAbsent:nil
  2907     ^ (perLanguageMappings at:language) at:aKey ifAbsent:nil
  2931 
  2931 
  2932 decoderKey
  2932 decoderKey
  2933    ^#decoder
  2933    ^#decoder
  2934 !
  2934 !
  2935 
  2935 
  2936 encoderAt:lang 
  2936 encoderAt:lang
  2937     ^ (self languageInfoAt:lang) at: self encoderKey ifAbsent:[nil]
  2937     ^ (self languageInfoAt:lang) at: self encoderKey ifAbsent:[nil]
  2938 !
  2938 !
  2939 
  2939 
  2940 encoderKey
  2940 encoderKey
  2941    ^#encoder
  2941    ^#encoder
  2943 
  2943 
  2944 fileNameKey
  2944 fileNameKey
  2945     ^ #filename
  2945     ^ #filename
  2946 !
  2946 !
  2947 
  2947 
  2948 filenameAt:lang 
  2948 filenameAt:lang
  2949     ^ (self languageInfoAt:lang) at: self fileNameKey ifAbsent:[nil]
  2949     ^ (self languageInfoAt:lang) at: self fileNameKey ifAbsent:[nil]
  2950 !
  2950 !
  2951 
  2951 
  2952 keyAt:index
  2952 keyAt:index
  2953     ^ keys at:index ifAbsent:[nil].
  2953     ^ keys at:index ifAbsent:[nil].
  2959 
  2959 
  2960 keys
  2960 keys
  2961     ^ keys
  2961     ^ keys
  2962 !
  2962 !
  2963 
  2963 
  2964 languageInfoAt: lang 
  2964 languageInfoAt: lang
  2965 
  2965 
  2966 ^self perLanguageInfo at: lang ifAbsentPut:[Dictionary new]
  2966 ^self perLanguageInfo at: lang ifAbsentPut:[Dictionary new]
  2967 !
  2967 !
  2968 
  2968 
  2969 languages
  2969 languages
  2990 !
  2990 !
  2991 
  2991 
  2992 removeKey:aKey
  2992 removeKey:aKey
  2993     keys remove:aKey ifAbsent:[].
  2993     keys remove:aKey ifAbsent:[].
  2994     perLanguageMappings do:[:eachMapping |
  2994     perLanguageMappings do:[:eachMapping |
  2995         eachMapping removeKey:aKey ifAbsent:[].
  2995 	eachMapping removeKey:aKey ifAbsent:[].
  2996     ].
  2996     ].
  2997     self changed.
  2997     self changed.
  2998 !
  2998 !
  2999 
  2999 
  3000 rowForKey:aKey
  3000 rowForKey:aKey
  3001     ^ rowPerKey 
  3001     ^ rowPerKey
  3002             at:aKey
  3002 	    at:aKey
  3003             ifAbsentPut:[InternationalLanguageTranslationEditor::LanguageMappingRow new 
  3003 	    ifAbsentPut:[InternationalLanguageTranslationEditor::LanguageMappingRow new
  3004                             key:aKey; mappings:self].
  3004 			    key:aKey; mappings:self].
  3005 !
  3005 !
  3006 
  3006 
  3007 size
  3007 size
  3008     ^ keys size
  3008     ^ keys size
  3009 ! !
  3009 ! !
  3010 
  3010 
  3011 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'enumerating'!
  3011 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'enumerating'!
  3012 
  3012 
  3013 do:aBlock
  3013 do:aBlock
  3014     keys do:[:eachKey |
  3014     keys do:[:eachKey |
  3015         aBlock value:(self rowForKey:eachKey).
  3015 	aBlock value:(self rowForKey:eachKey).
  3016     ].
  3016     ].
  3017 ! !
  3017 ! !
  3018 
  3018 
  3019 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'initialization'!
  3019 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'initialization'!
  3020 
  3020 
  3022     super initialize.
  3022     super initialize.
  3023 
  3023 
  3024     keys := OrderedSet new.
  3024     keys := OrderedSet new.
  3025     languages := OrderedCollection new.
  3025     languages := OrderedCollection new.
  3026     perLanguageMappings := Dictionary new.
  3026     perLanguageMappings := Dictionary new.
  3027     perLanguageInfo := Dictionary new.         
  3027     perLanguageInfo := Dictionary new.
  3028     rowPerKey := Dictionary new.
  3028     rowPerKey := Dictionary new.
  3029 
  3029 
  3030     self addLanguage:#'de'.
  3030     self addLanguage:#'de'.
  3031     self addLanguage:#'fr'.
  3031     self addLanguage:#'fr'.
  3032     self addLanguage:#'es'.
  3032     self addLanguage:#'es'.
  3042     keys add:'no'.
  3042     keys add:'no'.
  3043 
  3043 
  3044     self addLanguage:#'de'.
  3044     self addLanguage:#'de'.
  3045     self addLanguage:#'fr'.
  3045     self addLanguage:#'fr'.
  3046 
  3046 
  3047     self at:'open' language:#'de' put:'öffnen'.    
  3047     self at:'open' language:#'de' put:'öffnen'.
  3048     self at:'close' language:#'de' put:'schliessen'.    
  3048     self at:'close' language:#'de' put:'schließen'.
  3049     self at:'yes' language:#'de' put:'ja'.    
  3049     self at:'yes' language:#'de' put:'ja'.
  3050     self at:'no' language:#'de' put:'nein'.    
  3050     self at:'no' language:#'de' put:'nein'.
  3051     self at:'cancel' language:#'de' put:'abbrechen'.    
  3051     self at:'cancel' language:#'de' put:'abbrechen'.
  3052 
  3052 
  3053     self at:'open' language:#'fr' put:'ouvrir'.    
  3053     self at:'open' language:#'fr' put:'ouvrir'.
  3054     self at:'close' language:#'fr' put:'fermer'.    
  3054     self at:'close' language:#'fr' put:'fermer'.
  3055     self at:'yes' language:#'fr' put:'oui'.    
  3055     self at:'yes' language:#'fr' put:'oui'.
  3056     self at:'no' language:#'fr' put:'non'.    
  3056     self at:'no' language:#'fr' put:'non'.
  3057 ! !
  3057 ! !
  3058 
  3058 
  3059 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'private'!
  3059 !InternationalLanguageTranslationEditor::KeyStringsToLanguageMappings methodsFor:'private'!
  3060 
  3060 
  3061 atLanguage:lang
  3061 atLanguage:lang
  3096 
  3096 
  3097 maxKeySizeForLanguage: lang
  3097 maxKeySizeForLanguage: lang
  3098 
  3098 
  3099 ^(self atLanguage: lang) keys inject: 0 into:[:maxSize :each |
  3099 ^(self atLanguage: lang) keys inject: 0 into:[:maxSize :each |
  3100     (maxSize < each size and:[each size < 100])
  3100     (maxSize < each size and:[each size < 100])
  3101         ifTrue:[each size]
  3101 	ifTrue:[each size]
  3102         ifFalse:[maxSize].].
  3102 	ifFalse:[maxSize].].
  3103 !
  3103 !
  3104 
  3104 
  3105 searchForSimilarTranslation: aKey in: language
  3105 searchForSimilarTranslation: aKey in: language
  3106     "Returns a collection of translation associations that corresponds to a quite similar key comparing with aKey"
  3106     "Returns a collection of translation associations that corresponds to a quite similar key comparing with aKey"
  3107 
  3107 
  3108     |similarAssociations|
  3108     |similarAssociations|
  3109     
  3109 
  3110     similarAssociations:= 
  3110     similarAssociations:=
  3111     (self mappingAtLanguage: language) associationsSelect:[:each |
  3111     (self mappingAtLanguage: language) associationsSelect:[:each |
  3112         ((each key sameAs: aKey) 
  3112 	((each key sameAs: aKey)
  3113             or:[(aKey asUppercase startsWith: each key asUppercase)
  3113 	    or:[(aKey asUppercase startsWith: each key asUppercase)
  3114                 or:[((each key asUppercase levenshteinTo: aKey asUppercase)/ each key size) < 0.3
  3114 		or:[((each key asUppercase levenshteinTo: aKey asUppercase)/ each key size) < 0.3
  3115                 ]])
  3115 		]])
  3116          and:[each value notNil
  3116 	 and:[each value notNil
  3117                 and:[each value notEmpty]]
  3117 		and:[each value notEmpty]]
  3118     ].
  3118     ].
  3119     ^similarAssociations
  3119     ^similarAssociations
  3120 ! !
  3120 ! !
  3121 
  3121 
  3122 !InternationalLanguageTranslationEditor::LanguageMappingRow methodsFor:'accessing'!
  3122 !InternationalLanguageTranslationEditor::LanguageMappingRow methodsFor:'accessing'!
  3154 
  3154 
  3155 visitObject:anObject with:aParameter
  3155 visitObject:anObject with:aParameter
  3156     |l|
  3156     |l|
  3157 
  3157 
  3158     (anObject isKindOf:UISpecification) ifTrue:[
  3158     (anObject isKindOf:UISpecification) ifTrue:[
  3159         (anObject respondsTo:#translateLabel) ifTrue:[
  3159 	(anObject respondsTo:#translateLabel) ifTrue:[
  3160             anObject translateLabel == true ifTrue:[
  3160 	    anObject translateLabel == true ifTrue:[
  3161                 translatedLabels isNil ifTrue:[
  3161 		translatedLabels isNil ifTrue:[
  3162                     translatedLabels := Set new.
  3162 		    translatedLabels := Set new.
  3163                 ].
  3163 		].
  3164                 l := anObject perform:#label ifNotUnderstood:nil.
  3164 		l := anObject perform:#label ifNotUnderstood:nil.
  3165                 l notNil ifTrue:[
  3165 		l notNil ifTrue:[
  3166                     translatedLabels add:l.
  3166 		    translatedLabels add:l.
  3167                 ].
  3167 		].
  3168             ].
  3168 	    ].
  3169         ].
  3169 	].
  3170     ].
  3170     ].
  3171     self visitChildrenOf:anObject.
  3171     self visitChildrenOf:anObject.
  3172 ! !
  3172 ! !
  3173 
  3173 
  3174 !InternationalLanguageTranslationEditor class methodsFor:'documentation'!
  3174 !InternationalLanguageTranslationEditor class methodsFor:'documentation'!