Ptidej-v5.2-master/PADL Serialiser DB4O Tests/rsc/JHotDraw v5.1/src/CH/ifa/draw/samples/javadraw/URLTool.java
/*
 * @(#)URLTool.java 5.1
 *
 */

package CH.ifa.draw.samples.javadraw;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;

import CH.ifa.draw.framework.DrawingView;
import CH.ifa.draw.framework.Figure;
import CH.ifa.draw.standard.AbstractTool;
import CH.ifa.draw.util.FloatingTextField;


/**
 * A tool to attach URLs to figures.
 * The URLs are stored in the figure's "URL" attribute.
 * The URL text is entered with a FloatingTextField.
 * @see FloatingTextField
 */
public  class URLTool extends AbstractTool {

	private FloatingTextField   fTextField;
	private Figure              fURLTarget;

	public URLTool(DrawingView view) {
		super(view);
	}

	public void mouseDown(MouseEvent e, int x, int y)
	{
	    Figure pressedFigure;

	    pressedFigure =  drawing().findFigureInside(x, y);
	    if (pressedFigure != null) {
	        beginEdit(pressedFigure);
	        return;
	    }
	    endEdit();
	}

	public void mouseUp(MouseEvent e, int x, int y) {
	}

	public void deactivate(DrawingView view) {
		super.deactivate();
		endEdit();
	}

	public void endAction(ActionEvent e) {
		endEdit();
	}

	private void beginEdit(Figure figure) {
		if (fTextField == null) {
			fTextField = new FloatingTextField();
		    fTextField.addActionListener(
		        new ActionListener() {
		            public void actionPerformed(ActionEvent event) {
		                endAction(event);
		            }
		        }
		    );
		}

	    if (figure != fURLTarget && fURLTarget != null)
	        endEdit();
		if (figure != fURLTarget) {
			fTextField.createOverlay((Container)view());
	        fTextField.setBounds(fieldBounds(figure), getURL(figure));
	        fURLTarget = figure;
	    }
	}

	private void endEdit() {
	    if (fURLTarget != null) {
		    setURL(fURLTarget, fTextField.getText());
	        fURLTarget = null;
	        fTextField.endOverlay();
	    }
	}

	private Rectangle fieldBounds(Figure figure) {
		Rectangle box = figure.displayBox();
		int nChars = Math.max(20, getURL(figure).length());
		Dimension d = fTextField.getPreferredSize(nChars);
		box.x = Math.max(0, box.x + (box.width - d.width)/2);
		box.y = Math.max(0, box.y + (box.height - d.height)/2);
		return new Rectangle(box.x, box.y, d.width, d.height);
	}

	private String getURL(Figure figure) {
		String url = (String) figure.getAttribute("URL");
		if (url == null)
			url = "";
		return url;
	}

	private void setURL(Figure figure, String url) {
		figure.setAttribute("URL", url);
	}
}

