⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shape.java

📁 mywork是rcp开发的很好的例子
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2004, 2005 Elias Volanakis and others.�* All rights reserved. This program and the accompanying materials�* are made available under the terms of the Eclipse Public License v1.0�* which accompanies this distribution, and is available at�* http://www.eclipse.org/legal/epl-v10.html�*�* Contributors:�*����Elias Volanakis - initial API and implementation�*******************************************************************************/package net.sf.freenote.model;import java.util.ArrayList;import java.util.List;import net.sf.freenote.FreeNoteConstants;import net.sf.freenote.ShapesPlugin;import org.eclipse.draw2d.geometry.Dimension;import org.eclipse.draw2d.geometry.Point;import org.eclipse.jface.viewers.ICellEditorValidator;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.graphics.RGB;import org.eclipse.ui.views.properties.ColorPropertyDescriptor;import org.eclipse.ui.views.properties.IPropertyDescriptor;import org.eclipse.ui.views.properties.PropertyDescriptor;import org.eclipse.ui.views.properties.TextPropertyDescriptor;import sun.swing.BakedArrayList;/** * Abstract prototype of a shape. * Has a size (width and height), a location (x and y position) and a list of incoming * and outgoing connections. Use subclasses to instantiate a specific shape. * @see net.sf.freenote.model.RectangularShape * @see net.sf.freenote.model.EllipticalShape * @author Elias Volanakis */public abstract class Shape extends ModelElement {/**  * A static array of property descriptors. * There is one IPropertyDescriptor entry per editable property. * @see #getPropertyDescriptors() * @see #getPropertyValue(Object) * @see #setPropertyValue(Object, Object) */private static IPropertyDescriptor[] descriptors;/** ID for the Height property value (used for by the corresponding property descriptor). */private static final String HEIGHT_PROP = "Shape.Height";/** Property ID to use when the location of this shape is modified. */public static final String LOCATION_PROP = "Shape.Location";/** Property ID to use then the size of this shape is modified. */public static final String SIZE_PROP = "Shape.Size";/** Property ID to use when the list of outgoing connections is modified. */public static final String SOURCE_CONNECTIONS_PROP = "Shape.SourceConn";/** Property ID to use when the list of incoming connections is modified. */public static final String TARGET_CONNECTIONS_PROP = "Shape.TargetConn";/** ID for the Width property value (used for by the corresponding property descriptor). */private static final String WIDTH_PROP = "Shape.Width";/** ID for the X property value (used for by the corresponding property descriptor).  */private static final String XPOS_PROP = "Shape.xPos";/** ID for the Y property value (used for by the corresponding property descriptor).  */private static final String YPOS_PROP = "Shape.yPos";private RGB backColor;private RGB foreColor;/** Location of this shape. */private Point location = new Point(0, 0);/** Size of this shape. */private Dimension size = new Dimension(50, 50);/** List of outgoing Connections. */private List sourceConnections = new ArrayList();/** List of incoming Connections. */private List targetConnections = new ArrayList();/* * Initializes the property descriptors array. * @see #getPropertyDescriptors() * @see #getPropertyValue(Object) * @see #setPropertyValue(Object, Object) */static {	descriptors = new IPropertyDescriptor[] { 			new TextPropertyDescriptor(XPOS_PROP, "X"), // id and description pair			new TextPropertyDescriptor(YPOS_PROP, "Y"),			new TextPropertyDescriptor(WIDTH_PROP, "Width"),			new TextPropertyDescriptor(HEIGHT_PROP, "Height"),			new ColorPropertyDescriptor(FreeNoteConstants.BACKCOLOR,FreeNoteConstants.BACKCOLOR),			new ColorPropertyDescriptor(FreeNoteConstants.FORECOLOR,FreeNoteConstants.FORECOLOR)	};	// use a custom cell editor validator for all four array entries	for (int i = 0; i < 4; i++) {		((PropertyDescriptor) descriptors[i]).setValidator(new ICellEditorValidator() {			public String isValid(Object value) {				int intValue = -1;				try {					intValue = Integer.parseInt((String) value);				} catch (NumberFormatException exc) {					return "Not a number";				}				return (intValue >= 0) ? null : "Value must be >=  0";			}		});	}} // staticprotected static Image createImage(String name) {	return ShapesPlugin.getImageDescriptor(name).createImage();}/** * Add an incoming or outgoing connection to this shape. * @param conn a non-null connection instance * @throws IllegalArgumentException if the connection is null or has not distinct endpoints */void addConnection(Connection conn) {	if (conn == null || conn.getSource() == conn.getTarget()) {		throw new IllegalArgumentException();	}	if (conn.getSource() == this) {		sourceConnections.add(conn);		firePropertyChange(SOURCE_CONNECTIONS_PROP, null, conn);	} else if (conn.getTarget() == this) {		targetConnections.add(conn);		firePropertyChange(TARGET_CONNECTIONS_PROP, null, conn);	}}/** * Return a pictogram (small icon) describing this model element. * Children should override this method and return an appropriate Image. * @return a 16x16 Image or null */public abstract Image getIcon();/** * Return the Location of this shape. * @return a non-null location instance */public Point getLocation() {	return location.getCopy();}/** * Returns an array of IPropertyDescriptors for this shape. * <p>The returned array is used to fill the property view, when the edit-part corresponding * to this model element is selected.</p> * @see #descriptors * @see #getPropertyValue(Object) * @see #setPropertyValue(Object, Object) */public IPropertyDescriptor[] getPropertyDescriptors() {	return descriptors;}/** * Return the property value for the given propertyId, or null. * <p>The property view uses the IDs from the IPropertyDescriptors array  * to obtain the value of the corresponding properties.</p> * @see #descriptors * @see #getPropertyDescriptors() */public Object getPropertyValue(Object propertyId) {	if (XPOS_PROP.equals(propertyId)) {		return Integer.toString(location.x);	}	if (YPOS_PROP.equals(propertyId)) {		return Integer.toString(location.y);	}	if (HEIGHT_PROP.equals(propertyId)) {		return Integer.toString(size.height);	}	if (WIDTH_PROP.equals(propertyId)) {		return Integer.toString(size.width);	}	if(FreeNoteConstants.BACKCOLOR.equals(propertyId)){		return backColor;	}	if(FreeNoteConstants.FORECOLOR.equals(propertyId)){		return foreColor;	}	return super.getPropertyValue(propertyId);}/** * Return the Size of this shape. * @return a non-null Dimension instance */public Dimension getSize() {	return size.getCopy();}/** * Return a List of outgoing Connections. */public List getSourceConnections() {	return new ArrayList(sourceConnections);}/** * Return a List of incoming Connections. */public List getTargetConnections() {	return new ArrayList(targetConnections);}/** * Remove an incoming or outgoing connection from this shape. * @param conn a non-null connection instance * @throws IllegalArgumentException if the parameter is null */void removeConnection(Connection conn) {	if (conn == null) {		throw new IllegalArgumentException();	}	if (conn.getSource() == this) {		sourceConnections.remove(conn);		firePropertyChange(SOURCE_CONNECTIONS_PROP, null, conn);	} else if (conn.getTarget() == this) {		targetConnections.remove(conn);		firePropertyChange(TARGET_CONNECTIONS_PROP, null, conn);	}}/** * Set the Location of this shape. * @param newLocation a non-null Point instance * @throws IllegalArgumentException if the parameter is null */public void setLocation(Point newLocation) {	if (newLocation == null) {		throw new IllegalArgumentException();	}	location.setLocation(newLocation);	firePropertyChange(LOCATION_PROP, null, location);}/** * Set the property value for the given property id. * If no matching id is found, the call is forwarded to the superclass. * <p>The property view uses the IDs from the IPropertyDescriptors array to set the values * of the corresponding properties.</p> * @see #descriptors * @see #getPropertyDescriptors() */public void setPropertyValue(Object propertyId, Object value) {	if (XPOS_PROP.equals(propertyId)) {		int x = Integer.parseInt((String) value);		setLocation(new Point(x, location.y));	} else if (YPOS_PROP.equals(propertyId)) {		int y = Integer.parseInt((String) value);		setLocation(new Point(location.x, y));	} else if (HEIGHT_PROP.equals(propertyId)) {		int height = Integer.parseInt((String) value);		setSize(new Dimension(size.width, height));	} else if (WIDTH_PROP.equals(propertyId)) {		int width = Integer.parseInt((String) value);		setSize(new Dimension(width, size.height));	} else if (FreeNoteConstants.BACKCOLOR.equals(propertyId)) {		setBackColor((RGB) value);	} else if (FreeNoteConstants.FORECOLOR.equals(propertyId)) {		setForeColor((RGB) value);	} else {		super.setPropertyValue(propertyId, value);	}}/** * Set the Size of this shape. * Will not modify the size if newSize is null. * @param newSize a non-null Dimension instance or null */public void setSize(Dimension newSize) {	if (newSize != null) {		size.setSize(newSize);		firePropertyChange(SIZE_PROP, null, size);	}}public RGB getBackColor() {	return backColor==null?backColor=new RGB(0,255,0):backColor;}public void setBackColor(RGB backColor) {	this.backColor = backColor;	firePropertyChange(FreeNoteConstants.BACKCOLOR, null, backColor);}public RGB getForeColor() {	return foreColor==null?foreColor=new RGB(0,0,0):foreColor;}public void setForeColor(RGB foreColor) {	this.foreColor = foreColor;	firePropertyChange(FreeNoteConstants.FORECOLOR, null, foreColor);}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -