treeitempart.java

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

JAVA
177
字号
package com.example.parts;

import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import java.util.Iterator;
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.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;

import com.example.figures.BorderAnchor;
import com.example.figures.TreeItemFigure;
import com.example.model.FNode;
import com.example.model.FStepModel;
import com.example.model.TreeItemModel;
import com.example.policies.NodeGraphicalNodeEditPolicy;

/**
 * TODO 
 * @2006-12-31
 * @author xuli
 */
public class TreeItemPart extends AbstractPart {

	public void performRequest(Request req) {
		if(req.getType().equals(RequestConstants.REQ_OPEN)){
			expandAction();
		}
	}

	private void expandAction(){
		TreeItemModel m = (TreeItemModel)this.getModel();
		if(m.getExpand()== TreeItemModel.ITEM_EXPAND){
			m.setExpand(TreeItemModel.ITEM_COLLAPSED);
			m.hideAllChildVsb();
			((FStepModel)m.findRoot().getParent()).refreshRegion();
			StepPart step = (StepPart)this.findStepPart();
			if(step != null){
				step.refreshAll();
			}
		}else{
			if(m.getExpand() == TreeItemModel.ITEM_COLLAPSED){
				m.setExpand(TreeItemModel.ITEM_EXPAND);
				//m.setAllChildVsb(true);
				m.showAllChildVsb();
				((FStepModel)m.findRoot().getParent()).refreshRegion();
				StepPart step = (StepPart)this.findStepPart();
				if(step != null){
					step.refreshAll();
				}
			}
		}
	}

	public EditPart findStepPart(){
		EditPart step = this.getParent();
		if(step instanceof StepPart){
			return step;
		}else{
			if(step instanceof TreeItemPart){
				return ((TreeItemPart)step).findStepPart();
			}
		}
		return null;
	}

	public void activate() {
		super.activate();
		if (isActive()) {
			return;
		}
	}

	public void deactivate() {
		super.deactivate();
		if (!isActive()) {
			return;
		}
	}

	protected IFigure createFigure() {
		return new TreeItemFigure((TreeItemModel)this.getModel());
	}

	public IFigure getFigure() {
		return super.getFigure();
	}

	public void propertyChange(PropertyChangeEvent evt) {
		if (evt.getPropertyName().equals(FNode.PROP_LOCATION))
			refreshVisuals();
		else if (evt.getPropertyName().equals(FNode.PROP_NAME))
			refreshItemName();
		else if (evt.getPropertyName().equals(FNode.PROP_INPUTS))
			refreshTargetConnections();
		else if (evt.getPropertyName().equals(FNode.PROP_OUTPUTS))
			refreshSourceConnections();
	}
	protected void createEditPolicies() {
		TreeItemModel model = (TreeItemModel)this.getModel();
		if(model.getType() == TreeItemModel.TYPE_COLUMN){
			installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new NodeGraphicalNodeEditPolicy());
		}
	}
	
	protected List getModelChildren() {
		return ((TreeItemModel)getModel()).getChildren();
	}

	protected void refreshVisuals() {
		TreeItemFigure ti = (TreeItemFigure) this.getFigure();

		TreeItemModel node = (TreeItemModel) getModel();
		Point loc = node.getLocation();
		Dimension size = node.refreshRegion();
		ti.setName(node.getName());
		Rectangle rectangle = new Rectangle(loc, size);
		ti.setBounds(rectangle);
	}

	private void refreshItemName(){
		TreeItemFigure ti = (TreeItemFigure) this.getFigure();
		TreeItemModel node = (TreeItemModel) getModel();
		ti.setName(node.getName());
	}
	
	public void refreshAll(){
		refreshVisuals();
		refreshSourceConnections();
		refreshTargetConnections();
		TreeItemPart part = null;
		for(int i = 0; i < this.getChildren().size(); i++){
			part = (TreeItemPart)this.getChildren().get(i);
			part.refreshAll();
		}
	}
//	------------------------------------------------------------------------
	// Abstract methods from NodeEditPart

	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());
	}

	protected TreeItemModel getSubject() {
		return (TreeItemModel) getModel();
	}

	protected List getModelSourceConnections() {
		return getSubject().getShowOutgoingConnections();
	}

	protected List getModelTargetConnections() {
		return getSubject().getShowIncomingConnections();
	}

}

⌨️ 快捷键说明

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