class IMapView(Interface):
    """
    A view implementing this interface provides configurable
    map widgets.
    """
    # TODO: is this the right field for an IMapView or should it be
    #       mapfields here?
    mapwidgets = schema.Object(
        title=_('Map Widgets'),
        description=_('A mapping from mapids to IMapWidgets'),
        schema=IMaps)
class IMapLayers(IEnumerableMapping):
    """
    A mapping of IMapLayer instances

    specific for IMapWidget... looked up as
      ((view, request, context, mapwidget), name)
    """

    js = schema.TextLine(
        title=_(u"Javascript to configure layers."),
        description=_("Returns some js-code to set up available layers."),
        required=True)
class IMapLayer(Interface):
    """
    A pluggable interface making it easier to configure layers.
    """

    jsfactory = schema.Text(
        title=_(u"Javascript factory"),
        description=_(
            u"Javascript code which returns a new instance of this "
            u"layer and does not expect any parameters"
        ),
        required=True)
Exemplo n.º 4
0
class GeoAdvancedConfGroup(group.Group):

    label = _(u"Advanced")
    description = _(u"Advanced configurations")

    fields = field.Fields(IGeoSettings).select('map_viewlet_managers')

    def updateWidgets(self):
        super(GeoAdvancedConfGroup, self).updateWidgets()
        widgets = ('googleapi', 'bingapi')
        for w in self.widgets:
            if w in widgets:
                self.widgets[w].size = 80
                self.widgets[w].update()
Exemplo n.º 5
0
class GeopointForm(subform.EditSubForm):
    heading = _(u"Default map position")
    contents_top = _(
        u"Set the centre point and the zoom level of the map "
        u"used when the system cannot use any other point to center the map "
        u"(e.g. when displaying the map "
        u"to georeference an item for the first time)")
    template = ViewPageTemplateFile('geopointform.pt')
    implements(IMapView)
    fields = field.Fields(IGeoSettings).select('longitude', 'latitude', 'zoom')
    mapfields = ['geosettings-cgmap']

    def update(self):
        self.updateWidgets()

    def applyChanges(self, data):
        content = self.getContent()
        return form.applyChanges(self, content, data)
Exemplo n.º 6
0
def control_panel_fields():
    form_fields = field.Fields(IGeoSettings).select('default_layers',
                                                    'bingapi', 'googleapi')
    form_fields += field.Fields(IGeoFeatureStyle).select(
        'map_viewlet_position')
    default_layer_field = form_fields['default_layers']
    default_layer_field.field.value_type = Choice(title=_(u"Layers"),
                                                  source="maplayersVocab")
    return form_fields
Exemplo n.º 7
0
def control_panel_fields():
    form_fields = field.Fields(IGeoSettings).select(
        'default_layers', 'bingapi')
    form_fields += field.Fields(IGeoFeatureStyle).select(
        'map_viewlet_position')
    default_layer_field = form_fields['default_layers']
    default_layer_field.field.value_type = Choice(
        title=_(u"Layers"),
        source="maplayersVocab"
    )
    return form_fields
Exemplo n.º 8
0
class GeoStylesGroup(group.Group):

    label = _(u"Style")
    description = _(u"Set default styles for geographical shapes")

    @property
    def fields(self):
        fields = field.Fields(IGeoFeatureStyle).select('marker_image')
        fields += field.Fields(IGeoSettings).select('imgpath')
        fields += field.Fields(IGeoFeatureStyle).select(
            'marker_image_size',
            'map_width',
            'linecolor',
            'map_height',
            'polygoncolor',
            'display_properties',
            'linewidth',
        )
        fields['linecolor'].widgetFactory = ColorpickerAlphaFieldWidget
        fields['polygoncolor'].widgetFactory = ColorpickerAlphaFieldWidget
        return fields
Exemplo n.º 9
0
class BingHybridMapLayer(BingMapLayer):
    name = u"bing_hyb"
    Title = _(u"Bing Hybrid")
Exemplo n.º 10
0
class GoogleSatelliteMapLayer(MapLayer):
    name = u"google_sat"
    Title = _(u"Satellite (Google)")
    type = 'google'
class IMapWidget(Interface):
    """
    Provides configuration options for a specific map widget.
    """
    mapid = schema.TextLine(
        title=_(u"Map id"),
        description=_(u"Used to identify the map in the dom-tree and to "\
                      u"lookup an IMapWidget component if necessary."),
        default=u"default-cgmap",
        required=True)

    klass = schema.TextLine(
        title=_(u"Class attribute"),
        description=_(u"The html element class attribute."),
        default=u"widget-cgmap",
        required=True)

    style = schema.TextLine(
        title=_(u"Style attribute"),
        description=_(u"The html element style attribute."),
        required=False)

    js = schema.Text(
        title=_("Javascript extras"),
        description=_(u"Additional Javascript code inserted after the map"
                      u" widget."),
        required=False)

    layers = schema.Object(
        title=_('Layers'),
        description=_('A mapping from layerids to ILayers'),
        schema=IMapLayers)

    usedefault = schema.Bool(
        title=_(u"Enable default layers."),
        description=_(u"If set to true, the default IMapLayers implementation"
                      u" adds all enabled default layers from the geo settings"
                      u" tool."),
        default=True,
        required=False)

    def addClass(klass):
        '''
Exemplo n.º 12
0
class GoogleHybridMapLayer(MapLayer):
    name = u"google_hyb"
    Title = _(u"Hybrid (Google)")
    type = 'google'
Exemplo n.º 13
0
class GeoControlpanelForm(extensible.ExtensibleForm, form.EditForm):

    # This is a copy of plone/app/z3cform/templates/macros.pt plus subforms
    template = ViewPageTemplateFile('form-with-subforms.pt')
    form.extends(form.EditForm, ignoreButtons=True)

    default_fieldset_label = _(u"Base settings")

    heading = _(u'Configure Collective Geo Settings')
    fields = control_panel_fields()
    groups = (GeoStylesGroup, GeoAdvancedConfGroup)
    label = _(u'Geo Settings')
    form_name = _(u"Configure element")
    description = _(u"Collective Geo Default Settings")

    level = 1

    @property
    def css_class(self):
        return "subform openlayers-level-%s" % self.level

    def __init__(self, context, request):
        super(GeoControlpanelForm, self).__init__(context, request)
        _subform = GeopointForm(self.context, self.request, self)
        self.ptool = getToolByName(self.context, 'plone_utils')
        _subform.level = self.level + 1

        self.subforms = [_subform, ]

    def update(self):
        # update subforms first, else the values won't
        # be available in button handler
        for _subform in self.subforms:
            _subform.update()
        super(GeoControlpanelForm, self).update()

    @button.buttonAndHandler(_(u'Apply'), name='apply')
    def handle_apply(self, action):
        subdata, suberrors = self.subforms[0].extractData()
        data, errors = self.extractData()

        if errors or suberrors:
            self.status = self.formErrorsMessage
            return

        changes = self.applyChanges(data)
        coordinate_changes = self.subforms[0].applyChanges(subdata)
        if changes or coordinate_changes:
            self.status = self.successMessage
            notify(GeoSettingsEvent(self.context, data))
        else:
            self.status = self.noChangesMessage

        self.ptool.addPortalMessage(self.status, 'info')
        self.request.response.redirect(self.back_link)

    @button.buttonAndHandler(_(u'Cancel'), name='cancel')
    def handle_cancel(self, action):
        self.ptool.addPortalMessage(self.noChangesMessage, 'info')
        self.request.response.redirect(self.back_link)

    @property
    def back_link(self):
        return back_to_controlpanel(self.context)['url']
Exemplo n.º 14
0
class GoogleTerrainMapLayer(MapLayer):
    name = u"google_ter"
    Title = _(u"Terrain (Google)")
    type = 'google'
Exemplo n.º 15
0
class GoogleStreetMapLayer(MapLayer):
    name = u"google_map"
    Title = _(u"Google")
    type = 'google'
Exemplo n.º 16
0
class BingAerialMapLayer(BingMapLayer):
    name = u"bing_aer"
    Title = _(u"Bing Aerial")
Exemplo n.º 17
0
class BingRoadsMapLayer(BingMapLayer):
    name = u"bing_rod"
    Title = _(u"Bing Roads")
Exemplo n.º 18
0
class BingStreetMapLayer(BingMapLayer):
    name = u"bing_map"
    Title = _(u"Bing")
Exemplo n.º 19
0
class OSMMapLayer(MapLayer):
    name = u"osm"
    Title = _(u"OpenStreetMap")