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

📄 jfoperationtoback.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 JAVA
字号:
/**
 *    $Id:JFOperationToBack.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 java.util.Comparator;
import java.util.Collections;

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.base.ObjectList;

import com.jfimagine.jfgraph.shape.union.JFPage;
import com.jfimagine.jfgraph.shape.union.JFLayer;
import com.jfimagine.jfgraph.shape.union.JFGroup;



/**
 *  Class JFOperationToBack is used to record a send to back operation.
 */
public class JFOperationToBack extends JFOperation{



	/** define an index-objectId  object list
	 * it is used to store index-objectId pairs.
	 */
	private List m_indexIdList	=new ArrayList();
	

	public static final int MOVETOWARDS_FRONT	=1;
	public static final int MOVETOWARDS_BACK	=2;
	
	private int m_moveTowards	=MOVETOWARDS_FRONT;

	/** an index-object id pair class*/
	private class Index_Id{
				
		private 	int m_index	=0;
		public int getIndex(){
			return m_index;
		}
		
		private 	int m_id=0;
		public int getId(){
			return m_id;
		}

		public Index_Id(int index, int objectId){
			m_index		=index;
			m_id		=objectId;
		}
	}
	
	/**an index comparator for the sort of indexIdList*/
	private class IndexComparator implements Comparator
   	{       
   		/** true if index is increased, false decreased. */
   		private boolean m_inc	=true;
   		public void setInc(boolean inc){
   			m_inc	=inc;
   		}
   			
   		// Compare two objects. Callback for sort.
   		// effectively returns a-b;
   		// e.g. +1 (or any +ve number) if a > b
   		// 0 if a == b
   		// -1 (or any -ve number) if a < b
   		public final int compare ( Object a, Object b)
      		{
			Index_Id ind1	=(Index_Id)a;
			Index_Id ind2	=(Index_Id)b;
			
			if (m_inc)				
				return ind1.getIndex()-ind2.getIndex();	      		
			else
				return ind2.getIndex()-ind1.getIndex();
      		}
   	}
	
	
	/**  
	 *    Constructor.
	 *    @param page A page that used to do opeation.
	 *    @param l An object collection to be sent to back.
	 */        
        public JFOperationToBack(JFPage page,List l, int moveTowards){
        	m_page	=page; 
        	if (moveTowards==MOVETOWARDS_FRONT)
			setActionId(JFOperation.OPER_BRINGTOFRONT);
		else
			setActionId(JFOperation.OPER_SENDTOBACK);
		m_moveTowards	=moveTowards;
		if (l==null || l.size()==0)
			return;

		try{
			ObjectList  objList =m_page.getCurrentLayer().getShapeList();
			Iterator it	=l.iterator();
			while (it!=null && it.hasNext()){
				AbstractObject obj	=(AbstractObject)it.next();
				int id		=obj.getObjectId();
				int index	=objList.getIndexByObjectId(id);
			
				m_indexIdList.add(new Index_Id(index,id));
				index++;
			}
		
		}catch(Exception e){
		}
	}


	/** undo this operation 
	 *  @return new objects selected
	 */
	public List undo(){

		List ret	=new ArrayList();  
		
		//sort the indexIdList as increase order or decrease order.		
		IndexComparator c=new IndexComparator();
		if (m_moveTowards==MOVETOWARDS_BACK){
			c.setInc(false);
		}else{
			c.setInc(true);
		}
		Collections.sort(m_indexIdList,c);
		
		//move the position of objects.		
		Iterator it	=m_indexIdList.iterator();
		while (it!=null && it.hasNext()){
			Index_Id	indexId	=(Index_Id)it.next();
			int index    	=indexId.getIndex();
			int id		=indexId.getId();


			m_page.getCurrentLayer().getShapeList().moveObject(id,index);
						
			AbstractObject obj=getObject(id,false);
			if (obj!=null)
				ret.add(obj);
		}
		
		return ret;
	
	}


	/** redo this operation
	 *  @return new objects selected
	 */
	public List redo(){

		List objList	=new ArrayList();
		
		Iterator it	=m_indexIdList.iterator();
		while (it!=null && it.hasNext()){
			Index_Id	indexId	=(Index_Id)it.next();
			int id		=indexId.getId();

			Object obj	=getObject(id,false);
			if (obj!=null)
				objList.add(obj);
		}

		if (m_moveTowards==MOVETOWARDS_BACK)
			m_page.sendToBack(objList);
		else
			m_page.bringToFront(objList);
		
		return objList;
	}


	
}

⌨️ 快捷键说明

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