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