/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com> *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. */ /*$Id: MapMouseMotionListener.java,v 1.7.16.5.2.1 2008/01/04 22:52:30 christianfoltin Exp $*/ package freemind.controller; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JPopupMenu; /** * The MouseListener which belongs to MapView */ public class MapMouseMotionListener implements MouseMotionListener, MouseListener { public interface MapMouseMotionReceiver { public void mouseDragged(MouseEvent e); public void mousePressed(MouseEvent e); public void mouseReleased(MouseEvent e); } private MapMouseMotionReceiver mReceiver; private final Controller c; public MapMouseMotionListener(Controller controller) { c = controller; } public void register(MapMouseMotionReceiver receiver) { mReceiver = receiver; } public void deregister() { mReceiver = null; } private void handlePopup(MouseEvent e) { if (e.isPopupTrigger()) { JPopupMenu popup = null; // detect collision with an element placed on the root pane of the // window. java.lang.Object obj = c.getView().detectCollision(e.getPoint()); if (obj != null) { // there is a collision with object obj. // call the modecontroller to give a popup menu for this object popup = c.getModeController().getPopupForModel(obj); } if (popup == null) { // no context popup found: // normal popup: popup = c.getFrame().getFreeMindMenuBar().getMapsPopupMenu(); } popup.show(e.getComponent(), e.getX(), e.getY()); popup.setVisible(true); } } public void mouseMoved(MouseEvent e) { } public void mouseDragged(MouseEvent e) { if (mReceiver != null) { mReceiver.mouseDragged(e); } } public void mouseClicked(MouseEvent e) { // to loose the focus in edit c.getView().selectAsTheOnlyOneSelected(c.getView().getSelected()); c.obtainFocusForSelected(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) { // start the move, when the user press the // mouse (PN) handlePopup(e); } else if (mReceiver != null) mReceiver.mousePressed(e); e.consume(); } public void mouseReleased(MouseEvent e) { if (mReceiver != null) { mReceiver.mouseReleased(e); } handlePopup(e); e.consume(); c.getView().setMoveCursor(false); // release the cursor to default // (PN) } }