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.
1046 lines
49 KiB
1046 lines
49 KiB
/* |
|
* Copyright(c) 2001-2010, FineReport Inc, All Rights Reserved. |
|
*/ |
|
package com.fr.design.report; |
|
|
|
import java.awt.BorderLayout; |
|
import java.awt.Color; |
|
import java.awt.Component; |
|
import java.awt.Dimension; |
|
import java.awt.FlowLayout; |
|
import java.awt.FontMetrics; |
|
import java.awt.Graphics; |
|
import java.awt.Graphics2D; |
|
import java.awt.Image; |
|
import java.awt.event.ActionEvent; |
|
import java.awt.event.ActionListener; |
|
import java.awt.event.FocusAdapter; |
|
import java.awt.event.FocusEvent; |
|
import java.awt.event.ItemEvent; |
|
import java.awt.event.ItemListener; |
|
|
|
import javax.swing.*; |
|
|
|
import com.fr.base.i18n.BidiUtils; |
|
import com.fr.page.PaperSettingProvider; |
|
import com.fr.page.ReportSettingsProvider; |
|
import com.fr.design.gui.frpane.UITabbedPane; |
|
import com.fr.design.gui.ibutton.UIRadioButton; |
|
import com.fr.design.gui.ilable.UILabel; |
|
|
|
import javax.swing.event.ChangeEvent; |
|
import javax.swing.event.ChangeListener; |
|
import javax.swing.event.DocumentEvent; |
|
import javax.swing.event.DocumentListener; |
|
import javax.swing.text.NumberFormatter; |
|
|
|
import com.fr.base.BaseUtils; |
|
import com.fr.base.Margin; |
|
import com.fr.base.PaperSize; |
|
import com.fr.base.Utils; |
|
import com.fr.design.DesignerEnvManager; |
|
import com.fr.design.gui.icheckbox.UICheckBox; |
|
import com.fr.design.gui.icombobox.UIComboBox; |
|
import com.fr.design.gui.icombobox.UIComboBoxRenderer; |
|
import com.fr.design.gui.ispinner.UIBasicSpinner; |
|
import com.fr.design.gui.ispinner.UISpinner; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.dialog.BasicPane; |
|
import com.fr.general.ComparatorUtils; |
|
|
|
import com.fr.report.core.ReportUtils; |
|
import com.fr.report.report.Report; |
|
import com.fr.report.stable.ReportConstants; |
|
import com.fr.report.stable.ReportSettings; |
|
import com.fr.stable.Constants; |
|
import com.fr.stable.CoreConstants; |
|
import com.fr.stable.unit.CM; |
|
import com.fr.stable.unit.INCH; |
|
import com.fr.stable.unit.MM; |
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
|
|
/** |
|
* @author richer |
|
* @since 6.5.5 创建于2011-6-14 页面设置面板 |
|
*/ |
|
public class PageSetupPane extends BasicPane { |
|
private PagePane pagePane; |
|
private OtherPane otherPane; |
|
private UILabel zeroMarginWarn; |
|
private static final String E = "E"; |
|
|
|
public PageSetupPane() { |
|
this.initComponents(); |
|
} |
|
|
|
private void initComponents() { |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
UITabbedPane centerTabbedPane = new UITabbedPane(); |
|
this.add(centerTabbedPane, BorderLayout.CENTER); |
|
|
|
pagePane = new PagePane(); |
|
otherPane = new OtherPane(); |
|
centerTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Page"), pagePane); |
|
centerTabbedPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Other"), otherPane); |
|
BidiUtils.applyOrientationByLocale(this); |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Page_Setup"); |
|
} |
|
|
|
/** |
|
* Populate. |
|
* |
|
* @param report the populate rpt. |
|
*/ |
|
public void populate(Report report, int unitType) { |
|
if (report == null) { |
|
return; |
|
} |
|
|
|
this.pagePane.populate(report, unitType); |
|
this.otherPane.populate(report); |
|
} |
|
|
|
/** |
|
* Update. |
|
* |
|
* @param report the updated rpt. |
|
*/ |
|
public void update(Report report) { |
|
if (report == null) { |
|
return; |
|
} |
|
|
|
this.pagePane.update(report); |
|
this.otherPane.update(report); |
|
} |
|
|
|
private class PagePane extends BasicPane { |
|
|
|
private UIRadioButton portraitRadioButton; |
|
private UIRadioButton landscapeRadioButton; |
|
|
|
private UIRadioButton predefinedRadioButton; |
|
private UIRadioButton customRadioButton; |
|
|
|
private UIComboBox predefinedComboBox; |
|
|
|
private UIBasicSpinner paperWidthSpinner; |
|
private UIBasicSpinner paperHeightSpinner; |
|
private UIComboBox switchInch; |
|
|
|
private UnitFieldPane marginTopUnitFieldPane; |
|
private UnitFieldPane marginLeftUnitFieldPane; |
|
private UnitFieldPane marginBottomUnitFieldPane; |
|
private UnitFieldPane marginRightUnitFieldPane; |
|
|
|
private UnitFieldPane headerUnitFieldPane; |
|
private UnitFieldPane footerUnitFieldPane; |
|
|
|
// private JSpinner resolutionSpinner; |
|
|
|
private ShowPagePane showPagePane; |
|
|
|
private UnitFieldPane.UnitLabel unitLabel; |
|
|
|
private int unitType; |
|
private Report report; |
|
|
|
public PagePane() { |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
JPanel defaultPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); |
|
this.add(defaultPane, BorderLayout.NORTH); |
|
JPanel twoPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane(); |
|
twoPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
|
JPanel orientationPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Page_Setup_Orientation")); |
|
JPanel innerorientationPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); |
|
orientationPane.add(innerorientationPane); |
|
twoPane.add(orientationPane); |
|
|
|
JPanel portraitpanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
portraitRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Portrait")); |
|
portraitRadioButton.setMnemonic('t'); |
|
portraitpanel.add(portraitRadioButton); |
|
innerorientationPane.add(portraitpanel); |
|
portraitRadioButton.addActionListener(previewListener); |
|
|
|
JPanel landscapepanel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
landscapeRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Landscape")); |
|
innerorientationPane.add(landscapepanel); |
|
landscapeRadioButton.setMnemonic('L'); |
|
landscapepanel.add(landscapeRadioButton); |
|
landscapeRadioButton.addActionListener(previewListener); |
|
|
|
ButtonGroup layoutButtonGroup = new ButtonGroup(); |
|
layoutButtonGroup.add(portraitRadioButton); |
|
layoutButtonGroup.add(landscapeRadioButton); |
|
|
|
portraitRadioButton.setSelected(true); |
|
|
|
JPanel spp = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview")); |
|
showPagePane = new ShowPagePane(); |
|
spp.add(showPagePane); |
|
defaultPane.add(spp); |
|
defaultPane.add(twoPane); |
|
|
|
// paper size |
|
JPanel paperSizePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Paper_Size")); |
|
JPanel innerpaperSizePane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); |
|
paperSizePane.add(innerpaperSizePane); |
|
defaultPane.add(paperSizePane); |
|
|
|
|
|
predefinedRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Predefined") + ":"); |
|
predefinedRadioButton.setMnemonic('P'); |
|
predefinedRadioButton.addActionListener(previewListener); |
|
|
|
|
|
customRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom") + ":"); |
|
customRadioButton.setMnemonic('C'); |
|
customRadioButton.addActionListener(previewListener); |
|
|
|
predefinedComboBox = new UIComboBox(); |
|
|
|
paperWidthSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); |
|
((JSpinner.DefaultEditor) paperWidthSpinner.getEditor()).getTextField().setColumns(7); |
|
paperHeightSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); |
|
((JSpinner.DefaultEditor) paperHeightSpinner.getEditor()).getTextField().setColumns(7); |
|
|
|
JFormattedTextField txt = ((JSpinner.NumberEditor) paperWidthSpinner.getEditor()).getTextField(); |
|
((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false); |
|
txt = ((JSpinner.NumberEditor) paperHeightSpinner.getEditor()).getTextField(); |
|
((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false); |
|
|
|
|
|
unitLabel = new UnitFieldPane.UnitLabel(Constants.UNIT_MM, paperHeightSpinner.getPreferredSize().height); |
|
|
|
String[] inch = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_MM"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_INCH")}; |
|
switchInch = new UIComboBox(inch); |
|
switchInch.setEditable(false); |
|
switchInch.setSize(paperHeightSpinner.getPreferredSize().width, paperHeightSpinner.getPreferredSize().height); |
|
switchInch.setSelectedIndex(unitType); |
|
switchInch.addActionListener(switchInchListener); |
|
|
|
predefinedComboBox.setRenderer(paperSizeCellRenderere); |
|
predefinedComboBox.addItemListener(paperSizeItemListener); |
|
|
|
|
|
((JSpinner.DefaultEditor) paperWidthSpinner.getEditor()).getTextField().getDocument().addDocumentListener(customTextListener); |
|
((JSpinner.DefaultEditor) paperHeightSpinner.getEditor()).getTextField().getDocument().addDocumentListener(customTextListener); |
|
|
|
paperWidthSpinner.addChangeListener(previewListener2); |
|
paperHeightSpinner.addChangeListener(previewListener2); |
|
|
|
for (int i = 0; i < ReportConstants.PaperSizeNameSizeArray.length; i++) { |
|
Object[] tmpPaperSizeNameArray = ReportConstants.PaperSizeNameSizeArray[i]; |
|
predefinedComboBox.addItem(tmpPaperSizeNameArray[1]); |
|
} |
|
|
|
// tow radio buttons. |
|
JPanel radioButtonPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
innerpaperSizePane.add(radioButtonPane); |
|
|
|
radioButtonPane.add(predefinedRadioButton); |
|
radioButtonPane.add(predefinedComboBox); |
|
|
|
ButtonGroup paperSizeRadioButtonGroup = new ButtonGroup(); |
|
paperSizeRadioButtonGroup.add(predefinedRadioButton); |
|
paperSizeRadioButtonGroup.add(customRadioButton); |
|
|
|
// size and textfields. |
|
JPanel paperSizeRightPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
innerpaperSizePane.add(paperSizeRightPane); |
|
|
|
paperSizeRightPane.add(customRadioButton); |
|
paperSizeRightPane.add(paperWidthSpinner); |
|
paperSizeRightPane.add(new UILabel("x")); |
|
paperSizeRightPane.add(paperHeightSpinner); |
|
paperSizeRightPane.add(switchInch); |
|
|
|
|
|
// peter:设置边距.. |
|
JPanel outermarginPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Margin")); |
|
JPanel marginPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_M_Pane(); |
|
outermarginPane.add(marginPane); |
|
twoPane.add(outermarginPane); |
|
|
|
StringBuffer temp = new StringBuffer(); |
|
for (int i = 0; i < 11; i++) { |
|
temp.append(" "); |
|
} |
|
zeroMarginWarn = new UILabel("<html><body>" + temp + "<br><br></html></body>"); |
|
zeroMarginWarn.setForeground(Color.RED); |
|
|
|
// left |
|
JPanel marginLeftPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); |
|
marginPane.add(marginLeftPane); |
|
|
|
JPanel marginLeftTextPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
marginLeftPane.add(marginLeftTextPane); |
|
marginLeftTextPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Top_Duplicate") + ":")); |
|
marginTopUnitFieldPane = new UnitFieldPane(Constants.UNIT_MM); |
|
marginLeftTextPane.add(marginTopUnitFieldPane); |
|
JPanel marginLeftUnitPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
marginLeftPane.add(marginLeftUnitPane); |
|
marginLeftUnitPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Bottom") + ":")); |
|
marginBottomUnitFieldPane = new UnitFieldPane(Constants.UNIT_MM); |
|
marginLeftUnitPane.add(marginBottomUnitFieldPane); |
|
|
|
// right |
|
JPanel marginRightPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); |
|
marginPane.add(marginRightPane); |
|
|
|
// peter:这个一个垂直的上下的字符panel. |
|
JPanel marginRightTextPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
marginRightPane.add(marginRightTextPane); |
|
marginRightTextPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Left") + ":")); |
|
marginLeftUnitFieldPane = new UnitFieldPane(Constants.UNIT_MM); |
|
marginRightTextPane.add(marginLeftUnitFieldPane); |
|
|
|
JPanel marginRightUnitPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
marginRightPane.add(marginRightUnitPane); |
|
marginRightUnitPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Right") + ":")); |
|
marginRightUnitFieldPane = new UnitFieldPane(Constants.UNIT_MM); |
|
marginRightUnitPane.add(marginRightUnitFieldPane); |
|
|
|
marginTopUnitFieldPane.getTextField().addFocusListener(fa); |
|
marginBottomUnitFieldPane.getTextField().addFocusListener(fa); |
|
marginLeftUnitFieldPane.getTextField().addFocusListener(fa); |
|
marginRightUnitFieldPane.getTextField().addFocusListener(fa); |
|
|
|
marginPane.add(zeroMarginWarn); |
|
|
|
// header and footer |
|
JPanel outhfHeightPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Height")); |
|
JPanel hfHeightPane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); |
|
defaultPane.add(outhfHeightPane); |
|
outhfHeightPane.add(hfHeightPane); |
|
|
|
// header height. |
|
JPanel headerHeightPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
hfHeightPane.add(headerHeightPane); |
|
headerHeightPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Header") + ":")); |
|
|
|
headerUnitFieldPane = new UnitFieldPane(Constants.UNIT_MM); |
|
headerHeightPane.add(headerUnitFieldPane); |
|
|
|
// footer height. |
|
JPanel footerHeightPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
hfHeightPane.add(footerHeightPane); |
|
footerHeightPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Footer") + ":")); |
|
|
|
footerUnitFieldPane = new UnitFieldPane(Constants.UNIT_MM); |
|
footerHeightPane.add(footerUnitFieldPane); |
|
|
|
// print gridlines. |
|
JPanel printOptionPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); |
|
defaultPane.add(printOptionPane); |
|
printOptionPane.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 0)); |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return "page"; |
|
} |
|
|
|
private ActionListener previewListener = new ActionListener() { |
|
public void actionPerformed(ActionEvent e) { |
|
previewShowPagePane(); |
|
} |
|
}; |
|
|
|
private ChangeListener previewListener2 = new ChangeListener() { |
|
public void stateChanged(ChangeEvent e) { |
|
previewShowPagePane(); |
|
} |
|
}; |
|
|
|
//js:页面设置,点击切换单位,英寸 -- 毫米 |
|
private ActionListener switchInchListener = new ActionListener() { |
|
public void actionPerformed(ActionEvent e) { |
|
if (e.getSource() == switchInch) { |
|
int index = switchInch.getSelectedIndex(); |
|
switch (index) { |
|
case 0: |
|
if (unitType != Constants.UNIT_MM) { |
|
unitType = Constants.UNIT_MM; |
|
DesignerEnvManager.getEnvManager().setPageLengthUnit(Constants.UNIT_MM); |
|
paperWidthSpinner.setValue(Math.round(new INCH(((Number) paperWidthSpinner.getValue()).floatValue()).toMMValue4Scale2())); |
|
paperHeightSpinner.setValue(Math.round(new INCH(((Number) paperHeightSpinner.getValue()).floatValue()).toMMValue4Scale2())); |
|
populate(report, Constants.UNIT_MM); |
|
} |
|
customRadioButton.setSelected(true); |
|
break; |
|
case 1: |
|
unitType = Constants.UNIT_INCH; |
|
DesignerEnvManager.getEnvManager().setPageLengthUnit(Constants.UNIT_INCH); |
|
paperWidthSpinner.setValue(new MM(((Number) paperWidthSpinner.getValue()).floatValue()).toINCHValue4Scale3()); |
|
paperHeightSpinner.setValue(new MM(((Number) paperHeightSpinner.getValue()).floatValue()).toINCHValue4Scale3()); |
|
populate(report, Constants.UNIT_INCH); |
|
customRadioButton.setSelected(true); |
|
break; |
|
} |
|
} |
|
} |
|
}; |
|
|
|
/** |
|
* Populate |
|
* |
|
* @param reportSettings rpt settings. |
|
*/ |
|
public void populate(Report report, int unitType) { |
|
this.report = report; |
|
ReportSettingsProvider reportSettings = report.getReportSettings(); |
|
PaperSettingProvider psetting = reportSettings.getPaperSetting(); |
|
// orientation |
|
if (psetting.getOrientation() == ReportConstants.LANDSCAPE) { |
|
this.landscapeRadioButton.setSelected(true); |
|
} else { |
|
this.portraitRadioButton.setSelected(true); |
|
} |
|
//js:setSelectedIndex会触发switchInchListener,因此先删掉 |
|
switchInch.removeActionListener(switchInchListener); |
|
if (unitType == Constants.UNIT_INCH) { |
|
switchInch.setSelectedIndex(1); |
|
} else { |
|
switchInch.setSelectedIndex(Constants.UNIT_MM); |
|
} |
|
switchInch.addActionListener(switchInchListener); |
|
unitSet(unitType); |
|
// paper size. |
|
PaperSize paperSize = psetting.getPaperSize(); |
|
if (paperSize == null) { |
|
paperSize = PaperSize.PAPERSIZE_A4; |
|
} |
|
boolean isCustomed = true; |
|
for (int i = 0; i < ReportConstants.PaperSizeNameSizeArray.length; i++) { |
|
Object[] tmpPaperSizeNameArray = ReportConstants.PaperSizeNameSizeArray[i]; |
|
|
|
// peter:当前选择的是预先定义好的. |
|
if (ComparatorUtils.equals(paperSize, tmpPaperSizeNameArray[1])) { |
|
this.predefinedComboBox.setSelectedIndex(i); |
|
this.predefinedRadioButton.setSelected(true); |
|
isCustomed = false; |
|
break; |
|
} |
|
} |
|
|
|
setAndPopulate(isCustomed, unitType); |
|
populateMargin(); |
|
|
|
checkMobileSetting(report); |
|
} |
|
|
|
private void checkMobileSetting(Report report) { |
|
if (report.getBook().getReportMobileAttr().isMobileCanvasSize()) { |
|
// 当勾选移动端画布大小后,自定义选项不可修改;限制宽度范围 |
|
predefinedRadioButton.setEnabled(false); |
|
predefinedComboBox.setEnabled(false); |
|
double maxWidth; |
|
if (unitType == Constants.UNIT_MM) { // 毫米 |
|
maxWidth = PaperSize.PAPERSIZE_MOBILE.getWidth().toMMValue4Scale2(); |
|
} else { // 英寸 |
|
maxWidth = PaperSize.PAPERSIZE_MOBILE.getWidth().toINCHValue4Scale3(); |
|
} |
|
maxWidth = Math.round(maxWidth * 100) / 100.0; // 保留两位小数 |
|
((SpinnerNumberModel)paperWidthSpinner.getModel()).setMaximum(maxWidth); |
|
} |
|
} |
|
|
|
private void unitSet(int unitType) { |
|
this.unitType = unitType; |
|
unitLabel.setUnitType(unitType); |
|
marginTopUnitFieldPane.setUnitType(unitType); |
|
marginLeftUnitFieldPane.setUnitType(unitType); |
|
marginBottomUnitFieldPane.setUnitType(unitType); |
|
marginRightUnitFieldPane.setUnitType(unitType); |
|
|
|
headerUnitFieldPane.setUnitType(unitType); |
|
footerUnitFieldPane.setUnitType(unitType); |
|
} |
|
|
|
|
|
private void setAndPopulate(boolean isCustomed, int unitType) { |
|
ReportSettingsProvider reportSettings = report.getReportSettings(); |
|
PaperSettingProvider psetting = reportSettings.getPaperSetting(); |
|
PaperSize paperSize = psetting.getPaperSize(); |
|
if (isCustomed) { |
|
this.customRadioButton.setSelected(true); |
|
|
|
if (unitType == Constants.UNIT_CM) { |
|
paperWidthSpinner.setValue(new Float(paperSize.getWidth().toCMValue4Scale2())); |
|
paperHeightSpinner.setValue(new Float(paperSize.getHeight().toCMValue4Scale2())); |
|
} else if (unitType == Constants.UNIT_INCH) { |
|
paperWidthSpinner.setValue(new Float(paperSize.getWidth().toINCHValue4Scale3())); |
|
paperHeightSpinner.setValue(new Float(paperSize.getHeight().toINCHValue4Scale3())); |
|
} else { |
|
paperWidthSpinner.setValue(new Float(paperSize.getWidth().toMMValue4Scale2())); |
|
paperHeightSpinner.setValue(new Float(paperSize.getHeight().toMMValue4Scale2())); |
|
} |
|
} |
|
// 预览的初始化 |
|
if (unitType == Constants.UNIT_CM) { |
|
showPagePane.populate(paperSize.getWidth().toCMValue4Scale2(), paperSize.getHeight().toCMValue4Scale2(), |
|
psetting.getOrientation(), false); |
|
} else if (unitType == Constants.UNIT_INCH) { |
|
showPagePane.populate(paperSize.getWidth().toINCHValue4Scale3(), paperSize.getHeight().toINCHValue4Scale3(), |
|
psetting.getOrientation(), false); |
|
} else { |
|
showPagePane.populate(paperSize.getWidth().toMMValue4Scale2(), paperSize.getHeight().toMMValue4Scale2(), |
|
psetting.getOrientation(), true); |
|
} |
|
} |
|
|
|
|
|
private void populateMargin() { |
|
ReportSettingsProvider reportSettings = report.getReportSettings(); |
|
PaperSettingProvider psetting = reportSettings.getPaperSetting(); |
|
// margins |
|
Margin margin = psetting.getMargin(); |
|
this.marginTopUnitFieldPane.setUnitValue(margin.getTop()); |
|
this.marginLeftUnitFieldPane.setUnitValue(margin.getLeft()); |
|
this.marginBottomUnitFieldPane.setUnitValue(margin.getBottom()); |
|
this.marginRightUnitFieldPane.setUnitValue(margin.getRight()); |
|
|
|
// populate ui |
|
headerUnitFieldPane.setUnitValue(reportSettings.getHeaderHeight()); |
|
footerUnitFieldPane.setUnitValue(reportSettings.getFooterHeight()); |
|
} |
|
|
|
private void updatePaperSizeByType(PaperSettingProvider psetting){ |
|
// paper size. |
|
if (this.predefinedRadioButton.isSelected()) { |
|
// peter:这个地方需要clone一下,防止用户在外面修改这个PaperSize. |
|
try { |
|
psetting.setPaperSize((PaperSize) ((PaperSize) predefinedComboBox.getSelectedItem()).clone()); |
|
} catch (CloneNotSupportedException cloneNotSupportedException) { |
|
// do nothing |
|
} |
|
} else if (this.customRadioButton.isSelected()) { |
|
if (unitType == Constants.UNIT_CM) { |
|
psetting.setPaperSize(new PaperSize(new CM(((Number) this.paperWidthSpinner.getValue()).floatValue()), new CM( |
|
((Number) this.paperHeightSpinner.getValue()).floatValue()))); |
|
} else if (unitType == Constants.UNIT_INCH) { |
|
psetting.setPaperSize(new PaperSize(new INCH(((Number) this.paperWidthSpinner.getValue()).floatValue()), new INCH( |
|
((Number) this.paperHeightSpinner.getValue()).floatValue()))); |
|
} else { |
|
psetting.setPaperSize(new PaperSize(new MM(((Number) this.paperWidthSpinner.getValue()).floatValue()), new MM( |
|
((Number) this.paperHeightSpinner.getValue()).floatValue()))); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* update |
|
*/ |
|
public void update(Report report) { |
|
ReportSettingsProvider reportSettings = report.getReportSettings(); |
|
// samuel:先判断是否reportSettings是否为空,如果为空,先新建 |
|
if (reportSettings == null) { |
|
reportSettings = new ReportSettings(); |
|
report.setReportSettings(reportSettings); |
|
} |
|
reportSettings = report.getReportSettings(); |
|
PaperSettingProvider psetting = reportSettings.getPaperSetting(); |
|
|
|
// orientation |
|
if (this.landscapeRadioButton.isSelected()) { |
|
psetting.setOrientation(ReportConstants.LANDSCAPE); |
|
} else { |
|
psetting.setOrientation(ReportConstants.PORTRAIT); |
|
} |
|
|
|
//paper size |
|
updatePaperSizeByType(psetting); |
|
|
|
// margins |
|
Margin margin = psetting.getMargin(); |
|
margin.setTop(this.marginTopUnitFieldPane.getUnitValue()); |
|
margin.setLeft(this.marginLeftUnitFieldPane.getUnitValue()); |
|
margin.setBottom(this.marginBottomUnitFieldPane.getUnitValue()); |
|
margin.setRight(this.marginRightUnitFieldPane.getUnitValue()); |
|
|
|
// update ui. |
|
reportSettings.setHeaderHeight(this.headerUnitFieldPane.getUnitValue()); |
|
reportSettings.setFooterHeight(this.footerUnitFieldPane.getUnitValue()); |
|
} |
|
|
|
private void showPagePaneByType(PaperSize ps,int ori){ |
|
if (unitType == Constants.UNIT_CM) { |
|
showPagePane.populate(ps.getWidth().toCMValue4Scale2(), ps.getHeight().toCMValue4Scale2(), ori, false); |
|
} else if (unitType == Constants.UNIT_INCH) { |
|
showPagePane.populate(ps.getWidth().toINCHValue4Scale3(), ps.getHeight().toINCHValue4Scale3(), ori, false); |
|
} else { |
|
showPagePane.populate(ps.getWidth().toMMValue4Scale2(), ps.getHeight().toMMValue4Scale2(), ori, true); |
|
} |
|
} |
|
|
|
private void previewShowPagePane() { |
|
int ori; |
|
if (this.landscapeRadioButton.isSelected()) { |
|
ori = ReportConstants.LANDSCAPE; |
|
} else { |
|
ori = ReportConstants.PORTRAIT; |
|
} |
|
PaperSize ps; |
|
if (this.predefinedRadioButton.isSelected()) { |
|
ps = (PaperSize) predefinedComboBox.getSelectedItem(); |
|
showPagePaneByType(ps,ori); |
|
} else if (this.customRadioButton.isSelected()) { |
|
showPagePane.populate(((Number) this.paperWidthSpinner.getValue()).doubleValue(), |
|
((Number) this.paperHeightSpinner.getValue()).doubleValue(), ori, unitType == Constants.UNIT_MM); |
|
} |
|
|
|
showPagePane.repaint(); |
|
} |
|
|
|
/** |
|
* Create icon radio pane for Portrait and Landscape. |
|
*/ |
|
private JPanel createIconRadioPane(Icon icon, UIRadioButton radioButton) { |
|
JPanel iconRadioPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
// iconRadioPane.setLayout(FRGUIPaneFactory.createCenterFlowLayout()); |
|
|
|
iconRadioPane.add(new UILabel(icon)); |
|
iconRadioPane.add(radioButton); |
|
|
|
return iconRadioPane; |
|
} |
|
|
|
/** |
|
* Paper size cell renderer. |
|
*/ |
|
private UIComboBoxRenderer paperSizeCellRenderere = 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 PaperSize) { |
|
PaperSize paperSize = (PaperSize) value; |
|
for (int i = 0; i < ReportConstants.PaperSizeNameSizeArray.length; i++) { |
|
Object[] tmpPaperSizeNameArray = ReportConstants.PaperSizeNameSizeArray[i]; |
|
|
|
if (ComparatorUtils.equals(paperSize, tmpPaperSizeNameArray[1])) { |
|
StringBuffer sbuf = new StringBuffer(tmpPaperSizeNameArray[0].toString()); |
|
|
|
adjustCellRenderByType(sbuf, paperSize); |
|
|
|
this.setText(sbuf.toString()); |
|
break; |
|
} |
|
} |
|
} |
|
|
|
return this; |
|
} |
|
}; |
|
|
|
private void adjustCellRenderByType(StringBuffer sbuf,PaperSize paperSize){ |
|
sbuf.append(" ["); |
|
if (unitType == Constants.UNIT_CM) { |
|
sbuf.append(Utils.convertNumberStringToString(new Float(paperSize.getWidth().toCMValue4Scale2()))); |
|
sbuf.append('x'); |
|
sbuf.append(Utils.convertNumberStringToString(new Float(paperSize.getHeight().toCMValue4Scale2()))); |
|
sbuf.append(' '); |
|
sbuf.append(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Unit_CM")); |
|
} else if (unitType == Constants.UNIT_INCH) { |
|
sbuf.append(Utils.convertNumberStringToString(new Float(paperSize.getWidth().toINCHValue4Scale3()))); |
|
sbuf.append('x'); |
|
sbuf.append(Utils.convertNumberStringToString(new Float(paperSize.getHeight().toINCHValue4Scale3()))); |
|
sbuf.append(' '); |
|
sbuf.append(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup-inches")); |
|
} else { |
|
sbuf.append(Utils.convertNumberStringToString(new Float(paperSize.getWidth().toMMValue4Scale2()))); |
|
sbuf.append('x'); |
|
sbuf.append(Utils.convertNumberStringToString(new Float(paperSize.getHeight().toMMValue4Scale2()))); |
|
sbuf.append(' '); |
|
sbuf.append(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_mm")); |
|
} |
|
sbuf.append(']'); |
|
} |
|
|
|
/** |
|
* Paper size item listener. |
|
*/ |
|
private ItemListener paperSizeItemListener = new ItemListener() { |
|
public void itemStateChanged(ItemEvent evt) { |
|
PaperSize paperSize = (PaperSize) predefinedComboBox.getSelectedItem(); |
|
adjustSpinnerValueByType(paperSize); |
|
predefinedRadioButton.setSelected(true); |
|
previewShowPagePane(); |
|
} |
|
}; |
|
|
|
private void adjustSpinnerValueByType(PaperSize paperSize){ |
|
if (unitType == Constants.UNIT_CM) { |
|
paperWidthSpinner.setValue(new Float(paperSize.getWidth().toCMValue4Scale2())); |
|
paperHeightSpinner.setValue(new Float(paperSize.getHeight().toCMValue4Scale2())); |
|
} else if (unitType == Constants.UNIT_INCH) { |
|
paperWidthSpinner.setValue(new Float(paperSize.getWidth().toINCHValue4Scale3())); |
|
paperHeightSpinner.setValue(new Float(paperSize.getHeight().toINCHValue4Scale3())); |
|
} else { |
|
paperWidthSpinner.setValue(new Float(paperSize.getWidth().toMMValue4Scale2())); |
|
paperHeightSpinner.setValue(new Float(paperSize.getHeight().toMMValue4Scale2())); |
|
} |
|
} |
|
|
|
// text listener. |
|
DocumentListener customTextListener = new DocumentListener() { |
|
public void insertUpdate(DocumentEvent e) { |
|
fireTextEvent(); |
|
} |
|
|
|
public void removeUpdate(DocumentEvent e) { |
|
fireTextEvent(); |
|
} |
|
|
|
public void changedUpdate(DocumentEvent e) { |
|
fireTextEvent(); |
|
} |
|
|
|
private void fireTextEvent() { |
|
customRadioButton.setSelected(((Number) paperWidthSpinner.getValue()).doubleValue() > 0 |
|
&& ((Number) paperHeightSpinner.getValue()).doubleValue() > 0); |
|
} |
|
}; |
|
|
|
class ShowPagePane extends JPanel { |
|
private final static int NUM_3 = 3; |
|
private final static double NUM_POINT_3 =0.3; |
|
private final static int NUM_NEG_5 = -5; |
|
private final static int NUM_NEG_15 = -15; |
|
private final static int NUM_NEG_10 = -10; |
|
private final static int NUM_NEG_13 = -13; |
|
private final static int NUM_NEG_7 = -7; |
|
private final static int NUM_NEG_8 = -8; |
|
private double paper_width; |
|
private double paper_height; |
|
private int paper_orientation; |
|
|
|
private int pane_width = 300; |
|
private int pane_height = 100; |
|
|
|
private double length_scale = 0.3; |
|
private Image img; |
|
|
|
public ShowPagePane() { |
|
this.setSize(pane_width, pane_height); |
|
this.setPreferredSize(new Dimension(pane_width, pane_height)); |
|
this.setBackground(new Color(128, 128, 128));// background |
|
// color. |
|
this.setOpaque(false); |
|
img = BaseUtils.readImage("/com/fr/base/images/dialog/pagesetup/a.png"); |
|
} |
|
|
|
public void populate(double paper_width, double paper_height, int paper_orientation, boolean useLocale) { |
|
if (paper_width <= 0 || paper_height <= 0) { |
|
return; |
|
} |
|
// 最大2000,以免画的时候超边 |
|
this.paper_width = Math.min(paper_width, Double.MAX_VALUE); |
|
this.paper_height = Math.min(paper_height, Double.MAX_VALUE); |
|
this.paper_orientation = paper_orientation; |
|
length_scale = !useLocale ? NUM_3 : NUM_POINT_3; |
|
} |
|
|
|
@Override |
|
public void paintComponent(Graphics g) { |
|
super.paintComponent(g); |
|
|
|
double paint_width; |
|
double paint_height; |
|
if (paper_width > 0 && paper_height > 0) { |
|
double width_scale = length_scale * paper_width / (pane_width - 50); |
|
double height_scale = length_scale * paper_height / (pane_height - 30); |
|
|
|
if (width_scale > 1 || height_scale > 1) { |
|
double max_scale = width_scale > height_scale ? width_scale : height_scale; |
|
paint_width = length_scale * paper_width / max_scale; |
|
paint_height = length_scale * paper_height / max_scale; |
|
} else { |
|
paint_width = paper_width * length_scale; |
|
paint_height = paper_height * length_scale; |
|
} |
|
Graphics2D g2d = (Graphics2D) g; |
|
FontMetrics fm = g2d.getFontMetrics(); |
|
// 横向的长度 |
|
String w_str = "" + paper_width; |
|
if (!w_str.contains(E) && w_str.indexOf(CoreConstants.DOT) > 0) { |
|
w_str = w_str.substring(0, w_str.indexOf(CoreConstants.DOT) + 2); |
|
} |
|
int w_length = fm.stringWidth(w_str); |
|
paint_width = Math.max(paint_width, w_length + 26); |
|
// 纵向的长度 |
|
String h_str = "" + paper_height; |
|
//使用科学计数法显示长度的时候,限制纵向显示长度为9位 |
|
if (h_str.contains(E)) { |
|
String str1 = h_str.substring(h_str.indexOf(E)); |
|
String str2 = h_str.substring(0, Math.min(h_str.length(), 9) - str1.length()); |
|
h_str = str2 + str1; |
|
} else if (h_str.indexOf(CoreConstants.DOT) > 0) { |
|
h_str = h_str.substring(0, h_str.indexOf(CoreConstants.DOT) + 2); |
|
} |
|
int h_length = fm.stringWidth(h_str); |
|
paint_height = Math.max(paint_height, h_length + 26); |
|
paint_height = Math.min(paint_height, 74); |
|
double startX = (pane_width - paint_width) / 2; |
|
double startY = (pane_height - paint_height) / 2; |
|
g2d.translate(startX, startY); |
|
g2d = getG2d(paint_width, paint_height, g2d, w_str, h_str, w_length, h_length); |
|
if (paper_orientation == ReportConstants.PORTRAIT) { |
|
g2d.drawImage(img, (int) ((paint_width - img.getWidth(null)) / 2), |
|
(int) ((paint_height - img.getHeight(null)) / 2), null); |
|
} else { |
|
g2d.rotate(-Math.toRadians(90)); |
|
g2d.drawImage(img, -(int) ((paint_height + img.getWidth(null)) / 2), |
|
(int) ((paint_width - img.getHeight(null)) / 2), null); |
|
g2d.rotate(Math.toRadians(90)); |
|
} |
|
g2d.translate(-startX, -startY); |
|
} |
|
} |
|
|
|
private Graphics2D getG2d(double paint_width, double paint_height,Graphics2D g2d,String w_str,String h_str,int w_length,int h_length) { |
|
g2d.setColor(Color.WHITE); |
|
g2d.fill3DRect(0, 0, (int) paint_width, (int) paint_height, true); |
|
g2d.setColor(Color.BLACK); |
|
// 横向的两根竖线 |
|
g2d.drawLine(0, NUM_NEG_5, 0, NUM_NEG_15); |
|
g2d.drawLine((int) paint_width - 1, NUM_NEG_5, (int) paint_width - 1, NUM_NEG_15); |
|
|
|
g2d.drawString(w_str, (int) ((paint_width - w_length) / 2), NUM_NEG_5); |
|
// 画横向的两个箭头 |
|
g2d.drawLine(2, NUM_NEG_10, (int) ((paint_width - w_length) / 2) + NUM_NEG_5, NUM_NEG_10); |
|
g2d.drawLine((int) ((paint_width + w_length) / 2) -NUM_NEG_5, NUM_NEG_10, (int) paint_width -NUM_3, NUM_NEG_10); |
|
g2d.drawLine(2, NUM_NEG_10, -NUM_NEG_7, NUM_NEG_13); |
|
g2d.drawLine(2, NUM_NEG_10, -NUM_NEG_7, NUM_NEG_7); |
|
g2d.drawLine((int) paint_width - NUM_3,NUM_NEG_10, (int) paint_width +NUM_NEG_8, NUM_NEG_13); |
|
g2d.drawLine((int) paint_width - NUM_3, NUM_NEG_10, (int) paint_width+NUM_NEG_8, NUM_NEG_7); |
|
// 纵向的两根竖线 |
|
g2d.drawLine(NUM_NEG_15, 0, NUM_NEG_5, 0); |
|
g2d.drawLine(NUM_NEG_15, (int) paint_height - 1, NUM_NEG_5, (int) paint_height - 1); |
|
|
|
g2d.rotate(-Math.toRadians((NUM_NEG_10*NUM_NEG_8-NUM_NEG_10))); |
|
g2d.drawString(h_str, -(int) ((paint_height + h_length) / 2), NUM_NEG_5); |
|
g2d.rotate(Math.toRadians((NUM_NEG_10*NUM_NEG_8-NUM_NEG_10))); |
|
// 纵向的箭头 |
|
g2d.drawLine(NUM_NEG_10, 2, NUM_NEG_10, (int) ((paint_height - h_length) / 2) +NUM_NEG_5); |
|
g2d.drawLine(NUM_NEG_10, (int) ((paint_height + h_length) / 2) -NUM_NEG_5, NUM_NEG_10, (int) paint_height - NUM_3); |
|
g2d.drawLine(NUM_NEG_10, 2, NUM_NEG_13, -NUM_NEG_7); |
|
g2d.drawLine(NUM_NEG_10, 2, NUM_NEG_7, -NUM_NEG_7); |
|
g2d.drawLine(NUM_NEG_10, (int) paint_height - NUM_3, NUM_NEG_13, (int) paint_height +NUM_NEG_8); |
|
g2d.drawLine(NUM_NEG_10, (int) paint_height - NUM_3, NUM_NEG_7, (int) paint_height+NUM_NEG_8); |
|
return g2d; |
|
} |
|
|
|
} |
|
|
|
private FocusAdapter fa = new FocusAdapter() { |
|
private final static int NUM_11 = 11; |
|
|
|
@Override |
|
public void focusLost(FocusEvent e) { |
|
String zeroValue = "0"; |
|
boolean topValue =ComparatorUtils.equals(zeroValue,marginTopUnitFieldPane.getTextField().getText()); |
|
boolean bottomValue =ComparatorUtils.equals(zeroValue,marginBottomUnitFieldPane.getTextField().getText()); |
|
boolean leftValue = ComparatorUtils.equals(zeroValue,marginLeftUnitFieldPane.getTextField().getText()); |
|
boolean rightValue = ComparatorUtils.equals(zeroValue,marginRightUnitFieldPane.getTextField().getText()); |
|
boolean isOr = topValue || bottomValue || leftValue; |
|
boolean or = isOr || rightValue; |
|
boolean isAnd = !topValue && !bottomValue && !leftValue ; |
|
if (or && (zeroMarginWarn.getText()).endsWith("<br></html></body>")) { |
|
zeroMarginWarn.setText("<html><body>"+com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Zero_Margin_Warn")+"</body></html>"); |
|
} else if (isAnd && !rightValue) { |
|
StringBuffer temp = new StringBuffer(); |
|
for (int i = 0; i < NUM_11; i++) { |
|
temp.append(" "); |
|
} |
|
zeroMarginWarn.setText("<html><body>" + temp + "<br><br></html></body>"); |
|
} |
|
} |
|
}; |
|
|
|
} |
|
|
|
private class OtherPane extends BasicPane { |
|
|
|
private UIRadioButton topBottomRadioButton; |
|
private UIRadioButton leftRightRadioButton; |
|
|
|
private UICheckBox horizonalCenterCheckBox; |
|
private UICheckBox verticalCenterCheckBox; |
|
|
|
private UISpinner firstPageNumberSpinner; |
|
|
|
private UIRadioButton isShrinkToFit4None; |
|
private UIRadioButton isShrinkToFit4Height; |
|
private UIRadioButton isShrinkToFit4Width; |
|
|
|
public OtherPane() { |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
JPanel defaultPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); |
|
this.add(defaultPane, BorderLayout.NORTH); |
|
|
|
// page order |
|
JPanel outpageOrderPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Page_Order")); |
|
JPanel pageOrderPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(2); |
|
outpageOrderPane.add(pageOrderPane); |
|
defaultPane.add(outpageOrderPane); |
|
|
|
|
|
Icon topBottomIcon = BaseUtils.readIcon("/com/fr/base/images/dialog/pagesetup/down.png"); |
|
topBottomRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Top_To_Bottom"),false,false); |
|
pageOrderPane.add(FRGUIPaneFactory.createIconRadio_S_Pane(topBottomIcon, topBottomRadioButton)); |
|
topBottomRadioButton.setMnemonic('B'); |
|
|
|
Icon leftRightIcon = BaseUtils.readIcon("/com/fr/base/images/dialog/pagesetup/over.png"); |
|
leftRightRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Left_To_Right"), false, false); |
|
pageOrderPane.add(FRGUIPaneFactory.createIconRadio_S_Pane(leftRightIcon, leftRightRadioButton)); |
|
leftRightRadioButton.setMnemonic('R'); |
|
|
|
ButtonGroup pageOrderButtonGroup = new ButtonGroup(); |
|
pageOrderButtonGroup.add(topBottomRadioButton); |
|
pageOrderButtonGroup.add(leftRightRadioButton); |
|
|
|
topBottomRadioButton.setSelected(true); |
|
|
|
// center on page |
|
JPanel outcenterOnPagePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Placement_Center_On_Page")); |
|
JPanel centerOnPagePane = FRGUIPaneFactory.createNormalFlowInnerContainer_M_Pane(); |
|
outcenterOnPagePane.add(centerOnPagePane); |
|
defaultPane.add(outcenterOnPagePane); |
|
|
|
|
|
this.horizonalCenterCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Horizontally"), false, false); |
|
this.horizonalCenterCheckBox.setMnemonic('H'); |
|
this.verticalCenterCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Vertically"), false, false); |
|
this.verticalCenterCheckBox.setMnemonic('V'); |
|
|
|
centerOnPagePane.add(GUICoreUtils.createFlowPane(horizonalCenterCheckBox, FlowLayout.CENTER)); |
|
centerOnPagePane.add(GUICoreUtils.createFlowPane(verticalCenterCheckBox, FlowLayout.CENTER)); |
|
|
|
// first page number. |
|
JPanel firstPaneNumberPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
defaultPane.add(firstPaneNumberPane); |
|
|
|
firstPaneNumberPane.add(new UILabel(BidiUtils.concatenateStrings(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_First_Page_Number"), ": "))); |
|
// marks: 这个地方必须为大于零的整数 |
|
firstPageNumberSpinner = new UISpinner(1, Integer.MAX_VALUE, 1, 1); |
|
firstPaneNumberPane.add(firstPageNumberSpinner); |
|
|
|
defaultPane.add(Box.createVerticalStrut(4)); |
|
|
|
// print gridlines. |
|
JPanel printOptionPane = FRGUIPaneFactory.createNColumnGridInnerContainer_S_Pane(1); |
|
defaultPane.add(printOptionPane); |
|
printOptionPane.setBorder(BorderFactory.createEmptyBorder(4, 0, 0, 0)); |
|
|
|
JPanel autoShrinkPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); |
|
autoShrinkPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_PageSetup_Shrink_To_Fit_Content"))); |
|
isShrinkToFit4None = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_No")); |
|
isShrinkToFit4Height = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Row_Height")); |
|
isShrinkToFit4Width = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Utils_Column_Width")); |
|
|
|
ButtonGroup bp = new ButtonGroup(); |
|
autoShrinkPane.add(isShrinkToFit4None); |
|
autoShrinkPane.add(isShrinkToFit4Height); |
|
autoShrinkPane.add(isShrinkToFit4Width); |
|
bp.add(isShrinkToFit4None); |
|
bp.add(isShrinkToFit4Height); |
|
bp.add(isShrinkToFit4Width); |
|
|
|
printOptionPane.add(autoShrinkPane); |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return "other"; |
|
} |
|
|
|
/** |
|
* Create icon radio pane for Portrait and Landscape. |
|
*/ |
|
private JPanel createIconRadioPane(Icon icon, UIRadioButton radioButton) { |
|
JPanel iconRadioPane = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); |
|
|
|
iconRadioPane.add(new UILabel(icon)); |
|
iconRadioPane.add(radioButton); |
|
|
|
return iconRadioPane; |
|
} |
|
|
|
/** |
|
* Populate |
|
*/ |
|
public void populate(Report report) { |
|
ReportSettingsProvider reportSettings = null; |
|
reportSettings = ReportUtils.getReportSettings(report); |
|
|
|
if (reportSettings == null) { |
|
reportSettings = new ReportSettings(); |
|
} |
|
|
|
// page order. |
|
if (reportSettings.getPageOrder() == Constants.LEFT_TO_RIGHT) { |
|
this.leftRightRadioButton.setSelected(true); |
|
} else { |
|
this.topBottomRadioButton.setSelected(true); |
|
} |
|
|
|
// placement |
|
this.horizonalCenterCheckBox.setSelected(reportSettings.isHorizontalCenterOnPage()); |
|
this.verticalCenterCheckBox.setSelected(reportSettings.isVerticalCenterOnPage()); |
|
|
|
this.firstPageNumberSpinner.setValue(new Integer(reportSettings.getFirstPageNumber())); |
|
|
|
|
|
// Options |
|
if (reportSettings.getShrinkToFitMode() == ReportConstants.AUTO_SHRINK_TO_FIT_WIDTH) { |
|
this.isShrinkToFit4Width.setSelected(true); |
|
} else if (reportSettings.getShrinkToFitMode() == ReportConstants.AUTO_SHRINK_TO_FIT_HEIGHT) { |
|
this.isShrinkToFit4Height.setSelected(true); |
|
} else { |
|
this.isShrinkToFit4None.setSelected(true); |
|
} |
|
} |
|
|
|
/** |
|
* void update |
|
*/ |
|
public void update(Report report) { |
|
ReportSettingsProvider reportSettings = null; |
|
if (report.getReportSettings() == null) { |
|
report.setReportSettings(new ReportSettings()); |
|
} |
|
reportSettings = report.getReportSettings(); |
|
|
|
// page order. |
|
if (this.leftRightRadioButton.isSelected()) { |
|
reportSettings.setPageOrder(Constants.LEFT_TO_RIGHT); |
|
} else { |
|
reportSettings.setPageOrder(Constants.TOP_TO_BOTTOM); |
|
} |
|
|
|
// placement |
|
reportSettings.setHorizontalCenterOnPage(this.horizonalCenterCheckBox.isSelected()); |
|
reportSettings.setVerticalCenterOnPage(this.verticalCenterCheckBox.isSelected()); |
|
|
|
reportSettings.setFirstPageNumber((int) this.firstPageNumberSpinner.getValue()); |
|
|
|
if (this.isShrinkToFit4Width.isSelected()) { |
|
reportSettings.setShrinkToFitMode(ReportConstants.AUTO_SHRINK_TO_FIT_WIDTH); |
|
} else if (this.isShrinkToFit4Height.isSelected()) { |
|
reportSettings.setShrinkToFitMode(ReportConstants.AUTO_SHRINK_TO_FIT_HEIGHT); |
|
} else { |
|
reportSettings.setShrinkToFitMode(ReportConstants.AUTO_SHRINK_TO_FIT_NONE); |
|
} |
|
} |
|
|
|
} |
|
}
|
|
|