Package com.bbn.openmap.layer.learn

Source Code of com.bbn.openmap.layer.learn.InteractionLayer

// **********************************************************************
//
// <copyright>
//
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/learn/InteractionLayer.java,v $
// $RCSfile: InteractionLayer.java,v $
// $Revision: 1.1.2.2 $
// $Date: 2007/02/26 16:57:12 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.layer.learn;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JMenuItem;

import com.bbn.openmap.event.MapMouseEvent;
import com.bbn.openmap.layer.OMGraphicHandlerLayer;
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMGraphicConstants;
import com.bbn.openmap.omGraphics.OMGraphicList;
import com.bbn.openmap.omGraphics.OMLine;
import com.bbn.openmap.omGraphics.OMPoint;
import com.bbn.openmap.omGraphics.OMTextLabeler;

/**
* This layer demonstrates how to interact with your OMGraphics on the map,
* getting them to change appearance with mouse events and provide additional
* information about themselves. This layer builds on the example demonstrated
* in the BasicDisplayLayer, which involved creating OMGraphics for the map. For
* any of the methods listed below that are designed to assist with responding
* to mouse events, simply return null from them if you want a no-op, which is
* the default implementation in the OMGraphicHandlerLayer (so don't even
* override them).
*
* @see OMGraphicHandlerLayer#isHighlightable
* @see OMGraphicHandlerLayer#highlight
* @see OMGraphicHandlerLayer#unhighlight
* @see OMGraphicHandlerLayer#getInfoText
* @see OMGraphicHandlerLayer#getToolTipText
*
* @see OMGraphicHandlerLayer#isSelectable
* @see OMGraphicHandlerLayer#select
* @see OMGraphicHandlerLayer#deselect
* @see OMGraphicHandlerLayer#getItemsForMapMenu
* @see OMGraphicHandlerLayer#getItemsForOMGraphicMenu
*
* @see OMGraphicHandlerLayer#receivesMapEvents
* @see OMGraphicHandlerLayer#mouseOver(MapMouseEvent)
* @see OMGraphicHandlerLayer#leftClick
*/
public class InteractionLayer extends BasicLayer {

    public InteractionLayer() {
        // Sets the name of the layer that is visible in the GUI. Can also be
        // set with properties with the 'prettyName' property.
        setName("Interaction Layer");
        // This is how to set the ProjectionChangePolicy, which
        // dictates how the layer behaves when a new projection is
        // received. The StandardPCPolicy is the default policy and you don't
        // need to set it, this method call is here to illustrate where and how
        // you would make that call with a different policy.
        setProjectionChangePolicy(new com.bbn.openmap.layer.policy.StandardPCPolicy(this, true));
        // Making the setting so this layer receives events from the
        // SelectMouseMode, which has a modeID of "Gestures". Other
        // IDs can be added as needed. You need to tell the layer which
        // MouseMode it should listen to, so it can tell the MouseModes to send
        // events to it.
        setMouseModeIDsForEvents(new String[] { "Gestures" });
    }

    /**
     * Called from the prepare() method if the layer discovers that its
     * OMGraphicList is null. This method is being overridden so that TOOLTIPS
     * can be set as attributes on the OMGraphics, and retrieved later in the
     * gesturing queries.
     *
     * @return new OMGraphicList with OMGraphics that you always want to display
     *         and reproject as necessary.
     *
     * @see BasicLayer#prepare
     */
    public OMGraphicList init() {

        // This layer keeps a pointer to an OMGraphicList that it uses
        // for painting. It's initially set to null, which is used as
        // a flag in prepare() to signal that the OMGraphcs need to be
        // created. The list returned from prepare() gets set in the
        // layer.
        // This layer uses the StandardPCPolicy for new
        // projections, which keeps the list intact and simply calls
        // generate() on it with the new projection, and repaint()
        // which calls paint().

        /*
         * Note that the OMGraphics have their select paint set in order to
         * react to hightlight calls, and an OMGraphicConstants.TOOLTIP
         * attribute set to provide tooltip text when needed.
         */

        OMGraphicList omList = new OMGraphicList();

        // Add an OMLine
        OMLine line = new OMLine(40f, -75f, 42f, -70f, OMGraphic.LINETYPE_GREATCIRCLE);
        line.setStroke(new BasicStroke(2));
        line.putAttribute(OMGraphicConstants.LABEL,
                new OMTextLabeler("Line Label"));
        line.setLinePaint(Color.red);
        line.setSelectPaint(Color.blue);
        line.putAttribute(OMGraphicConstants.TOOLTIP, "This is an OMLine.");

        omList.add(line);

        // Add a list of OMPoints.
        OMGraphicList pointList = new OMGraphicList();
        for (int i = 0; i < 100; i++) {
            OMPoint point = new OMPoint((float) (Math.random() * 89f), (float) (Math.random() * -179f), 3);
            point.putAttribute(OMGraphicConstants.TOOLTIP, "This is OMPoint #"
                    + i);
            point.setLinePaint(Color.green);
            point.setSelectPaint(Color.yellow);
            pointList.add(point);
        }
        omList.add(pointList);

        return omList;
    }

    /**
     * Query that an OMGraphic can be highlighted when the mouse moves over it.
     * If the answer is true, then highlight with this OMGraphics will be
     * called, and unhighlight will be called with the mouse is moved off of it.
     *
     * @see OMGraphicHandlerLayer#highlight
     * @see OMGraphicHandlerLayer#unhighlight
     */
    public boolean isHighlightable(OMGraphic omg) {
        return true;
    }

    /**
     * Query that an OMGraphic is selectable. Examples of handing selection are
     * in the EditingLayer. The default OMGraphicHandlerLayer behavior is to add
     * the OMGraphic to an OMGraphicList called selectedList. If you aren't
     * going to be doing anything in particular with the selection, then return
     * false here to reduce the workload of the layer.
     *
     * @see OMGraphicHandlerLayer#select
     * @see OMGraphicHandlerLayer#deselect
     */
    public boolean isSelectable(OMGraphic omg) {
        return true;
    }

    /**
     * Designate a list of OMGraphics as selected.
     *
     * @see OMGraphicHandlerLayer#select
     */
    public void select(OMGraphicList list) {
        super.select(list);

        // selectedList is a member variable held by OMGraphicHandlerLayer.
        if (selectedList != null) {
            System.out.println("Current selection list: " + selectedList.getDescription());
        }
    }

    /**
     * Designate a list of OMGraphics as deselected.
     *
     * @see OMGraphicHandlerLayer#deselect
     */
    public void deselect(OMGraphicList list) {
        super.deselect(list);

        // selectedList is a member variable held by OMGraphicHandlerLayer.
        if (selectedList != null) {
            System.out.println("Current selection list: " + selectedList.getDescription());
        }
    }

    /**
     * Query for what text should be placed over the information bar when the
     * mouse is over a particular OMGraphic.
     */
    public String getInfoText(OMGraphic omg) {
        String classname = omg.getClass().getName();
        return "Interaction Layer OMGraphic - "
                + classname.substring(classname.lastIndexOf('.') + 1);
    }

    /**
     * Query for what tooltip to display for an OMGraphic when the mouse is over
     * it.
     */
    public String getToolTipTextFor(OMGraphic omg) {
        Object tt = omg.getAttribute(OMGraphic.TOOLTIP);
        if (tt instanceof String) {
            return (String) tt;
        } else {
            return null;
        }
    }

    /**
     * This method is called when a right mouse click is detected over the map
     * and not over an OMGraphic. You can provide a List of components to be
     * displayed in a popup menu. You have to do the wiring for making the list
     * components do something, though.
     */
    public List getItemsForMapMenu(MapMouseEvent me) {
        List l = new ArrayList();
        JMenuItem when = new JMenuItem("When");
        when.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                fireRequestMessage("When was chosen.");
            }
        });
        JMenuItem where = new JMenuItem("Where");
        where.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                fireRequestMessage("Where was chosen.");
            }
        });
        JMenuItem how = new JMenuItem("How");
        how.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                fireRequestMessage("How was chosen.");
            }
        });

        l.add(when);
        l.add(where);
        l.add(how);

        return l;
    }

    /**
     * This method is called when a right mouse click is detected over an
     * OMGraphic. You can provide a List of components to be displayed in a
     * popup menu. You have to do the wiring for making the list components do
     * something, though.
     */
    public List getItemsForOMGraphicMenu(OMGraphic omg) {
        final OMGraphic chosen = omg;
        List l = new ArrayList();
        JMenuItem which = new JMenuItem("Which");
        which.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                String classname = chosen.getClass().getName();
                fireRequestMessage("Which was chosen over "
                        + classname.substring(classname.lastIndexOf('.') + 1));
            }
        });
        JMenuItem why = new JMenuItem("Why");
        why.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                String classname = chosen.getClass().getName();
                fireRequestMessage("Why was chosen over "
                        + classname.substring(classname.lastIndexOf('.') + 1));
            }
        });

        l.add(which);
        l.add(why);
        return l;
    }
}
TOP

Related Classes of com.bbn.openmap.layer.learn.InteractionLayer

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.