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

148 lines
3.4 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.poly.hanlder;
import java.awt.Point;
import java.awt.event.MouseEvent;
import com.fr.base.BaseUtils;
import com.fr.base.ScreenResolution;
import com.fr.base.vcs.DesignerMode;
import com.fr.general.ComparatorUtils;
import com.fr.poly.PolyDesigner;
import com.fr.poly.PolyDesigner.SelectionType;
import com.fr.poly.creator.BlockEditor;
import com.fr.poly.creator.ChartBlockEditor;
import com.fr.poly.creator.ECBlockEditor;
import com.fr.report.poly.PolyWorkSheet;
import com.fr.report.poly.TemplateBlock;
import com.fr.stable.unit.FU;
import com.fr.stable.unit.UNIT;
import com.fr.stable.unit.UnitRectangle;
/**
* @author richer
* @since 6.5.4 创建于2011-4-8 添加删除行
*/
public abstract class RowOperationMouseHandler<T extends BlockEditor> extends BlockOperationMouseHandler {
protected PolyDesigner designer;
private T editor;
private Point startPoint;
private UnitRectangle oldBounds;
private int resolution = ScreenResolution.getScreenResolution();
public RowOperationMouseHandler(PolyDesigner designer, T editor) {
this.designer = designer;
this.editor = editor;
}
protected T getTargetEditor() {
return editor;
}
protected boolean isEditorResized() {
return !ComparatorUtils.equals(editor.getValue().getBounds(), oldBounds);
}
/**
* 鼠标按下事件
*
* @param e 鼠标事件
*
* @date 2015-2-12-下午2:32:04
*
*/
public void mousePressed(MouseEvent e) {
if (DesignerMode.isAuthorityEditing()) {
designer.noAuthorityEdit();
}
startPoint = e.getPoint();
designer.setChooseType(SelectionType.BLOCK);
oldBounds = editor.getValue().getBounds();
}
/**
* 鼠标拖拽事件
*
* @param e 鼠标事件
*
* @date 2015-2-12-下午2:32:04
*
*/
public void mouseDragged(MouseEvent e) {
if (DesignerMode.isAuthorityEditing()) {
return;
}
TemplateBlock block = editor.getValue();
Point p = e.getPoint();
int delta = p.y - startPoint.y;
UnitRectangle rec = block.getBounds();
UNIT deltaUnit = FU.valueOfPix(delta, resolution);
rec.setHeight(rec.getHeight().add(deltaUnit));
block.setBounds(rec, this.getTarget());
}
protected PolyWorkSheet getTarget(){
return designer.getTarget();
}
public static class ECBlockRowOperationMouseHandler extends RowOperationMouseHandler<ECBlockEditor> {
public ECBlockRowOperationMouseHandler(PolyDesigner designer, ECBlockEditor editor) {
super(designer, editor);
}
/**
* 鼠标释放事件
*
* @param e 鼠标事件
*
* @date 2015-2-12-下午2:32:04
*
*/
public void mouseReleased(MouseEvent e) {
if (isEditorResized()) {
getTargetEditor().getValue().reCalculateBlockSize();
designer.fireTargetModified();
}
}
}
public static class ChartBlockRowOperationMouseHandler extends RowOperationMouseHandler<ChartBlockEditor> {
public ChartBlockRowOperationMouseHandler(PolyDesigner designer, ChartBlockEditor editor) {
super(designer, editor);
}
/**
* 鼠标按下事件
*
* @param e 鼠标事件
*
* @date 2015-2-12-下午2:32:04
*
*/
public void mousePressed(MouseEvent e) {
getTargetEditor().refreshChartComponent();
super.mousePressed(e);
}
/**
* 鼠标释放事件
*
* @param e 鼠标事件
*
* @date 2015-2-12-下午2:32:04
*
*/
public void mouseReleased(MouseEvent e) {
if (isEditorResized()) {
designer.fireTargetModified();
}
}
}
}