Package org.wicketstuff.examples.gmap.listen.overlay.advanced

Source Code of org.wicketstuff.examples.gmap.listen.overlay.advanced.HomePage

package org.wicketstuff.examples.gmap.listen.overlay.advanced;

import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.wicketstuff.examples.gmap.WicketExamplePage;
import org.wicketstuff.gmap.GMap;
import org.wicketstuff.gmap.api.GEvent;
import org.wicketstuff.gmap.api.GEventHandler;
import org.wicketstuff.gmap.api.GLatLng;
import org.wicketstuff.gmap.api.GMarker;
import org.wicketstuff.gmap.api.GMarkerOptions;
import org.wicketstuff.gmap.api.GOverlay;
import org.wicketstuff.gmap.event.ClickListener;

/**
* Demonstrates how to listen to a marker on the map & toggle this behavior.
*/
public class HomePage extends WicketExamplePage
{

    private static final long serialVersionUID = 1L;

    public HomePage()
    {
        final GMap map = new GMap("map");
        add(map);
        final WebMarkupContainer repeaterParent = new WebMarkupContainer("repeaterParent");
        repeaterParent.setOutputMarkupId(true);
        add(repeaterParent);
        final RepeatingView rv = new RepeatingView("label");
        rv.setOutputMarkupId(true);
        repeaterParent.add(rv);
        map.add(new ClickListener()
        {
            private static final long serialVersionUID = 1L;

            @Override
            protected void onClick(AjaxRequestTarget target, GLatLng latLng)
            {
                if (latLng != null)
                {
                    if (map.getOverlays().size() >= 3)
                    {
                        map.removeOverlay(map.getOverlays().get(0));
                    }
                    final MyMarker marker = new MyMarker(new GMarkerOptions(map, latLng).draggable(true))
                    {
                        private static final long serialVersionUID = 1L;

                        @Override
                        GEventHandler getDragendHandler()
                        {
                            return new GEventHandler()
                            {
                                private static final long serialVersionUID = 1L;

                                @Override
                                public void onEvent(AjaxRequestTarget eventTarget)
                                {
                                    eventTarget.add(repeaterParent);
                                }
                            };
                        }

                        @Override
                        GEventHandler getDblclickHandler()
                        {
                            return new GEventHandler()
                            {
                                private static final long serialVersionUID = 1L;

                                @Override
                                public void onEvent(AjaxRequestTarget eventTarget)
                                {
                                    eventTarget.add(repeaterParent);
                                }
                            };
                        }
                    };

                    map.addOverlay(marker);
                    marker.addListener(GEvent.dragend, marker.getDragendHandler());
                    rv.removeAll();
                    for (GOverlay myMarker : map.getOverlays())
                    {
                        final GOverlayPanel label =
                                new GOverlayPanel(myMarker.getId(), new CompoundPropertyModel<MyMarker>((MyMarker) myMarker));
                        label.setOutputMarkupId(true);
                        rv.add(label);
                    }

                    target.add(repeaterParent);
                }
            }
        });
    }

    /**
     * Panel for displaying and controlling the state of a GOverlay.
     */
    private static class GOverlayPanel extends Panel
    {

        private static final long serialVersionUID = 1L;

        public GOverlayPanel(String id, final IModel<MyMarker> model)
        {
            super(id, model);
            add(new Label("latLng"));
            final Label dragendLabel = new Label("dragend", new Model<Boolean>()
            {
                private static final long serialVersionUID = 1L;

                /*
                 * (non-Javadoc)
                 *
                 * @see org.apache.wicket.model.Model#getObject()
                 */
                @Override
                public Boolean getObject()
                {

                    return model.getObject().getListeners().containsKey(GEvent.dragend);
                }
            });
            dragendLabel.add(new AjaxEventBehavior("onclick")
            {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onEvent(AjaxRequestTarget target)
                {
                    MyMarker overlay = model.getObject();
                    if ((Boolean) dragendLabel.getDefaultModelObject())
                    {
                        overlay.clearListeners(GEvent.dragend);
                    }
                    else
                    {
                        overlay.addListener(GEvent.dragend, overlay.getDragendHandler());
                    }
                    target.add(GOverlayPanel.this);
                }
            });
            add(dragendLabel);
            final Label dblclickLabel = new Label("dblclick", new Model<Boolean>()
            {
                private static final long serialVersionUID = 1L;

                @Override
                public Boolean getObject()
                {

                    return ((GOverlay) getDefaultModelObject()).getListeners().containsKey(GEvent.dblclick);
                }
            });
            dblclickLabel.add(new AjaxEventBehavior("click")
            {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onEvent(AjaxRequestTarget target)
                {
                    MyMarker overlay = ((MyMarker) GOverlayPanel.this.getDefaultModelObject());
                    if ((Boolean) dblclickLabel.getDefaultModelObject())
                    {
                        overlay.clearListeners(GEvent.dblclick);
                    }
                    else
                    {
                        overlay.addListener(GEvent.dblclick, overlay.getDblclickHandler());
                    }
                    target.add(GOverlayPanel.this);
                }
            });
            add(dblclickLabel);
        }
    }

    /**
     * Extend a GMarker with factory methods for needed handler.
     */
    private static abstract class MyMarker extends GMarker
    {

        private static final long serialVersionUID = -5720177222106241564L;

        public MyMarker(GMarkerOptions options)
        {
            super(options);
        }

        abstract GEventHandler getDblclickHandler();

        abstract GEventHandler getDragendHandler();
    }
}
TOP

Related Classes of org.wicketstuff.examples.gmap.listen.overlay.advanced.HomePage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.