帆软报表设计器源代码。
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.
 
 
 
 

131 lines
3.8 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.poly;
import java.awt.Point;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
import com.fr.base.FRContext;
import com.fr.base.ScreenResolution;
import com.fr.base.chart.BaseChart;
import com.fr.base.chart.BaseChartCollection;
import com.fr.base.chart.BasePlot;
import com.fr.poly.creator.BlockCreator;
import com.fr.poly.creator.ChartBlockCreator;
import com.fr.poly.creator.ECBlockCreator;
import com.fr.poly.model.AddedData;
import com.fr.report.poly.PolyChartBlock;
import com.fr.report.poly.PolyECBlock;
import com.fr.report.poly.TemplateBlock;
import com.fr.stable.bridge.StableFactory;
/**
* @author richer
* @since 6.5.3 聚合报表设计界面工具类
*/
public class PolyUtils {
public static Map<Class, Class> blockMapCls = new HashMap<Class, Class>();
static {
blockMapCls.put(PolyECBlock.class, ECBlockCreator.class);
blockMapCls.put(PolyChartBlock.class, ChartBlockCreator.class);
}
public static BlockCreator createCreator(TemplateBlock block) {
Class cls = block.getClass();
Class clazz = blockMapCls.get(cls);
if (clazz == null) {
return null;
}
Constructor c = null;
try {
c = clazz.getConstructor(cls);
return (BlockCreator) c.newInstance(block);
} catch (Exception e) {
FRContext.getLogger().error(e.getMessage(), e);
}
return null;
}
public static BlockCreator createCreator(Class clazz) {
return createCreator(blockGenerate(clazz));
}
public static BlockCreator createCreator(BaseChart chart) {
BaseChartCollection cc = (BaseChartCollection)StableFactory.createXmlObject(BaseChartCollection.XML_TAG);
cc.addChart(chart);
TemplateBlock block = new PolyChartBlock(cc);
return createCreator(block);
}
private static TemplateBlock blockGenerate(Class clazz) {
TemplateBlock block = null;
try {
block = (TemplateBlock) clazz.newInstance();
} catch (Exception e) {
try {
BasePlot plot = (BasePlot)clazz.newInstance();
BaseChartCollection cc = (BaseChartCollection)StableFactory.createXmlObject(BaseChartCollection.XML_TAG);
BaseChart chart = (BaseChart)StableFactory.createXmlObject(BaseChart.XML_TAG);
chart.initChart(plot);
cc.addChart(chart);
block = new PolyChartBlock(cc);
} catch (InstantiationException e1) {
FRContext.getLogger().error(e1.getMessage(), e1);
} catch (IllegalAccessException e1) {
FRContext.getLogger().error(e1.getMessage(), e1);
}
}
return block;
}
public static Point convertPoint2Designer(PolyDesigner designer, Point p) {
int hh = designer.getHorizontalValue();
int vv = designer.getVerticalValue();
p.x += hh;
p.y += vv;
return p;
}
public static Point convertPoint2Designer(PolyDesigner designer, int x, int y) {
return convertPoint2Designer(designer, new Point(x, y));
}
public static int convertx2Designer(PolyDesigner designer, int x) {
return x += designer.getHorizontalValue();
}
public static int converty2Designer(PolyDesigner designer, int y) {
return y += designer.getVerticalValue();
}
/**
* 获取所处(x,y)位置的聚合块,如果没有,就返回null
* @param designer
* @param x
* @param y
* @return
*/
public static BlockCreator searchAt(PolyDesigner designer,int x, int y) {
AddedData addedData = designer.getAddedData();
for (int count = addedData.getAddedCount() - 1; count >= 0; count--) {
BlockCreator creator = addedData.getAddedAt(count);
float times = (float) designer.getResolution()/ScreenResolution.getScreenResolution();
int cx = (int) (creator.getX() * times);
int cy = (int) (creator.getY() * times);
int cw = (int) (creator.getWidth() * times);
int ch = (int) (creator.getHeight() * times);
if (x >= cx && x <= (cx + cw)) {
if(y >= cy && y <= (cy + ch)) {
return creator;
}
}
}
return null;
}
}