annotate java/src/uk/ac/qmul/eecs/ccmi/gui/GraphElement.java @ 8:ea7885bd9bff tip

fixed bug : render solid line as dotted/dashed when moving the stylus from dotted/dashed to solid
author ccmi-guest
date Thu, 03 Jul 2014 16:12:20 +0100
parents d66dd5880081
children
rev   line source
fiore@0 1 /*
fiore@0 2 CCmI Editor - A Collaborative Cross-Modal Diagram Editing Tool
fiore@0 3
fiore@0 4 Copyright (C) 2011 Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/)
fiore@0 5
fiore@0 6 This program is free software: you can redistribute it and/or modify
fiore@0 7 it under the terms of the GNU General Public License as published by
fiore@0 8 the Free Software Foundation, either version 3 of the License, or
fiore@0 9 (at your option) any later version.
fiore@0 10
fiore@0 11 This program is distributed in the hope that it will be useful,
fiore@0 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
fiore@0 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fiore@0 14 GNU General Public License for more details.
fiore@0 15
fiore@0 16 You should have received a copy of the GNU General Public License
fiore@0 17 along with this program. If not, see <http://www.gnu.org/licenses/>.
fiore@0 18 */
fiore@0 19 package uk.ac.qmul.eecs.ccmi.gui;
fiore@0 20
fiore@0 21 import java.awt.Graphics2D;
fiore@0 22 import java.awt.geom.Point2D;
fiore@0 23 import java.awt.geom.Rectangle2D;
fiore@0 24
fiore@0 25
fiore@0 26 /**
fiore@3 27 * An interface implemented by {@code Node}, {@code Edge} and {@code Edge.InnerPoint}. It defines methods that
fiore@3 28 * all objects painted on a graph share. The interface is used mainly
fiore@3 29 * for convenience in treating the different types of object in a uniformly.
fiore@0 30 *
fiore@0 31 */
fiore@0 32 public interface GraphElement {
fiore@3 33 /**
fiore@3 34 * Draw the graphic element on a canvas
fiore@3 35 *
fiore@3 36 * @param g2 the graphics object. Use {@code g2.draw()} to get things painted on the graph.
fiore@3 37 */
fiore@0 38 public void draw(Graphics2D g2);
fiore@0 39
fiore@3 40 /**
fiore@3 41 * Translates this graphic element on the graph
fiore@3 42 *
fiore@3 43 * @param p the starting point where the translation starts (normally where the user clicks
fiore@3 44 * with their mouse)
fiore@3 45 * @param dx the distance to translate along the x-axis
fiore@3 46 * @param dy the distance to translate along the y-axis
fiore@3 47 * @param source the source of the translate action
fiore@3 48 */
fiore@3 49 public void translate(Point2D p, double dx, double dy, Object source);
fiore@0 50
fiore@3 51 /**
fiore@3 52 * This method is to be called before translation or any other operation that changes the
fiore@3 53 * position of the graph element or any of its parts.
fiore@3 54 *
fiore@3 55 * @param p the starting point of the motion
fiore@3 56 * @param source the source of the motion action
fiore@3 57 */
fiore@3 58 public void startMove(Point2D p, Object source);
fiore@3 59
fiore@3 60 /**
fiore@3 61 * This method is to be called when the motion (e.g. a translation) is over.
fiore@3 62 * Note that for instance a translation might be composed on several calls to {@code translate}
fiore@3 63 *
fiore@5 64 * @param source the source of the motion action
fiore@3 65 */
fiore@3 66 public void stopMove(Object source);
fiore@0 67
fiore@3 68 /**
fiore@3 69 * Gets the bounding {@code Rectangle} of this graph element.
fiore@3 70 *
fiore@3 71 * @return a new {@code Rectangle} equals to the bounding {@code Rectangle} of this graph element
fiore@3 72 */
fiore@0 73 public Rectangle2D getBounds();
fiore@0 74
fiore@3 75 /**
fiore@3 76 * Returns the point where an line, with a specified direction, would come in contact with the outline of this
fiore@3 77 * graph element.
fiore@3 78 *
fiore@3 79 * @param d the direction of the line
fiore@3 80 * @return a new point on the outline if this graph element where the line comes in contact with it
fiore@3 81 */
fiore@0 82 public Point2D getConnectionPoint(Direction d);
fiore@0 83
fiore@3 84 /**
fiore@3 85 * Tests if a specified {@code Point2D} is inside the boundary of this graph element.
fiore@3 86 *
fiore@3 87 * @param p the point to be tested
fiore@3 88 * @return {@code true} if the point is inside the boundary, {@code false} otherwise
fiore@3 89 */
fiore@0 90 public boolean contains(Point2D p);
fiore@0 91
fiore@0 92 }