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

📄 containerteditpart.java

📁 对eclipse gef进行封装,可以生成图形化编辑器
💻 JAVA
字号:
/*******************************************************************************
 * $Header: /cvsroot/EOS6/work_dir/niegy/com.primeton.studio.gef.ui/src/com/primeton/studio/gef/ui/parts/ContainertEditPart.java,v 1.5 2006/12/30 02:45:04 niegy Exp $
 * $Revision: 1.5 $
 * $Date: 2006/12/30 02:45:04 $
 *
 *==============================================================================
 *
 * Copyright (c) 2001-2006 Primeton Technologies, Ltd.
 * All rights reserved.
 * 
 * Created on 2006-11-17
 *******************************************************************************/


package com.primeton.studio.gef.ui.parts;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.NodeEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.commands.CommandStack;

import com.primeton.studio.gef.core.CorePackage;
import com.primeton.studio.gef.core.Location;
import com.primeton.studio.gef.core.NodeElement;
import com.primeton.studio.gef.core.Size;
import com.primeton.studio.gef.core.TNodeType;
import com.primeton.studio.gef.ui.Constants;
import com.primeton.studio.gef.ui.GefUiPluginImages;
import com.primeton.studio.gef.ui.commands.CollapsedCommand;
import com.primeton.studio.gef.ui.editor.AbstractGraphicalEditor;
import com.primeton.studio.gef.ui.figure.ContainertFigure;
import com.primeton.studio.gef.ui.ui.policy.NodeXYLayoutEditPolicy;

/**
 * TODO 此处填写 class 信息
 *
 * @author niegy (mailto:niegy@primeton.com)
 */
/*
 * 修改历史
 * $Log: ContainertEditPart.java,v $
 * Revision 1.5  2006/12/30 02:45:04  niegy
 * 重构代码
 *
 * Revision 1.4  2006/12/05 05:18:59  niegy
 * 修改模型,增加连线的扩展点
 *
 * Revision 1.3  2006/11/23 02:42:21  niegy
 * table
 *
 * Revision 1.2  2006/11/22 07:07:38  niegy
 * 增加table
 *
 * Revision 1.1  2006/11/18 12:13:53  niegy
 * 增加容器模型
 * 
 */
public class ContainertEditPart extends NodeEditPartEx {

	private CommandStack fCommandStack = null;
	/**
	 * @param id
	 */
	public ContainertEditPart(AbstractGraphicalEditor editor) {
		super(editor);
		// TODO Auto-generated constructor stub
		fCommandStack = editor.getCommandStack();
	}

	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#performRequest(org.eclipse.gef.Request)
	 */
	
	public void performRequest(Request req) {
		// TODO Auto-generated method stub
		super.performRequest(req);
		 if (req.getType() == RequestConstants.REQ_OPEN){
//			 getCastedModel().setCollapsed(!getCastedModel().isCollapsed());
			 CollapsedCommand command = new CollapsedCommand(getCastedModel());
			 fCommandStack.execute(command);
		 }
	}

	/* (non-Javadoc)
	 * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getContentPane()
	 */
	
	public IFigure getContentPane() {
		// TODO Auto-generated method stub
		return ((ContainertFigure) getFigure()).getPaneFigure();
	}

	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#createFigureForModel()
	 */
	
	protected IFigure createFigureForModel() {
		// TODO Auto-generated method stub
		 return new ContainertFigure();
	}

	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#refreshVisuals()
	 */
	
	protected void refreshVisuals() {
		// TODO Auto-generated method stub
		super.refreshVisuals();
		
		if(getCastedModel().getNodeType().getValue()==TNodeType.PARENT ){
			if(getCastedModel().isCollapsed())
			{
				  NodeElement nodeElement = (NodeElement) getModel();
				  Location loc = nodeElement.getLocation();
			      Rectangle rectangle = new Rectangle(loc.getX(),loc.getY(),
			    		  Constants.COLLAPSED_PARENT_WIDTH,Constants.COLLAPSED_PARENT_HEIGHT);
			      ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), rectangle);
			}
			else{
				 NodeElement nodeElement = (NodeElement) getModel();
				 Location loc = nodeElement.getLocation();
				 Size size = nodeElement.getSize();
			      Rectangle rectangle = new Rectangle(loc.getX(),loc.getY(),
			    		  size.getWidth(),size.getHeight());
			      ((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), rectangle);
			}
		}
			
				
	
		ContainertFigure figure = (ContainertFigure) getFigure();
	    figure.setName(((NodeElement) this.getModel()).getName());
	        if (!getCastedModel().isCollapsed()) {
	            figure.setIcon(GefUiPluginImages.IMG_FILE);
	        } else {
	            figure.setIcon(GefUiPluginImages.IMG_FOLDER);
	        }
	}

	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#createEditPolicies()
	 */
	
	protected void createEditPolicies() {
		// TODO Auto-generated method stub
		super.createEditPolicies();
		installEditPolicy(EditPolicy.LAYOUT_ROLE,  new NodeXYLayoutEditPolicy(getCastedModel()));
	}

	/* (non-Javadoc)
	 * @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren()
	 */
	
	protected List getModelChildren() {
		// TODO Auto-generated method stub
		return getCastedModel().getNodes();
	}

	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#notifyChanged(org.eclipse.emf.common.notify.Notification)
	 */
	
	public void notifyChanged(Notification notification) {
		// TODO Auto-generated method stub
		 int type = notification.getEventType();
	        int featureId = notification.getFeatureID(CorePackage.class);
	        switch(type) {
	        case Notification.SET:
	            switch(featureId) {
	            case CorePackage.NODE_ELEMENT__COLLAPSED:
	            	ContainertFigure figure = ((ContainertFigure) getFigure());
	                  if (!getCastedModel().isCollapsed()) {
	                      figure.add(figure.getPaneFigure());
	                  } else {
	                      figure.remove(figure.getPaneFigure());
	                  }
	                refreshChildConnections(this);
	            	refreshVisuals();
	            	refreshSourceConnections();
	                refreshTargetConnections();
	              
	                break;
	            }
	        case  Notification.ADD:
	        case Notification.REMOVE:
	        	 refreshChildren();
	        	 break;
	        }
		super.notifyChanged(notification);
	}

	private void refreshChildConnections(NodeEditPartEx editpart){
		 for (Iterator iter = editpart.getChildren().iterator(); iter.hasNext();) {
         		Object element = iter.next();
				if(element instanceof NodeEditPartEx){
					((NodeEditPartEx)element).refreshVisuals();
					((NodeEditPartEx)element).refreshSourceConnections();
					((NodeEditPartEx)element).refreshTargetConnections();
					refreshChildConnections((NodeEditPartEx)element);
				}
			}
	}
	
	private List getVisibleSourceConnections(){
		 List l = new ArrayList();
         l.addAll(getCastedModel().getSourceConnections());
         for (Iterator iter = getCastedModel().getNodes().iterator(); iter.hasNext();) {
         	NodeElement nodeElement = (NodeElement) iter.next();
         	int nodeX = getCastedModel().getLocation().getX() + nodeElement.getLocation().getX()+nodeElement.getSize().getWidth();
         	int parentY = getCastedModel().getLocation().getX()+getCastedModel().getSize().getWidth();
         	if(nodeX>parentY)
         		l.addAll(nodeElement.getSourceConnections());
         }
         return l;
	}
	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#getModelSourceConnections()
	 */
	
	protected List getModelSourceConnections() {
		// TODO Auto-generated method stub		
		Object obj = getParent().getModel();
		boolean isCollapsed = false;
		if(obj instanceof NodeElement){
			isCollapsed = ((NodeElement)obj).isCollapsed();
		}
		if(!isCollapsed){
			 if (!getCastedModel().isCollapsed()) {			 
				 return super.getModelSourceConnections();
		        } else {
		            List l = new ArrayList();
		            addModelSourceConnections(l,getCastedModel());
//		            l.addAll(getCastedModel().getSourceConnections());
//		            for (Iterator iter = getCastedModel().getNodes().iterator(); iter.hasNext();) {
//		            	Node node = (Node) iter.next();
//		                l.addAll(node.getSourceConnections());
//		            }
		            return l;
		        }
		}else{
			 return Collections.EMPTY_LIST;
		}
	}

	private void addModelSourceConnections(List l,NodeElement nodeElement){
		 l.addAll(nodeElement.getSourceConnections());
		 for (Iterator iter = nodeElement.getNodes().iterator(); iter.hasNext();) {
			NodeElement element = (NodeElement) iter.next();
			addModelSourceConnections(l,element);
		}
	}
	
	/* (non-Javadoc)
	 * @see com.primeton.studio.gef.ui.parts.NodeEditPartEx#getModelTargetConnections()
	 */
	
	protected List getModelTargetConnections() {
		// TODO Auto-generated method stub
		Object obj = getParent().getModel();
		boolean isCollapsed = false;
		if(obj instanceof NodeElement){
			isCollapsed = ((NodeElement)obj).isCollapsed();
		}
		if(!isCollapsed){
			 if (!getCastedModel().isCollapsed()) {
				 return super.getModelTargetConnections();
		        } else {
		            List l = new ArrayList();
		            addModelTargetConnections(l,getCastedModel());
//		            for (Iterator iter = getCastedModel().getNodes().iterator(); iter.hasNext();) {
//		            	Node node = (Node) iter.next();
//		                l.addAll(node.getTargetConnections());
//		            }
		            return l;
		        }
		}else{
			 return Collections.EMPTY_LIST;
		}
	}

	
	private void addModelTargetConnections(List l,NodeElement nodeElement){
		 l.addAll(nodeElement.getTargetConnections());
		 for (Iterator iter = nodeElement.getNodes().iterator(); iter.hasNext();) {
			NodeElement element = (NodeElement) iter.next();
			addModelTargetConnections(l,element);
		}
	}
	
}

⌨️ 快捷键说明

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