on xenial help sign in
rollback to non-clickable map
commit5ade78437078faa26e3af93586b551cd994d8253 authorLukáš Tinkl <lukas.tinkl@canonical.com> dateTue 16 Feb 2016, 14:10 (11 years ago) parentb480877
9 files changed+4−469
plugins/Wizard/CMakeLists.txt+1−4 plugins/Wizard/olsen_map.png plugins/Wizard/plugin.cpp−1 plugins/Wizard/timezonemodel.cpp−425 plugins/Wizard/timezonemodel.h+2−9 plugins/Wizard/ui.qrc−5 qml/Wizard/Pages/50-timezone.qml−22 tests/mocks/Wizard/CMakeLists.txt+1−2 tests/mocks/Wizard/mockplugin.cpp−1
plugins/Wizard/CMakeLists.txt+1−4
@@ -2,8 +2,6 @@ pkg_search_module(TIMEZONEMAP REQUIRED timezonemap)
22
33include_directories(${GLIB_INCLUDE_DIRS} ${TIMEZONEMAP_INCLUDE_DIRS})
44
5−qt5_add_resources(olsen-resources ui.qrc)
6−
75add_library(Wizard-qml MODULE
86 plugin.cpp
97 PageList.cpp
@@ -11,10 +9,9 @@ add_library(Wizard-qml MODULE
119 LocalePlugin.cpp
1210 timezonemodel.cpp
1311 Status.cpp
14− ${olsen-resources}
1512)
1613
17−qt5_use_modules(Wizard-qml DBus Qml Gui Concurrent)
14+qt5_use_modules(Wizard-qml DBus Qml Concurrent)
1815target_link_libraries(Wizard-qml ${GLIB_LDFLAGS} ${TIMEZONEMAP_LDFLAGS})
1916add_unity8_plugin(Wizard 0.1 Wizard TARGETS Wizard-qml)
2017
plugins/Wizard/olsen_map.pngdeleted

Binary file not shown.

plugins/Wizard/plugin.cpp−1
@@ -26,7 +26,6 @@
2626void WizardPlugin::registerTypes(const char *uri)
2727{
2828 Q_ASSERT(uri == QLatin1String("Wizard"));
29− Q_INIT_RESOURCE(ui);
3029 qmlRegisterType<PageList>(uri, 0, 1, "PageList");
3130 qmlRegisterSingletonType<System>(uri, 0, 1, "System", [](QQmlEngine*, QJSEngine*) -> QObject* { return new System; });
3231 qmlRegisterSingletonType<Status>(uri, 0, 1, "Status", [](QQmlEngine*, QJSEngine*) -> QObject* { return new Status; });
plugins/Wizard/timezonemodel.cpp−425
@@ -23,390 +23,6 @@
2323#include "LocalePlugin.h"
2424#include "timezonemodel.h"
2525
26−static QByteArrayList olsenTimezones = {
27− "Africa/Abidjan",
28− "Africa/Accra",
29− "Africa/Addis_Ababa",
30− "Africa/Algiers",
31− "Africa/Asmara",
32− "Africa/Bamako",
33− "Africa/Bangui",
34− "Africa/Banjul",
35− "Africa/Bissau",
36− "Africa/Blantyre",
37− "Africa/Brazzaville",
38− "Africa/Bujumbura",
39− "Africa/Cairo",
40− "Africa/Casablanca",
41− "Africa/Conakry",
42− "Africa/Dakar",
43− "Africa/Dar_es_Salaam",
44− "Africa/Djibouti",
45− "Africa/Douala",
46− "Africa/El_Aaiun",
47− "Africa/Freetown",
48− "Africa/Gaborone",
49− "Africa/Harare",
50− "Africa/Johannesburg",
51− "Africa/Kampala",
52− "Africa/Khartoum",
53− "Africa/Kigali",
54− "Africa/Kinshasa",
55− "Africa/Lagos",
56− "Africa/Libreville",
57− "Africa/Lome",
58− "Africa/Luanda",
59− "Africa/Lubumbashi",
60− "Africa/Lusaka",
61− "Africa/Malabo",
62− "Africa/Maputo",
63− "Africa/Maseru",
64− "Africa/Mbabane",
65− "Africa/Mogadishu",
66− "Africa/Monrovia",
67− "Africa/Nairobi",
68− "Africa/Ndjamena",
69− "Africa/Niamey",
70− "Africa/Nouakchott",
71− "Africa/Ouagadougou",
72− "Africa/Porto-Novo",
73− "Africa/Sao_Tome",
74− "Africa/Tripoli",
75− "Africa/Tunis",
76− "Africa/Windhoek",
77− "America/Adak",
78− "America/Anguilla",
79− "America/Antigua",
80− "America/Araguaina",
81− "America/Argentina/Buenos_Aires",
82− "America/Argentina/Catamarca",
83− "America/Argentina/Cordoba",
84− "America/Argentina/Jujuy",
85− "America/Argentina/La_Rioja",
86− "America/Argentina/Mendoza",
87− "America/Argentina/Rio_Gallegos",
88− "America/Argentina/San_Juan",
89− "America/Argentina/San_Luis",
90− "America/Argentina/Tucuman",
91− "America/Argentina/Ushuaia",
92− "America/Aruba",
93− "America/Asuncion",
94− "America/Atikokan",
95− "America/Bahia",
96− "America/Barbados",
97− "America/Belem",
98− "America/Belize",
99− "America/Blanc-Sablon",
100− "America/Boa_Vista",
101− "America/Bogota",
102− "America/Boise",
103− "America/Cambridge_Bay",
104− "America/Campo_Grande",
105− "America/Cancun",
106− "America/Caracas",
107− "America/Cayenne",
108− "America/Cayman",
109− "America/Chicago",
110− "America/Chihuahua",
111− "America/Coral_Harbour",
112− "America/Costa_Rica",
113− "America/Cuiaba",
114− "America/Curacao",
115− "America/Dawson",
116− "America/Dawson_Creek",
117− "America/Denver",
118− "America/Dominica",
119− "America/Edmonton",
120− "America/Eirunepe",
121− "America/El_Salvador",
122− "America/Fortaleza",
123− "America/Glace_Bay",
124− "America/Goose_Bay",
125− "America/Grand_Turk",
126− "America/Grenada",
127− "America/Guadeloupe",
128− "America/Guatemala",
129− "America/Guayaquil",
130− "America/Guyana",
131− "America/Halifax",
132− "America/Havana",
133− "America/Hermosillo",
134− "America/Indiana/Indianapolis",
135− "America/Indiana/Knox",
136− "America/Indiana/Marengo",
137− "America/Indiana/Petersburg",
138− "America/Indiana/Vevay",
139− "America/Indiana/Vincennes",
140− "America/Indiana/Winamac",
141− "America/Inuvik",
142− "America/Iqaluit",
143− "America/Jamaica",
144− "America/Juneau",
145− "America/Kentucky/Louisville",
146− "America/Kentucky/Monticello",
147− "America/La_Paz",
148− "America/Lima",
149− "America/Los_Angeles",
150− "America/Maceio",
151− "America/Managua",
152− "America/Manaus",
153− "America/Marigot",
154− "America/Martinique",
155− "America/Mazatlan",
156− "America/Menominee",
157− "America/Merida",
158− "America/Mexico_City",
159− "America/Miquelon",
160− "America/Moncton",
161− "America/Monterrey",
162− "America/Montevideo",
163− "America/Montreal",
164− "America/Montserrat",
165− "America/Nassau",
166− "America/New_York",
167− "America/Nipigon",
168− "America/Noronha",
169− "America/North_Dakota/Center",
170− "America/North_Dakota/Salem",
171− "America/Panama",
172− "America/Pangnirtung",
173− "America/Paramaribo",
174− "America/Phoenix",
175− "America/Port-au-Prince",
176− "America/Port_of_Spain",
177− "America/Porto_Velho",
178− "America/Puerto_Rico",
179− "America/Rainy_River",
180− "America/Rankin_Inlet",
181− "America/Recife",
182− "America/Regina",
183− "America/Resolute",
184− "America/Rio_Branco",
185− "America/Santarem",
186− "America/Santiago",
187− "America/Santo_Domingo",
188− "America/Sao_Paulo",
189− "America/St_Barthelemy",
190− "America/St_Johns",
191− "America/St_Kitts",
192− "America/St_Lucia",
193− "America/St_Thomas",
194− "America/St_Vincent",
195− "America/Tegucigalpa",
196− "America/Thunder_Bay",
197− "America/Tijuana",
198− "America/Toronto",
199− "America/Tortola",
200− "America/Vancouver",
201− "America/Whitehorse",
202− "America/Winnipeg",
203− "America/Yellowknife",
204− "America/Swift_Current",
205− "Arctic/Longyearbyen",
206− "Asia/Aden",
207− "Asia/Almaty",
208− "Asia/Amman",
209− "Asia/Anadyr",
210− "Asia/Aqtau",
211− "Asia/Aqtobe",
212− "Asia/Ashgabat",
213− "Asia/Baghdad",
214− "Asia/Bahrain",
215− "Asia/Baku",
216− "Asia/Bangkok",
217− "Asia/Beirut",
218− "Asia/Bishkek",
219− "Asia/Brunei",
220− "Asia/Choibalsan",
221− "Asia/Chongqing",
222− "Asia/Colombo",
223− "Asia/Damascus",
224− "Asia/Dhaka",
225− "Asia/Dili",
226− "Asia/Dubai",
227− "Asia/Dushanbe",
228− "Asia/Gaza",
229− "Asia/Harbin",
230− "Asia/Ho_Chi_Minh",
231− "Asia/Hong_Kong",
232− "Asia/Hovd",
233− "Asia/Irkutsk",
234− "Asia/Jakarta",
235− "Asia/Jayapura",
236− "Asia/Jerusalem",
237− "Asia/Kabul",
238− "Asia/Kamchatka",
239− "Asia/Karachi",
240− "Asia/Kashgar",
241− "Asia/Katmandu",
242− "Asia/Kolkata",
243− "Asia/Krasnoyarsk",
244− "Asia/Kuala_Lumpur",
245− "Asia/Kuching",
246− "Asia/Kuwait",
247− "Asia/Macau",
248− "Asia/Magadan",
249− "Asia/Makassar",
250− "Asia/Manila",
251− "Asia/Muscat",
252− "Asia/Nicosia",
253− "Asia/Novosibirsk",
254− "Asia/Omsk",
255− "Asia/Oral",
256− "Asia/Phnom_Penh",
257− "Asia/Pontianak",
258− "Asia/Pyongyang",
259− "Asia/Qatar",
260− "Asia/Qyzylorda",
261− "Asia/Rangoon",
262− "Asia/Riyadh",
263− "Asia/Sakhalin",
264− "Asia/Samarkand",
265− "Asia/Seoul",
266− "Asia/Shanghai",
267− "Asia/Singapore",
268− "Asia/Taipei",
269− "Asia/Tashkent",
270− "Asia/Tbilisi",
271− "Asia/Tehran",
272− "Asia/Thimphu",
273− "Asia/Tokyo",
274− "Asia/Ulaanbaatar",
275− "Asia/Urumqi",
276− "Asia/Vientiane",
277− "Asia/Vladivostok",
278− "Asia/Yakutsk",
279− "Asia/Yekaterinburg",
280− "Asia/Yerevan",
281− "Atlantic/Azores",
282− "Atlantic/Bermuda",
283− "Atlantic/Canary",
284− "Atlantic/Cape_Verde",
285− "Atlantic/Faroe",
286− "Atlantic/Madeira",
287− "Atlantic/Reykjavik",
288− "Atlantic/South_Georgia",
289− "Atlantic/St_Helena",
290− "Atlantic/Stanley",
291− "Australia/Adelaide",
292− "Australia/Brisbane",
293− "Australia/Broken_Hill",
294− "Australia/Currie",
295− "Australia/Darwin",
296− "Australia/Eucla",
297− "Australia/Hobart",
298− "Australia/Lindeman",
299− "Australia/Lord_Howe",
300− "Australia/Melbourne",
301− "Australia/Perth",
302− "Australia/Sydney",
303− "Europe/Amsterdam",
304− "Europe/Andorra",
305− "Europe/Athens",
306− "Europe/Belgrade",
307− "Europe/Berlin",
308− "Europe/Bratislava",
309− "Europe/Brussels",
310− "Europe/Bucharest",
311− "Europe/Budapest",
312− "Europe/Chisinau",
313− "Europe/Copenhagen",
314− "Europe/Dublin",
315− "Europe/Gibraltar",
316− "Europe/Guernsey",
317− "Europe/Helsinki",
318− "Europe/Isle_of_Man",
319− "Europe/Istanbul",
320− "Europe/Jersey",
321− "Europe/Kaliningrad",
322− "Europe/Kiev",
323− "Europe/Lisbon",
324− "Europe/Ljubljana",
325− "Europe/London",
326− "Europe/Luxembourg",
327− "Europe/Madrid",
328− "Europe/Malta",
329− "Europe/Marienhamn",
330− "Europe/Minsk",
331− "Europe/Monaco",
332− "Europe/Moscow",
333− "Europe/Oslo",
334− "Europe/Paris",
335− "Europe/Podgorica",
336− "Europe/Prague",
337− "Europe/Riga",
338− "Europe/Rome",
339− "Europe/Samara",
340− "Europe/San_Marino",
341− "Europe/Sarajevo",
342− "Europe/Simferopol",
343− "Europe/Skopje",
344− "Europe/Sofia",
345− "Europe/Stockholm",
346− "Europe/Tallinn",
347− "Europe/Tirane",
348− "Europe/Uzhgorod",
349− "Europe/Vaduz",
350− "Europe/Vatican",
351− "Europe/Vienna",
352− "Europe/Vilnius",
353− "Europe/Volgograd",
354− "Europe/Warsaw",
355− "Europe/Zagreb",
356− "Europe/Zaporozhye",
357− "Europe/Zurich",
358− "Indian/Antananarivo",
359− "Indian/Chagos",
360− "Indian/Christmas",
361− "Indian/Cocos",
362− "Indian/Comoro",
363− "Indian/Kerguelen",
364− "Indian/Mahe",
365− "Indian/Maldives",
366− "Indian/Mauritius",
367− "Indian/Mayotte",
368− "Indian/Reunion",
369− "Pacific/Apia",
370− "Pacific/Auckland",
371− "Pacific/Chatham",
372− "Pacific/Easter",
373− "Pacific/Efate",
374− "Pacific/Enderbury",
375− "Pacific/Fakaofo",
376− "Pacific/Fiji",
377− "Pacific/Funafuti",
378− "Pacific/Galapagos",
379− "Pacific/Gambier",
380− "Pacific/Guadalcanal",
381− "Pacific/Guam",
382− "Pacific/Honolulu",
383− "Pacific/Johnston",
384− "Pacific/Kiritimati",
385− "Pacific/Kosrae",
386− "Pacific/Kwajalein",
387− "Pacific/Majuro",
388− "Pacific/Marquesas",
389− "Pacific/Midway",
390− "Pacific/Nauru",
391− "Pacific/Niue",
392− "Pacific/Norfolk",
393− "Pacific/Noumea",
394− "Pacific/Pago_Pago",
395− "Pacific/Palau",
396− "Pacific/Pitcairn",
397− "Pacific/Ponape",
398− "Pacific/Port_Moresby",
399− "Pacific/Rarotonga",
400− "Pacific/Saipan",
401− "Pacific/Tahiti",
402− "Pacific/Tarawa",
403− "Pacific/Tongatapu",
404− "Pacific/Truk",
405− "Pacific/Wake",
406− "Pacific/Wallis",
407− "America/Godthab"
408−};
409−
41026TimeZoneLocationModel::TimeZoneLocationModel(QObject *parent):
41127 QAbstractListModel(parent),
41228 m_workerThread(new TimeZonePopulateWorker())
@@ -435,9 +51,6 @@ TimeZoneLocationModel::TimeZoneLocationModel(QObject *parent):
43551 &QObject::deleteLater);
43652
43753 init();
438−
439− // olsen color map
440− m_olsenMap.load(":/olsen_map.png");
44154}
44255
44356void TimeZoneLocationModel::init()
@@ -506,44 +119,6 @@ QHash<int, QByteArray> TimeZoneLocationModel::roleNames() const
506119 return m_roleNames;
507120}
508121
509−QJsonArray TimeZoneLocationModel::timezoneAndOffsetAtMapPoint(int x, int y, const QSize &mapImageSize) const
510−{
511− const QImage olsenMap = m_olsenMap.scaled(mapImageSize);
512− qDebug() << "Clicked at" << x << y << "(" << olsenMap.width() << olsenMap.height() << ")";
513− if (!olsenMap.valid(x,y)) {
514− qWarning() << Q_FUNC_INFO << "Invalid pixel position:" << x << y;
515− return QJsonArray();
516− }
517−
518− const QRgb rgb = olsenMap.pixel(x,y);
519− const int red = qRed(rgb);
520− const int green = qGreen(rgb);
521− qDebug() << "Red:" << red << ", green:" << green;
522− if (red == 0 && green == 0) {
523− qWarning() << "Clicked the water!";
524− return QJsonArray();
525− }
526−
527− const int zoneIndex = ((red & 248) << 1) + ((green >> 4) & 15);
528− qDebug() << "Zone index:" << zoneIndex;
529− if (zoneIndex >= 0 && zoneIndex < olsenTimezones.count()) {
530− const QByteArray tzId = olsenTimezones.at(zoneIndex);
531− qDebug() << "!!! Got TZ ID" << tzId;
532− QTimeZone tz(tzId);
533− if (tz.isValid()) {
534− QJsonArray result;
535− result.append(qUtf8Printable(tzId));
536− result.append(static_cast<double>(tz.standardTimeOffset(QDateTime::currentDateTime())) / 3600);
537− return result;
538− }
539− qWarning() << Q_FUNC_INFO << "Invalid timezone" << tzId;
540− return QJsonArray();
541− }
542−
543− qWarning() << Q_FUNC_INFO << "Invalid timezone index" << zoneIndex;
544− return QJsonArray();
545−}
546−
547122void TimeZonePopulateWorker::run()
548123{
549124 buildCityMap();
plugins/Wizard/timezonemodel.h+2−9
@@ -30,7 +30,7 @@ class TimeZoneLocationModel: public QAbstractListModel
3030 Q_OBJECT
3131 Q_ENUMS(Roles)
3232public:
33− explicit TimeZoneLocationModel(QObject *parent = 0);
33+ explicit TimeZoneLocationModel(QObject *parent = nullptr);
3434 ~TimeZoneLocationModel() = default;
3535
3636 enum Roles {
@@ -57,12 +57,6 @@ public:
5757 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
5858 QHash<int, QByteArray> roleNames() const override;
5959
60− /**
61− * @return a JSON array with timezone ID and offset (in hours) at a given point
62− * in map pixel coordinates @p x and @p y
63− */
64− Q_INVOKABLE QJsonArray timezoneAndOffsetAtMapPoint(int x, int y, const QSize &mapImageSize) const;
65−
6660private Q_SLOTS:
6761 void processModelResult(const TzLocationWizard &location);
6862 void store();
@@ -72,7 +66,6 @@ private:
7266 QHash<int, QByteArray> m_roleNames;
7367 QList<TzLocationWizard> m_locations;
7468 TimeZonePopulateWorker *m_workerThread;
75− QImage m_olsenMap;
7669};
7770
7871Q_DECLARE_METATYPE (TimeZoneLocationModel::TzLocationWizard)
@@ -97,7 +90,7 @@ class TimeZoneFilterModel: public QSortFilterProxyModel
9790 Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged)
9891
9992public:
100− explicit TimeZoneFilterModel(QObject *parent = 0);
93+ explicit TimeZoneFilterModel(QObject *parent = nullptr);
10194 ~TimeZoneFilterModel() = default;
10295 bool filterAcceptsRow(int row, const QModelIndex &parentIndex) const override;
10396
plugins/Wizard/ui.qrcdeleted−5
@@ -1,5 +0,0 @@
1−<!DOCTYPE RCC><RCC version="1.0">
2−<qresource>
3− <file>olsen_map.png</file>
4−</qresource>
5−</RCC>
qml/Wizard/Pages/50-timezone.qml−22
@@ -233,28 +233,6 @@ LocalComponents.Page {
233233 centerIn: parent
234234 }
235235
236− MouseArea {
237− anchors.fill: parent
238− onClicked: {
239− var x = mouse.x + map.width/60; // longitude is offset by 6 degrees
240− var y = mouse.y;
241− if (y <= 2*map.height/3) {
242− y = y * 0.80; // latitude is offset by ~20%, except the 1/3 southern hemisphere
243− }
244−
245− var tzAndOffset = tzModel.timezoneAndOffsetAtMapPoint(x, y, Qt.size(map.width, map.height));
246− var tzId = tzAndOffset[0];
247− var offset = tzAndOffset[1];
248− print("Timezone", tzId, ", offset", offset);
249− if (tzId) {
250− resetViews();
251− tzFilterModel.country = "";
252− selectedTimeZone = tzId;
253− highlightTimezone(offset);
254− }
255− }
256− }
257−
258236 Image {
259237 id: backgroundImage
260238 source: "data/timezonemap/map.png"
tests/mocks/Wizard/CMakeLists.txt+1−2
@@ -12,9 +12,8 @@ add_library(MockWizard-qml MODULE
1212 ${CMAKE_SOURCE_DIR}/plugins/Wizard/timezonemodel.cpp
1313 ${CMAKE_SOURCE_DIR}/plugins/Wizard/LocalePlugin.cpp
1414 ${CMAKE_SOURCE_DIR}/plugins/Wizard/Status.cpp
15− ${CMAKE_BINARY_DIR}/plugins/Wizard/qrc_ui.cpp
1615)
1716
18−qt5_use_modules(MockWizard-qml DBus Qml Gui Concurrent)
17+qt5_use_modules(MockWizard-qml DBus Qml Concurrent)
1918target_link_libraries(MockWizard-qml ${GLIB_LDFLAGS} ${TIMEZONEMAP_LDFLAGS})
2019add_unity8_mock(Wizard 0.1 Wizard TARGETS MockWizard-qml)
tests/mocks/Wizard/mockplugin.cpp−1
@@ -26,7 +26,6 @@
2626void MockWizardPlugin::registerTypes(const char *uri)
2727{
2828 Q_ASSERT(uri == QLatin1String("Wizard"));
29− Q_INIT_RESOURCE(ui);
3029 qmlRegisterType<PageList>(uri, 0, 1, "PageList");
3130 qmlRegisterSingletonType<MockSystem>(uri, 0, 1, "System", [](QQmlEngine*, QJSEngine*) -> QObject* { return new MockSystem; });
3231 qmlRegisterSingletonType<Status>(uri, 0, 1, "Status", [](QQmlEngine*, QJSEngine*) -> QObject* { return new Status; });