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

170 lines
5.4 KiB

package com.fr.poly;
import com.fr.base.BaseUtils;
import com.fr.base.chart.BaseChart;
import com.fr.base.chart.BaseChartGetter;
import com.fr.base.chart.BaseChartNameID;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.ChartTypeInterfaceManager;
import com.fr.design.constants.UIConstants;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.itooltip.MultiLineToolTip;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.dnd.SerializableTransferable;
import com.fr.log.FineLoggerFactory;
import com.fr.report.poly.PolyECBlock;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.JToolTip;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragSource;
import java.awt.dnd.DragSourceDragEvent;
import java.awt.dnd.DragSourceDropEvent;
import java.awt.dnd.DragSourceEvent;
import java.awt.dnd.DragSourceListener;
import java.io.Serializable;
/**
* 拖动聚合块的那个竖的动作条
*
* @editor zhou
* @since 2012-3-23下午3:42:10
*/
public class PolyComponentsBar extends JToolBar {
private SerIcon[] serIcons;
private static final int MAX_BAR_NUM = 15;
public PolyComponentsBar() {
setOrientation(SwingConstants.VERTICAL);
setBorder(BorderFactory.createEmptyBorder(4, 4, 0, 4));
setFloatable(false);
setBackground(UIConstants.TOOLBARUI_BACKGROUND);
setLayout(FRGUIPaneFactory.create1ColumnGridLayout());
BaseChartNameID[] typeName = BaseChartGetter.getStaticAllChartBaseNames();
int typeLen = typeName.length < MAX_BAR_NUM ? typeName.length : MAX_BAR_NUM;
serIcons = new SerIcon[typeLen + 1];
serIcons[0] = new SerIcon(
PolyECBlock.class,
Toolkit.i18nText("Fine-Design_Report_Poly_Report_Block"),
"com/fr/design/images/poly/toolbar/Poly-Report_Block.png"
);
this.add(serIcons[0]);
for (int i = 0; i < typeLen; i++) {
BaseChart[] rowChart = BaseChartGetter.getStaticChartTypes(typeName[i].getPlotID());
String iconPath = ChartTypeInterfaceManager.getInstance().getIconPath(typeName[i].getPlotID());
serIcons[i + 1] = new SerIcon(rowChart[0], Toolkit.i18nText(typeName[i].getName()), iconPath);
this.add(serIcons[i + 1]);
}
}
/**
* 设置是否可用状态
*/
public void checkEnable() {
for (SerIcon serIcon : serIcons) {
serIcon.setEnabled(!DesignerMode.isAuthorityEditing());
}
}
private class SerIcon extends UIButton implements DragGestureListener, DragSourceListener {
private DragSource dragSource;
private Serializable serializable;
/**
* @param serializable s
* @param text 按钮名
* @param iconPath 图标路径
*/
public SerIcon(Serializable serializable, String text, String iconPath) {
super(BaseUtils.readIcon(iconPath));
this.serializable = serializable;
this.setToolTipText(text);
this.set4ToolbarButton();
dragSource = new DragSource();
dragSource.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(getIcon().getIconWidth(), getIcon().getIconHeight());
}
@Override
public JToolTip createToolTip() {
MultiLineToolTip tip = new MultiLineToolTip();
tip.setComponent(this);
tip.setOpaque(false);
return tip;
}
@Override
public void dragGestureRecognized(DragGestureEvent dge) {
Transferable t = new SerializableTransferable(serializable);
dragSource.startDrag(dge, DragSource.DefaultCopyDrop, t, this);
getModel().setArmed(false);
getModel().setRollover(false);
repaint();
}
@Override
public void dragEnter(DragSourceDragEvent dsde) {
}
@Override
public void dragOver(DragSourceDragEvent dsde) {
}
@Override
public void dropActionChanged(DragSourceDragEvent dsde) {
}
@Override
public void dragExit(DragSourceEvent dse) {
}
@Override
public void dragDropEnd(DragSourceDropEvent dsde) {
}
}
/**
* 测试下
*
* @param args 参数
*/
public static void main(String... args) {
try {
UIManager.setLookAndFeel(new WindowsLookAndFeel());
} catch (UnsupportedLookAndFeelException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
JFrame f = new JFrame();
JPanel p = (JPanel) f.getContentPane();
p.setLayout(FRGUIPaneFactory.createBorderLayout());
PolyComponentsBar pbp = new PolyComponentsBar();
p.add(pbp, BorderLayout.CENTER);
f.setSize(400, 300);
f.setVisible(true);
}
}