/*FreeMind - A Program for creating and viewing Mindmaps
*Copyright (C) 2000-2011 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitri Polivaev and others.
*
*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 plugins.map;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JDialog;
import javax.swing.Timer;
import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.TileController;
import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
import freemind.modes.mindmapmode.MindMapController;
/**
* @author foltin
* @date 24.10.2011
*/
final class JCursorMapViewer extends JMapViewer {
boolean mShowCursor;
boolean mUseCursor;
Coordinate mCursorPosition;
Stroke mStroke = new BasicStroke(2);
Stroke mRectangularStroke = new BasicStroke(1, BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_MITER, 10.0f, new float[] { 10.0f, 10.0f }, 0.0f);
private FreeMindMapController mFreeMindMapController;
private final MapDialog mMapHook;
private boolean mHideFoldedNodes = true;
private Coordinate mRectangularStart;
private Coordinate mRectangularEnd;
private boolean mDrawRectangular = false;
/**
* @param pMindMapController
* @param pMapDialog
* @param pMapHook
*
*/
public JCursorMapViewer(MindMapController pMindMapController,
JDialog pMapDialog, TileCache pTileCache, MapDialog pMapHook) {
super(pTileCache, 4);
mMapHook = pMapHook;
mFreeMindMapController = new FreeMindMapController(this,
pMindMapController, pMapDialog, pMapHook);
Action updateCursorAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
mShowCursor = !mShowCursor;
repaint();
}
};
new Timer(1000, updateCursorAction).start();
setFocusable(false);
}
public FreeMindMapController getFreeMindMapController() {
return mFreeMindMapController;
}
public boolean isUseCursor() {
return mUseCursor;
}
public void setUseCursor(boolean pUseCursor) {
mUseCursor = pUseCursor;
repaint();
}
public Coordinate getCursorPosition() {
return mCursorPosition;
}
public void setCursorPosition(Coordinate pCursorPosition) {
mCursorPosition = pCursorPosition;
repaint();
}
/*
* (non-Javadoc)
*
* @see
* org.openstreetmap.gui.jmapviewer.JMapViewer#paintComponent(java.awt.Graphics
* )
*/
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (g instanceof Graphics2D) {
Graphics2D g2d = (Graphics2D) g;
Stroke oldStroke = g2d.getStroke();
Color oldColor = g2d.getColor();
// do cursor
if (mUseCursor && mShowCursor) {
Point position = getMapPosition(mCursorPosition);
if (position != null) {
int size_h = 15;
g2d.setStroke(mStroke);
g2d.setColor(Color.RED);
g2d.drawLine(position.x - size_h, position.y, position.x
+ size_h, position.y);
g2d.drawLine(position.x, position.y - size_h, position.x,
position.y + size_h);
}
}
if (mDrawRectangular) {
g2d.setColor(Color.BLACK);
g2d.setStroke(mRectangularStroke);
Rectangle r = getRectangle(mRectangularStart, mRectangularEnd);
if (r != null) {
g2d.drawRect(r.x, r.y, r.width, r.height);
}
}
g2d.setColor(oldColor);
g2d.setStroke(oldStroke);
}
}
public Rectangle getRectangle(Coordinate rectangularStart,
Coordinate rectangularEnd) {
Point positionStart = getMapPosition(rectangularStart);
Point positionEnd = getMapPosition(rectangularEnd);
Rectangle r = null;
if (positionStart != null && positionEnd != null) {
int x = Math.min(positionStart.x, positionEnd.x);
int y = Math.min(positionStart.y, positionEnd.y);
int width = Math.abs(positionStart.x - positionEnd.x);
int height = Math.abs(positionStart.y - positionEnd.y);
r = new Rectangle(x, y, width, height);
}
return r;
}
public TileController getTileController() {
return tileController;
}
/* (non-Javadoc)
* @see org.openstreetmap.gui.jmapviewer.JMapViewer#initializeZoomSlider()
*/
protected void initializeZoomSlider() {
super.initializeZoomSlider();
//focus
zoomSlider.setFocusable(false);
zoomInButton.setFocusable(false);
zoomOutButton.setFocusable(false);
}
/**
* @param pHideFoldedNodes
*/
public void setHideFoldedNodes(boolean pHideFoldedNodes) {
mHideFoldedNodes = pHideFoldedNodes;
repaint();
}
public boolean isHideFoldedNodes() {
return mHideFoldedNodes;
}
public void setRectangular(Coordinate pRectangularStart, Coordinate pRectangularEnd) {
mRectangularStart = pRectangularStart;
mRectangularEnd = pRectangularEnd;
}
public boolean isDrawRectangular() {
return mDrawRectangular;
}
public void setDrawRectangular(boolean pDrawRectangular) {
mDrawRectangular = pDrawRectangular;
}
}