Package com.bbn.openmap.gui

Source Code of com.bbn.openmap.gui.OMToolSet

// **********************************************************************
//
// <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/gui/OMToolSet.java,v $
// $RCSfile: OMToolSet.java,v $
// $Revision: 1.8.2.2 $
// $Date: 2005/08/09 19:15:57 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.gui;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;

import javax.swing.ImageIcon;
import javax.swing.JButton;

import com.bbn.openmap.MapBean;
import com.bbn.openmap.util.Debug;
import com.bbn.openmap.util.PropUtils;

/**
* The OMToolSet bundles other control beans, and is a Tool used in
* the OpenMap application.
* <P>
*
* It contains a NavigatePanel, which is the directional rosette used
* to pan the MapBean, the ZoomPanel that has a zoom in and zoom out
* button, and a scale text window. To use the OMToolSet, create an
* instance of it, and then call setupListeners() with the MapBean.
* All the event handling is automatically set up.
* <P>
*
* If the OMToolSet is added to a BeanContext, it should be found by a
* ToolPanel. It looks for a MapBean add as listeners to the various
* widgets. If it doesn't get a MapBean, then the projection widgets
* will appear to be non-functioning.
*/
public class OMToolSet extends OMComponentPanel implements Serializable, Tool {

    public final static String defaultKey = "omtoolset";

    protected String key = defaultKey;

    /** Navigation rosette */
    protected transient NavigatePanel navPanel = null;
    /** Zoom buttons */
    protected transient ZoomPanel zoomPanel = null;
    /** ScaleTextPanel for scale text. */
    protected transient ScaleTextPanel scaleField = null;

    public final static String AddZoomProperty = "addZoom";
    public final static String AddPanProperty = "addPan";
    public final static String AddScaleProperty = "addScale";

    protected boolean addZoom = true;
    protected boolean addPan = true;
    protected boolean addScale = true;

    /**
     * Create the OMToolSet.
     */
    public OMToolSet() {
        super();
        Debug.message("omtoolset", "OMToolSet()");

        setLayout(new FlowLayout(FlowLayout.LEFT));

        navPanel = new NavigatePanel();

        zoomPanel = new ZoomPanel();

        scaleField = new ScaleTextPanel();

        add(navPanel);
        add(zoomPanel);
        add(scaleField);

        createFace();
    }

    /**
     * Tool interface method. The retrieval tool's interface. This is
     * added to the tool bar.
     *
     * @return String The key for this tool.
     */
    public Container getFace() {
        return this;
    }

    /**
     * Sets the visibility of the default components, based on their
     * boolean settings.
     */
    protected void createFace() {
        zoomPanel.setVisible(addZoom);
        navPanel.setVisible(addPan);
        scaleField.setVisible(addScale);
    }

    /**
     * Tool interface method. The retrieval key for this tool.
     *
     * @return String The key for this tool.
     */
    public String getKey() {
        return key;
    }

    /**
     * Tool interface method. Set the retrieval key for this tool.
     *
     * @param aKey The key for this tool.
     */
    public void setKey(String aKey) {
        key = aKey;
    }

    /**
     * Get the ZoomPanel
     *
     * @return the ZoomPanel
     */
    public ZoomPanel getZoomPanel() {
        return zoomPanel;
    }

    /**
     * Get the NavigatePanel.
     *
     * @return the NaviationPanel (directional rosette)
     */
    public NavigatePanel getNavigatePanel() {
        return navPanel;
    }

    /**
     * Get the scale field widget.
     *
     * @return ScaleTextPanel that is rigged to set the scale for the
     *         map.
     */
    public ScaleTextPanel getScaleField() {
        return scaleField;
    }

    /**
     * Convenience function to set up listeners of the components. If
     * you are hooking the MapBean up to the OMToolSet, this is what
     * you need to call.
     *
     * @param aMapBean a map object.
     */
    public void setupListeners(MapBean aMapBean) {
        if (aMapBean != null) {
            findAndInit(aMapBean);
        }
    }

    /**
     * This function removes the mapBean object from its set of
     * Listeners. An inverse of setupListeners() method.
     *
     * @param aMapBean a map object.
     */
    public void removeFromAllListeners(MapBean aMapBean) {
        if (aMapBean != null) {
            findAndUndo(aMapBean);
        }
    }

    /**
     * Add a button to the panel. Will attempt to create a URL from
     * the name of the image file.
     *
     * @param name image filename
     * @param info tool tip
     * @param al ActionListener
     */
    public void addButton(String name, String info, ActionListener al) {
        try {
            URL url = PropUtils.getResourceOrFileOrURL(null, name);
            if (url != null) {
                addButton(url, info, al);
            }
        } catch (MalformedURLException murle) {
            Debug.error("OMToolSet.addButton: can't create button for " + info);
        }
    }

    /**
     * Add a button to the panel.
     *
     * @param url URL for image
     * @param info tool tip
     * @param al ActionListener
     */
    public void addButton(URL url, String info, ActionListener al) {
        JButton b = new JButton(new ImageIcon(url, info));
        b.setToolTipText(info);
        b.setMargin(new Insets(0, 0, 0, 0));
        b.addActionListener(al);
        b.setBorderPainted(false);
        add(b);
    }

    /**
     * MapHandlerChild method.
     */
    public void findAndInit(Object someObj) {
        navPanel.findAndInit(someObj);
        zoomPanel.findAndInit(someObj);
        scaleField.findAndInit(someObj);
    }

    /**
     * MapHandlerChild method.
     */
    public void findAndUndo(Object someObj) {
        navPanel.findAndUndo(someObj);
        zoomPanel.findAndUndo(someObj);
        scaleField.findAndUndo(someObj);
    }

    /**
     * Method to set the properties in the PropertyConsumer. The
     * prefix is a string that should be prepended to each property
     * key (in addition to a separating '.') in order for the
     * PropertyConsumer to uniquely identify properies meant for it,
     * in the midst of of Properties meant for several objects.
     *
     * @param prefix a String used by the PropertyConsumer to prepend
     *        to each property value it wants to look up -
     *        setList.getProperty(prefix.propertyKey). If the prefix
     *        had already been set, then the prefix passed in should
     *        replace that previous value.
     * @param setList a Properties object that the PropertyConsumer
     *        can use to retrieve expected properties it can use for
     *        configuration.
     */
    public void setProperties(String prefix, Properties setList) {
        setPropertyPrefix(prefix);

        // Important for ToolPanel that controls what it is listening
        // for, instead of grabbing any Tool. The prefix will be used
        // as a discriminator.
        if (prefix != null) {
            setKey(prefix);
        }

        prefix = PropUtils.getScopedPropertyPrefix(prefix);

        addZoom = PropUtils.booleanFromProperties(setList, prefix
                + AddZoomProperty, addZoom);
        addPan = PropUtils.booleanFromProperties(setList, prefix
                + AddPanProperty, addPan);
        addScale = PropUtils.booleanFromProperties(setList, prefix
                + AddScaleProperty, addScale);

        createFace();
    }

    /**
     * Method to fill in a Properties object, reflecting the current
     * values of the PropertyConsumer. If the PropertyConsumer has a
     * prefix set, the property keys should have that prefix plus a
     * separating '.' prepended to each propery key it uses for
     * configuration.
     *
     * @param getList a Properties object to load the PropertyConsumer
     *        properties into. If getList equals null, then a new
     *        Properties object should be created.
     * @return Properties object containing PropertyConsumer property
     *         values. If getList was not null, this should equal
     *         getList. Otherwise, it should be the Properties object
     *         created by the PropertyConsumer.
     */
    public Properties getProperties(Properties getList) {
        if (getList == null) {
            getList = new Properties();
        }

        String prefix = PropUtils.getScopedPropertyPrefix(this);

        getList.put(prefix + AddZoomProperty, new Boolean(addZoom).toString());
        getList.put(prefix + AddPanProperty, new Boolean(addPan).toString());
        getList.put(prefix + AddScaleProperty, new Boolean(addScale).toString());
        return getList;
    }

    /**
     * Method to fill in a Properties object with values reflecting
     * the properties able to be set on this PropertyConsumer. The key
     * for each property should be the raw property name (without a
     * prefix) with a value that is a String that describes what the
     * property key represents, along with any other information about
     * the property that would be helpful (range, default value,
     * etc.).
     *
     * @param list a Properties object to load the PropertyConsumer
     *        properties into. If getList equals null, then a new
     *        Properties object should be created.
     * @return Properties object containing PropertyConsumer property
     *         values. If getList was not null, this should equal
     *         getList. Otherwise, it should be the Properties object
     *         created by the PropertyConsumer.
     */
    public Properties getPropertyInfo(Properties list) {
        if (list == null) {
            list = new Properties();
        }

        list.put(AddZoomProperty, "Flag to add the Zoom buttons");
        list.put(AddZoomProperty + ScopedEditorProperty,
                "com.bbn.openmap.util.propertyEditor.YesNoPropertyEditor");
        list.put(AddPanProperty, "Flag to add the Pan buttons");
        list.put(AddPanProperty + ScopedEditorProperty,
                "com.bbn.openmap.util.propertyEditor.YesNoPropertyEditor");
        list.put(AddScaleProperty, "Flag to add the scale field");
        list.put(AddScaleProperty + ScopedEditorProperty,
                "com.bbn.openmap.util.propertyEditor.YesNoPropertyEditor");

        return list;
    }
}
TOP

Related Classes of com.bbn.openmap.gui.OMToolSet

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.