// ********************************************************************** // // <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/omGraphics/editable/PolyUndefinedState.java,v // $ // $RCSfile: PolyUndefinedState.java,v $ // $Revision: 1.3 $ // $Date: 2004/10/14 18:06:16 $ // $Author: dietrick $ // // ********************************************************************** package com.bbn.openmap.omGraphics.editable; import java.awt.event.MouseEvent; import com.bbn.openmap.omGraphics.EditableOMPoly; import com.bbn.openmap.omGraphics.OMGraphic; import com.bbn.openmap.omGraphics.event.EOMGEvent; import com.bbn.openmap.util.Debug; public class PolyUndefinedState extends GraphicUndefinedState { public PolyUndefinedState(EditableOMPoly eomp) { super(eomp); } int initX; int initY; /** * In this state, we need to draw a poly from scratch. So, we * listen for a mouse down, and set both points there, and then * set the mode to poly edit. */ public boolean mousePressed(MouseEvent e) { if (Debug.debugging("eomg")) { Debug.output("PolyStateMachine|undefined state|mousePressed = " + graphic.getGraphic().getRenderType()); } // Need to set these up for the polygon if (graphic.getGraphic().getRenderType() == OMGraphic.RENDERTYPE_OFFSET) { graphic.getStateMachine().setOffsetNeeded(true); Debug.message("eoml", "PolyStateMachine|undefined state| *offset needed*"); } initX = e.getX(); initY = e.getY(); ((EditableOMPoly) graphic).addPoint(initX, initY); graphic.fireEvent(EOMGEvent.EOMG_SELECTED); return getMapMouseListenerResponse(); } /** * In this state, we need to change states only if the graphic, or * anyplace off the graphic is pressed down on. If the end points * are clicked on, then we do nothing except set the moving point * and go to edit mode. */ public boolean mouseReleased(MouseEvent e) { Debug.message("eomg", "GraphicStateMachine|undefined state|mouseReleased"); ((EditableOMPoly) graphic).addMovingPoint(e.getX(), e.getY()); ((PolyStateMachine) graphic.getStateMachine()).setAddPoint(); graphic.fireEvent(EOMGEvent.EOMG_AUX); graphic.redraw(e); return false; } public boolean mouseDragged(MouseEvent e) { Debug.message("eomgdetail", "PolyStateMachine|undefined state|mouseDragged"); // Set another point if the mouse was dragged a little // before releasing. Assume that the motion can be a click // and mouseMove, or a press and mouseDrag. Either way, we // want the number of nodes to be the right one. if ((Math.abs(e.getX() - initX) > 2) || (Math.abs(e.getY() - initY) > 2)) { ((EditableOMPoly) graphic).addMovingPoint(e.getX(), e.getY()); ((PolyStateMachine) graphic.getStateMachine()).setAddPoint(); } graphic.redraw(e); return false; } }