/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2005 Christian Foltin <christianfoltin@users.sourceforge.net> *See COPYING for Details * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package freemind.modes.mindmapmode.listeners; import java.awt.Point; import java.awt.event.MouseEvent; import freemind.controller.MapMouseMotionListener.MapMouseMotionReceiver; import freemind.modes.MindMapArrowLink; import freemind.modes.mindmapmode.MindMapController; import freemind.view.mindmapview.MapView; /** */ public class MindMapMouseMotionManager implements MapMouseMotionReceiver { int originX = -1; int originY = -1; MindMapArrowLink draggedLink = null; private Point draggedLinkOldStartPoint; private Point draggedLinkOldEndPoint; private final MindMapController mController; // |= oldX >=0 iff we are in the drag /** * */ public MindMapMouseMotionManager(MindMapController controller) { super(); this.mController = controller; } public void mouseDragged(MouseEvent e) { MapView mapView = (MapView) e.getComponent(); // Always try to get mouse to the original position in the Map. if (originX >= 0) { if (draggedLink != null) { int deltaX = (int) ((e.getX() - originX) / mController .getView().getZoom()); int deltaY = (int) ((e.getY() - originY) / mController .getView().getZoom()); draggedLink.changeInclination(mapView, originX, originY, deltaX, deltaY); originX = e.getX(); originY = e.getY(); mController.getView().repaint(); } else { mapView.scrollBy(originX - e.getX(), originY - e.getY()); } } } public void mousePressed(MouseEvent e) { if (!mController.isBlocked() && e.getButton() == MouseEvent.BUTTON1) { mController.getView().setMoveCursor(true); originX = e.getX(); originY = e.getY(); draggedLink = mController.getView().detectCollision( new Point(originX, originY)); if (draggedLink != null) { draggedLinkOldStartPoint = draggedLink.getStartInclination(); draggedLinkOldEndPoint = draggedLink.getEndInclination(); draggedLink.showControlPoints(true); mController.getView().repaint(); } } } public void mouseReleased(MouseEvent e) { originX = -1; originY = -1; if (draggedLink != null) { draggedLink.showControlPoints(false); // make action undoable. Point draggedLinkNewStartPoint = draggedLink.getStartInclination(); Point draggedLinkNewEndPoint = draggedLink.getEndInclination(); // restore old positions. draggedLink.setStartInclination(draggedLinkOldStartPoint); draggedLink.setEndInclination(draggedLinkOldEndPoint); // and change to the new again. mController.setArrowLinkEndPoints(draggedLink, draggedLinkNewStartPoint, draggedLinkNewEndPoint); mController.getView().repaint(); draggedLink = null; } } }