ProjectDjangoTagsMenu/TimezoneSelectionDialog.py

changeset 11
7e3e1ee102c5
child 12
8bc18ea91897
equal deleted inserted replaced
10:ef5694c0bf3a 11:7e3e1ee102c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to select a time zone.
8 """
9
10 from PyQt4.QtCore import pyqtSlot
11 from PyQt4.QtGui import QDialog, QDialogButtonBox
12
13 from .Ui_TimezoneSelectionDialog import Ui_TimezoneSelectionDialog
14
15
16 class TimezoneSelectionDialog(QDialog, Ui_TimezoneSelectionDialog):
17 """
18 Class implementing a dialog to select a time zone.
19 """
20 Timezones = {
21 'Africa': [
22 'Abidjan',
23 'Accra',
24 'Addis_Ababa',
25 'Algiers',
26 'Asmara',
27 'Asmera',
28 'Bamako',
29 'Bangui',
30 'Banjul',
31 'Bissau',
32 'Blantyre',
33 'Brazzaville',
34 'Bujumbura',
35 'Cairo',
36 'Casablanca',
37 'Ceuta',
38 'Conakry',
39 'Dakar',
40 'Dar_es_Salaam',
41 'Djibouti',
42 'Douala',
43 'El_Aaiun',
44 'Freetown',
45 'Gaborone',
46 'Harare',
47 'Johannesburg',
48 'Juba',
49 'Kampala',
50 'Khartoum',
51 'Kigali',
52 'Kinshasa',
53 'Lagos',
54 'Libreville',
55 'Lome',
56 'Luanda',
57 'Lubumbashi',
58 'Lusaka',
59 'Malabo',
60 'Maputo',
61 'Maseru',
62 'Mbabane',
63 'Mogadishu',
64 'Monrovia',
65 'Nairobi',
66 'Ndjamena',
67 'Niamey',
68 'Nouakchott',
69 'Ouagadougou',
70 'Porto-Novo',
71 'Sao_Tome',
72 'Timbuktu',
73 'Tripoli',
74 'Tunis',
75 'Windhoek',
76 ],
77 'America': [
78 'Adak',
79 'Anchorage',
80 'Anguilla',
81 'Antigua',
82 'Araguaina',
83 'Argentina/Buenos_Aires',
84 'Argentina/Catamarca',
85 'Argentina/ComodRivadavia',
86 'Argentina/Cordoba',
87 'Argentina/Jujuy',
88 'Argentina/La_Rioja',
89 'Argentina/Mendoza',
90 'Argentina/Rio_Gallegos',
91 'Argentina/Salta',
92 'Argentina/San_Juan',
93 'Argentina/San_Luis',
94 'Argentina/Tucuman',
95 'Argentina/Ushuaia',
96 'Aruba',
97 'Asuncion',
98 'Atikokan',
99 'Atka',
100 'Bahia',
101 'Bahia_Banderas',
102 'Barbados',
103 'Belem',
104 'Belize',
105 'Blanc-Sablon',
106 'Boa_Vista',
107 'Bogota',
108 'Boise',
109 'Buenos_Aires',
110 'Cambridge_Bay',
111 'Campo_Grande',
112 'Cancun',
113 'Caracas',
114 'Catamarca',
115 'Cayenne',
116 'Cayman',
117 'Chicago',
118 'Chihuahua',
119 'Coral_Harbour',
120 'Cordoba',
121 'Costa_Rica',
122 'Creston',
123 'Cuiaba',
124 'Curacao',
125 'Danmarkshavn',
126 'Dawson',
127 'Dawson_Creek',
128 'Denver',
129 'Detroit',
130 'Dominica',
131 'Edmonton',
132 'Eirunepe',
133 'El_Salvador',
134 'Ensenada',
135 'Fort_Wayne',
136 'Fortaleza',
137 'Glace_Bay',
138 'Godthab',
139 'Goose_Bay',
140 'Grand_Turk',
141 'Grenada',
142 'Guadeloupe',
143 'Guatemala',
144 'Guayaquil',
145 'Guyana',
146 'Halifax',
147 'Havana',
148 'Hermosillo',
149 'Indiana/Indianapolis',
150 'Indiana/Knox',
151 'Indiana/Marengo',
152 'Indiana/Petersburg',
153 'Indiana/Tell_City',
154 'Indiana/Vevay',
155 'Indiana/Vincennes',
156 'Indiana/Winamac',
157 'Indianapolis',
158 'Inuvik',
159 'Iqaluit',
160 'Jamaica',
161 'Jujuy',
162 'Juneau',
163 'Kentucky/Louisville',
164 'Kentucky/Monticello',
165 'Knox_IN',
166 'Kralendijk',
167 'La_Paz',
168 'Lima',
169 'Los_Angeles',
170 'Louisville',
171 'Lower_Princes',
172 'Maceio',
173 'Managua',
174 'Manaus',
175 'Marigot',
176 'Martinique',
177 'Matamoros',
178 'Mazatlan',
179 'Mendoza',
180 'Menominee',
181 'Merida',
182 'Metlakatla',
183 'Mexico_City',
184 'Miquelon',
185 'Moncton',
186 'Monterrey',
187 'Montevideo',
188 'Montreal',
189 'Montserrat',
190 'Nassau',
191 'New_York',
192 'Nipigon',
193 'Nome',
194 'Noronha',
195 'North_Dakota/Beulah',
196 'North_Dakota/Center',
197 'North_Dakota/New_Salem',
198 'Ojinaga',
199 'Panama',
200 'Pangnirtung',
201 'Paramaribo',
202 'Phoenix',
203 'Port-au-Prince',
204 'Port_of_Spain',
205 'Porto_Acre',
206 'Porto_Velho',
207 'Puerto_Rico',
208 'Rainy_River',
209 'Rankin_Inlet',
210 'Recife',
211 'Regina',
212 'Resolute',
213 'Rio_Branco',
214 'Rosario',
215 'Santa_Isabel',
216 'Santarem',
217 'Santiago',
218 'Santo_Domingo',
219 'Sao_Paulo',
220 'Scoresbysund',
221 'Shiprock',
222 'Sitka',
223 'St_Barthelemy',
224 'St_Johns',
225 'St_Kitts',
226 'St_Lucia',
227 'St_Thomas',
228 'St_Vincent',
229 'Swift_Current',
230 'Tegucigalpa',
231 'Thule',
232 'Thunder_Bay',
233 'Tijuana',
234 'Toronto',
235 'Tortola',
236 'Vancouver',
237 'Virgin',
238 'Whitehorse',
239 'Winnipeg',
240 'Yakutat',
241 'Yellowknife',
242 ],
243 'Antarctica':[
244 'Casey',
245 'Davis',
246 'DumontDUrville',
247 'Macquarie',
248 'Mawson',
249 'McMurdo',
250 'Palmer',
251 'Rothera',
252 'South_Pole',
253 'Syowa',
254 'Vostok',
255 ],
256 'Arctic':[
257 'Longyearbyen',
258 ],
259 'Asia': [
260 'Aden',
261 'Almaty',
262 'Amman',
263 'Anadyr',
264 'Aqtau',
265 'Aqtobe',
266 'Ashgabat',
267 'Ashkhabad',
268 'Baghdad',
269 'Bahrain',
270 'Baku',
271 'Bangkok',
272 'Beirut',
273 'Bishkek',
274 'Brunei',
275 'Calcutta',
276 'Choibalsan',
277 'Chongqing',
278 'Chungking',
279 'Colombo',
280 'Dacca',
281 'Damascus',
282 'Dhaka',
283 'Dili',
284 'Dubai',
285 'Dushanbe',
286 'Gaza',
287 'Harbin',
288 'Hebron',
289 'Ho_Chi_Minh',
290 'Hong_Kong',
291 'Hovd',
292 'Irkutsk',
293 'Istanbul',
294 'Jakarta',
295 'Jayapura',
296 'Jerusalem',
297 'Kabul',
298 'Kamchatka',
299 'Karachi',
300 'Kashgar',
301 'Kathmandu',
302 'Katmandu',
303 'Khandyga',
304 'Kolkata',
305 'Krasnoyarsk',
306 'Kuala_Lumpur',
307 'Kuching',
308 'Kuwait',
309 'Macao',
310 'Macau',
311 'Magadan',
312 'Makassar',
313 'Manila',
314 'Muscat',
315 'Nicosia',
316 'Novokuznetsk',
317 'Novosibirsk',
318 'Omsk',
319 'Oral',
320 'Phnom_Penh',
321 'Pontianak',
322 'Pyongyang',
323 'Qatar',
324 'Qyzylorda',
325 'Rangoon',
326 'Riyadh',
327 'Saigon',
328 'Sakhalin',
329 'Samarkand',
330 'Seoul',
331 'Shanghai',
332 'Singapore',
333 'Taipei',
334 'Tashkent',
335 'Tbilisi',
336 'Tehran',
337 'Tel_Aviv',
338 'Thimbu',
339 'Thimphu',
340 'Tokyo',
341 'Ujung_Pandang',
342 'Ulaanbaatar',
343 'Ulan_Bator',
344 'Urumqi',
345 'Ust-Nera',
346 'Vientiane',
347 'Vladivostok',
348 'Yakutsk',
349 'Yekaterinburg',
350 'Yerevan',
351 ],
352 'Atlantic': [
353 'Azores',
354 'Bermuda',
355 'Canary',
356 'Cape_Verde',
357 'Faeroe',
358 'Faroe',
359 'Jan_Mayen',
360 'Madeira',
361 'Reykjavik',
362 'South_Georgia',
363 'St_Helena',
364 'Stanley',
365 ],
366 'Australia': [
367 'ACT',
368 'Adelaide',
369 'Brisbane',
370 'Broken_Hill',
371 'Canberra',
372 'Currie',
373 'Darwin',
374 'Eucla',
375 'Hobart',
376 'LHI',
377 'Lindeman',
378 'Lord_Howe',
379 'Melbourne',
380 'NSW',
381 'North',
382 'Perth',
383 'Queensland',
384 'South',
385 'Sydney',
386 'Tasmania',
387 'Victoria',
388 'West',
389 'Yancowinna',
390 ],
391 'Europe': [
392 'Amsterdam',
393 'Andorra',
394 'Athens',
395 'Belfast',
396 'Belgrade',
397 'Berlin',
398 'Bratislava',
399 'Brussels',
400 'Bucharest',
401 'Budapest',
402 'Busingen',
403 'Chisinau',
404 'Copenhagen',
405 'Dublin',
406 'Gibraltar',
407 'Guernsey',
408 'Helsinki',
409 'Isle_of_Man',
410 'Istanbul',
411 'Jersey',
412 'Kaliningrad',
413 'Kiev',
414 'Lisbon',
415 'Ljubljana',
416 'London',
417 'Luxembourg',
418 'Madrid',
419 'Malta',
420 'Mariehamn',
421 'Minsk',
422 'Monaco',
423 'Moscow',
424 'Nicosia',
425 'Oslo',
426 'Paris',
427 'Podgorica',
428 'Prague',
429 'Riga',
430 'Rome',
431 'Samara',
432 'San_Marino',
433 'Sarajevo',
434 'Simferopol',
435 'Skopje',
436 'Sofia',
437 'Stockholm',
438 'Tallinn',
439 'Tirane',
440 'Tiraspol',
441 'Uzhgorod',
442 'Vaduz',
443 'Vatican',
444 'Vienna',
445 'Vilnius',
446 'Volgograd',
447 'Warsaw',
448 'Zagreb',
449 'Zaporozhye',
450 'Zurich',
451 ],
452 'Indian': [
453 'Antananarivo',
454 'Chagos',
455 'Christmas',
456 'Cocos',
457 'Comoro',
458 'Kerguelen',
459 'Mahe',
460 'Maldives',
461 'Mauritius',
462 'Mayotte',
463 'Reunion',
464 ],
465 'Pacific': [
466 'Apia',
467 'Auckland',
468 'Chatham',
469 'Chuuk',
470 'Easter',
471 'Efate',
472 'Enderbury',
473 'Fakaofo',
474 'Fiji',
475 'Funafuti',
476 'Galapagos',
477 'Gambier',
478 'Guadalcanal',
479 'Guam',
480 'Honolulu',
481 'Johnston',
482 'Kiritimati',
483 'Kosrae',
484 'Kwajalein',
485 'Majuro',
486 'Marquesas',
487 'Midway',
488 'Nauru',
489 'Niue',
490 'Norfolk',
491 'Noumea',
492 'Pago_Pago',
493 'Palau',
494 'Pitcairn',
495 'Pohnpei',
496 'Ponape',
497 'Port_Moresby',
498 'Rarotonga',
499 'Saipan',
500 'Samoa',
501 'Tahiti',
502 'Tarawa',
503 'Tongatapu',
504 'Truk',
505 'Wake',
506 'Wallis',
507 'Yap',
508 ],
509 }
510
511 def __init__(self, parent=None):
512 """
513 Constructor
514
515 @param parent reference to the parent widget (QWidget)
516 """
517 super().__init__(parent)
518 self.setupUi(self)
519
520 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
521
522 self.regionCombo.addItems([" "] + sorted(self.Timezones.keys()))
523
524 def __updateOK(self):
525 """
526 Private method to update the OK button.
527 """
528 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
529 bool(self.regionCombo.currentText()) and
530 len(self.cityList.selectedItems()) == 1
531 )
532
533 @pyqtSlot(str)
534 def on_regionCombo_currentIndexChanged(self, region):
535 """
536 Private slot handling the selection of a time zone region.
537
538 @param region selected region (string)
539 """
540 self.cityList.clear()
541 if region in self.Timezones:
542 self.cityList.addItems(sorted(self.Timezones[region]))
543
544 self.__updateOK()
545
546 @pyqtSlot()
547 def on_cityList_itemSelectionChanged(self):
548 """
549 Private slot handling a change of the city selection.
550 """
551 self.__updateOK()
552
553 def getData(self):
554 """
555 Public method to retrieve the data.
556
557 @return selected time zone (string)
558 """
559 if (self.regionCombo.currentText() and
560 len(self.cityList.selectedItems()) == 1):
561 return "{0}/{1}".format(
562 self.regionCombo.currentText(),
563 self.cityList.selectedItems()[0].text()
564 )
565 else:
566 return ""
567
568 @staticmethod
569 def getTimezone(parent=None):
570 """
571 Static method to select a time zone.
572
573 @param parent reference to the parent widget (QWidget)
574 @return tuple of selected time zone (string) and flag indicating
575 the acceptance state (boolean)
576 """
577 dlg = TimezoneSelectionDialog(parent)
578 tz = ""
579 if dlg.exec_() == QDialog.Accepted:
580 tz = dlg.getData()
581 return tz, bool(tz)

eric ide

mercurial