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

📄 jfoperationalignment.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 JAVA
字号:
/**
 *    $Id:JFOperationAlignment.java $
 *
 *    Copyright 2004 ~ 2005  JingFei International Cooperation LTD. All rights reserved. *
 */
package com.jfimagine.jfgraph.shape.action;


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

import com.jfimagine.jfgraph.geom.JFPoint;
import com.jfimagine.jfgraph.shape.base.AbstractObject;
import com.jfimagine.jfgraph.shape.base.AbstractShape;
import com.jfimagine.jfgraph.shape.union.JFPage;

/**
 *  Class JFOperationAlignment is used to record an alignment operation.
 */
public class JFOperationAlignment extends JFOperationModifyPorts{
        
        /** A class used to record each moved object and there movements */
        class JFAlignment{
        	//An object to be moved.
        	private AbstractObject m_object;
		/**the offset of the object moved*/
		private double m_xOffset=0;
		private double m_yOffset=0;

		public AbstractObject getObject(){
			return m_object;
		}
		public double getXOffset(){
			return m_xOffset;
		}
		public double getYOffset(){
			return m_yOffset;
		}
		public JFAlignment(AbstractObject obj,double xOffset, double yOffset){
			m_object	=obj;
			m_xOffset	=xOffset;
			m_yOffset	=yOffset;
		}
	}
	
	/** A list for JFAlignment objects*/
	private List m_alignmentList	=new ArrayList();

	/** fetch the object list from m_alignmentList*/	
	private List getObjectListFromAlignmentList(){
		List l	=new ArrayList();
				
		Iterator it	=m_alignmentList.iterator();
		while (it!=null && it.hasNext()){
			JFAlignment align	=(JFAlignment)it.next();
			l.add(align.getObject());	
		}
		
		return l;
	}			
	
	/**  
	 *    Constructor.
	 *    @param page A page that used to do opeation.
	 *    @param obj The object has been moved(this object must be AbstractObject or a list of AbstractObject).
	 *    @param xOffset the x offset of the object moved
	 *    @param yOffset the y offset of the object moved.
	 */        
        public JFOperationAlignment(JFPage page){
        	m_page	=page;
		setActionId(JFOperation.OPER_ALIGNMENT);
	}

		
	/**  
	 *   Add a new object into this alignment action.
	 *   Note: An alignment action would always occure concurrently on two or more objects
	 *   But each object would have differnt movement, so we record movement for each 
	 *   object here.
	 */
	public void addAlignmentObject(AbstractObject obj, double xOffset, double yOffset){
		m_alignmentList.add(new JFAlignment(obj,xOffset,yOffset));
	}
	
	/**
	 *   After we added(addAlignmentObjects method) all the objects,
	 *   we need to call this method for finalize the operation.
	 */	
	public void finalizeAlignment(){
		
		List l	=getObjectListFromAlignmentList(); 
		setObjectList(l);
		//set the modify ports list, for furthur usages.		
		setModifyPortsList(l);
	}


	/** undo this operation
	 *  @return new objects selected
	 */
	public List undo(){
		Iterator it	=m_alignmentList.iterator();
		while (it!=null && it.hasNext()){
			JFAlignment align	=(JFAlignment)it.next();
			AbstractShape	aShape	=(AbstractShape)align.getObject();
			aShape.moveBy(-1 * align.getXOffset(), -1 * align.getYOffset());
		}

		//restore ports list first.
		restorePorts();
		moveRelationalPorts();
		
		return getObjectListFromAlignmentList();
	}


	/** redo this operation
	 *  @return new objects selected
	 */
	public List redo(){
		Iterator it	=m_alignmentList.iterator();
		while (it!=null && it.hasNext()){
			JFAlignment align	=(JFAlignment)it.next();
			AbstractShape	aShape	=(AbstractShape)align.getObject();
			aShape.moveBy(align.getXOffset(), align.getYOffset());
		}
		
		
		moveRelationalPorts();
		
		return getObjectListFromAlignmentList();
	}


}

⌨️ 快捷键说明

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