set_location.prevent traceback if config have wrong coordinates.
prevent save wrong coordinates. Fixes #21
This commit is contained in:
@@ -11,7 +11,7 @@ from plugins import GajimPlugin
|
|||||||
from plugins.helpers import log, log_calls
|
from plugins.helpers import log, log_calls
|
||||||
from common import gajim
|
from common import gajim
|
||||||
import gtkgui_helpers
|
import gtkgui_helpers
|
||||||
from dialogs import InputDialog
|
from dialogs import InputDialog, WarningDialog
|
||||||
|
|
||||||
|
|
||||||
class SetLocationPlugin(GajimPlugin):
|
class SetLocationPlugin(GajimPlugin):
|
||||||
@@ -119,9 +119,13 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
|||||||
self.osm.layer_add(osmgpsmap.GpsMapOsd(show_dpad=True,
|
self.osm.layer_add(osmgpsmap.GpsMapOsd(show_dpad=True,
|
||||||
show_zoom=True))
|
show_zoom=True))
|
||||||
self.osm.layer_add(DummyLayer())
|
self.osm.layer_add(DummyLayer())
|
||||||
lat = float(self.plugin.config['lat'])
|
lat = self.plugin.config['lat']
|
||||||
lon = float(self.plugin.config['lon'])
|
lon = self.plugin.config['lon']
|
||||||
self.osm.set_center_and_zoom(lat, lon, 12)
|
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(
|
self.path_to_image = os.path.abspath(gtkgui_helpers.get_icon_path(
|
||||||
'gajim', 16))
|
'gajim', 16))
|
||||||
self.icon = gtk.gdk.pixbuf_new_from_file_at_size(
|
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)
|
vbox.pack_start(label, expand=False, fill=False, padding=6)
|
||||||
self.is_active = True
|
self.is_active = True
|
||||||
self.images = []
|
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('lat').connect('changed', self.on_lon_changed)
|
||||||
self.xml.get_object('lon').connect('changed', self.on_lon_changed)
|
self.xml.get_object('lon').connect('changed', self.on_lon_changed)
|
||||||
|
|
||||||
def on_hide(self, widget):
|
def on_hide(self, widget):
|
||||||
for name in self.plugin.config_default_values:
|
for name in self.plugin.config_default_values:
|
||||||
if name == 'presets':
|
if name in ['presets', 'lat', 'lon']:
|
||||||
continue
|
continue
|
||||||
widget = self.xml.get_object(name)
|
widget = self.xml.get_object(name)
|
||||||
self.plugin.config[name] = widget.get_text()
|
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:
|
if self.plugin.active:
|
||||||
self.plugin.activate()
|
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):
|
def map_clicked(self, osm, event):
|
||||||
lat, lon = self.osm.get_event_location(event).get_degrees()
|
lat, lon = self.osm.get_event_location(event).get_degrees()
|
||||||
@@ -157,17 +171,23 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
|||||||
if event.button == 2:
|
if event.button == 2:
|
||||||
self.show_contacts()
|
self.show_contacts()
|
||||||
|
|
||||||
def on_lon_changed(self, widget):
|
def is_valid_coord(self, lat, lon):
|
||||||
try:
|
try:
|
||||||
lat = float(self.xml.get_object('lat').get_text())
|
self.lat = float(lat)
|
||||||
lon = float(self.xml.get_object('lon').get_text())
|
self.lon = float(lon)
|
||||||
except ValueError, e:
|
except ValueError, e:
|
||||||
return
|
return
|
||||||
if not -85 < lat < 85 or not -180 < lon < 180:
|
if not -85 < self.lat < 85 or not -180 < self.lon < 180:
|
||||||
return
|
return
|
||||||
self.osm.image_remove(self.osm_image)
|
return True
|
||||||
self.osm_image = self.osm.image_add(lat, lon, self.icon)
|
|
||||||
self.osm.set_center(lat, lon)
|
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):
|
def show_contacts(self):
|
||||||
if not self.images:
|
if not self.images:
|
||||||
|
|||||||
Reference in New Issue
Block a user