diff options
author | Denis Fomin <fominde@gmail.com> | 2011-11-17 23:27:40 +0400 |
---|---|---|
committer | Denis Fomin <fominde@gmail.com> | 2011-11-17 23:27:40 +0400 |
commit | 11ed6f9fe0cc6a22111cef2cd427ca11ea67beaf (patch) | |
tree | 7db89a71bb963d23fb592e7afec8184c4aac40a5 /set_location | |
parent | 110439ab2f65e8da0bea4c78421be34d26c5abbb (diff) |
set_location.prevent traceback if config have wrong coordinates.
prevent save wrong coordinates. Fixes #21
Diffstat (limited to 'set_location')
-rw-r--r-- | set_location/set_location.py | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/set_location/set_location.py b/set_location/set_location.py index 710f8f9..bbb91cd 100644 --- a/set_location/set_location.py +++ b/set_location/set_location.py @@ -11,7 +11,7 @@ from plugins import GajimPlugin from plugins.helpers import log, log_calls from common import gajim import gtkgui_helpers -from dialogs import InputDialog +from dialogs import InputDialog, WarningDialog class SetLocationPlugin(GajimPlugin): @@ -119,9 +119,13 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog): self.osm.layer_add(osmgpsmap.GpsMapOsd(show_dpad=True, show_zoom=True)) self.osm.layer_add(DummyLayer()) - lat = float(self.plugin.config['lat']) - lon = float(self.plugin.config['lon']) - self.osm.set_center_and_zoom(lat, lon, 12) + lat = self.plugin.config['lat'] + lon = self.plugin.config['lon'] + if not self.is_valid_coord(lat, lon): + self.lat = self.lon = 0.0 + self.xml.get_object('lat').set_text('0.0') + self.xml.get_object('lon').set_text('0.0') + self.osm.set_center_and_zoom(self.lat, self.lon, 12) self.path_to_image = os.path.abspath(gtkgui_helpers.get_icon_path( 'gajim', 16)) self.icon = gtk.gdk.pixbuf_new_from_file_at_size( @@ -134,18 +138,28 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog): vbox.pack_start(label, expand=False, fill=False, padding=6) self.is_active = True self.images = [] - self.osm_image = self.osm.image_add(lat, lon, self.icon) + self.osm_image = self.osm.image_add(self.lat, self.lon, self.icon) self.xml.get_object('lat').connect('changed', self.on_lon_changed) self.xml.get_object('lon').connect('changed', self.on_lon_changed) def on_hide(self, widget): for name in self.plugin.config_default_values: - if name == 'presets': + if name in ['presets', 'lat', 'lon']: continue widget = self.xml.get_object(name) self.plugin.config[name] = widget.get_text() + lat = self.xml.get_object('lat').get_text() + lon = self.xml.get_object('lon').get_text() + if self.is_valid_coord(lat, lon): + self.plugin.config['lat'] = lat + self.plugin.config['lon'] = lon if self.plugin.active: self.plugin.activate() + else: + self.plugin.config['lat'] = '0.0' + self.plugin.config['lon'] = '0.0' + error_text = 'lat or lon field contains wrong value.' + WarningDialog(_('Wrong coordinates'), error_text, self) def map_clicked(self, osm, event): lat, lon = self.osm.get_event_location(event).get_degrees() @@ -157,17 +171,23 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog): if event.button == 2: self.show_contacts() - def on_lon_changed(self, widget): + def is_valid_coord(self, lat, lon): try: - lat = float(self.xml.get_object('lat').get_text()) - lon = float(self.xml.get_object('lon').get_text()) + self.lat = float(lat) + self.lon = float(lon) except ValueError, e: return - if not -85 < lat < 85 or not -180 < lon < 180: + if not -85 < self.lat < 85 or not -180 < self.lon < 180: return - self.osm.image_remove(self.osm_image) - self.osm_image = self.osm.image_add(lat, lon, self.icon) - self.osm.set_center(lat, lon) + return True + + def on_lon_changed(self, widget): + lat = self.xml.get_object('lat').get_text() + lon = self.xml.get_object('lon').get_text() + if self.is_valid_coord(lat, lon): + self.osm.image_remove(self.osm_image) + self.osm_image = self.osm.image_add(self.lat, self.lon, self.icon) + self.osm.set_center(self.lat, self.lon) def show_contacts(self): if not self.images: |