From 6221a562642f80c7de0bc3e406b551528f45d06a Mon Sep 17 00:00:00 2001 From: etienne Date: Mon, 19 Jan 2009 23:26:50 +0000 Subject: Defining areas on the administration git-svn-id: http://www.peacefrogs.net/svn/chimere/trunk@21 9215b0d5-fb2c-4bbd-8d3e-bd2e9090e864 --- main/widgets.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) (limited to 'main/widgets.py') diff --git a/main/widgets.py b/main/widgets.py index 21dd464..53f365a 100644 --- a/main/widgets.py +++ b/main/widgets.py @@ -112,6 +112,11 @@ class PointField(models.PointField): keys.update(defaults) return super(PointField, self).formfield(**keys) + def clean(self, value): + if len(value) != 2 and self.required: + raise ValidationError(_("Invalid point")) + return value + class RouteChooserWidget(forms.TextInput): """ Manage the edition of route on a map @@ -191,3 +196,74 @@ class RouteField(models.LineStringField): defaults = {'widget': RouteChooserWidget} keys.update(defaults) return super(RouteField, self).formfield(**keys) + +class AreaWidget(forms.TextInput): + """ + Manage the edition of an area on the map + """ + class Media: + css = { + "all": URL_OSM_CSS + ["%sforms.css" % settings.MEDIA_URL,] + } + js = URL_OSM_JS + ["%sedit_area.js" % settings.MEDIA_URL, + "%sbase.js" % settings.MEDIA_URL,] + + def render(self, name, value, attrs=None): + """ + Render a map + """ + upper_left_lat, upper_left_lon = 0, 0 + lower_right_lat, lower_right_lon = 0, 0 + if value: + if len(value) == 2: + upper_left = value[0] + lower_right = value[1] + if hasattr(upper_left, 'x') and hasattr(upper_left, 'y'): + upper_left_lon, upper_left_lat = upper_left.x, upper_left.y + if hasattr(lower_right, 'x') and hasattr(lower_right, 'y'): + lower_right_lon, lower_right_lat = lower_right.x, \ + lower_right.y + tpl = getMapJS() + tpl += u"""
+ + + + +""" % (upper_left_lat, upper_left_lon, lower_right_lat, lower_right_lon) + tpl += """ +
+""" + return mark_safe(tpl) + + def value_from_datadict(self, data, files, name): + """ + Return the appropriate values + """ + values = [] + for keys in (('upper_left_lat', 'upper_left_lon',), + ('lower_right_lat', 'lower_right_lon')): + value = [] + for key in keys: + val = data.get(key, None) + if not val: + return [] + value.append(val) + values.append(value) + return values + +class AreaField(forms.MultiValueField): + ''' + Set the widget for the form field + ''' + widget = AreaWidget + + def compress(self, data_list): + if not data_list: + return None + return data_list \ No newline at end of file -- cgit v1.2.3