// **********************************************************************
//
// <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/j3d/com/bbn/openmap/plugin/pilot/PilotLoaderPlugIn.java,v $
// $RCSfile: PilotLoaderPlugIn.java,v $
// $Revision: 1.5 $
// $Date: 2004/10/14 18:05:38 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.plugin.pilot;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.beans.PropertyVetoException;
import java.beans.beancontext.BeanContext;
import com.bbn.openmap.omGraphics.OMAction;
import com.bbn.openmap.omGraphics.OMGraphic;
import com.bbn.openmap.omGraphics.OMGraphicList;
import com.bbn.openmap.plugin.OMGraphicHandlerPlugIn;
import com.bbn.openmap.proj.Projection;
import com.bbn.openmap.tools.drawing.OMDrawingTool;
import com.bbn.openmap.util.Debug;
/**
* The PilotLoaderPlugIn receives OMGraphics from the PilotLoader and displays
* them. It just waits and listens, and redraws when necessary.
*/
public class PilotLoaderPlugIn extends OMGraphicHandlerPlugIn {
protected PilotLoader loader = null;
protected OMDrawingTool dt = null;
public PilotLoaderPlugIn() {
super();
setPilotLoader(new PilotLoader(this));
}
public PilotLoaderPlugIn(Component comp) {
super(comp);
setPilotLoader(new PilotLoader(this));
}
/**
* The getRectangle call is the main call into the PlugIn module. The module
* is expected to fill the graphics list with objects that are within the
* screen parameters passed.
*
* @param p projection of the screen, holding scale, center coords, height,
* width.
*/
public OMGraphicList getRectangle(Projection p) {
if (loader != null) {
loader.setProjection(p);
}
OMGraphicList list = (OMGraphicList) super.getList();
list.generate(p);
if (Debug.debugging("pilotloader")) {
Debug.output("GraphicLoaderPlugIn returning list of " + list.size()
+ " objects.");
}
return list;
} // end getRectangle
public synchronized void setList(OMGraphicList graphics) {
super.setList(graphics);
doPrepare();
}
public synchronized boolean doAction(OMGraphic graphic, OMAction action) {
boolean ret = super.doAction(graphic, action);
doPrepare();
return ret;
}
/**
* Get the path/point loader.
*/
public void setPilotLoader(PilotLoader pl) {
loader = pl;
setMapMouseListener(loader);
try {
loader.setBeanContext(getBeanContext());
} catch (PropertyVetoException pve) {
}
}
/**
* Get the path/point loader.
*/
public PilotLoader getPilotLoader() {
return loader;
}
public Component getGUI() {
if (loader != null) {
return loader.getGUI();
} else {
return null;
}
}
/**
* Invoked when the mouse has been clicked on a component. The listener will
* receive this event if it successfully processed
* <code>mousePressed()</code>, or if no other listener processes the event.
* If the listener successfully processes <code>mouseClicked()</code>, then
* it will receive the next <code>mouseClicked()</code> notifications that
* have a click count greater than one.
* <p>
* NOTE: We have noticed that this method can sometimes be erroneously
* invoked. It seems to occur when a light-weight AWT component (like an
* internal window or menu) closes (removes itself from the window
* hierarchy). A specific OpenMap example is when you make a menu selection
* when the MenuItem you select is above the MapBean canvas. After making
* the selection, the mouseClicked() gets invoked on the MouseDelegator,
* which passes it to the appropriate listeners depending on the MouseMode.
* The best way to avoid this problem is to not implement anything crucial
* in this method. Use a combination of <code>mousePressed()</code> and
* <code>mouseReleased()</code> instead.
*
* @param e MouseEvent
* @return true if the listener was able to process the event.
*/
public boolean mouseClicked(MouseEvent e) {
OMGraphicList list = getList();
if (list != null) {
OMGraphic graphic = list.getContains(e.getX(), e.getY());
if (graphic instanceof Pilot) {
Pilot mp = (Pilot) graphic;
mp.showPalette();
return true;
}
}
return false;
}
/**
* Method for BeanContextChild interface. Adds this object as a
* BeanContextMembership listener, set the BeanContext in this objects
* BeanContextSupport, and receives the initial list of objects currently
* contained in the BeanContext.
*/
public void setBeanContext(BeanContext in_bc) throws PropertyVetoException {
super.setBeanContext(in_bc);
if (loader != null) {
loader.setBeanContext(in_bc);
}
}
} // end GraphicLoaderPlugin