source: tol/tolbase/lib/toltk/tolpkg_gui.tcl

devel
Last change on this file was 5c511c0, checked in by Pedro Gea <pgea@…>, 10 years ago

Pequeños cambios en la interfaz del gestor de paquetes

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@7362 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 71.9 KB
Line 
1package require wtree
2package require BWidget
3package require msgcat
4
5namespace eval ::TolPkgGUI {
6
7  namespace import ::msgcat::*
8
9  variable widgets
10
11  variable cwd [ file normalize [ file dir [ info script ] ] ]
12
13  variable urlmap
14
15  array set urlmap {
16    http://packages.tol-project.org/OfficialTolArchiveNetwork/repository.php OTAN
17    OTAN http://packages.tol-project.org/OfficialTolArchiveNetwork/repository.php
18    http://packages.localbayes.es/BayesPrivateTolPackages/repository.php BPTP
19    BPTP http://packages.localbayes.es/BayesPrivateTolPackages/repository.php
20  }
21 
22  variable win
23
24  variable packSyncInfo
25  variable versSyncInfo
26  variable localVersionInfo
27  variable localMostRecent
28
29  variable nodesInfo
30  variable treeParents
31
32  if { ![ info exists localInfo ] } {
33    array set localInfo {}
34  }
35
36  if { [ lsearch [ image names ] green_light ] == -1 } {
37    image create photo green_light -data {
38      R0lGODlhEAAQAOedABoaGh0eHSUlJScnJykpKUtLS0xMTFxcXFxdXF1dXWNjY0l4KUt4LEt5LU57
39      L1Z4QG1ubVd5QW9wb0iJG0mLG2yBX22BYFiQM3KEZ1eSMXaGa3OJZHSJZ3mHb4KDgYOEgoSEhISG
40      g3yKdIWGhHCRWoWHhHCTWIeIhlegJliiJnSUYF+jM3eZYY6OjmClM1+oL2CqLouXg3ufZo2YhoCh
41      bIGibZqbmpubm4mldpucm4emdZifk52dnZ2fnJ6fnI6ofZ2jmJ+inZGqgXO4UaCknpSshHS7UaSm
42      oqSmo4e4ZaqsqKSvnKutqqSxnI69bK2urHfPPLGzr3jQPIjLW7S2sn3URX3VQ4zOYLa6s4/OdYLW
43      Wbm9tYTYUILYWJHRdoTZTp/NiqDNjL3Au7/AvsDAwL/BvsHBwcDDvsPDwrfKrMTEw7nKr4riUrzK
44      sovjVL3Ls5DkXZHkX5TmaJbmZ5Xma5fmZ67anJfmaZnnbZ3ncM/Pzpzoc53odNHR0ZrqgqHpeqXo
45      eaHpe6Xoep/qgJzrhaHqgqXpg6XphNTU1K7rh9fX1q/ridfY19TjycHto9fmzcPwpcPwpsTwp9fv
46      xdfvxtnzx9X2zNr1yNb2zuL52+P53ev25Oz35P//////////////////////////////////////
47      ////////////////////////////////////////////////////////////////////////////
48      ////////////////////////////////////////////////////////////////////////////
49      ////////////////////////////////////////////////////////////////////////////
50      ////////////////////////////////////////////////////////////////////////////
51      /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
52      SU1QACH5BAEKAP8ALAAAAAAQABAAAAjfAP8JHHiDjBkeAxMO7HNmhoUKMcQgUiiQkYgHQtq8KRKh
53      gyKFejQwaLSJE6dNjxxg6DMQBJAGSShVunSp0iQnC3a0EIiGw4QpjiJJkgTJ0RUKG9QIfKICBRRA
54      iRYtSiRISgoSTAQiYfGiips6efLUYWMFhokjAnv8WMElzh08eObA+eIChw+BNpZc0EKHT6A/e+R0
55      ydAkh8ADQXQMIVTokKFBfozUIKJg4AgsNLJg0pTJkhcZW04kFOAhypowduyASUPlAwGFACCEUDKm
56      DJMSEgJQFCigAIIEBgbsHk4xIAA7
57    }
58  }
59 
60  if { [ lsearch [ image names ] ok_green_16 ] == -1 } {
61    image create photo ok_green_16 -data {
62      R0lGODlhEAAQAOelAEhfPU5hRlFiTFNiTk5oP1NmS1VlUFRmTVllWFloUlxoW15rXF1sV1dwSVpy
63      S11yUmlyaGl0ZWxzbmB6UGaET1yOMXqCeWqLUV6XLH+Ie1KhCFOhCFOiCFSiCFWiCVejDVekDFik
64      DnGWVFqkEVilDlmmD1ymFF2nFl6nGGCpGoqSimGqHHWkTnijVGyxKm6yLmm7G3O2M3W2N5qimXyz
65      SWq/GZ6jnpykm3e5OH27Qn29P36/QYS9UoLBR3DNF3HOFnLQFonFT3PSFnTSGHjTHo/HW3jUHnjU
66      H3rUIXvVJLO3s5TKYX/WKpTLXbS5tJHNV5LOWIXWNpPPWbe8t5DSUYjZOYnZOorZPLu+vY/XSIra
67      PZXUWozaQJnTYY3aQY/ZRo3aQp/Rbo7bQ4/bRJDbRpDbR5vVZJDcRpLcSZLcSpTbT5PcS5PcTJvY
68      XpTcTZvZX5TdTZTdTpbdUMHFxJfdVJfeUpjeU5rdWpneVZvdWpzdXpveWpzeW5rfV6DcZZ7dYaPb
69      a5zfWp3fW6HdaKfadZ3gXJ/fYZ/gX6DhYaHhY6fecqLhZKPhZazcfaPhZq3cf6PiZqzfe63hfKvk
70      c8/Rz63kd7Higa7kd9DS0bDlfrPkgrTkhrrmj9ja2dvb29zd3eDh4OTl4+Xm4+7v7vLy8f//////
71      ////////////////////////////////////////////////////////////////////////////
72      ////////////////////////////////////////////////////////////////////////////
73      ////////////////////////////////////////////////////////////////////////////
74      ////////////////////////////////////////////////////////////////////////////
75      /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
76      SU1QACH5BAEKAP8ALAAAAAAQABAAAAjmAP8JHPiPAweCCAV+6NHFzyAzQUYk/OdCkZsqVq5wwSNJ
77      BsIXlc6QQbMGjpwLFBrlGBjCEh48fQIVOlQEApYBnFAIXDJpkSNGixIhevDJRgtIYQQ+MiTiwBZB
78      gXhYGGWAjp1IBTexkEBJAJU6E0CpoMEmTSYPHTSpceAEU4EsC0glGCMGzCUQ/wiV+dJgihIAM+ZU
79      MJKECSAN/5rE0RIlQKcbnjLUECLkCBSBJv4MEQJDQShRDCgLuZNiYAw2lDEgiECAshcdCHHoQSLk
80      hw8gRPLsmHjiSRs+e95IWTFx4AYSJTYkDAgAOw==
81    }
82  }
83  if { [ lsearch [ image names ] yellow_light ] == -1 } {
84    image create photo yellow_light -data {
85      R0lGODlhEAAQAPcAABoaGh4eHSUlJScnJykpKX9qOUtLS0xMTFxcXF1dXF1dXWNjY25ubXBwb5ds
86      DZptDIJkH4JlIoNmI4VnJZ56JZx5J4BrOoV5W4V5XId9Y4l/aLOBFbCAFriJH7qKHrKHJbSIJOKp
87      KeOqKeexMuixMeu5POq4PpuEUZmEUpuHWaCLWqaSX46AYI2BY4qBbI2EcaiWZamWZqybbquacK6e
88      eK+ge7GifsWmQ8mpQ9mtTMOiWtywUcenYujDR+bCSfXAQPXAQfXFTPXGTvbJVvbJV/bKV/bLWPbO
89      WPbPW/fNXffOXtrDat3HavfNYffMa/fNa/fQZPfRZffUbPjUbffccvbYdvbYd/jddfjSefjTevjU
90      fPjmdfjneISDgYWEgoaFg4SEhIaFhIeGhIiIho6OjpmSgZqTg5uampubm5ycm52dnZ+enKGckqCe
91      nKWgl6KgnKSinbGrmrSsmaeloaemo6yrqK2sqa2sqq6tq7Syrre1sbu5sr67tMG/u9bEgdbEg+LT
92      lPfamfrdnPrdnc7EqM3Drs7FrM3Er8HAvcHAvsPBvsDAwMHBwcPDwsTEw8/PztHR0dLR0dTU1NjX
93      1tjY1+fcxenfyvXkwPnowfvpwvz1xvz1yP342P342fjx4vny4gAAAAAAAAAAAAAAAAAAAAAAAAAA
94      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
95      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
96      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
97      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
98      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKAALAAAAAAQABAA
99      AAjfAEEJHIhmESM1AxMOhKTIDIYLZfpIUiiQ0osCNQodsmHBxSSFjzREqOTp0ydPliZkiDQQjBsJ
100      Oi5hypQJ0yUeENiQEdiohYMcgQQNGiQo0I4HLBwJxJOCQwgnWbRowfJExAYUdwTSUdFhBBAiTZoM
101      +UHCw4k5AtfQ+GBCiBElSYoEKQFiRhuBZ+JU8IEkyhQpUI70oCAnjUAEb2Tc4HLFShUqW3DEgLNg
102      YJg9MJZs6sRJE5MVfMYkFNAlj6E/gAD5IaTHCwGFABh8qYMokR0xDQJQFCjAQAIFBwbsHk4xIAA7
103    }
104  }
105
106  if { [ lsearch [ image names ] refresh_yellow_16 ] == -1 } {
107    image create photo refresh_yellow_16 -data {
108      R0lGODlhEAAQAMZJAI99Ob2SKdGaI9SbI8+fIOCjHbynYsSpSLypbeKmHL+qZdWsGryrd+upGdyw
109      FsaycuS0E+yzE+W3E/u0Evu1EfK4D+i7GPu3EPy4D/y4EPy6Dvy7Dfy9DPy+DP2+C/3ACv3BCv3C
110      Cf3DCP3DCf3ECP7ECOTEWfzGB/7GBv7GB/7HBv7JCP7JCf3JDP7KDPHJPf/MEP3MGf/MFPjMLf/N
111      Fv/NGv/PIf7PJf7QJ//QKv/SMv/TNv/TOP/VQ/7WR/7WSPjXaP/YU//YVf/ZWP/bZP/bZv/edf/e
112      d/7ggf//////////////////////////////////////////////////////////////////////
113      ////////////////////////////////////////////////////////////////////////////
114      /////////////////////////////////////////////////////////////////////////yH+
115      EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAH8ALAAAAAAQABAAAAdpgH+Cg4SFhoeIf0gKiYMPRkRB
116      PTo2MBKHQEM+OzcyKykjFYcvOTEtJyIfHBoBhxYAgwQZEw2NjQwIBraCR0VCB4MOEIcmPzw4NCwo
117      qRGHMzUuKiUgHRoXCYcLJCEeGxgUBbt/AgPi5o2BADs=
118    }
119  }
120
121  if { [ lsearch [ image names ] red_stop_16 ] == -1 } {
122    image create photo red_stop_16 -data {
123      R0lGODlhEAAQAOeLAKkAAKoAAKoBAasEBKsGBqwGBqsHB60ICMwAAKwJCcwCAq0NDa8PD68QEM4I
124      CMcMDLATE84MDLEUFLYbG4YpKoUrK4UtLbcjI4c0NLgnJ7srK4g7O9MnJ9QnJ7wvL5E7O7swMNQq
125      Kr4wMNUuLtUvL7w4OME3N8I4ONc0NMA7O9c1Ndc4OMU+Ptg6Otg7O9g9PcdCQtk/P9lCQshHR9pE
126      RNpFRdpGRtpHR9pISM5NTdpKSttKStpLS89OTtlMTNBPT9tNTdpPT9xPT81UVNxQUNZSUtdSUtxR
127      UdxSUtNVVd1UVNpVVc1ZWd1VVYFubtVZWYRvb91XV91YWNpZWd5YWNpbW9pgYNRlZdxmZuBmZtpr
128      a+Fra91xcd9xceJyctx2dpuIh5aKiI+NieB3d+R2duF3d56LiuJ7e6COjaOSkaaVlOSFhaiYl6eb
129      maubm6KfnKydnLKpp6+tqru+uL/CvcPFwMfJxcvNyc7QzNDSzdLU0dPV0dbY1NfY1Nrc2Nzd2d7f
130      3N/h3uLj4OPk4eXm5Obn5enq6Orr6e7u7fHy8fX19P//////////////////////////////////
131      ////////////////////////////////////////////////////////////////////////////
132      ////////////////////////////////////////////////////////////////////////////
133      ////////////////////////////////////////////////////////////////////////////
134      ////////////////////////////////////////////////////////////////////////////
135      ////////////////////////////////////////////////////////////////////////////
136      /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
137      SU1QACH5BAEKAP8ALAAAAAAQABAAAAjXAP8JHPgvQACCCAUSYJFkSpUnMxIk/HcBywsOHUKMqNHF
138      A8IMW1CoWNHiRQwZNsikGGhgDI0aN3YAIYKkCZUoaxoIZJKlSZQoTZQgOUJECBApVwR+QQIFjhs2
139      atKgMQPGCQwuBc/giKMoEaJDhQYF+iOnhBcBAcrEaGOIkCBAfvrsyfMGxJYB/7SoCMNHD547durQ
140      mSNmghUA/4a8+LABg4UKkCFTeNBD4IIlChBo3rzZB4SBGlxw5kzCBEIRQSJwdsDjxEQGOYoA0WHk
141      h4SJAwEUOIAYYUAAOw==
142    }
143  }
144
145  if { [ lsearch [ image names ] yellow_stop_16 ] == -1 } {
146    image create photo yellow_stop_16 -data {
147      R0lGODlhEAAQAOeQAIWFbpSLK4iIb5SMLZaNKpSNNJWOO5+WO5CTiZiaiZ6fh6GiiqOkjcqnDaKl
148      nMqoDcuoDcupDMupDaankcupE8yqEMuqE8yrEsyrFqiplKmpmc2sFM2sGs6uGs2uHausl8+vHq6u
149      m9CxIK+vnK+yqtS3LrO1p9W4MtG+G9e8NNe8OdHBMNq/ONLDOLu+uNrBRNzDP93EQL/Cvd7GR8PF
150      wODKTubPDN3NQsfJxe3UAO3UAuPPWuPPYO7VCMvNyebRUubRU+7WDOjTU87QzOnWWdDSzfDaJ+jW
151      afDbJ/DbKurYXdLU0fDcLvDcL9PV0e3aVPHdNO3bVPHdNfHdOPHeOvHeO/HePfHfP9bY1O/dW9fY
152      1PLfQu/eVu/dYfLfRfDfTPHfS/HfUO7dbfLgRPLgRfLgRvLgR/LgSO/fXPLgSvLgTfLhSvLhTfPh
153      T/PhUPDgaO7fevPiUPPiUfPiUtrc2PPiVPPiVfDgc/PjV/PjWNzd2fLjcvHjeN7f3PTlZvTla/Tm
154      a/Pled/h3vPlffTmcuLj4PbodvTohuPk4eXm5Obn5enq6Orr6e7u7fHy8fX19P//////////////
155      ////////////////////////////////////////////////////////////////////////////
156      ////////////////////////////////////////////////////////////////////////////
157      ////////////////////////////////////////////////////////////////////////////
158      ////////////////////////////////////////////////////////////////////////////
159      ////////////////////////////////////////////////////////////////////////////
160      /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
161      SU1QACH5BAEKAP8ALAAAAAAQABAAAAjWAP8JHPjvAQSCCAVSmEEkCxolNTAk/FfijRUjSJIw8bJH
162      BcITgKBImULFypUtZQy9GGiBzxgyZtawcTPHTh48hzwI5OHHDh48durMkROnDZs8RwTCmSNgRIgP
163      GSYwWKAAwI07/yAMOmPikaNGjBQhEqSHRAtCEiIEuqJhUaJCfehocVLEwYo/Ff6JkZIAy5IhPnDQ
164      kOECAYouAndYOWCgwIAAkCETsAFEIAcuOnJo3rz5C4iBKapw5twEBkIWYYJw7gEmxsQOP56oSRNF
165      iIiJBC9saJAwIAA7
166    }
167  }
168
169  if { [ lsearch [ image names ] red_light ] == -1 } {
170    image create photo red_light -data {
171      R0lGODlhEAAQAPcAABoaGh4dHSUlJScnJykpKUtLS0xMTFxcXF1cXF1dXWNjY25tbXBvb54KB4ge
172      GqEJBrgTD7sSDocgHYgiH6QkH7siHbkkHoojIIM4NoQ5NqInIsIbFsAdGOwmIO0mIPEvKPAxKfM/
173      NvQ9NMxLPdBLPf5AN/5BOPFSP55QTZxST4dbWYhcWp5YVqRZVpBgXqpgXIljYotoZoxsa5BjYY5x
174      cKtnYq1mY7Bva65wbrF3dbJ7ebR+fMhXVcxfXeFJReNOS/5ORO5TQf5QRv9XTv9YT/9aT/9bUf5f
175      UP5iU/9hVv9iVv9iWf5pXf5rXv5pZP5qZeB1ZON3Zf9yZf9yZv5/bP95c/1+cP1/cf95dP98dtuI
176      fdqKf/6Cb/+Lbv+PcoSBgYWCgoaDg4SEhIaEhIiEhImGho6OjpqBgJyDgpuampubm5ybm52dnZ+c
177      nKKRkaWXl6CcnKOcnKWdnbOambaamaehoaejo6yoqK6pqa6qqq+rq7Svrreysbyzsr+1tOadkOed
178      kPyXlPyYlf6al/6bl/+cmc+trc+urtCpptCtqsG6u8G9vcG+vsS+vve/vvi/vvzAv8DAwMHBwcPC
179      wsTDw8/OztHR0dLR0dTU1NjW1tjX1+jExOvJyP7BwP/RxP/Sxv/e1v/g2Pnh4fvh4QAAAAAAAAAA
180      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
181      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
182      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
183      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
184      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKQALAAAAAAQABAA
185      AAjfAEkJHKgmkiQ2AxMOtNQIzQoVZxRhUihQEw0MOgwd2pFBRiaFlWJI2CRq1ChRnC7AuDRQzJsJ
186      PBxB6tQJ0qMeDtyYEThpRgMfgggVKjQo0I8HLigJ1MMCQgcnWLJkqfLEQ4QUeQTaacEBhAkiS5YM
187      KfFhA4o6AtvksBBCiBElSYoAEVEBBxyBaeZoCIKkyRQpTI6coEBnjcADcW6M8MLlihUqXUjYkKNg
188      4Jg+NaB8CgXKU5QXfsokFPBlT6ItfwBpQcQHDAGFABaEubOIER4yDAJQFCigAIIEBgbsHk4xIAA7
189    }
190  }
191 
192  if { [ lsearch [ image names ] database_refresh_32 ] == -1 } {
193    image create photo database_refresh_32 -data {
194      R0lGODlhIAAgAOf/ADRnADpsADpyAD53AEJ6BD18ADd/AEV7ADmAADKDADqBADuDAD2EAESCAD+G
195      AmtvckeFA0GHBUOJAGtzekaLAHJyh0iNAE6MD0qPAFWRB1uKO1SWAF6RM36Dhl2ZFWeUPn6GjnyI
196      iFihAIGFoIGIkGChAGWfEX2MkoeHqW6YUIWNlYOPkG2hIoePloiQmHWlAHylAJCQpnKqAHSiS46S
197      oXGkRW+kTIyUm4aWnHmlSIGqBIKrAH6tAIuaoXisLnSyAH2pS5KaonyqU4KxAJScpJWdpZaeppCg
198      pnq4AIOtY4OvUZigqIG4BX26AJmhqYKyRZmgtZOjqZmzAIurgpujq4G+AJ22AITAAJ28BKKqspS0
199      eZrAAKCsuYTHAJXCAKOstJHEAKSttZjEAKautpq0n57DAJa+Up22j47FK5rGAKSwvpvIAJ3JAK2x
200      wKqzu6qyx5/DQJnMBKK7k6HMAK+zz5zOAKHNDJ7QAKjEYaTPAJnTAKPPEqDSAK66x5XWAKHTAKy/
201      q7O7w7HLOrS70Z7XAK3RGafTGLHQKLa/x7jAyLnByZ/eALrCyrTHs7rC17vDy7zEzL3FzajgAL7G
202      z57lAL/H0L/G3LzI1sbG3cDJ0cHWVq/hLL/L2cLL08LK38PM1MnJ7cTN1azqAMTaWrLkMMbO1sjN
203      3MjM6cLdVMPP3cfP18XcY8TQ3s3N5cjQ2MbfTsnR2svP7MneXsbS4NHQ6MvT3Mjgbs/U18zV3czU
204      6tDU5M3W3tDhcMrjcM7X38rmZM/Y4NDX7c3Z59DZ4djic9LpR9fX79HpUNLa4svobdbjgdPb5Nba
205      6tPb8dTc5drb5dXd5tXmkNTohNbe59ne7tnojNfoktnd+tfg6Nvf797e9dnh6tzg8OTonOLootvj
206      7Nzsltno29zk+t3l7uTj++Hk/9/n8O3sqOPn9+Dp8eTp7OHq8ufvr+fn/+Ps9Orq/+jt8PHys+ru
207      /vXzwuzx9Ory+/Dx++7z9vb2//P4+/T5/PX6/fb7/vj+//7//P///yH+EUNyZWF0ZWQgd2l0aCBH
208      SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JFHhkyRInCBMqNHhkoMOH/4xEGZPIFa505jJqzJgO
209      l6tEY5wYgTiwyBhc26ZBQ8aypUuW0KZtQzamCMl/UXbtwlWrp8+fQGvh0hnl5pFxnz6VWsq0qdNS
210      Scc1JFmE37dMjyBBisS1q1etjzJ940fFaKR7++rNVNWprdu2qpBtq5fWFBSjgRJ1QrYOnj59+QIL
211      /gtPHbJPjhJ8uGkkEaNHkTJ1KuXKF7KYyHzhYpWKU6ZLmBjoaEBVESOuk13tAoZsGrZnzJgFy0Wr
212      1SlQDIjpYADxxBjIkimvRoaNWzZhSTIgWK6AAQJlo3iQdqgiyxhFqWtZRpaNnBYPZqL+gStW7Nix
213      YtHEyBoCwWGQdWOIOHETKFInYN2BPLGGqtCePAACmMaAv1jgUA+d0LPOLYy4kQUXXLyRwhPSGBLH
214      HXxkqOEdGDJxwIGJJFIKNPDQww8//YSTQTJ/6KHHFSVQwMCMDBBCSBMDPNSDaVtl8okquDQzAxqb
215      +EFICRecAUgstzEgSRU5PhQEI6fZR5kv2iBAyiKLdHFBLrmY8gloDnQR5UMgjNFjasAIg4AolFAi
216      ghzBzFJKJpFYwsCZaFqHHWW1AAOMcggooEAjxujCSieZ9PHGCP9YQAEFFhj4zw3uxDdffZxkI047
217      77RTzjU1JDAIF06M4c5dLMzTzTnuluLwiYIMOgihGmq08QYdHMDAgCe+jGOPKTQogIc3VlgRa4gj
218      lsjPPtDuw48/SrwQDwP4kJMKGVMw4AM7gmCxQwEC3cBjZD9qx105NrxQTTWFMmcCHNZoskUZll5K
219      JWrCAfOMODnIwIsYthRsMC+rHFJGGhsIMBAOikBmpWr+koPAKwOmYcfGGw+YhxgbEOBQB0EoEpwr
220      texyGcA/8MGhhhn+AYYMFgAA0QQtBJFFII+whs036MgjBBI2MhCBBJNSAEEANw30QAgktNDCCitI
221      HYMGVUhCAQoVNO31TQN0ke/XZDt0wNhlp6322moHBAA7
222    }
223  }
224  if { [ lsearch [ image names ] install_zip_32 ] == -1 } {
225    image create photo install_zip_32 -data {
226      R0lGODlhIAAgAPcAACUmJSYoJikpJyorKD4/PFA0Clg7DEY2Gl0/Ez9BPm5EBmpECXBHCXJJC2VF
227      FWlIF2lJGHROEFdMNWtQJFBRTVpZUlxeWl9iXnpsUn5zXGJnYWlqZ21wbndwY3FybXx3and4dXt8
228      eJ9pEJJkG5hnG5loHKBmCqJoDqJtFKl0HpZpJZZrK4xpMKp1IqFzL698LLF8KaF1MqN4NopvR5F0
229      RJ58RIZ2WaB+SbaBLqmAP7WCNbWDOLuKPcaRP8+WPqWDS7WJRLiLRKeGU66LVK+PXbGPW7eRVrOR
230      WoGDf52Oda6RY7KTYbyZYr2caKuTcMeSQ82WQ8qXSsyaTtObRtSeS8OXUc+cUcacXNCfU9miTs6h
231      XNKiV9mjUdSlXdypW+CsXcOdYMmiZMikbNytZNKqa9uvad2wa9Svddy0ddi0fOGuYOa0Zum5buG1
232      cOa5c+y9dISFg4eJhYuLi52UhZSSiZSVlJeYlZiZl5eZmJydm6idjqukl6Chn6qmnqSlo6appauo
233      o6anqaepqqurqrCtpLOzramtsbS0s7i5t7u8u926hb7BvODAjcDBvvfVoPncr8XFxMfIxsnKx8vM
234      y9LPx8/QzsjL0NTU09fZ09nZ19bY29zc297g3+Dh393e4N/i5uTl4+fo5+nq5+bn6ezs6/Dx7vT0
235      8/n59/f4+P39/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
236      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
237      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
238      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
239      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKoAIf8LSUNDUkdC
240      RzEwMTL/AAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVD
241      IHNSR0IAAAAAAAAAAAAAAAEAAPbWAAEAAAAA0y1IUCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
242      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAA
243      AAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAA
244      AlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmll/3cAAAPUAAAAJGx1bWkAAAP4AAAAFG1l
245      YXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAI
246      DHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNj
247      AAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0IgSUVDNjE5NjYtMi4xAAAA
248      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYWVogAAAAAAAA
249      81EAAf8AAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAA
250      AAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8v
251      d3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAA
252      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4x
253      IERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0L/AAAAAAAAAAAAAAAuSUVDIDYxOTY2LTIu
254      MSBEZWZhdWx0IFJHQiBjb2xvdXIgc3BhY2UgLSBzUkdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRl
255      c2MAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAA
256      AAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5NjYtMi4xAAAAAAAA
257      AAAAAAAAAAAAAAAAAAAAAAAAAAB2aWV3AAAAAAATpP4AFF8uABDPFAAD7cwABBMLAANcngAAAAFY
258      WVog/wAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJz
259      aWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBP
260      AFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA0ADVANsA
261      4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFnAW4BdQF8AYMBiwGS
262      AZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAv8UAh0CJgIvAjgCQQJLAlQCXQJnAnECegKE
263      Ao4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD
264      xwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJ
265      BVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkH
266      Kwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglP
267      CWT/CXkJjwmkCboJzwnlCfsKEQonCj0KVApqCoEKmAquCsUK3ArzCwsLIgs5C1ELaQuAC5gLsAvI
268      C+EL+QwSDCoMQwxcDHUMjgynDMAM2QzzDQ0NJg1ADVoNdA2ODakNww3eDfgOEw4uDkkOZA5/DpsO
269      tg7SDu4PCQ8lD0EPXg96D5YPsw/PD+wQCRAmEEMQYRB+EJsQuRDXEPURExExEU8RbRGMEaoRyRHo
270      EgcSJhJFEmQShBKjEsMS4xMDEyMTQxNjE4MTpBPFE+UUBhQnFEkUahSLFK0UzhTwFRIVNBVWFXgV
271      mxW9FeAWAxYmFkkWbBaPFrIW1hb6Fx0XQRdlF4kX/64X0hf3GBsYQBhlGIoYrxjVGPoZIBlFGWsZ
272      kRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4dRx1wHZkdwx3s
273      HhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7IiciVSKCIq8i
274      3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgN
275      KD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last
276      4f8uFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz
277      8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0
278      OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpB
279      rEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kd
280      SWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk3/Sk2TTdxOJU5uTrdPAE9JT5NP3VAnUHFQu1EG
281      UVBRm1HmUjFSfFLHUxNTX1OqU/ZUQlSPVNtVKFV1VcJWD1ZcVqlW91dEV5JX4FgvWH1Yy1kaWWlZ
282      uFoHWlZaplr1W0VblVvlXDVchlzWXSddeF3JXhpebF69Xw9fYV+zYAVgV2CqYPxhT2GiYfViSWKc
283      YvBjQ2OXY+tkQGSUZOllPWWSZedmPWaSZuhnPWeTZ+loP2iWaOxpQ2maafFqSGqfavdrT2una/9s
284      V2yvbQhtYG25bhJua27Ebx5veG/RcCtwhnDgcTpxlXHwcktypnMBc11zuHQUdHB0zHUodYV14XY+
285      /3abdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4Co
286      gQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL
287      /IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+XCpd1
288      l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiailqMGo3aj
289      5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqv8cqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACw
290      dbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2P
291      vgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbL
292      tsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx
293      2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LxU
294      6Ubp0Opb6uXrcOv77IbtEe2c7ijutO9A78zwWPDl8XLx//KM8xnzp/Q09ML1UPXe9m32+/eK+Bn4
295      qPk4+cf6V/rn+3f8B/yY/Sn9uv5L/tz/bf//ACwAAAAAIAAgAAAI/gBVCRxIEASfO3f4KOQz6A8c
296      ghAjQhxkKtWpi6dSpaqU6FIkDRJDChyUqlQpUidLneqDJA8fSZUsiIwY4qKpmzdTNZJz6FChP5cG
297      zSRIYZLGoxpNcYATJw6eQ4g4cZhpARGkSEiRmmoUyU4FOoUIUcoztE7Ws6kO2cgRBIjbIDp0vBCZ
298      B61GTR8mqHARwwXfGDJkhKkiEtHRjKlQ+ZFgYMGCBpAhM1CgwMgjHiEJQEJ6ycOBAgYQOIDwgPRo
299      CA6OOOoi8kKlVKb6YKBxQwgRJmLOpEmjqHdvRmSgoIhYp6ecRHI6ELkCJgyZMm+iS3/D5k0ZVSlM
300      EIxzqNIlTZDq/mgaBUjJlS5hxnz54oVLlixTpviwMpzg8UmJIE3aJIoUKlSHLKFFFwRusYUVUkTx
301      xIJVpAARIpcgkt8lnoxCyk2kzDECCSV06OGHIpxAUB2bTHLVeCiVMsomo1gygwoqrCDjjDK6UMKD
302      o1xyySagTIJIhZdkssknSbyww5FIIhlECwTBMQkpn3xCyiQCIZJJJpVoAsoeT0DhAxRggunDFFTA
303      YN8lppCC0iEDBWlJJp4AAkV88VFB5xRc4ACRJLDdtAmbg3hSCUyb6EEmFYgmiugYOkB0SGKpkBLK
304      Jpt0cslVlVjixHtcdOqpe2NgZl8psAkqSSSJABKIIYjk0cQatmqMIesYZZRhRhtomDmRRpDAccgg
305      gAgCyCCDBGJDBCzUUMMNPwxxxBEq1BcRIqeM4oddfgQgRyCBHJLIJKAYMlQgm/yhiSkpoWRKJx5U
306      4h0mnIRSykNDqQLCHaeI0h8p+pYySCOl6CuKKZDUS5AkpFB6ZaWg2NEIKKCIAsoGBg9EgSSdYKIx
307      JpVwwskfi4jSSQgVE5SAHYgsskgjjawsSSN/XFByRAEMYPMAAdQ8wMw89+xzRAEBADs=
308    }
309  }
310  if { [ lsearch [ image names ] database_add_32 ] == -1 } {
311    image create photo database_add_32 -data {
312      R0lGODlhIAAgAOfXADpyADx0AD52AEV7ADmAADqBADuCAEKAADyDAD6FAUaEAmtvckeFBEKHAEOI
313      AESJAGtzekaLAEmOAEqPAFuJM0+SAFCTAFOWAFmRIliUDX6Dhl6aF36FjWGYKn+GjnyIiIGIkIKJ
314      kX2MkoSMk4WNlG2eOYOPkIaOlYePlm6hQomRmIqSpouTmoaVm4yUm4eWnI2VnGmwBGSyAHimT4ua
315      oW6zAJGZoZKaom+1AHazAJCbqJObo5ScpHG3AGu5AHK4AJWdpZibt3m3AHO5AJaeppCgpnS6ApGh
316      p5igqHe7AHa7BZmhqXi8AJOjqZqiqnm9AJSkqnq+AJujq368DIDEAKGqsYPGAKKrs4rFAKCsuYTH
317      AKOstIXIAKGtuofFHKSttYfJAKKuvKauto3IAKevt47JAInLAKiwuJLBU5DLAKiwxYvNAJLII6qy
318      upPJJauzu5DMGZvDV6y0vJLNG6m5oK21vZvFXpHSAK+3v6S+qZ7IYbK7w7S9xZ3TMbW+xra/x6XT
319      M7jAyLXBz7nBybrCyrvDy6nVWLzEzK/UWLfJtb3Fzb7Gz8XE3L/H0L/G3MDJ0cHI3sTI2MHK0rTa
320      ZcLL08DM2sPM1MTN1brbbsbO1sfP18TQ3sjQ2MfP5cnR2srS28vT3M/U18/T48zV3cHhiM3U6sXg
321      j83W3s7X38Tji9LW5sjikc/Y4M3Z59DZ4dDY7c7a6MjkmdLa4s/b6tPb5NTc5cvnndTc8tva8tXd
322      5tzb89be59fg6Nvf79jh6dni6trj69vk7N3l7t7m79/n8ODp8eTp7OHq8uXq7eLr8+Ps9Oft7+nu
323      8Ojw+evw8+zx9Orz++7z9vP4+/T5/PX6/fb7/v7//P//////////////////////////////////
324      ////////////////////////////////////////////////////////////////////////////
325      /////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH
326      SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JFFgECZIlCBMqNFhkoMOH/4hAEROI06hixDJqzFhs
327      FKdAYpYQgTgQiJhRvnblksWypUuWuXb5kiUGCMl/TU6dGgWqp8+fQEGN0tnkZhFhlixlWsq0qdNM
328      SYU1JAmkGrBHhQ4dUsS1q1ethR4BqybFqKJo1KD9kqWJktu3bjXJ+gWNmjNFUyEe8ROIkqxjzKZN
329      k0a4sGBmxmRZChToyE0igQgVUvSIUiZOqGTFlIVqlCZLjxQdIjRoJNVBhLha5nSKlaxdvFie4vQ5
330      dCFCNkmKEDO58uXWr2PLml1btJwQN0dUETNoNajMsnj5WokKFKdMlBThETPi5o1kZHj+OGmzRxEl
331      VLt+AYudKXSdKkvEIENykwalZ8dCEXpTpb+YM2d0kUV/chQyijHNUEJDfYxlkssyz1RDzYSCTUhN
332      Nc0ss0smgQiiQ32obfWIJZo8p9kunHmUSSWRQOIII0HcZAMhqZn3m2uwycbJJp3Q0QECCCQQgQMQ
333      cUCGiKsBlyNnopQygwRomGKLLavYkQEDDnmwXHOXgXIKS9KtJMsrKVywiiFTxBDDFIjEsgGWAsGg
334      THjjledXeuvJokoeEpDiRQ84WGMNDj14kUoGA71gCX768ecfgF10oQYGcbiRRBKBDnqpG3ooIFAL
335      DT4YoYUVVmMNAZNE0UMPMggqw6rDUWASgUAuhEgZiSZu1gouBfSRhKDAApsEILP+wwKNqt0YnCyw
336      6FIAHFEEG2wUcBTbwiCT2cgajrE1WwAVVEQRhQ+C+iAuFWMUq8EOg0ji3Jey+PJLLrPcUkIMYIAR
337      rqBRUJFvDgcMBIEKO1TBRyGu8QLMMMQE80sviUgwhhn6CuqvGWVcQNICH4CAwgkmmEDCyCegsAIF
338      F6SxRr75rpHGBQLcJLNDAVQgxBp33LGGEBUEMPPPAw0QwdARDAD00UgnnXRAADs=
339    }
340  }
341  if { [ lsearch [ image names ] system_upgrade_32 ] == -1 } {
342    image create photo system_upgrade_32 -data {
343      R0lGODlhIAAgAOf/ACwsNDg2Oi09LSRGHUo7V0BERkNFQh9hETlXM2BdYS17GkB5MGdqeGlqc3Zn
344      jCmJHm9tcTmGJHBtfEuBRXNwf3FyeyKWFAegEnp2hnx2gVOJTECTKSqbGxWkGACwBQ6rE0WYLiuk
345      GkCdMQC1AGOOX4SChgC3AA+zAIKDjAC4AFCbOR+wBwC7AxaxJoWGj4iGihC2Ehi2AGOXZTmpM1ue
346      PSKzHjCtNoyImTGxHUWnSQm/DIiNkB67GpCNnXiaeCi+DSO+HpGSnEW2JFWtTzy5JyPBLJSWkzq+
347      EC3DJZmZo0jAJC7HM3KuZz7EJznFO52eqHG0UT/GNKGeojzHPUPHKpygr6Cgt0zHNZ+kpqOiuVvH
348      LqSkulTKMKWnpIy0iU3NS1PNO6envqqorFLORZeykKaquVnMTGPKQ6mpv1/NPV3ORq6ssIW/cVzP
349      T2HNVa+tsaquvq2vrK2ut5+0pmjOR62txF7TObGuv1/SUZS8kbKwtLCwumjRUZm8mWzSTLK0sbOz
350      vbayw7ezxWzVVbW1v7i1unTWXnnWULq3yG3ZYLW5ybi6t3zVX7m5w6DEoHvWZnXZaHrZW7i8zKzC
351      tL68wLi+wLq+znrcZIDaa8G9z3zeZobacofcX73CxL3B0cbAy4XeZ8LCzL/D0oXfb8bDyMPFwrnM
352      uIficoziZIria8bH0ZDjc5XheorldMjJ08vJzZjidLvRw5PldtHK1p7lcZzld5boeM3O2NDO0sjR
353      zMvQ0pjnhbzXwdDR26LpidbS5KLsftnS3tTU387Y09jW2rnnn6Pwh9Xa3KfxgtzZ3tna5LHyhdvc
354      5rjupdze27Pykt/c7t3e6ODe4rH1juHf49bl2MLwqLX3ieDh6+Ph5eTh8+jh7d3m4ebj6MfyuN7o
355      4r/4oOXm8L77lOnm69D0u+ro7OXq7ejp8+vp7e3q7+Tu6err9u/s8dD9re3v6/Du8vLv9O/x7unz
356      7vTx9u7z9vHz8Pbz+Pj1+vz1//n3+/j69/37//j9//v9+v3//P///yH+EUNyZWF0ZWQgd2l0aCBH
357      SU1QACH5BAEKAP8ALAAAAAAgACAAAAj+AP8JHEiwoMGDCBP+A+TPHyCFEAXiIvik4ROCEyMOLGTP
358      X6OBSRpiGZjJX75CGv9VaMgPAqVt6jbx2WWNXDNWjLw5SPnvVj9++/w9SuPrGbJly66Ja1dLC8Fi
359      ClHwy1ePyKhTqU7JkmULGLCj4CIJhEWroBxKAsXks3cvBKRBhhJd0nS11VZbtozBkjUNVcFu9saJ
360      sQdvnwg3Y9S0WYwkRQoWURJd1cqVE0FA99i9g8cOnqMZUZxM+QLEhIcLHVawiEEF06VLoEaJJeji
361      XDp06PApWFKkiBPHDw4MEIAgApEfTRgpZ3TIIIB048rFssCDBxAeKTgQDEBgQ5MjV/j+iPdjMMi4
362      budk1IABg0eMGgYXcFFyxYx9M2cMAsJGbduEGh7EEIMJOBhkRxp00KFGGlQcocRAr5BCSS/MMBOM
363      Bi14YIIJLBwkhAggqCAiDVCwMYtAmdyiTDQVBkOCDQPG0OFBGfTwyS/QaAPNL54IhMYWWWxRRyCu
364      +DCECRBJsYcqgdwRRpBoCIQBBRJY8aQkczDxAURydNJIFmFYIQEFGBR0w49oUONFDgoZ4YozZWyB
365      xg0IMVAHGmikM0keClUijDlloFEHAwgl0GQgntDDSx8IURKOPZ4cmsBBhCByhyWKSMKMOtWYQgZB
366      ceCSzjzKSKKIJXcgQkhBVaBxRyCyosQaCjbycMPNMLnockw65dyTTSixitIkGlUUlCocDQijyi0q
367      xlOPOdCyY489yjCrijANwGGpQQ00IFAF0fQiTDLJUGNOPPCkQw25xPQSTQUCdQtRCdRkI0023Yyj
368      73n2ZkNNCTz9Q0y588DjzsEIwzPPusTwtEa57xiwQynu1FOPO6XsUMA7676R0gvJCDZQFxZ3MZAY
369      5STzQsB6EPRHPPH8QVDLARu0iD76LFLzzhAFBAA7
370    }
371  }
372
373  if { [ lsearch [ image names ] pck_ok_16 ] == -1 } {
374    image create photo pck_ok_16 -data {
375      R0lGODlhEAAQAMZBAAB6AAB7AAB8AAB9AAB+AAB/AACAAAOBAgWCAgmFBQqFBQuGBgyGBg6ICA+I
376      CBOKChWLCxaMDBiNDRuPDx2PDx2PECOTEySUFCiVFSqXFzyhIT6jI0CjI0moKEyqKk6qKlKtLVew
377      MF60NGa3N2u7O227O267O3S/P3XAP3bAQHfBQXrCQn/FRYDGRoXISITJSYrLS4zNTY3NTZDPT5HP
378      T5LPT5LQUJPQUJPRUZTRUZXRUZbSUpfSUpjTU5nTU5nUVJrUVP//////////////////////////
379      ////////////////////////////////////////////////////////////////////////////
380      ////////////////////////////////////////////////////////////////////////////
381      /////////////////////////////////////////////////////////////////////////yH5
382      BAEKAH8ALAAAAAAQABAAAAemgH+CggQCAQIDg4qCBQkaKjItIBEEi38FFzs2mzY0OiIGipidnDQ2
383      MzQllYIKO6acNiYIMTcYBX8EG7CdKAQsnS4BfwIrsJ4HH6RAC38BNbA4HBE+nDwTwy82LCQqMwAp
384      rzY9D38DITQ0EQEVFjywPIl/Ejk0Ow4DJOE2HasEI6Yz8sHagUCRgROkBjKwRCADjB87evTwUNDS
385      pQANKEAgsMqiR0WBAAA7
386    }
387  }
388
389  if { [ lsearch [ image names ] pck_new_16 ] == -1 } {
390    image create photo pck_new_16 -data {
391      R0lGODlhEAAQAKU9ACVSiixYjS1YjS1Zji5Zji9aji9ajzBbjjFcjzJcjzJckDJdkDNdkDRdkDRe
392      kTVekTVfkTZfkTdgkjlikz5llUVqmEhtmUlumkpumlZ3n1t7oWSCpmqGqHKMrHONrHmSr4KYs4eb
393      tY6huJurvpyrvq65xrS9ybjByrzDzMDGzsbL0crN0szP09DS1dHT1dXW19bW2NbX19jY2NnZ2dra
394      2dvb2tzb2t3b2t3c2t7d29/d2+De3OXi3v///////////yH5BAEKAD8ALAAAAAAQABAAAAahwJ9Q
395      2CgMCIihUgiphFKwFUnDWP4iJt1sRpvJcCaJ0mGiybyis9cUET44u+3sBXjJZ5zHb+FSz+t3LgU/
396      BXFydHZyOxY/BIZbiHc7GYRxIxEtiC0RIzM7Fz8KfTIdDiwALA4dMjIxgz8YOVwfFA8UH10zHg5C
397      DipeNiABIDasKmJDESo6MjYoxTUnE1YOGyU3PDclGwlWQhIJBAYCB97m3kEAOw==
398    }
399  }
400
401  if { [ lsearch [ image names ] pck_upg_16 ] == -1 } {
402    image create photo pck_upg_16 -data {
403      R0lGODlhEAAQAKUpAJAzN5A0N5Q2NZU3NKNALaRBLOJmAONpBeNpBuNqB+NqCONrCONrCeRrCeRs
404      CuZtCOlvBuRxE+xxBe9zA+d9JuiCL+iFNOmFNOqPReqQRuqQR+qRR+qSSfO+lPO/lfO/lvbPr/ja
405      wvjdx/ngy/niz/rl1Pzt4/zy6v79/P//////////////////////////////////////////////
406      /////////////////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZ3wAFg
407      SCwSBT/ABMJsOiGSwi8AcVivWMeDMK1eFRYKdtvFGkafMZdqHnnUZQeDcX7PtesqoxKpMy5WZGwO
408      JigIIx0YKRsMgnoNJSckIikcDHhxDgkhKSkaC4F5WAggGQpXjlkHl6hcSk+wUT9CRrUASD+5uru8
409      P0EAOw==
410    }
411  }
412
413  if { [ lsearch [ image names ] pck_upd_16 ] == -1 } {
414    image create photo pck_upd_16 -data {
415      R0lGODlhEAAQAKUzALgAALsAAL0AAL4AAL8AAMAAAMEEAMIHAMQNAMQOAMYTAMcVAMshAMsiAMwl
416      AM4qAM8vAM8wANM7ANZGANdGANhLANtTANtUAN1ZAN1aAN5eAOBkAOFlAOJpAO2KAPGXAPKaAPqw
417      APqxAPqyAPu1AP6+AP6/AP/AAP/BAP/CAP/EAP/FAP/GAP/IAP/MAP/OAP/PAP/TAP/UAP//////
418      /////////////////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZswJ9w
419      SCwaj8hhIVksIAbMoWC0iP4ImRUIyhyoIi/JEknwwAAvEfd4QL3QqA7hWAid3q+TaUwkPDgQMgAx
420      DRwfc0QGJSkDFwEUAykoVUMDGHoqAwFeeiSIPwovLKMuAy6jLC0TcwOtrq+wVkVBADs=
421    }
422  }
423
424  if { [ lsearch [ image names ] pck_upg_upd_16 ] == -1 } {
425    image create photo pck_upg_upd_16 -data {
426      R0lGODlhEAAQAKU2ALgAALsAAL0AAL4AAL8AAMAAAMEEAMIHAMQNAMQOAMYTAMcVAMshAMsiAMwl
427      AM4qAJU3Nc8vAM8wANM7ANZGANdGANhLANtTANtUAN1ZAN1aAN5eAOBkAOFlAOJpAORsCuVvCu2K
428      APGXAPKaAPqwAPqxAPqyAPu1AP6+AP6/AP/AAP/BAP/CAP/EAP/FAP/GAP/IAP/MAP/OAP/PAP/T
429      AP/UAP///////////////////////////////////////yH5BAEKAD8ALAAAAAAQABAAAAZ9wIFw
430      SCz+Bp+kcqkcHJmfAtSJXBYQ1eZzKTAtmNQlQeMaZT/hJGjQGsgm0mT6QwjN3KXs/LCSuVceBHJb
431      BSQqfjIqKXFhBA8dETUDNA0dIoJhBigsAxgDFQMsK19UAxmKbUItiicEVAoyL7IxAzGyLzAUpUW8
432      Qj+/wMHCv0EAOw==
433    }
434  }
435
436  if { [ lsearch [ image names ] clowd_down_16 ] == -1 } {
437    image create photo clowd_down_16 -data {
438      R0lGODlhEAAQAKU1AABVmABVmQBWmQBrqwBtrGpqamtrawCLxQCMxgCPyHd3d3h4eHx8fACu3gCw
439      35GRkQC14ZWVlZeXl5mZmQDN82S53aqqqqurq2q63aysrK6urq+vr7Ozs7S0tLa2tmDL7mHL7bi4
440      uLu7u8HBwWnW98TExMXFxcbGxszMzM3NzdXV1d3d3eLi4uPj4+jo6Onp6evr6+/v7/Hx8fPz8/T0
441      9P///////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5
442      BAEKAD8ALAAAAAAQABAAAAZ1wJ9wSCwaj8ik8ldg0RbIwqKgmLVasJBx8lrJZKvwylUoxlRogCCA
443      VkmIhVZqPiAM5qnHsLAq+UsHCQh/JShCIyKJIhgNEA4ViiZlKRyVHB0gFB8dlh4GPwwZF6MXGiQa
444      pBcnQxEbFq+wsCdlewa2t7dLurpBADs=
445    }
446  }
447
448  if { [ lsearch [ image names ] star_blue_16 ] == -1 } {
449    image create photo star_blue_16 -data {
450      R0lGODlhEAAQAPZLAA1piA5xkg52mA94mw97ng99ohB/pCuAnBCBpxKCpxWCphCCqBKDqBWDqBKE
451      qRCHrhKHrhiEqBqGqRuJrRyIrBOLsxGMtRePtx2LsByMsRGQuhGRuxKRuhSSuxSSvB+SuB+WvCyF
452      oiyLqiKPsyORtCqUtyKUuiuXuzCavDCcvzKcv2ehtCSZwC+fwy+fxDigwjuhwj6jxDqkxzylxz6l
453      xz2lyEGlxkCnyEKnyEKoyU2tzGivx2mxyGq61HrB2Ya0w5W9y4jG2pbI2bPQ2pfP4aXW5cPh68Pj
454      7tHj6eHs8OHx9v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
455      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
456      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
457      BAEAAEwALAAAAAAQABAAAAetgEyCgjM0NjEvKoOLTDU3LB4bGx0gKCeMOS2Sm5smJYM1mps6Opwf
458      JII3nBtHRg+cI0wyLJwuS0shnBcZOJE6PkRKt0lBPqUcFDaSPbfNzTuvEjGbPM63KwALGxEwHZtC
459      zkDZGxoKKSCbR85DBJIVDkwom8I/QEtIApIJgicmkkUHABQQMSTABggIBpX4IGmABUkWBEAwwIjE
460      iAscJGmokCAhI0EYJkiI0IABo0AAOw==
461    }
462  }
463
464  if { [ lsearch [ image names ] package_down_16 ] == -1 } {
465    image create photo package_down_16 -data {
466      R0lGODlhEAAQAPcAADJwKjZ6MUFqIkNsJ0ZvJkBvK096LVyAPUePQEuPQUqMRUuNRk2PSFeNQ1CS
467      S1WaTleZUVejTlikT2a2XGi4XWytZXysZ22+Yny/dnDCZXLFZnPGZ3THaH7AecODIsOEI8CFJcSF
468      JMWHJsaKKMeNK8iPLcmQLsmSL8iVMsuVMsyYNMiUO86dOd6fMtGkP+KqN+KpOOOrOua0Pea1P+y2
469      OOm1PcqQStCXU9KlQNOoQtSqRNWsRdWtR9awSdewSteyS9iyS9i0TNi0Tdm1Tdm1Ttm3T9WmUdqt
470      UNuxVuGnQOa1QuaxR+i+Q+m9ReSxTOi/SOi7T/W9QOWvVtuyYt25ada4cNy9d+a2a+W/b+SzdIDB
471      eoLCfYXDfuzFR/nESOHAcuDAfeDGfvXPf//Vd/XQePXQf/7WeIfFgZHKiZPLjJ3QlaDSl6nXoKvY
472      otvDidfTj97JlezFg+7Eg+3Gh+zKhOvMhOfMiO7KiPHPhvvchPfViffXi/DQjOXPku3SkurVnPHV
473      kPXXkPLWlf7flfjbnf/hm+3ZpfLdr+3evv/kpfnhqvrjqv/oq/fksvrksP/qs//ptv/rt/blv//q
474      uf/ruv/rvf/tvv/uwf/vwfvty//vyPnrzfrszv/wyf/yzvXr0vfu0f/z1P/z1f/01//12f/02v/2
475      2//23fz24v324v724/744f344vz45v775//+8P//9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
476      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
477      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
478      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
479      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAALEALAAAAAAQABAA
480      AAjnAGMJHBgLiA+CCAcK+fHHzg4dCQcG6dNK1aFGX1wkJBIGFKxXmY7sUSRoCguBRYYY+oQIjpsq
481      VAKJIbSIjpEUQlZt8lMHC5IVnEhNGjQmUZ4TP1iFcoSnDBknjiAVMhOlBqASPVKVElVJD4cNGS54
482      ofEECh8SPFCN8qSJkoY2bCh0aaJkyZ0ROlCF6mTp0YQ1aiQwmREjSRwROVydwhSJUYQ0aBDIgNHi
483      ipwQOKxIMnXpzYMzXAK8kDIniw0PAlmAsZCgwhYtDgAcuPEBoQoUDSB0wLCgAIjaEU0YYKBgQIiI
484      CAkIiBgQADs=
485    }
486  }
487  if { [ lsearch [ image names ] system_software_update_16 ] == -1 } {
488    image create photo system_software_update_16 -data {
489      R0lGODlhEAAQAPcAANpuFd5uFtVwFd1xFedyFedyFul7Fel8FuBxGOd2H+Z6G+l+G99yJ9x/IOBz
490      JeZ6Ieh7JOJ3LeJ4K+h/Leh7Meh7Muh8Mul+P+R/QOh/QcmBGM2GGd+AGt2LHdiRG9qTHN+YHd+a
491      HuWAH+CPHeOMH+iHJuyMJ+uOK+qdKOiCPOiFPuqOOuuOO+2WPeycPe2hLO+kP/CtPueGR+mCROmL
492      SuqMS+mMTOuOT+OZQeqRSOuSS+qQTuyZTueLU+mQVeqRVeybVeuTWO6qTvCwQvK3T/K4UuuQYeiS
493      YOuSY+uUYeqYZ+ued++oYOuheu6meeuhfO6kfvC1cvG3ffPCeu2mgO6ngO+uhe6ujfK9hfC1jO2s
494      kO+ukO2uku+xlO6xl+6ymPG6kPK+lfK/lvC4nvC5oPK+ovK/ovG9pfG9pvG9p/XJiPPAkPXJnPbO
495      nfXMoPTGq/LDrvTKr/TLsfjetfbWufbUuvbUvPbWvPbVvvfavfjevfnhu/bVxfbYwvjexPbXyPbW
496      yfbXyffZyPbZzffe0frmyfrny/jj1fji1vji1/nm1vjg2Pjh2fjl2vnk2/rp2frr2frs2/no4fvu
497      5Pz08AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
498      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
499      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
500      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
501      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
502      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJUALAAAAAAQABAA
503      AAjJACsJHEiwoMFKWrx84XJw4JItY9CkIdPlycEjVM4AWsRoEJwrTQpiUFLGUaM/fBJJCmSmB0EZ
504      VhAJqoLECBRClOT4GMjARpxDTmZcyJDkjZ0sNCIIdLCjD54bFihUSFEjyA8VEgQGeJBDx4QEBQgQ
505      gACmTg4EAgEoABJGDI8FBg6wuENnxYCBIqRMUsTkhIkWax5hKSFgYIMoeiL5ccMmD6Q2LjgUxCFk
506      ypxChvaogUHiYAcUMYgUGfJiRMNKGjyACPFhw+nXAgMCADs=
507    }
508  }
509  if { [ lsearch [ image names ] check_green_16 ] == -1 } {
510    image create photo check_green_16 -data {
511      R0lGODlhEAAQAPYAAACVAACWAACXAACYAACZAAKaAgOaAwecBwidCAmdCA6gDQ+gDhCgDxOgERWj
512      ExymGiSlISirJSqsJCqsJi+uKzCvLDKvLzayMTeyMjixNDy1Nz21OD61OT+1O0C2O0O1P0O4PUS4
513      PkW4P0m2REe5Qki7Q0q7REu7RlC+SlG6TFK6TF3CV17EWGjLWm3FZmnJYm7JZ3LMZnnNb3TQbHjU
514      a3vPcHrTcoDTdYDUeYXWeYbQfoXUfYfeeojeeovaf43VhY/VhY7WhonYgozdgI/dhJDXh5Peh5HV
515      iJHWiZLWiZLaiZPaiZbdjJTfjJnbkJ3elJHmhJTkh5rljpnikJ/ml57rkZ/qkqDgl6HgmKHimKbl
516      nKjmn6XsmajqnanvnanmoKnooKzroazoo6zuoK7qpbHtp7LsqLPtqbLuqbfzrLnzr7zzsr/1tQAA
517      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
518      BAEAAG0ALAAAAAAQABAAAAeZgG2Cg4SCBQgLhYptBSouKQ+LgwYfRzJIEpKCDD8xMUUTmgkwSy1P
519      KxSaFlc0TDsVmgtKRkNZHoIAECMNBJssWj1kLxeCATpAQRYHbRFiUWFNGIMCSTU3VyQOQl1WZSWE
520      AxlOOT5bOGdVazMahQUdWEQ8ZlxpVBuLCidfUlBeaiiaHmwAM4aNDRCa2kwwgWZKiISCMHAQISkQ
521      ADs=
522    }
523  }
524  if { [ lsearch [ image names ] cdr_tick_16 ] == -1 } {
525    image create photo cdr_tick_16 -data {
526      R0lGODlhEAAQAPZ2ADd7MTh8Mph/Mpl/Mpp/MjqUMECFOWuPPUijPFWcTVKtQ1ymUlyjVGuqXGC1
527      UGi3XmyyYnS5ZZmAMo2vZo6waY+ya5Czb821b861cM63cs+3cs+3c9C4ddC4dtC5dtC5d9G6edK8
528      fdO9f4HKdoPJeILLeIbJeYXLeYXIeoXJeofMe4bMfIfNfInNfYnOfovPf9S+gNS/gtW/g43PgZDS
529      hK/LlcDAhdbAhdnGjtnGj9nGkNrHkdvJldzKltzKl93Mmt7NnN7NneTWruTXsObZs+batebatufb
530      t+fbuOfduujduujdvOnevtPhvurgwOvhwuvixezixOzixezjx+3jyO3kyu7lzO7mzO/mze/mzu/n
531      z/Dp1PHq1fHr1/Lr1vLr1/Lr2PTv3vXv3/Xw4fXx4vby5Pfz5vj16vn27Pn27fn37fv48fz69Pz6
532      9fz69vz79v379/37+P78+v79+/7+/P///v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
533      BAEAAHcALAAAAAAQABAAAAfMgHeCg4SFhjxOXGRgPgSOhR9zYjg/WHN1cx+PdwQfa3ZwITJedm5v
534      dpqDXzdbdj0ZY3NncnRzjgQ+QSAdUFlDYWpncWxtjQRMMCAePSKOMW1lXVJMjlEcHyBFtwRXQDoU
535      DQcEURsYF0fbTzsTECgJBEsaFzlbMY4iRBYQMy8GuEZWzIRp8qAGkgoQWrAIQEDQnDRfpkQwscCG
536      gxUnGDbshEaLEgU0UkAgUSLABwmEPoyhIgSBCxUjTG4ixCNJlQIMGAowRGgAAQANCQUCADs=
537    }
538  }
539  if { [ lsearch [ image names ] database_1_16 ] == -1 } {
540    image create photo database_1_16 -data {
541      R0lGODlhEAAQAPeLAEdHR0dHSEtMTEtMTU1OTlNUVFRVVVZYWFdYWGFjY2JjY2JkZGNkZGVlZWRn
542      Z2VnZ2hoaGhpaWttbW5vb29xcXN1dXV3d3Z2eHh5eXl5eXh6enl6enp6en19f3x+fn6AgICCgoGD
543      g4mLi4qKjI6Ojo6OkJGRkZGRk5OUlJSUlZSUlpSVlpWWlpaXl5iXl5aXmJeYmJeYmZmYmJmampqb
544      m5ydnZycn5+fn6CgoKCgoqGioqCjo6Smpqeoqautraytrq2urq2vr66vr66wr62vsLCxsbCysrGy
545      s7Gzs7Kzs7GztLKztbK0tbO1trS1tbW1tbS1trW2trW2t7W3t7e3ura4uLe4uLe6uri4ubm7u7q7
546      u7u7vru8vr29vb6/wb6/wr/AwMLCwsPDxMXFxcXGxsXGx8bGxsXFyMbHycjIycjJysvKysvLy8rL
547      zcvLzcvNzcvMzs3Nz8/Ozs7Oz8/Pz8/Q0tHR0tLS1NfX19bX2Nvb29vc3Nzc3Nzd3d3e3t/f39/g
548      4Ofn5/Dx8fX19vj4+fn5+fz8+/v8/Pz9/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
549      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
550      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
551      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
552      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
553      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
554      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIwALAAAAAAQABAA
555      AAjOABkJHEiwYEEyRnYg0fPnzRWDc+7YiaOmjBUtZNjIWUOQyZYveQQFamFBBI8xWQhCoYJmkKE9
556      QT4kqFBkCsEmXNoQStTHx4cFGKI4IRjjgoo0fMzMmICAQQYZBInYGJGiBokGAgpMuHGEoJQtbggh
557      2gMkxIMNTqoQVLIFDiFFfoD8xPAkCcEXF06IwROGhYQDCji4ILgkRwkYOExAIGCAgg6bA3t4aVOI
558      pxCzGqz8ILjiTJ1DiwANAeHAAxgaBQN0wEKnC4oIAwQAMEjbYEAAOw==
559    }
560  }
561  if { [ lsearch [ image names ] back_to_ou_16 ] == -1 } {
562    image create photo back_to_ou_16 -data {
563      R0lGODlhEAAQAPYAALRmJ33VJtuPGd+aHeGhHt+bL+WwKuaxPOe4PYnVPu3UAO3VE+3QF+7VHPDb
564      KvDYL/HdN8+kU+m9Q82nYt62Ztq1aeewY+K1dY3cQJDXSpXdUZvdW4jCZZHJaJbObu7PR+zJS/Hd
565      QezHU/DYVPLgTPPiWfPjWfPfZmZ3mHiGq3aIsH+Pt6u816Kx3LPA4b/P4r3F9L3G9s7Pzs/Pz8/S
566      18/T19LX3dLY39jY2Nvb29zc3N3d3cHM48vZ68vb79LY4Nba4NPV8dPZ+ePj4+np6ert/PHx8QAA
567      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
568      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
569      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
570      BAEAAEcALAAAAAAQABAAAAd8gEeCg4SFhR8RLIoshoIDBw8MFT0+Pi+GCCQQDgoNF0VFPIUEJiUg
571      IQsUQUJCLoUSJwJHIxMwMbcthQYiggUqKykrKyiGFo3HRwDIy8xAPz80RzY3NzVHHhwcHYJERkY5
572      R0PeOkcbGBgagjtDQzNHOOwyRxkBAQnM+Pn5gQA7
573    }
574  }
575
576  if { [ lsearch [ image names ] folder_yellow_16 ] == -1 } {
577    image create photo folder_yellow_16 -data {
578      R0lGODlhEAAQAPYAAK+KGLGMGLOOGbKNGrKMG7OMG7OOG7SOGbSPGbWPH7SQGaOFI8GLNMmJN8Se
579      MMSXOcSfO9eQOuOePN6xLcOhN8WgNMahNcehNcmjNMijN8mmNcukN8ulN8umNsumN8KgOMeiOMei
580      OcemPMekPselPsemPtGnN9uqNeG9K+K4LeO/LOS8LeW/LeytO/G5OeTALPTHN/XMNvTBOffQNcun
581      QtGtQtCuSd6+Q922Sum8S/TCTvjETvjITvjOTe/USO7USfrTTfzaS/veTPzgTPzkTfzmUfvpXd3A
582      ZurTg/rrhvLgl/nrqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
583      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
584      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
585      BAEAAEwALAAAAAAQABAAAAeSgEyCg4SFhoeGBwgICgGIggYTKSssAgqXlwiEAC4yMDEzKi8vKioo
586      A4MALScYGxwesLAdFRcgTAASJj9GSUu+v0tKFkwEERlCREW8wEtIIUwFDTVAQUPJy75HggUMODw9
587      1NbKvTbbDzk7O9/h1w7bEDrp6evVPhqCCTTy++s3gwsfSJQoQWIEiYIjRFB4xLAhoUAAOw==
588    }
589  }
590  if { [ lsearch [ image names ] software_update_urgent_16 ] == -1 } {
591    image create photo software_update_urgent_16 -data {
592      R0lGODlhEAAQAPYAAHgXF6wiIqUtLa8vL7AjI+EXF+AZGeIaGuUdHdQoKNUpKdYrK9ctLdcvL8ox
593      Mco5OdgxMdg1Ndg2Ntk/P+giIu4nJ+gqKu4oKO4qKustLewxMe8wMO8zM+80NO44OO84OOk+PvA6
594      OvA7O/A8PPA+PsFCQshHR9hTU95YWOpHR+5FRe9FRetISOxKSvBCQvBDQ/BERPFGRvFMTOtSUuVe
595      Xu9YWPBQUPBTU/JWVvNbW/JcXPNcXPJeXvNeXulhYfR8fPV+fvR/f+mAgOqFhfWAgPjR0fjV1fzY
596      2Pje3vzf3/zn5/rq6vzu7v309P729v34+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
597      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
598      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
599      BAEAAFAALAAAAAAQABAAAAdzgFCCg4SFhoeIEIIFBoiDDRUHT08WUAmIkAhLTBoVCokXFEhKHRUL
600      iBIbGUZJHBgMhg8TKSEeRUcfHCARDoUzMC8uQUQkIyIshgE1MipCQysxNgSHAjwtTU43OAOOJT0/
601      QDomjoInOzko5IM0PuqEAO7qgQA7
602    }
603  }
604  if { [ lsearch [ image names ] view_refresh_16 ] == -1 } {
605    image create photo view_refresh_16 -data {
606      R0lGODlhEAAQAPeiAChAYClBYipDZSxIbixIby9LcS9Mcy9MdC9NdS9NdjBMcjBMczZSdzZSeDZS
607      eTZTeTdTeTdTejdUelBtlVBtllFvl1BvmFFvmFJvmFRxmFVymSxtxCltyC1wyyxwzDJxxjZzxzZ0
608      xjZ1yz56yzl5zj580EB+0GqJs2uJs2uLtmyLt22MuHCPuHKQunWTu0eBzkiAzEyCzE6DzEyDzk+F
609      zU+Fz0mD0U2H00yG1E+I1FGI1FGJ1FOL1VSL1FSL1VWM1VuN0FmO11mP11qP11yQ11+S2GaV1WuY
610      1GCT2GOV2WSW2WWW2WqZ2Wqa22yb222c23Ce3Hih13Wg2nSh3XWh3Xai3nih2Xih2n6l2Xmj3Xij
611      3nmk3nmk332n34ekzYqnzoem0Iin0Iin0Y6q0Yqv35Ov1ZWx1p643J+53YCp4Ias4Yiu4o2x446z
612      45a24Ze45p664J+74Zi55py75J6+55++56O94KO94aC84qK+46e/4KC+5qS/5KTA5afB5KjB4ajB
613      463F5qTB6afE6ajE6avG6qvG667H6a3H667I67HI57LJ6LXN7bfO7rjP7r/U78DU78fX7cLV8Mja
614      8cnb8svc8szc8tvn9uDq+OHr+OLr+Pf6/fj6/fr7/Pv8/v39/f7+/v7+/////wAAAAAAAAAAAAAA
615      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
616      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
617      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
618      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
619      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKMALAAAAAAQABAA
620      AAjyAEcJFKggwYIFCRQMXCgQQosyihaZcRGB4SgEGPy0odLkSZc3gTQgWFiBUBIfVBIN4rIEyqEM
621      AyHkIXJDUihRojxNKsIEkINRClakKdRIFCU5dSqJEqSDDIuCYoZcEpXpyRQtUxA56mFkjEE+JiBx
622      srSmiZMmStgwmfHnIJ8SPnDsEFIEiRpMoubA0IMwDA8Siejk4PEjiKZPkYB8Sagii4c1ohhV2fII
623      lJsjWFAolBDHRgdDm3B26vNBBpoHAy/secFBhJQrIzbEwDNh4QELcKzUABGCRpQzFAwwFNAgBZg7
624      drycYBDAosAABAoUGACAYUAAOw==
625    }
626  }
627}
628
629source [ file join $::TolPkgGUI::cwd tolpkg.tcl ]
630
631proc ::TolPkgGUI::CmpVersion { v1 v2 } {
632  foreach { v11 v12 } { {} {} } break
633  foreach { n1 v11 v12 } [ split $v1 . ] break
634  foreach { v21 v22 } { {} {} } break
635  foreach { n2 v21 v22 } [ split $v2 . ] break
636  set cmp [ string compare $n1 $n2 ]
637  if { $cmp } {
638    return $cmp
639  } else {
640    return [ expr { $v11 < $v21 ? -1 : ( $v11 > $v21 ? 1 : ( $v12 < $v22 ? -1 : ( $v12 > $v22 ? 1 : 0 ) ) ) } ]
641  }
642}
643
644proc ::TolPkgGUI::lsearchi { i l it } {
645  set _i 0
646  foreach _it $l {
647    if { $it eq [ lindex $_it $i ] } {
648      return $_i
649    }
650  }
651  return -1
652}
653
654proc ::TolPkgGUI::ReadPackSyncInfo { } {
655  variable packSyncInfo
656
657  array unset packSyncInfo
658  foreach p [ ::TolPkg::GetPkgSyncInfo ] {
659    array set packSyncInfo $p
660  }
661}
662
663proc ::TolPkgGUI::ReadVersSyncInfo { } {
664  variable versSyncInfo
665
666  array unset versSyncInfo
667  foreach p [ ::TolPkg::GetVersSyncInfo ] {
668    array set versSyncInfo $p
669  }
670}
671
672proc ::TolPkgGUI::ReadLocalVersionInfo { } {
673  variable localVersionInfo
674
675  array unset localVersionInfo
676  foreach pv [ ::TolPkg::GetLocalPackages ] {
677    array set localVersionInfo $pv
678  }
679}
680
681proc ::TolPkgGUI::GetRepoId { url } {
682  variable urlmap
683
684  set url [ expr { [ string range $url end-13 end ] eq "repository.php" ?
685                   $url : "${url}repository.php" } ]
686  set repo [ expr { [ info exists urlmap($url) ] ? $urlmap($url) : "unknown" } ] 
687
688  return $repo
689}
690
691proc ::TolPkgGUI::GetPkgNode { T url p } {
692  variable urlmap
693  variable treeParents
694  variable nodesInfo
695  variable packSyncInfo
696
697  if { [ info exists treeParents($p) ] } {
698    return treeParents($p)
699  }
700  set url [ expr { [ string range $url end-13 end ] eq "repository.php" ?
701                   $url : "${url}repository.php" } ]
702  set repo [ expr { [ info exists urlmap($url) ] ? $urlmap($url) : "unknown" } ]
703  if { [ info exists packSyncInfo($p) ] } {
704    array set packSync $packSyncInfo($p)
705    set lastlocal $packSync(lastlocal)
706    set lastremote $packSync(lastremote)
707    if { $lastlocal eq "" } {
708      set img "pck_new_16"
709      set nodeStatus new
710      set statusLabel [ mc "new (%s)" $lastremote ]
711    } else {
712      set idx [ CmpVersion $lastremote $lastlocal ]
713      if { $idx <= 0 } {
714        # could be -1 (because of date error)
715        set img "pck_ok_16"
716        set nodeStatus ok
717        set statusLabel [ mc "ok" ]
718      } else {
719        puts "$lastremote > $lastlocal"
720        set img "pck_upg_16"
721        set nodeStatus upgrade
722        set statusLabel [ mc "upgrade (%s)" $lastremote ]
723      }
724    }
725  } else {
726    set img ""
727    set nodeStatus unknown
728    set statusLabel [ mc "unknown" ]
729  }
730  set nid [ $T insert [ list [ list $img $p ] [ list $statusLabel ] \
731                            [ list $repo ] ] -at end -relative root \
732                -button auto ]
733  set treeParents($p) $nid
734  set nodesInfo($nid,type) pkg
735  set nodesInfo($nid,status) $nodeStatus
736  foreach st {new ok update upgrade unknown} {
737    set nodesInfo($nid,children,$st) 0
738  }
739  lappend nodesInfo($nodeStatus) $treeParents($p)
740}
741
742proc ::TolPkgGUI::FillTreeInfo { T } {
743  variable packSyncInfo
744  variable versSyncInfo
745  variable localVersionInfo
746  variable treeParents
747  variable nodesInfo
748  variable localMostRecent
749
750  array unset treeParents
751  array unset nodesInfo
752  ReadPackSyncInfo
753  ReadVersSyncInfo
754  ReadLocalVersionInfo
755
756  $T configure -table no -filter yes -columns [list \
757    [list {image text} -tags NAME -label [mc "Name"]] \
758    [list {text} -tags STATUS -label [mc "Status"]] \
759    [list {text} -tags REPO -label [mc "Repository"]] \
760  ]
761
762  # insert package information
763  foreach p [ lsort [ array names packSyncInfo ] ] {
764    array unset pkg
765    array set pkg $packSyncInfo($p)
766    set url $pkg(url)
767    set pkgRepo [ expr { [ string range $url end-13 end ] eq "repository.php" ?
768                         $url : "${url}repository.php" } ]
769    GetPkgNode $T $pkgRepo $p
770  }
771 
772  set localVersionNames [ lsort -decreasing -command ::TolPkgGUI::CmpVersion \
773                              [ array names localVersionInfo ] ]
774
775  array unset localMostRecent
776  # insert version information
777  foreach pv $localVersionNames {
778    array unset pkg
779    array set pkg $localVersionInfo($pv)
780    set pkgRoot0 [ lindex [ split $pv . ] 0 ]
781    set pkgRoot [ lindex [ split $pkgRoot0 # ] 0 ]
782    set url $pkg(_.autodoc.url)
783    set pkgRepo [ expr { [ string range $url end-13 end ] eq "repository.php" ?
784                         $url : "${url}repository.php" } ]
785    GetPkgNode $T $pkgRepo $pkgRoot
786
787    if { ![ info exists localMostRecent($pkgRoot) ] } {
788      # will be used in contextual menu
789      set localMostRecent($pkgRoot) $pv
790    }
791    if { [ info exists versSyncInfo($pv) ] } {
792      array set versSync $versSyncInfo($pv)
793      set dateremote $versSync(dateremote)
794      set datelocal $versSync(datelocal)
795      if { $datelocal eq "TheBegin" } {
796        set img "pck_new_16"
797        set nodeStatus new
798        set statusLabel [ mc "new" ]
799      } else {
800        set idx [ string compare $dateremote $datelocal ]
801        if { $idx <= 0 } {
802          # could be -1 (because of date error)
803          set img "pck_ok_16"
804          set nodeStatus ok
805          set statusLabel [ mc "ok" ]
806        } else {
807          puts "$pv OUTDATED : $dateremote > $datelocal"
808          set img "pck_upd_16"
809          set nodeStatus update
810          set statusLabel [ mc "update" ]
811        }
812      }
813    } else {
814      set img ""
815      set nodeStatus unknown
816      set statusLabel [ mc "unknown" ]
817    }
818    set repo [ GetRepoId $pkgRepo ]
819    set parent $treeParents($pkgRoot)
820    set nid [ $T insert [ list [ list $img $pv ] [ list $statusLabel ] [ list $repo ] ] \
821                  -at end -relative $parent -button auto ]
822    set nodesInfo($nid,type) pkgver
823    set nodesInfo($nid,status) $nodeStatus
824    incr nodesInfo($parent,children,$nodeStatus)
825    if { $nodeStatus eq "update" } {
826      if { $nodesInfo($parent,status) ne "update" } {
827        if { $nodesInfo($parent,status) eq "upgrade" } {
828          set nodesInfo($parent,status) "upgupd"
829          $T itemcolumn $parent NAME {image "pck_upg_upd_16"}
830          set txtUpgrade [ lindex [ lindex [ $T itemcolumn $parent STATUS text ] 0 ] 1 ]
831          $T itemcolumn $parent STATUS \
832              [ list text [ mc "update/%s" $txtUpgrade ] ]
833        } elseif { $nodesInfo($parent,status) ne "upgupd"} {
834          set nodesInfo($parent,status) "update"
835          $T itemcolumn $parent NAME {image "pck_upd_16"}
836          $T itemcolumn $parent STATUS [list text [ mc "update" ] ]
837        }
838      }
839    }
840    lappend nodesInfo($nodeStatus) $nid
841    foreach {{} d} $pkg(_.autodoc.dependencies) {
842      set _nid [ $T insert [ list [ list back_to_ou_16 $d ] ] \
843                    -at end -relative $nid -button no ]
844      set nodesInfo($_nid,type) pkgdep
845    }
846  }
847}
848
849proc ::TolPkgGUI::CreateTreeWidget { t } {
850  variable tree $t
851
852  wtree $t -background white
853  grid $t -row 1 -column 0 -sticky "snew"
854  set f [ winfo parent $t ]
855  grid rowconfigure $f 1 -weight 1
856  grid columnconfigure $f 0 -weight 1
857}
858
859proc ::TolPkgGUI::CreateTree { t } {
860  variable widgets
861
862  CreateTreeWidget $t
863
864  menu $t.cmenu -tearoff 0 \
865      -postcommand [ list ::TolPkgGUI::PostContextMenu $t $t.cmenu ]
866  $t configure -contextmenu $t.cmenu
867}
868
869proc ::TolPkgGUI::EntryState { listName } {
870  upvar $listName v
871
872  if { [ info exists v ] && [ llength $v ] } {
873    return "normal"
874  } else {
875    return "disabled"
876  }
877}
878
879proc ::TolPkgGUI::PostContextMenu { T w } {
880  variable nodesInfo
881  variable packSyncInfo
882  variable versSyncInfo
883  variable localVersionInfo
884  variable localMostRecent
885
886  $w delete 0 end
887  array set selectionInfo {
888    repo   ""
889    pkg    ""
890    pkgver ""
891  }
892  foreach nid [ $T selection get ] {
893    lappend selectionInfo($nodesInfo($nid,type)) $nid
894  }
895  $w add command  -label [ mc "Add New Repository" ]... \
896      -command ::TolPkgGUI::AddNewRepository
897  set lenRepo [ llength $selectionInfo(repo) ]
898  if { $lenRepo } {
899    $w add cascade  -label [ mc "Check Repository" ] \
900        -menu $w.check
901    if { [ winfo exists $w.check ] } {
902      $w.check delete 0 end
903    } else {
904      menu $w.check -tearoff 0
905    }
906    if { $lenRepo > 1 } {
907      set labelCheck [ mc "Selected" ]
908    } else {
909      set labelCheck [ $T item text [ lindex $selectionInfo(repo) 0 ] 0 ]
910    }
911    $w.check add command -label $labelCheck \
912        -command "::TolPkgGUI::CheckRepository $labelCheck $lenRepo"
913    $w.check add command -label [ mc "All" ] \
914        -command "::TolPkgGUI::CheckRepository ALL -1"
915  }
916  $w add command -label [ mc "Sync with servers" ] \
917      -command "::TolPkgGUI::SyncServers"
918  # preprocess selection of packages
919  # list of new packages available
920  set listNEW {}
921  # list of package to remove including all installed versions
922  set listDEL {}
923  # list of individual package selected to remove
924  set listDEL0 {}
925  # list of packages selected needing update
926  set listUPD {}
927  # list of packages selected needing upgrade
928  set listUPG {}
929  # list of packages selected that can be exported 
930  set listEXP {}
931 
932  # process first the list of pkg
933  foreach nid $selectionInfo(pkg) {
934    set pkg [ $T item text $nid 0 ]
935    if { $nodesInfo($nid,status) ne "new" } {
936      lappend listDEL [ list $pkg $nid ]
937    }
938    array unset pkgInfo
939    if { [ info exists packSyncInfo($pkg) ] } {
940      array set pkgInfo $packSyncInfo($pkg)
941    } else {
942      set pkgInfo(lastremote) $localMostRecent($pkg)
943    }
944    switch -exact $nodesInfo($nid,status) {
945      "new" {
946        lappend listNEW [ list $pkgInfo(lastremote) $nid ]
947      }
948      "upgrade" -
949      "update" -
950      "upgupd" {
951        if { $nodesInfo($nid,status) eq "upgrade" ||
952             $nodesInfo($nid,status) eq "upgupd" } {
953          lappend listUPG [ list $pkg $nid ]
954        }
955        if { $nodesInfo($nid,status) eq "update" ||
956             $nodesInfo($nid,status) eq "upgupd" } {
957          foreach chId [ $T item children $nid ] {
958            if { $nodesInfo($chId,status) eq "update" } {
959              lappend listUPD [ list [ $T item text $chId 0 ] $chId ]
960            }
961          }
962        }
963      }
964      "ok" {
965      }
966      "unknown" {
967      }
968      default {
969        puts "unexpected status $nodesInfo($nid,status) for pkg $pkg"
970      }
971    }
972    foreach chId [ $T item children $nid ] {
973      lappend listDEL0 [ list [ $T item text $chId 0 ] $chId ]
974    }
975    lappend listEXP [ list $pkgInfo(lastremote) $nodesInfo($nid,status) $nid ]
976  }
977  # next process the list of pkgver
978  foreach nid $selectionInfo(pkgver) {
979    set pkg [ $T item text $nid 0 ]
980    switch -exact $nodesInfo($nid,status) {
981      "new" {
982        puts "OJO: he encontrado un estado new en un pkgver $pkg"
983        if { [ lsearchi 0 $listNEW $pkg ] == -1 } {
984          lappend listNEW [ list $pkg $nid ]
985        }
986      }
987      "update" {
988        if { [ lsearchi 0 $listUPD $pkg ] == -1 } {
989          lappend listUPD [ list $pkg $nid ]
990        }
991      }
992      "ok" {
993      }
994      default {
995        puts "unexpected status $nodesInfo($nid,status) for pkg $pkg"
996      }
997    }
998    if { [ lsearchi 0 $listDEL0 $pkg ] == -1 } {
999      lappend listDEL0 [ list $pkg $nid ]
1000    }
1001    if { [ lsearchi 0 $listEXP $pkg ] == -1 } {
1002      lappend listEXP [ list $pkg $nodesInfo($nid,status) $nid ]
1003    }
1004  }
1005  # install list
1006  $w add separator
1007  if { [ llength $listNEW ] == 1 } {
1008    $w add command -label [ mc "Install %s" [ lindex [ lindex $listNEW 0 ] 0 ] ] \
1009        -command [ list ::TolPkgGUI::InstallPackages $listNEW ]
1010  } elseif { [ llength $listNEW ] > 1 } {
1011    $w add command -label [ mc "Install selected" ]... \
1012        -command [ list ::TolPkgGUI::InstallPackages $listNEW ]
1013  }
1014  $w add command -label [ mc "Install ZIP" ]... \
1015      -command "::TolPkgGUI::InstallZip"
1016  # update list
1017  if { [ llength $listUPD ] == 1 } {
1018    $w add command \
1019        -label [ mc "Update %s" [ lindex [ lindex $listUPD 0 ] 0 ] ] \
1020        -command [ list ::TolPkgGUI::UpdatePackageVersion $listUPD ]
1021  } elseif { [ llength $listUPD ] > 1 } {
1022    $w add command -label [ mc "Update selected" ]... \
1023        -command [ list ::TolPkgGUI::UpdatePackageVersion $listUPD ]
1024  }
1025  $w add command -label [ mc "Update all" ]... \
1026      -command "::TolPkgGUI::UpdatePackageVersion" \
1027      -state [ EntryState nodesInfo(update) ]
1028  # upgrade list
1029  $w add separator
1030  if { [ llength $listUPG ] == 1 } {
1031    $w add command \
1032        -label [ mc "Upgrade %s" [ lindex [ lindex $listUPG 0 ] 0 ] ] \
1033        -command [ list ::TolPkgGUI::UpgradePackages $listUPG ]
1034  } elseif { [ llength $listUPG ] > 1 } {
1035    $w add command -label [ mc "Upgrade selected" ]... \
1036        -command [ list ::TolPkgGUI::UpgradePackages $listUPG ]
1037  }
1038  $w add command -label [ mc "Upgrade all" ]... \
1039      -command "::TolPkgGUI::UpgradePackages" \
1040      -state [ EntryState nodesInfo(upgrade) ]
1041
1042  # export options
1043  $w add separator
1044  if { [ llength $listEXP ] == 1 } {
1045    $w add command -label [ mc "Export %s" [ lindex [ lindex $listEXP 0 ] 0 ] ]... \
1046        -command [ list ::TolPkgGUI::ExportPackageVersion $listEXP ]
1047  } elseif { [ llength $listEXP ] > 1 } {
1048    $w add command -label [ mc "Export selected" ]... \
1049        -command [ list ::TolPkgGUI::ExportPackageVersion $listEXP ]
1050  } 
1051  $w add command -label [ mc "Export all" ]... \
1052      -command [ list ::TolPkgGUI::ExportPackageVersion ]
1053  # Remove options
1054  $w add separator
1055  if { [ llength $listDEL ] == 1 } {
1056    set _tmppkg [ lindex [ lindex $listDEL 0 ] 0 ]
1057    $w add command \
1058        -label [ mc "Remove all %s" $_tmppkg ]... \
1059        -command [ list ::TolPkgGUI::RemovePackageVersion $listDEL0 $_tmppkg ]
1060  } elseif { [ llength $listDEL0 ] == 1 } {
1061    set _tmppkg [ lindex [ lindex $listDEL0 0 ] 0 ]
1062    $w add command \
1063        -label [ mc "Remove %s" $_tmppkg ]... \
1064        -command [ list ::TolPkgGUI::RemovePackageVersion $listDEL0 ]
1065  } elseif { [ llength $listDEL0 ] > 1 } {
1066    $w add command -label [ mc "Remove selected" ]... \
1067        -command [ list ::TolPkgGUI::RemovePackageVersion $listDEL0 ]
1068  } 
1069  $w add command -label [ mc "Remove all" ]... \
1070      -command [ list ::TolPkgGUI::RemovePackageVersion ]
1071 
1072  # SyncInfo import/export
1073  $w add separator
1074  $w add command -label [ mc "Import SyncInfo" ]... \
1075      -command [ list ::TolPkgGUI::ImportSyncInfo ]
1076  $w add command -label [ mc "Export SyncInfo" ]... \
1077      -command [ list ::TolPkgGUI::ExportSyncInfo ]
1078 
1079}
1080
1081proc ::TolPkgGUI::AddNewRepository { } {
1082  variable win
1083  variable urlmap
1084
1085  set w $win.dlgAdd
1086  if { ![ winfo exist $w ] } {
1087    Dialog $w -title [ mc "Add repository"] \
1088        -parent $win -modal local
1089    set f [ $w getframe ]
1090    label $f.lb -text [ mc "Repository" ]:
1091    ComboBox $f.cb -values BPTP
1092    grid $f.lb -row 0 -column 0 -sticky ew
1093    grid $f.cb -row 0 -column 1 -sticky ew
1094    grid columnconfigure $f 1 -weight 1
1095    $w add -text Ok
1096    $w add -text Cancel
1097  }
1098  set ans [ $w draw ]
1099  if { $ans == 0 } {
1100    set repo [ string trim [ [$w getframe].cb get ] ]
1101    if { [ string range $repo 0 3 ] eq "http" } {
1102      set url $repo
1103    } else {
1104      if { [ info exists urlmap($repo) ] } {
1105        set url $urlmap($repo)
1106      } else {
1107       
1108      }
1109    }
1110    puts "::TolPkg::AddRepository $url"
1111    ::TolPkg::AddRepository $url
1112  }
1113}
1114
1115proc ::TolPkgGUI::RefreshTree { } {
1116  variable tree
1117
1118  $tree item delete all
1119  FillTreeInfo $tree
1120}
1121
1122proc ::TolPkgGUI::SyncServers { } {
1123  variable tree
1124  update
1125  ::TolPkg::UpdateRepositoryInfo
1126  RefreshTree
1127}
1128
1129proc ::TolPkgGUI::StartProgressBar { } {
1130  variable win
1131  variable Progress
1132
1133  set Progress(status) "working"
1134  set Progress(state) 0
1135  $win configure -cursor watch
1136  foreach wc [ winfo children $win.dlgInstall ] {
1137    catch { $wc configure -cursor watch }
1138  }
1139}
1140
1141proc ::TolPkgGUI::DoneProgress { } {
1142  variable win
1143  variable Progress
1144
1145  set Progress(status) "stopped"
1146  Dialog::enddialog $win.dlgInstall 1
1147  $win configure -cursor ""
1148  foreach wc [ winfo children $win.dlgInstall ] {
1149    catch { $wc configure -cursor "" }
1150  }
1151}
1152
1153proc ::TolPkgGUI::AdvanceProgress { x } {
1154  variable Progress
1155
1156  if { $Progress(status) eq "working" } {
1157    set Progress(state) $x
1158    update
1159  }
1160}
1161
1162proc ::TolPkgGUI::InstallBtn1 { remote } {
1163  variable win
1164  variable Progress
1165
1166  set w $win.dlgInstall
1167  $w itemconfigure 0 -state disabled
1168  $w itemconfigure 1 -command ::TolPkgGUI::DoneProgress
1169  set f [ $w getframe ]
1170  $f.lb1 configure -text [ mc "Installing" ]...
1171  InstallTask $remote
1172}
1173
1174proc ::TolPkgGUI::DlgProcessBtn1 { } {
1175  variable win
1176  variable DlgProcessData
1177
1178  set w [ DlgProcessGetWin ]
1179  # disable button Ok
1180  $w itemconfigure 0 -state disabled
1181  # set cancel to finish progress
1182  $w itemconfigure 1 -command ::TolPkgGUI::DlgProcessStop
1183  eval $DlgProcessData(-beforestart)
1184  DlgProcessTask
1185}
1186
1187proc ::TolPkgGUI::DlgProcess { pkgs args } {
1188  variable win
1189  variable DlgProcessData
1190
1191  array unset DlgProcessData
1192  array set DlgProcessData {
1193    -title "Process packages"
1194    -beforestart ""
1195    -cmditem ""
1196    -cmdlabelitem ""
1197    -customgui ""
1198    -refreshtree 0
1199    -syncservers 0
1200  }
1201  set DlgProcessData(-label) [ mc "You are about to process"]:
1202  array set DlgProcessData $args
1203  set DlgProcessData(items) $pkgs
1204  set DlgProcessData(status) "stopped"
1205  set DlgProcessData(state) ""
1206  set w [ DlgProcessGetWin ]
1207  if { ![ winfo exists $w ] } {
1208    Dialog $w -title $DlgProcessData(-title) \
1209        -parent $win -modal local -cancel 1 -separator 1
1210    set f [ $w getframe ]
1211    label $f.lb1
1212    listbox $f.list -selectmode single -background white \
1213        -relief flat -borderwidth 1 -highlightthickness 0 \
1214        -selectbackground #c3c3ff
1215    frame $f.cgui
1216    ProgressBar $f.pbar
1217    $w add -text Ok
1218    $w add -text Cancel
1219    grid $f.lb1 -row 0 -column 0 -sticky w
1220    grid $f.list -row 1 -column 0 -sticky snew
1221    grid $f.pbar -row 2 -column 0 -sticky e
1222    grid columnconfigure $f 0 -weight 1
1223    grid rowconfigure $f 1 -weight 1
1224  } else {
1225    wm title $w $DlgProcessData(-title)
1226    set f [ DlgProcessGetFrame ]
1227  }
1228  if { $DlgProcessData(-customgui) ne "" } {
1229    grid $f.cgui -row 3 -column 0 -sticky snew
1230    eval $DlgProcessData(-customgui) $f.cgui
1231  } else {
1232    grid remove $f.cgui
1233    grid rowconfigure $f 3 -weight 0
1234  }
1235  $f.pbar configure -maximum 1 \
1236      -variable ::TolPkgGUI::DlgProcessData(state,0)
1237  $f.pbar configure -variable ::TolPkgGUI::DlgProcessData(state)
1238 
1239  $f.lb1 configure -text $DlgProcessData(-label)
1240  $w itemconfigure 0 -state normal \
1241      -command [ list ::TolPkgGUI::DlgProcessBtn1 ]
1242  $w itemconfigure 1 -command "Dialog::enddialog $w 1"
1243  set lb [ DlgProcessGetList ]
1244  $lb delete 0 end
1245  foreach it $DlgProcessData(items) {
1246    if { $DlgProcessData(-cmdlabelitem) ne "" } {
1247      set labelIt [ $DlgProcessData(-cmdlabelitems) $it ]
1248    } else {
1249      set labelIt $it
1250    }
1251    $f.list insert end $it
1252  }
1253  set DlgProcessData(state) ""
1254  $w draw
1255  foreach wc [ winfo children $f.cgui ] {
1256    destroy $wc
1257  }
1258}
1259
1260proc ::TolPkgGUI::DlgProcessGetCurrentIndex { } {
1261  variable DlgProcessData
1262
1263  return $DlgProcessData(current)
1264}
1265
1266proc ::TolPkgGUI::DlgProcessStart { } {
1267  variable win
1268  variable DlgProcessData
1269
1270  set lb [ DlgProcessGetList ]
1271  set total [ llength $DlgProcessData(items) ]
1272  set DlgProcessData(current) 0
1273  $lb selection clear 0 end
1274  $lb selection set 0
1275  $lb see 0
1276  set DlgProcessData(status) "working"
1277  set DlgProcessData(state) 0
1278  $win configure -cursor watch
1279  set w [ DlgProcessGetWin ]
1280  foreach wc [ winfo children $w ] {
1281    catch { $wc configure -cursor watch }
1282  }
1283}
1284
1285proc ::TolPkgGUI::DlgProcessAdvance { } {
1286  variable DlgProcessData
1287
1288  set i [ incr DlgProcessData(current) ]
1289  set lb [ DlgProcessGetList ]
1290  set total [ llength $DlgProcessData(items) ]
1291  $lb selection set $i
1292  $lb selection anchor $i
1293  $lb see $i
1294  if { $DlgProcessData(status) eq "working" } {
1295    set DlgProcessData(state) [ expr { double($i) / $total } ]
1296    update
1297  }
1298}
1299
1300proc ::TolPkgGUI::DlgProcessItem { p } {
1301  variable DlgProcessData
1302
1303  if { $DlgProcessData(-cmditem) ne "" } {
1304    $DlgProcessData(-cmditem) $p
1305  }
1306}
1307
1308proc ::TolPkgGUI::DlgProcessStop { } {
1309  variable win
1310  variable DlgProcessData
1311 
1312  set w [ DlgProcessGetWin ]
1313  $win configure -cursor ""
1314  foreach wc [ winfo children $w ] {
1315    catch { $wc configure -cursor "" }
1316  }
1317  set DlgProcessData(status) "stopped"
1318  Dialog::enddialog $w 1
1319}
1320
1321proc ::TolPkgGUI::DlgProcessGetWin { } {
1322  variable win
1323
1324  return $win.dlgProcess
1325}
1326
1327proc ::TolPkgGUI::DlgProcessGetFrame { } {
1328  variable win
1329
1330  set w [ DlgProcessGetWin ]
1331  return [ $w getframe ]
1332}
1333
1334proc ::TolPkgGUI::DlgProcessGetList { } {
1335  variable win
1336
1337  set w [ DlgProcessGetFrame ]
1338  return $w.list
1339}
1340
1341proc ::TolPkgGUI::DlgProcessSetLabel { text } {
1342  variable win
1343 
1344  set f [ DlgProcessGetFrame ]
1345  $f.lb1 configure -text $text
1346}
1347
1348proc ::TolPkgGUI::InstallPackages { pkgs } {
1349  variable win
1350  variable installData
1351
1352  array unset installData
1353  foreach p $pkgs {
1354    array set installData $p
1355    lappend _pkgs [ lindex $p 0 ]
1356  }
1357  set InstallList [ TolPkg::CheckPackagesToInstall $_pkgs ]
1358  if { ![ llength $InstallList ] } {
1359    set ans [ MessageDlg $win.ask -title [ mc "Install packages" ] \
1360                  -icon error \
1361                  -parent $win \
1362                  -type ok -aspect 75 \
1363                  -message [ mc "Could not connect with remote repository" ] ]
1364    return
1365  }
1366  puts "InstallPackages: $InstallList"
1367  DlgProcess $InstallList -title [ mc "Install packages" ] \
1368      -label [ mc "You are about to install"]: \
1369      -beforestart ::TolPkgGUI::Installing \
1370      -cmditem "InstallThisPackage" \
1371      -syncservers 1
1372}
1373
1374proc ::TolPkgGUI::DlgProcessGetVariableName { name } {
1375  return ::TolPkgGUI::DlgProcessData($name)
1376}
1377
1378proc ::TolPkgGUI::DlgProcessGetVariable { name } {
1379  variable DlgProcessData
1380
1381  return $DlgProcessData($name)
1382}
1383
1384proc ::TolPkgGUI::DlgProcessTask { } {
1385  variable win
1386  variable Progress
1387  variable DlgProcessData
1388 
1389  DlgProcessStart
1390  set hasProcessed 0
1391  foreach p $DlgProcessData(items) {
1392    if { $DlgProcessData(status) ne "working" } break
1393    DlgProcessItem $p
1394    DlgProcessAdvance
1395    set hasProcessed 1
1396  }
1397  DlgProcessStop
1398  if { $hasProcessed } {
1399    if { $DlgProcessData(-syncservers) } {
1400      ::TolPkg::UpdateRepositoryInfo
1401      set DlgProcessData(-refreshtree) 1
1402    }
1403    if { $DlgProcessData(-refreshtree) } {
1404      after idle ::TolPkgGUI::RefreshTree
1405    }
1406  }
1407}
1408
1409proc ::TolPkgGUI::InstallTask { remote } {
1410  variable win
1411  variable Progress
1412  variable InstallList
1413 
1414  set w $win.dlgInstall
1415  set f [ $w getframe ]
1416  set total [ llength $InstallList ]
1417  set i 0
1418  $f.list selection clear 0 end
1419  $f.list selection set 0
1420  $f.list see 0
1421  StartProgressBar
1422  foreach p $InstallList {
1423    if { $Progress(status) ne "working" } break
1424    if { $remote } {
1425      TolPkg::RemoteInstall $p
1426    } else {
1427      TolPkg::ZipInstall $p
1428    }
1429    incr i
1430    $f.list selection set $i
1431    $f.list selection anchor $i
1432    $f.list see $i
1433    AdvanceProgress [ expr { double($i) / $total } ]
1434  }
1435  DoneProgress
1436 
1437}
1438
1439proc ::TolPkgGUI::InstallZip { } {
1440  variable win
1441  variable installZipData
1442
1443  set installZipData [ tk_getOpenFile -defaultextension .zip -multiple 1 \
1444                           -parent $win -title [ mc "Select zip packages" ] \
1445                           -filetypes {{zip {.zip}}} ]
1446  if { $installZipData ne "" } {
1447    foreach f $installZipData {
1448      lappend zipList [ file tail $f ]
1449    }
1450    DlgProcess $zipList -title [ mc "Install Zip's" ] \
1451        -label [ mc "You are about to install zip"]: \
1452        -beforestart ::TolPkgGUI::InstallingZip \
1453        -cmditem InstallThisZip -syncservers 1
1454  }
1455}
1456
1457proc ::TolPkgGUI::CheckConnectionConfig { } {
1458  variable win
1459
1460  array set connConfig [ ::TolPkg::GetUpgradeConfig ]
1461  if { $connConfig(localPKG) } {
1462    MessageDlg $win.ask -title [ mc "Warning" ] \
1463        -icon warning \
1464        -type ok \
1465        -message [ mc "Can not continue. You have configured to use only local packages. Check the value of\nTolConfigManager::Config::Upgrading::TolPackage::LocalOnly." ]
1466    return 0
1467  }
1468  return 1
1469}
1470
1471proc ::TolPkgGUI::UpgradePackages { { pkgs {} } } {
1472  variable installData
1473  variable nodesInfo
1474  variable tree
1475
1476  if { ![ CheckConnectionConfig ] } {
1477    return
1478  }
1479  array unset installData
1480  if { [ llength $pkgs ] } {
1481    foreach p $pkgs {
1482      array set installData $p
1483      lappend upgradeList [ lindex $p 0 ]
1484    }
1485  } else {
1486    # upgrade all, look for the list
1487    if { [ info exists nodesInfo(upgrade) ] } {
1488      foreach nid $nodesInfo(upgrade) {
1489        set p [ $tree item text $nid 0 ]
1490        lappend upgradeList $p
1491        set installData($p) $nid
1492      }
1493    } else {
1494      return
1495    }
1496  }
1497  DlgProcess $upgradeList -title [ mc "Upgrade packages" ] \
1498      -label [ mc "You are about to upgrade"]: \
1499      -beforestart ::TolPkgGUI::Upgrading \
1500      -cmditem "InstallThisPackage" -syncservers 1
1501}
1502
1503proc ::TolPkgGUI::UpdatePackageVersion { { pkgs {} } } {
1504  variable installData
1505  variable nodesInfo
1506  variable tree
1507
1508  puts "UpdatePackageVersion: $pkgs"
1509  if { ![ CheckConnectionConfig ] } {
1510    return
1511  }
1512 
1513  array unset installData
1514  set updateList {}
1515  if { [ llength $pkgs ] } {
1516    foreach p $pkgs {
1517      array set installData $p
1518      lappend updateList [ lindex $p 0 ]
1519    }
1520  } else {
1521    # update all, look for the list
1522    if { [ info exists nodesInfo(update) ] } {
1523      foreach nid $nodesInfo(update) {
1524        set p [ $tree item text $nid 0 ]
1525        lappend updateList $p
1526        set installData($p) $nid
1527      }
1528    } else {
1529      return
1530    }
1531  }
1532  DlgProcess $updateList -title [ mc "Update packages" ] \
1533      -label [ mc "You are about to update"]: \
1534      -beforestart ::TolPkgGUI::Updating \
1535      -cmditem "InstallThisPackage" -syncservers 1
1536}
1537
1538proc ::TolPkgGUI::RemovePackageVersion { { pkgs {} } { matchPkg {} } } {
1539  variable installData
1540  variable tree
1541
1542  set removeList {}
1543  if { [ llength $pkgs ] } {
1544    foreach p $pkgs {
1545      set _p [ lindex $p 0 ]
1546      if { $matchPkg eq "" || [ regexp "^${matchPkg}\\.(\\d+)\\.(\\d+)\$" \
1547                                    $_p ] } {
1548        lappend removeList $_p
1549      }
1550    }
1551  } elseif { $matchPkg ne "" } {
1552    return
1553  } else {
1554    foreach nid [ $tree item id {depth 2} ] {
1555      lappend removeList [ $tree item text $nid 0 ]
1556    }
1557  }
1558  if { ![ llength $removeList ] } {
1559    return
1560  }
1561  array unset installData
1562  DlgProcess $removeList -title [ mc "Remove packages" ] \
1563      -label [ mc "You are about to remove"]: \
1564      -beforestart ::TolPkgGUI::Removing \
1565      -cmditem "RemoveThisPackage" -syncservers 1
1566}
1567
1568proc ::TolPkgGUI::ImportSyncInfo { } {
1569  Unimplemented "Import Sync Info"
1570}
1571
1572proc ::TolPkgGUI::ExportSyncInfo { } {
1573  Unimplemented "Export Sync Info"
1574}
1575
1576proc ::TolPkgGUI::Unimplemented { title } {
1577  variable win
1578
1579  MessageDlg $win.ask -parent $win -title [ mc $title ] \
1580      -icon warning \
1581      -type ok -message [ mc "Unimplemented option" ]
1582}
1583
1584##
1585# Export packages --
1586#
1587# p == "" then the last installed version of every package is
1588# exported,
1589#
1590# [ llength $p ]>0 then all specified package is exported, if some
1591# packages is not installed then it is requested from the remote
1592# repository.
1593#
1594
1595# Funciones que hacen falta:
1596#
1597#  1- Crear un zip de un paquete local
1598#  2- Descargar un zip de un paquete remoto
1599#
1600proc ::TolPkgGUI::ExportPackageVersion { {pkgs ""} } {
1601  variable win
1602
1603  if { ![ CheckConnectionConfig ] } {
1604    return
1605  }
1606  if { ![ llength $pkgs ] } {
1607    Unimplemented "Export all packages"
1608    return
1609  }
1610  set remote {}
1611  set local {}
1612  foreach _p $pkgs {
1613    foreach { p s } $_p break
1614    if {  $s eq "upgupd" || $s eq "upgrade" || $s eq "new" } {
1615      lappend remote $p
1616    } else {
1617      lappend local $p
1618    }
1619  }
1620  if { [ llength $remote ] } {
1621    set ans [ MessageDlg $win.ask -title [ mc "Export packages" ] \
1622                  -icon warning \
1623                  -type okcancel -aspect 75 \
1624                  -message [ mc "The following package can not be exported because they are not installed:\n%s\n\nContinue?" $remote ] ]
1625    if { $ans == 1 } {
1626      return
1627    }
1628  }
1629  puts "ExportPackageVersion: $local"
1630  if { [ llength $local ] } {
1631    DlgProcess $local -title [ mc "Export packages" ] \
1632        -label [ mc "You are about to export"]: \
1633        -beforestart ::TolPkgGUI::Exporting \
1634        -customgui "CreateSelectDir" \
1635        -cmditem "ExportThisPackage"
1636  }
1637}
1638
1639proc ::TolPkgGUI::Exporting { } {
1640  DlgProcessSetLabel [ mc "Exporting" ]...
1641}
1642
1643proc ::TolPkgGUI::Installing { } {
1644  DlgProcessSetLabel [ mc "Installing" ]...
1645}
1646
1647proc ::TolPkgGUI::Upgrading { } {
1648  DlgProcessSetLabel [ mc "Upgrading" ]...
1649}
1650
1651proc ::TolPkgGUI::Removing { } {
1652  DlgProcessSetLabel [ mc "Removing" ]...
1653}
1654
1655proc ::TolPkgGUI::Updating { } {
1656  DlgProcessSetLabel [ mc "Updating" ]...
1657}
1658
1659proc ::TolPkgGUI::InstallingZip { } {
1660  DlgProcessSetLabel [ mc "Installing Zip" ]...
1661}
1662
1663proc ::TolPkgGUI::CreateSelectDir { f } {
1664  set varname [ DlgProcessGetVariableName "directory" ]
1665  upvar \#0 $varname var
1666
1667
1668  if { ![ info exists $varname ] } {
1669    trace add variable $varname write ::TolPkgGUI::OnChangeDirectory
1670  }
1671  label $f.lb -text [ mc "Output directory" ]:
1672  entry $f.ent -textvariable $varname
1673  button $f.btn -image folder_yellow_16 \
1674      -command "::TolPkgGUI::ChooseDir $varname"
1675  grid $f.lb -row 0 -column 0 -sticky w
1676  grid $f.ent -row 0 -column 1 -sticky ew
1677  grid $f.btn -row 0 -column 2 -sticky ew
1678  grid columnconfigure $f 1 -weight 1
1679  if { $var eq "" } {
1680    set var [ pwd ]
1681  } else {
1682    set var $var
1683  }
1684}
1685
1686proc ::TolPkgGUI::OnChangeDirectory { args } {
1687  set w [ DlgProcessGetWin ]
1688  set dir [ DlgProcessGetVariable directory ]
1689  if { [ file exists $dir ] && [ file writable $dir ] } {
1690    $w itemconfigure 0 -state normal
1691  } else {
1692    $w itemconfigure 0 -state disabled
1693  }
1694}
1695
1696proc ::TolPkgGUI::ChooseDir { varname } {
1697  variable win
1698 
1699  puts "upvar \#0 $varname var"
1700  upvar \#0 $varname var
1701
1702  set res [ tk_chooseDirectory -parent $win -initialdir $var \
1703                -mustexist 1 -title [ mc "Select output directory" ] ]
1704  if { $res ne "" } {
1705    set var $res
1706  }
1707}
1708
1709proc ::TolPkgGUI::ExportThisPackage { p } {
1710  set status [ TolPkg::ExportPackage $p [ DlgProcessGetVariable "directory" ] ]
1711  puts "::TolPkgGUI::ExportThisPackage $p ==> $status"
1712}
1713
1714proc ::TolPkgGUI::InstallThisPackage { p } {
1715  variable win
1716  variable urlmap
1717  variable installData
1718 
1719  if { [ info exists installData($p) ] } {
1720    set nid $installData($p)
1721    set REPO [ $win.tree item text $nid REPO ]
1722    set repo $urlmap($REPO)
1723  } else {
1724    # packages requested as a dependencie
1725    set repo ""
1726  }
1727  set result [ TolPkg::RemoteInstall $p $repo ]
1728  puts "TolPkg::RemoteInstall $p: $result"
1729  return $result
1730}
1731
1732proc ::TolPkgGUI::RemoveThisPackage { p } {
1733  set result [ TolPkg::RemovePackage $p ]
1734  puts "TolPkg::RemovePackage $p: $result"
1735  return $result
1736}
1737
1738proc ::TolPkgGUI::InstallThisZip { p } {
1739  variable win
1740  variable urlmap
1741  variable installZipData
1742 
1743  puts "::TolPkgGUI::InstallThisZip $p"
1744  set idx [ DlgProcessGetCurrentIndex ]
1745  set thisZip [ lindex $installZipData $idx ]
1746  set result [ TolPkg::ZipInstall $thisZip ]
1747  puts "::TolPkgGUI::InstallThisZip $p: $result"
1748}
1749
1750proc ::TolPkgGUI::Show { } {
1751  variable win
1752
1753  set win .tolpkg
1754
1755  if { [ winfo exists $win ] } {
1756    raise $win
1757  } else {
1758    toplevel $win
1759    wm state $win withdrawn
1760    wm title $win [mc "TOL Packages"]
1761    CreateTree $win.tree
1762    ::TolPkg::UpdateRepositoryInfo
1763    FillTreeInfo $win.tree
1764    wm state $win normal
1765  }
1766}
1767
1768proc ::TolPkgGUI::test { } {
1769  destroy .tolpkg
1770  ::TolPkgGUI::Show
1771}
1772
1773if { 0 } {
1774  ::TolPkg::UpdateRepositoryInfo
1775  ::TolPkgGUI::test
1776}
Note: See TracBrowser for help on using the repository browser.