Package com.bbn.openmap.gui

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

// **********************************************************************
//
// <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/OMGraphicDeleteTool.java,v $
// $RCSfile: OMGraphicDeleteTool.java,v $
// $Revision: 1.5.2.3 $
// $Date: 2007/08/20 15:26:36 $
// $Author: epgordon $
//
// **********************************************************************

package com.bbn.openmap.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;

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

import com.bbn.openmap.I18n;
import com.bbn.openmap.MapBean;
import com.bbn.openmap.omGraphics.OMAction;
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMGraphicConstants;
import com.bbn.openmap.omGraphics.event.SelectionEvent;
import com.bbn.openmap.omGraphics.event.SelectionListener;
import com.bbn.openmap.omGraphics.event.SelectionProvider;
import com.bbn.openmap.tools.drawing.DrawingToolRequestor;
import com.bbn.openmap.tools.drawing.OMDrawingTool;
import com.bbn.openmap.util.Debug;

/**
* The OMGraphicDeleteTool is a Swing component that contains a button that
* listens for notifications that tell it that an OMGraphic has been 'selected',
* and provides the capability to delete that OMGraphic from the component that
* manages it. The OMGraphicDeleteTool gathers SelectionEvents, which provide it
* information about the OMGraphic and the DrawingToolRequestor that can delete
* it from the map. If multiple events are received, pressing the button will
* cause notifications to be sent to all the DrawingToolRequestors to delete all
* the OMGraphics that are currently selected. This component is also a
* com.bbn.openmap.gui.Tool, so if the ToolPanel sees it in the MapHandler, the
* button will automatically be added to it.
* <p>
* To add the button to the OpenMap application, it just needs to be added to
* the openmap.components property in the openmap.properties file.
*/
public class OMGraphicDeleteTool extends OMToolComponent implements
        SelectionListener, ActionListener, KeyListener {

    protected JButton deleteButton = null;
    protected String defaultKey = "omgraphicdeletetool";

    protected Hashtable deleteList;
    protected Vector requestors;
    protected JToolBar jToolBar;

    public OMGraphicDeleteTool() {
        super();
        setKey(defaultKey);
        Debug.message("deletebutton", "OMGTL()");

        setLayout(new java.awt.GridLayout());
        jToolBar = new JToolBar();
        jToolBar.setFloatable(false);

        deleteList = new Hashtable();
        requestors = new Vector();

        java.net.URL url = this.getClass().getResource("delete.gif");
        if (url != null) {
            ImageIcon icon = new ImageIcon(url);
            deleteButton = new JButton(icon);
        } else {
            deleteButton = new JButton("Delete");
        }

        deleteButton.addActionListener(this);
        // deleteButton.setToolTipText("Delete selected map graphic");
        deleteButton.setToolTipText(i18n.get(OMGraphicDeleteTool.class,
                "deleteButton",
                I18n.TOOLTIP,
                "Delete selected map graphic"));
        deleteButton.setEnabled(false);

        jToolBar.add(deleteButton);
        add(jToolBar);
    }

    public void keyPressed(KeyEvent e) {}

    public void keyReleased(KeyEvent e) {
        if ((e.getKeyCode() == KeyEvent.VK_BACK_SPACE)
                || (e.getKeyCode() == KeyEvent.VK_DELETE)) {
            deleteSelected();
        }
    }

    public void keyTyped(KeyEvent e) {}

    public void actionPerformed(ActionEvent ae) {
        Debug.message("deletebutton", "OMGDT.actionPerformed()");
        deleteSelected();
    }

    public void deleteSelected() {
        Iterator it = deleteList.values().iterator();

        while (it.hasNext()) {
            SelectionEvent item = (SelectionEvent) it.next();
            Object itemSource = item.getSource();

            // Too specific?
            if (itemSource instanceof OMDrawingTool) {
                // This should notify the requestor...
                ((OMDrawingTool) itemSource).deactivate(OMGraphicConstants.DELETE_GRAPHIC_MASK);

            } else {
                if (item != null) { // is this check necessary? I
                    // doubt it.
                    DrawingToolRequestor requestor = item.getRequestor();
                    OMGraphic omg = item.getOMGraphic();
                    if (requestor != null) {
                        requestor.drawingComplete(omg,
                                new OMAction(OMGraphicConstants.DELETE_GRAPHIC_MASK));
                    } else {
                        // if there isn't a requestor specified, tell
                        // anyone who will listen.
                        Iterator reqs = requestors.iterator();
                        while (reqs.hasNext()) {
                            ((DrawingToolRequestor) reqs.next()).drawingComplete(omg,
                                    new OMAction(OMGraphicConstants.DELETE_GRAPHIC_MASK));
                        }
                    }
                }
            }
        }

        // Should we just clear the list now?
        deleteList.clear();
        deleteButton.setEnabled(!deleteList.isEmpty());
    }

    public void selectionNotification(SelectionEvent event) {
        if (event.isSelected() && event.getOMGraphic() != null) {
            Debug.message("deletebutton",
                    "OMGDT.selection notification: adding selected to list.");
            deleteList.put(event.getOMGraphic(), event);
        } else if (!event.isSelected()) {
            Debug.message("deletebutton",
                    "OMGDT.selection notification: removing selected from list.");
            deleteList.remove(event.getOMGraphic());
        } else {
            Debug.message("deletebutton",
                    "OMGDT.selection notification: omgraphic missing from notification.");
        }

        deleteButton.setEnabled(!deleteList.isEmpty());
    }

    // /////////////////////////////////////////////////////////////////////////
    // // MapHandlerChild methods to make the tool work with
    // // the MapHandler to find any SelectionProviders.
    // /////////////////////////////////////////////////////////////////////////

    public void findAndInit(Object obj) {
        if (obj instanceof SelectionProvider) {
            Debug.message("deletebutton",
                    "OMGDT.findAndInit() found selection provider");
            ((SelectionProvider) obj).addSelectionListener(this);
        }

        if (obj instanceof DrawingToolRequestor) {

            // Keep track of them so if the requestor is not known,
            // just
            // tell everyone who may be listening to delete the
            // OMGraphic in question and let them react accordingly.
            // If they don't already have the OMGraphic, they should
            // just ignore the request.
            requestors.add((DrawingToolRequestor) obj);
        }

        if (obj instanceof MapBean) {
            ((MapBean) obj).addKeyListener(this);
        }
    }

    public void findAndUndo(Object obj) {
        if (obj instanceof SelectionProvider) {
            ((SelectionProvider) obj).removeSelectionListener(this);
        }

        if (obj instanceof DrawingToolRequestor) {
            requestors.remove((DrawingToolRequestor) obj);
        }

        if (obj instanceof MapBean) {
            ((MapBean) obj).removeKeyListener(this);
        }
    }

}
TOP

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

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.