steppart.java

来自「eclipse开发笔记」· Java 代码 · 共 172 行

JAVA
172
字号
package com.example.parts;

import java.beans.PropertyChangeEvent;
import java.util.Collections;
import java.util.List;

import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.ConnectionEditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;

import com.example.figures.BorderAnchor;
import com.example.figures.StepFigure;
import com.example.model.FNode;
import com.example.model.FStepModel;
import com.example.model.FSubTransModel;
import com.example.model.TreeItemModel;
import com.example.policies.NodeDirectEditPolicy;
import com.example.policies.StepEditPolicy;

/**
 * TODO 
 * @2006-12-30
 * @author xuli
 */
public class StepPart extends AbstractPart {

	public void performRequest(Request req) {

		if(req.getType().equals(RequestConstants.REQ_OPEN)){
			expandAction();
		}
	}

	private void expandAction(){
		FStepModel step = (FStepModel)this.getModel();
		if(step.isExpand()){
			step.setExpand(false);
			step.getRoot().hideAllChildVsb();
			step.getRoot().hide();
			step.collapse();
			this.refreshAll();
		}else{
			step.setExpand(true);
			step.getRoot().showAllChildVsb();
			step.getRoot().show();
			step.expand();
			this.refreshAll();
		}
	}

	public void propertyChange(PropertyChangeEvent evt) {
		super.propertyChange(evt);
		String pName = evt.getPropertyName();
		if (evt.getPropertyName().equals(FNode.PROP_LOCATION)){
			if(((FStepModel)this.getModel()).getLocation().x <((FSubTransModel)((SubTransModelPart)this.getParent()).getModel()).getLocation().x){
				Point loc = new Point(50,((FStepModel)this.getModel()).getLocation().y);
				((FStepModel)this.getModel()).setLocation(loc);
			}
			((SubTransModelPart)this.getParent()).refresh();
		}
		if(pName.equals(FStepModel.PRO_FIGURE)){
			this.refreshVisuals();
		}
		if(pName.equals(FStepModel.PRO_CHILD)){
			this.refreshChildren();  // important!!!
			this.refreshAll();
		}
		if(pName.equals(FStepModel.PROP_SIZE)){
			this.refreshChildren();  // important!!!
			this.refreshAll();
		}
	}

	protected IFigure createFigure() {
		return new StepFigure((FStepModel)this.getModel());
	}

	protected void createEditPolicies() {
		installEditPolicy(EditPolicy.COMPONENT_ROLE, new StepEditPolicy());
	}

	public void activate() {
		super.activate();
		if (isActive()) {
			return;
		}
		((FNode) getModel()).addPropertyChangeListener(this);
	}

	public void deactivate() {
		super.deactivate();
		if (!isActive()) {
			return;
		}
		((FNode) getModel()).removePropertyChangeListener(this);
	}

	protected void refreshVisuals() {
		refreshSubTransModel();
		StepFigure nf = (StepFigure) this.getFigure();
		FStepModel node = (FStepModel) getModel();
		Point loc = node.getLocation();
		Dimension size = node.getSize();
		Rectangle rectangle = new Rectangle(loc, size);
		nf.setName(((FNode) this.getModel()).getName());
		((GraphicalEditPart) getParent()).setLayoutConstraint(this, nf, rectangle);
		node.setRootLocation(nf.getLocation());

	}

	public void refreshSubTransModel(){
		this.getParent().refresh();
	}

	public void refreshAll(){
		this.refresh();
		TreeItemPart part = null;
		for(int i = 0; i < this.getChildren().size(); i++){
			part = (TreeItemPart)this.getChildren().get(i);
			part.refreshAll();
		}
	}
	/* (non-Javadoc)
	 * @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren()
	 */
	protected List getModelChildren() {

		return ((FStepModel)getModel()).getChildren();
	}

	protected TreeItemModel getStepRoot() {
		return (TreeItemModel) ((FStepModel)getModel()).getRoot();
	}

	protected List getModelSourceConnections() {
		if(((FStepModel)this.getModel()).isExpand()
				|| ((SubTransModelPart)this.getParent()).getState())
			return Collections.EMPTY_LIST;
		return getStepRoot().getAllOutgoings();
	}

	protected List getModelTargetConnections() {
		if(((FStepModel)this.getModel()).isExpand()
				|| ((SubTransModelPart)this.getParent()).getState())
			return Collections.EMPTY_LIST;
		return getStepRoot().getAllIncomings();
	}

	//*******************************
	public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) {
		return new BorderAnchor(getFigure());
	}

	public ConnectionAnchor getSourceConnectionAnchor(Request request) {
		return new BorderAnchor(getFigure());
	}

	public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) {
		return new BorderAnchor(getFigure());
	}

	public ConnectionAnchor getTargetConnectionAnchor(Request request) {
		return new BorderAnchor(getFigure());
	}
}

⌨️ 快捷键说明

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