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

79 lines
2.2 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.grid;
import java.awt.Dimension;
import com.fr.base.GraphHelper;
import com.fr.design.mainframe.DesignerUIModeConfig;
import com.fr.design.mainframe.ElementCasePane;
/**
* GridRow used to paint and edit grid row.
*
* @editor zhou
* @since 2012-3-22下午6:12:03
*/
public class GridRow extends GridHeader<Integer> {
private static final int MAX = 4;
private int adsorbHeight;
private GridRowMouseHandler gridRowMouseHandler;
public GridRow(int resolution) {
this(resolution, 0);
}
public GridRow(int resolution, int adsorbHeight) {
super(resolution);
this.adsorbHeight = adsorbHeight;
}
@Override
protected void initByConstructor() {
this.updateUI();
}
@Override
public Integer getDisplay(int index) {
return new Integer(index + 1);
}
@Override
public void updateUI() {
this.removeMouseListener(gridRowMouseHandler);
this.removeMouseMotionListener(gridRowMouseHandler);
gridRowMouseHandler = new GridRowMouseHandler(this, adsorbHeight);
this.addMouseListener(gridRowMouseHandler);
this.addMouseMotionListener(gridRowMouseHandler);
this.setUI(new GridRowUI(resolution));
}
/**
* Gets the preferred size.
*/
@Override
public Dimension getPreferredSize() {
ElementCasePane reportPane = this.getElementCasePane();
float time = (float) reportPane.getResolution() / DesignerUIModeConfig.getInstance().getScreenResolution();
if (!(reportPane.isRowHeaderVisible())) {
return new Dimension(0, 0);
}
int maxCharNumber = this.caculateMaxCharNumber(reportPane);
return new Dimension((int) (maxCharNumber * GraphHelper.getFontMetrics(this.getFont()).charWidth('M') * time), super.getPreferredSize().height);
}
/**
* Calculates max char number.
*/
private int caculateMaxCharNumber(ElementCasePane reportPane) {
int maxCharNumber = MAX;
maxCharNumber = Math.max(maxCharNumber, ("" + (reportPane.getGrid().getVerticalValue() + reportPane.getGrid().getVerticalExtent())).length() + 1);
return maxCharNumber;
}
}