0
|
1 |
# Simple GUI example 2
|
|
2 |
# Copyright (c) 2005 Nokia Corporation
|
|
3 |
#
|
|
4 |
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5 |
# you may not use this file except in compliance with the License.
|
|
6 |
# You may obtain a copy of the License at
|
|
7 |
#
|
|
8 |
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9 |
#
|
|
10 |
# Unless required by applicable law or agreed to in writing, software
|
|
11 |
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12 |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13 |
# See the License for the specific language governing permissions and
|
|
14 |
# limitations under the License.
|
|
15 |
|
|
16 |
|
|
17 |
import socket
|
|
18 |
import urllib
|
|
19 |
|
|
20 |
import e32
|
|
21 |
import appuifw
|
|
22 |
|
|
23 |
choices =[(u"Los Angeles Intl Airport", "KLAX"),
|
|
24 |
(u"Dallas/Fort Forth", "KDFW"),
|
|
25 |
(u"New York/John F. Kennedy", "KJFK")]
|
|
26 |
choices_labels = [x[0] for x in choices]
|
|
27 |
|
|
28 |
weather_url_base = "http://weather.gov/data/current_obs/"
|
|
29 |
tempfile = "c:\\weather.xml"
|
|
30 |
|
|
31 |
def find_value(text, tag):
|
|
32 |
"Find the value between <tag> and </tag> in text. Always returns a string"
|
|
33 |
begin_tag = "<" + tag + ">"
|
|
34 |
begin = text.find(begin_tag)
|
|
35 |
end = text.find("</" + tag + ">")
|
|
36 |
if begin == -1 or end == -1:
|
|
37 |
return ""
|
|
38 |
begin += len(begin_tag)
|
|
39 |
return text[begin:end]
|
|
40 |
|
|
41 |
def handle_selection():
|
|
42 |
index = lb.current()
|
|
43 |
code = choices[index][1]
|
|
44 |
weather_url = weather_url_base + code + ".xml"
|
|
45 |
lb.set_list([u"Please wait..."])
|
|
46 |
appuifw.note(u"Fetching "+ weather_url, 'info')
|
|
47 |
try:
|
|
48 |
urllib.urlretrieve(weather_url, tempfile)
|
|
49 |
f = open(tempfile, 'r')
|
|
50 |
weatherinfo = f.read()
|
|
51 |
f.close()
|
|
52 |
weather = find_value(weatherinfo, "weather")
|
|
53 |
temperature_string = find_value(weatherinfo, "temperature_string")
|
|
54 |
appuifw.popup_menu([(u"Weather", unicode(weather)),
|
|
55 |
(u"Temperature", unicode(temperature_string))],
|
|
56 |
unicode(code))
|
|
57 |
except IOError:
|
|
58 |
appuifw.note(u"Connection error to server", 'error')
|
|
59 |
except:
|
|
60 |
appuifw.note(u"Could not fetch information", 'error')
|
|
61 |
lb.set_list(choices_labels)
|
|
62 |
|
|
63 |
def handle_add():
|
|
64 |
pass
|
|
65 |
|
|
66 |
def handle_delete():
|
|
67 |
pass
|
|
68 |
|
|
69 |
def exit_key_handler():
|
|
70 |
app_lock.signal()
|
|
71 |
|
|
72 |
lb = appuifw.Listbox(choices_labels, handle_selection)
|
|
73 |
|
|
74 |
old_title = appuifw.app.title
|
|
75 |
appuifw.app.title = u"Weather report"
|
|
76 |
appuifw.app.body = lb
|
|
77 |
appuifw.app.menu = [(u"Add new item", handle_add),
|
|
78 |
(u"Delete item", handle_delete)]
|
|
79 |
appuifw.app.exit_key_handler = exit_key_handler
|
|
80 |
|
|
81 |
app_lock = e32.Ao_lock()
|
|
82 |
app_lock.wait()
|
|
83 |
|
|
84 |
appuifw.app.title = old_title
|