📄 jfoperationtoback.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 + -