帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

103 lines
2.9 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.design.cell.clipboard;
import com.fr.design.cell.FloatElementsProvider;
import com.fr.general.ComparatorUtils;
import com.fr.grid.selection.FloatSelection;
import com.fr.log.FineLoggerFactory;
import com.fr.report.cell.FloatElement;
import com.fr.report.elementcase.ElementCase;
import com.fr.report.elementcase.TemplateElementCase;
import com.fr.stable.unit.FU;
import com.fr.stable.unit.OLDPIX;
import java.util.Iterator;
/**
* The clip of Float Element.
*/
public class FloatElementsClip implements Cloneable, java.io.Serializable,FloatElementsProvider {
private FloatElement floatEl;
public FloatElementsClip(FloatElement floatEl) {
this.floatEl = floatEl;
}
/**
* 悬浮元素的粘贴
*
* @param ec 单元格
* @return 粘贴的悬浮元素
*/
public FloatSelection pasteAt(TemplateElementCase ec) {
if (floatEl == null) {
return null;
}
FloatElement ret;
try {
ret = (FloatElement)this.floatEl.clone();
} catch (CloneNotSupportedException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
return null;
}
while (ec.getFloatElement(ret.getName()) != null) {
ret.setName(ret.getName() + "-Copy");
}
while (true) {
if (isContainSameBoundFloatElement(ec, ret)) {
ret.setTopDistance(FU.getInstance(ret.getTopDistance().toFU() + new OLDPIX(50).toFU()));
ret.setLeftDistance(FU.getInstance(ret.getLeftDistance().toFU() + new OLDPIX(50).toFU()));
} else {
break;
}
}
ec.addFloatElement(ret);
return new FloatSelection(ret.getName());
}
/**
* Contain same location and bounds FloatElement.
*/
private static boolean isContainSameBoundFloatElement(ElementCase report, FloatElement oFloatElement) {
if (oFloatElement == null) {
return false;
}
Iterator flotIt = report.floatIterator();
while (flotIt.hasNext()) {
FloatElement tmpFloatElement = (FloatElement) flotIt.next();
if (hasSameDistance(tmpFloatElement,oFloatElement)) {
return true;
}
}
return false;
}
private static boolean hasSameDistance(FloatElement tmpFloatElement,FloatElement oFloatElement){
return (ComparatorUtils.equals(tmpFloatElement.getTopDistance(), oFloatElement.getTopDistance())
&& ComparatorUtils.equals(tmpFloatElement.getLeftDistance(), oFloatElement.getLeftDistance())
&& ComparatorUtils.equals(tmpFloatElement.getWidth(), oFloatElement.getWidth())
&& ComparatorUtils.equals(tmpFloatElement.getHeight(), oFloatElement.getHeight()));
}
/**
* Clone.
*/
@Override
public Object clone() throws CloneNotSupportedException {
FloatElementsClip cloned = (FloatElementsClip) super.clone();
if (floatEl != null) {
cloned.floatEl = (FloatElement)this.floatEl.clone();
}
return cloned;
}
}