Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Fomin <fominde@gmail.com>2011-11-17 23:27:40 +0400
committerDenis Fomin <fominde@gmail.com>2011-11-17 23:27:40 +0400
commit11ed6f9fe0cc6a22111cef2cd427ca11ea67beaf (patch)
tree7db89a71bb963d23fb592e7afec8184c4aac40a5 /set_location
parent110439ab2f65e8da0bea4c78421be34d26c5abbb (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.py46
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: