/* * Freeplane - mind map editor * Copyright (C) 2009 Dimitry * * This file author is Dimitry * * 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, see <http://www.gnu.org/licenses/>. */ package org.freeplane.view.swing.map.link; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import org.freeplane.core.util.ColorUtils; import org.freeplane.features.link.ArrowType; import org.freeplane.features.link.ConnectorModel; import org.freeplane.features.link.LinkController; import org.freeplane.features.link.ConnectorModel.Shape; import org.freeplane.features.mode.ModeController; import org.freeplane.features.styles.MapViewLayout; import org.freeplane.view.swing.map.MapView; import org.freeplane.view.swing.map.NodeView; import org.freeplane.view.swing.map.edge.EdgeView; import org.freeplane.view.swing.map.edge.EdgeViewFactory; /** * @author Dimitry Polivaev * 09.08.2009 */ public class EdgeLinkView extends AConnectorView { private final EdgeView edgeView; public EdgeLinkView(final ConnectorModel model, final ModeController modeController, final NodeView source, final NodeView target) { super(model, source, target); final MapView map = source.getMap(); if (map.getLayoutType() == MapViewLayout.OUTLINE) { edgeView = new OutlineLinkView(source, target, map); } else{ edgeView = EdgeViewFactory.getInstance().getEdge(source, target, map); } Color color; if (Shape.EDGE_LIKE.equals(model.getShape())) { color = edgeView.getColor().darker(); } else { final LinkController linkController = LinkController.getController(modeController); color = linkController.getColor(connectorModel); final int alpha = linkController.getAlpha(connectorModel); color = ColorUtils.createColor(color, alpha); final int width = linkController.getWidth(model); edgeView.setWidth(width); } edgeView.setColor(color); } public boolean detectCollision(final Point p, final boolean selectedOnly) { if (selectedOnly) { final NodeView source = edgeView.getSource(); if ((source == null || !source.isSelected())) { final NodeView target = edgeView.getTarget(); if ((target == null || !target.isSelected())) { return false; } } } return edgeView.detectCollision(p); } public ConnectorModel getModel() { return connectorModel; } public void increaseBounds(final Rectangle innerBounds) { //edge link does not increase inner bounds } public void paint(final Graphics graphics) { edgeView.paint((Graphics2D) graphics); if(Shape.EDGE_LIKE.equals(connectorModel.getShape())){ return; } if (isSourceVisible() && !connectorModel.getStartArrow().equals(ArrowType.NONE)) { Point p1 = edgeView.getStart(); Point p2 = new Point(p1); p2.translate(5, 0); paintArrow(graphics, p2, p1); } if (isTargetVisible() && !connectorModel.getEndArrow().equals(ArrowType.NONE)) { Point p1 = edgeView.getEnd(); Point p2 = new Point(p1); p2.translate(5, 0); paintArrow(graphics, p2, p1); } } private void paintArrow(final Graphics graphics, Point from, Point to) { paintArrow(from, to, (Graphics2D)graphics, getZoom() * 10); } }