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

235 lines
7.9 KiB

/*
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved.
*/
package com.fr.design.headerfooter;
import com.fine.theme.icon.LazyIcon;
import com.fine.theme.light.ui.FineRoundBorder;
import com.fine.theme.utils.FineUIScale;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.ScaledEmptyBorder;
import com.fr.base.BaseUtils;
import com.fr.base.PaperSize;
import com.fr.base.ScreenResolution;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icombobox.UIComboBoxRenderer;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.page.ReportSettingsProvider;
import com.fr.report.core.ReportHF;
import com.fr.report.stable.ReportConstants;
import com.fr.stable.unit.FU;
import com.fr.stable.unit.INCH;
import com.fr.stable.unit.UNIT;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.util.Hashtable;
/**
* Edit header or footer(the object Header and Footer).
*/
public abstract class HeaderFooterPane extends BasicPane {
private Hashtable reportHFHash = new Hashtable();
private JList reportHFYypeList;
private int lastSelectedHFType = -1;
private UICheckBox defineCheckBox;
private HeaderFooterEditPane headerFooterEditPane;
private boolean isHeader;
/**
* init components.
*/
public HeaderFooterPane() {
this.setLayout(new BorderLayout(0, 4));
// Left pane
JPanel leftPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
this.add(leftPane, BorderLayout.WEST);
DefaultListModel defaultListModel = new DefaultListModel();
reportHFYypeList = new JList(defaultListModel);
reportHFYypeList.setCellRenderer(reportPageTypeRenderer);
reportHFYypeList
.addListSelectionListener(reportHFTypeSelectionListener);
reportHFYypeList.setBackground(FlatUIUtils.getUIColor("background.normal", Color.WHITE));
reportHFYypeList.setBorder(BorderFactory.createCompoundBorder(new FineRoundBorder(), new ScaledEmptyBorder(6, 2, 6, 2)));
JScrollPane hfTypeListScrollPane = new JScrollPane(reportHFYypeList);
leftPane.add(hfTypeListScrollPane, BorderLayout.CENTER);
defaultListModel.addElement(new Integer(
ReportConstants.REPORTPAGE_DEFAULT));
defaultListModel.addElement(new Integer(
ReportConstants.REPORTPAGE_FIRST));
defaultListModel
.addElement(new Integer(ReportConstants.REPORTPAGE_LAST));
defaultListModel
.addElement(new Integer(ReportConstants.REPORTPAGE_ODD));
defaultListModel
.addElement(new Integer(ReportConstants.REPORTPAGE_EVEN));
// CenterPane.
JPanel centerPane = FRGUIPaneFactory.createScaledBorderLayout_S_Pane(0, 10);
this.add(centerPane, BorderLayout.CENTER);
JPanel definePane = new JPanel(new BorderLayout());
centerPane.add(definePane, BorderLayout.NORTH);
defineCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Report_HF_Whether_To_Define_The_Selected_Type"), true); //是否定义选中的类型
definePane.add(defineCheckBox, BorderLayout.WEST);
defineCheckBox.setBorder(new ScaledEmptyBorder(0,10,0,0));
defineCheckBox.addChangeListener(defineChangeListener);
// HeaderFooterEditPane.
headerFooterEditPane = new HeaderFooterEditPane();
centerPane.add(headerFooterEditPane, BorderLayout.CENTER);
}
/**
* populate reportSettings
*
* @param reportSettings
*/
public void populate(ReportSettingsProvider reportSettings, boolean isHeader) {
headerFooterEditPane.populateReportSettings(reportSettings, isHeader);
}
/**
* update reportSettings
*/
public UNIT updateReportSettings() {
return headerFooterEditPane.updateReportSettings();
}
public void populate(Hashtable reportHFHash) {
this.reportHFHash = reportHFHash;
this.reportHFYypeList.setSelectedIndex(0);
}
public Hashtable update() {
Object selectObj = reportHFYypeList.getSelectedValue();
if (selectObj != null && selectObj instanceof Integer) {
if (defineCheckBox.isSelected()) {
reportHFHash.put(lastSelectedHFType,
headerFooterEditPane.update());
} else {
reportHFHash.remove(new Integer(lastSelectedHFType));
}
}
return reportHFHash;
}
ChangeListener defineChangeListener = new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
Object selectObj = reportHFYypeList.getSelectedValue();
if (selectObj == null || !(selectObj instanceof Integer)) {
return;
}
int currentReportHFType = (Integer) selectObj;
if (defineCheckBox.isSelected()) {
GUICoreUtils.setEnabled(headerFooterEditPane, true);
reportHFHash.put(currentReportHFType,
headerFooterEditPane.update());
headerFooterEditPane.enableIconToolPanel();
} else {
GUICoreUtils.setEnabled(headerFooterEditPane, false);
reportHFHash.remove(new Integer(currentReportHFType));
headerFooterEditPane.disableIconToolPanel();
}
reportHFYypeList.repaint();
}
};
ListSelectionListener reportHFTypeSelectionListener = new ListSelectionListener() {
public void valueChanged(ListSelectionEvent evt) {
Object selectObj = reportHFYypeList.getSelectedValue();
if (selectObj == null || !(selectObj instanceof Integer)) {
return;
}
int currentReportHFType = (Integer) selectObj;
if (currentReportHFType != lastSelectedHFType) {
// 需要保存上次选择的页面.
if (lastSelectedHFType != -1) {// last SelectedHFType
if (defineCheckBox.isSelected()) {
reportHFHash.put(lastSelectedHFType,
headerFooterEditPane.update());
} else {
reportHFHash.remove(new Integer(lastSelectedHFType));
}
}
lastSelectedHFType = currentReportHFType;
// Populate当前的.
Object reportHFObject = reportHFHash.get(new Integer(
currentReportHFType));
if (reportHFObject == null) {
defineCheckBox.setSelected(false);
} else {
defineCheckBox.setSelected(true);
}
headerFooterEditPane.populate((ReportHF) reportHFObject,
FU.getInstance(PaperSize.PAPERSIZE_A4.getWidth().toFU() - new INCH(0.75f).toFU() - new INCH(0.75f).toFU()).toPixD(ScreenResolution.getScreenResolution()),
0.53 * ScreenResolution.getScreenResolution());
// headerFooterEditPane.populate(null, eventMask, eventMask);
// 默认页面
if (currentReportHFType == ReportConstants.REPORTPAGE_DEFAULT) {
defineCheckBox.setSelected(true);
defineCheckBox.setEnabled(false);
} else {
defineCheckBox.setEnabled(true);
}
}
}
};
UIComboBoxRenderer reportPageTypeRenderer = new UIComboBoxRenderer() {
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
if (value instanceof Integer) {
int reportHFType = (Integer) value;
this.setIcon(new LazyIcon("logo"));
if (reportHFType == ReportConstants.REPORTPAGE_DEFAULT) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Default_Page"));
} else if (reportHFType == ReportConstants.REPORTPAGE_FIRST) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_First_Page"));
} else if (reportHFType == ReportConstants.REPORTPAGE_LAST) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Last_Page"));
} else if (reportHFType == ReportConstants.REPORTPAGE_ODD) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Odd_Page"));
} else if (reportHFType == ReportConstants.REPORTPAGE_EVEN) {
this.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_HF_Even_Page"));
}
if (reportHFHash != null) {
Object obj = reportHFHash.get(new Integer(reportHFType));
if (obj == null) {
this.setIcon(new LazyIcon("logo").disabled());
}
}
}
return this;
}
};
}