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.
590 lines
23 KiB
590 lines
23 KiB
package com.fr.design.report; |
|
|
|
import com.fr.base.GraphHelper; |
|
import com.fr.design.border.UIRoundedBorder; |
|
import com.fr.design.border.UITitledBorder; |
|
import com.fr.design.dialog.BasicPane; |
|
import com.fr.design.gui.ibutton.UIButtonGroup; |
|
import com.fr.design.gui.ibutton.UIRadioButton; |
|
import com.fr.design.gui.ibutton.UIToggleButton; |
|
import com.fr.design.gui.icheckbox.UICheckBox; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.gui.ispinner.UIBasicSpinner; |
|
import com.fr.design.gui.itextfield.UITextField; |
|
import com.fr.design.i18n.DesignSizeI18nManager; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.utils.DesignUtils; |
|
import com.fr.design.utils.gui.GUICoreUtils; |
|
import com.fr.general.FRFont; |
|
import com.fr.general.IOUtils; |
|
import com.fr.report.stable.WorkSheetAttr; |
|
import com.fr.report.worksheet.WorkSheet; |
|
import com.fr.stable.ColumnRow; |
|
import com.fr.stable.Constants; |
|
import com.fr.stable.StringUtils; |
|
|
|
import javax.swing.BorderFactory; |
|
import javax.swing.JComponent; |
|
import javax.swing.JPanel; |
|
import javax.swing.SpinnerNumberModel; |
|
import javax.swing.SwingConstants; |
|
import java.awt.BorderLayout; |
|
import java.awt.Color; |
|
import java.awt.Component; |
|
import java.awt.Container; |
|
import java.awt.Dimension; |
|
import java.awt.FlowLayout; |
|
import java.awt.Graphics; |
|
import java.awt.GridLayout; |
|
import java.awt.event.ActionEvent; |
|
import java.awt.event.ActionListener; |
|
|
|
public class ReportColumnsPane extends BasicPane{ |
|
public static final int ROW = 0; |
|
public static final int COLUMN = 1; |
|
private int rowOrColumn; |
|
private boolean isRepeate; |
|
|
|
private static final String[] COLUMN_ROW_TEXTS = { |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Rows"), |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Columns") |
|
}; |
|
|
|
private static final String[] SHOW_BLANK = { |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Blank_Row"), |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Show_Blank_Column") |
|
}; |
|
|
|
private static final String[] REPORT_COLUMN_RAPEAT = { |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Columns_Repeat_Row"), |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Columns_Repeat_Column") |
|
}; |
|
|
|
private static final int FONT_SIZE = 14; |
|
|
|
private UIButtonGroup onOffButtonGroup; |
|
|
|
private UIRadioButton rowButton; |
|
private UIRadioButton colButton; |
|
|
|
// 行分行 |
|
private UIRadioButton maxRadioButton; |
|
private UIBasicSpinner maxNumberSpinner; |
|
private UILabel maxUILabel; |
|
private UIRadioButton toXRadioButton; |
|
private UIBasicSpinner toXSpinner; |
|
private UILabel toUILabel; |
|
|
|
private UITextField repeatColDataTextField; |
|
private UILabel copyLabel; |
|
private UITextField copyTitleTextField; |
|
|
|
private UICheckBox showBlankCheckBox ; |
|
|
|
|
|
public ReportColumnsPane() { |
|
this.rowOrColumn = ROW; |
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
JPanel north = new JPanel(new BorderLayout()) { |
|
public void paint(Graphics g) { |
|
super.paint(g); |
|
super.paintBorder(g); |
|
} |
|
}; |
|
north.setPreferredSize(new Dimension(549, 59)); |
|
north.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(11, 23, 6, 23), new UIRoundedBorder(new Color(204, 204, 204), 1, 10))); |
|
String[] textArray = new String[] { |
|
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_TurnOn"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_TurnOff") |
|
}; |
|
|
|
onOffButtonGroup = new UIButtonGroup(textArray) { |
|
@Override |
|
protected void initButton(UIToggleButton labelButton) { |
|
labelButton.setSize(new Dimension(60,20)); |
|
labelButton.setPreferredSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.report.ReportColumnsPane.labelButton")); |
|
super.initButton(labelButton); |
|
} |
|
}; |
|
onOffButtonGroup.addActionListener(onOffListener); |
|
|
|
UILabel uiLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Columns")); |
|
FRFont uiLableFont = DesignUtils.getDefaultGUIFont().applySize(FONT_SIZE); |
|
uiLabel.setFont(uiLableFont); |
|
uiLabel.setHorizontalAlignment(SwingConstants.CENTER); |
|
int uiLabelWidth = GraphHelper.getWidth(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Columns"), uiLableFont); |
|
|
|
uiLabel.setPreferredSize(new Dimension(uiLabelWidth, 20)); |
|
north.add(uiLabel,BorderLayout.WEST); |
|
JPanel buttonGroupPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 23,11)); |
|
buttonGroupPane.add(onOffButtonGroup); |
|
north.add(buttonGroupPane, BorderLayout.EAST); |
|
this.add(north, BorderLayout.NORTH); |
|
this.add(createRowColumnPane(), BorderLayout.CENTER); |
|
} |
|
|
|
private ActionListener onOffListener = new ActionListener() { |
|
@Override |
|
public void actionPerformed(ActionEvent e) { |
|
ReportColumnsPane.this.isRepeate = onOffButtonGroup.getSelectedIndex() == 0; |
|
checkEnable(); |
|
} |
|
}; |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Report_Columns"); |
|
} |
|
|
|
private void checkEnable() { |
|
if (isRepeate) { |
|
rowButton.setSelected(!colButton.isSelected()); |
|
this.maxRadioButton.setSelected(!this.toXRadioButton.isSelected()); |
|
} |
|
rowButton.setEnabled(isRepeate); |
|
colButton.setEnabled(isRepeate); |
|
maxNumberSpinner.setEnabled(isRepeate && maxRadioButton.isSelected()); |
|
toXSpinner.setEnabled(isRepeate && toXRadioButton.isSelected()); |
|
maxRadioButton.setEnabled(isRepeate); |
|
toXRadioButton.setEnabled(isRepeate); |
|
repeatColDataTextField.setEnabled(isRepeate); |
|
copyTitleTextField.setEnabled(isRepeate); |
|
showBlankCheckBox.setEnabled(isRepeate); |
|
setAllLableEnabled(this, isRepeate); |
|
} |
|
|
|
private void setAllLableEnabled (Container container, boolean flag) { |
|
for (int i = 0, len = container.getComponentCount(); i < len; i++){ |
|
Component child = container.getComponent(i); |
|
if (child instanceof UILabel) { |
|
child.setEnabled(flag); |
|
} else if (child instanceof Container) { |
|
setAllLableEnabled((Container)child, flag); |
|
} |
|
} |
|
} |
|
|
|
|
|
private void colOrRowConvert() { |
|
maxUILabel.setText(COLUMN_ROW_TEXTS[rowOrColumn]); |
|
toUILabel.setText(COLUMN_ROW_TEXTS[1 - rowOrColumn]); |
|
showBlankCheckBox.setText(SHOW_BLANK[rowOrColumn]); |
|
copyLabel.setText(REPORT_COLUMN_RAPEAT[rowOrColumn] + ":"); |
|
} |
|
|
|
/** |
|
* 创建分栏页面 |
|
*/ |
|
private JPanel createRowColumnPane() { |
|
JPanel divideRowPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
divideRowPane.setBorder(BorderFactory.createEmptyBorder(0,21,0,21)); |
|
JPanel center = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
// 行分栏样式 |
|
JPanel north = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Style")); |
|
north.setPreferredSize(new Dimension(549, 216)); |
|
north.add(createSamplePane()); |
|
north.add(createRowMaxOrSetPane()); |
|
|
|
center.add(createRowPane(), BorderLayout.NORTH); |
|
JPanel xx = new JPanel(new FlowLayout(FlowLayout.RIGHT,0,0)); |
|
showBlankCheckBox = new UICheckBox(SHOW_BLANK[rowOrColumn]); |
|
xx.add(showBlankCheckBox); |
|
center.add(xx, BorderLayout.CENTER); |
|
|
|
divideRowPane.add(north, BorderLayout.NORTH); |
|
divideRowPane.add(center, BorderLayout.CENTER); |
|
return divideRowPane; |
|
} |
|
|
|
/** |
|
* 创建示例页面 |
|
*/ |
|
private JPanel createSamplePane() { |
|
JPanel sampleLablePane = new JPanel(new GridLayout(1,2)); |
|
sampleLablePane.setPreferredSize(new Dimension(524, 130)); |
|
JPanel rPane = new JPanel(); |
|
UILabel rLabel = new UILabel(IOUtils.readIcon("/com/fr/design/images/reportcolumns/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Row_Icon_File_Name"))); |
|
rLabel.setBorder(BorderFactory.createEmptyBorder(5,45,0,49)); |
|
rPane.add(rLabel); |
|
rowButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Columns_Horizontally")); |
|
rowButton.addActionListener(rowChangeListener); |
|
rPane.add(rowButton); |
|
sampleLablePane.add(rPane); |
|
JPanel cPane = new JPanel(); |
|
UILabel cLabel = new UILabel(IOUtils.readIcon("/com/fr/design/images/reportcolumns/" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Col_Icon_File_Name"))); |
|
cLabel.setBorder(BorderFactory.createEmptyBorder(5,49,0,49)); |
|
cPane.add(cLabel); |
|
colButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Columns_Vertically")); |
|
colButton.addActionListener(colChangeListener); |
|
cPane.add(colButton); |
|
sampleLablePane.add(cPane); |
|
return sampleLablePane; |
|
} |
|
|
|
private ActionListener rowChangeListener = new ActionListener() { |
|
@Override |
|
public void actionPerformed(ActionEvent e) { |
|
if (!rowButton.isSelected()) { |
|
rowButton.setSelected(true); |
|
}else{ |
|
colButton.setSelected(false); |
|
ReportColumnsPane.this.rowOrColumn = ROW; |
|
emptyValueConvert(); |
|
} |
|
} |
|
}; |
|
|
|
private ActionListener colChangeListener = new ActionListener() { |
|
@Override |
|
public void actionPerformed(ActionEvent e) { |
|
if (!colButton.isSelected()) { |
|
colButton.setSelected(true); |
|
}else{ |
|
rowButton.setSelected(false); |
|
ReportColumnsPane.this.rowOrColumn = COLUMN; |
|
emptyValueConvert(); |
|
} |
|
} |
|
}; |
|
|
|
private void emptyValueConvert(){ |
|
maxNumberSpinner.setValue(0); |
|
toXSpinner.setValue(0); |
|
colOrRowConvert(); |
|
} |
|
|
|
private JPanel createRowMaxOrSetPane() { |
|
JPanel RowMaxOrSetPane = new JPanel(); |
|
RowMaxOrSetPane.setBorder(BorderFactory.createEmptyBorder(8, 5, 0, 0)); |
|
RowMaxOrSetPane.setLayout(new FlowLayout(FlowLayout.LEFT,25,2)); |
|
//marks:在多少行后开始分栏 |
|
maxRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Columns_After")); |
|
maxNumberSpinner = new UIBasicSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); |
|
GUICoreUtils.setColumnForSpinner(maxNumberSpinner, 6); |
|
maxRadioButton.addActionListener(maxBtnListener); |
|
maxUILabel = new UILabel(COLUMN_ROW_TEXTS[rowOrColumn] ); |
|
JPanel maxRowRadioPane = GUICoreUtils.createFlowPane(new JComponent[]{maxRadioButton, maxNumberSpinner, maxUILabel, new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Report_Columns_Columns_Optional"))}, FlowLayout.CENTER); |
|
RowMaxOrSetPane.add(maxRowRadioPane); |
|
//marks:分成多少行 |
|
toXRadioButton = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_ReportColumns_Columns_To")); |
|
toXRadioButton.addActionListener(toXBtnListener); |
|
toXSpinner = new UIBasicSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1)); |
|
GUICoreUtils.setColumnForSpinner(toXSpinner, 6); |
|
toUILabel = new UILabel(COLUMN_ROW_TEXTS[1 - rowOrColumn]); |
|
JPanel setRowRadioPane = GUICoreUtils.createFlowPane(new JComponent[]{toXRadioButton, toXSpinner, toUILabel}, FlowLayout.CENTER); |
|
RowMaxOrSetPane.add(setRowRadioPane); |
|
return RowMaxOrSetPane; |
|
} |
|
|
|
private ActionListener toXBtnListener = new ActionListener() { |
|
@Override |
|
public void actionPerformed(ActionEvent e) { |
|
if (toXRadioButton.isSelected()) { |
|
toXSpinner.setEnabled(true); |
|
maxNumberSpinner.setEnabled(false); |
|
maxRadioButton.setSelected(false); |
|
} else { |
|
toXRadioButton.setSelected(true); |
|
} |
|
} |
|
}; |
|
|
|
private ActionListener maxBtnListener = new ActionListener() { |
|
@Override |
|
public void actionPerformed(ActionEvent e) { |
|
if (maxRadioButton.isSelected()) { |
|
maxNumberSpinner.setEnabled(true); |
|
toXRadioButton.setSelected(false); |
|
toXSpinner.setEnabled(false); |
|
} else { |
|
maxRadioButton.setSelected(true); |
|
} |
|
} |
|
}; |
|
|
|
/** |
|
* 创建行分栏界面 |
|
*/ |
|
private JPanel createRowPane() { |
|
JPanel rowPane = new JPanel(); |
|
UITitledBorder explainBorder = UITitledBorder.createBorderWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Area")); |
|
rowPane.setBorder(explainBorder); |
|
rowPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5,13)); |
|
rowPane.setPreferredSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.report.ReportColumnsPane.createRowPane.rowPane")); |
|
rowPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Data") + ":")); |
|
repeatColDataTextField = new UITextField(); |
|
repeatColDataTextField.setPreferredSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.report.ReportColumnsPane.createRowPane.repeatColDataTextField")); |
|
rowPane.add(repeatColDataTextField); |
|
rowPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format") + ": A2:D5 ")); |
|
copyLabel = new UILabel(REPORT_COLUMN_RAPEAT[rowOrColumn] + ":"); |
|
rowPane.add(copyLabel); |
|
|
|
copyTitleTextField = new UITextField(); |
|
copyTitleTextField.setPreferredSize(new Dimension(107,24)); |
|
rowPane.add(copyTitleTextField); |
|
rowPane.add(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_Format") + ": 1,2-3,5,18")); |
|
|
|
|
|
return rowPane; |
|
} |
|
|
|
/** |
|
* 从worksheetAttr中populate数据给界面 |
|
* |
|
* @param attr 当前ElementCase的worksheet属性 |
|
* @param rowCount 总行数 |
|
* @param colCount 总列数 |
|
*/ |
|
public void populate(WorkSheetAttr attr, int rowCount, int colCount){ |
|
this.isRepeate = true; |
|
switch (attr.getDirection()) { |
|
case Constants.TOP_TO_BOTTOM: |
|
populateTopBottom(attr); |
|
setValueText(attr, rowCount, colCount, repeatColDataTextField, copyTitleTextField, showBlankCheckBox); |
|
break; |
|
case Constants.LEFT_TO_RIGHT: |
|
populateLeftRight(attr); |
|
setValueText(attr, rowCount, colCount ,repeatColDataTextField, copyTitleTextField, showBlankCheckBox); |
|
break; |
|
default: |
|
this.onOffButtonGroup.setSelectedIndex(1); |
|
this.isRepeate = false; |
|
break; |
|
} |
|
|
|
colOrRowConvert(); |
|
checkEnable(); |
|
} |
|
|
|
/** |
|
* populate列分栏数据 |
|
*/ |
|
private void populateLeftRight(WorkSheetAttr attr){ |
|
this.rowOrColumn = COLUMN; |
|
this.onOffButtonGroup.setSelectedIndex(0); |
|
this.colButton.setSelected(true); |
|
this.rowButton.setSelected(false); |
|
this.maxNumberSpinner.setEnabled(false); |
|
this.toXSpinner.setEnabled(false); |
|
if (attr.getCount() > -1 && attr.getCount() < Integer.MAX_VALUE) { |
|
this.toXRadioButton.setSelected(true); |
|
this.toXSpinner.setValue(new Integer(attr.getCount())); |
|
this.toXSpinner.setEnabled(true); |
|
} else if (attr.getMaxCount() > -1 && attr.getMaxCount() < Integer.MAX_VALUE) { |
|
this.maxRadioButton.setSelected(true); |
|
this.maxNumberSpinner.setValue(new Integer(attr.getMaxCount())); |
|
this.maxNumberSpinner.setEnabled(true); |
|
} |
|
} |
|
|
|
/** |
|
* populate行分栏 |
|
*/ |
|
private void populateTopBottom(WorkSheetAttr attr){ |
|
this.onOffButtonGroup.setSelectedIndex(0); |
|
this.rowButton.setSelected(true); |
|
this.colButton.setSelected(false); |
|
this.rowOrColumn = ROW; |
|
this.maxNumberSpinner.setEnabled(false); |
|
this.toXSpinner.setEnabled(false); |
|
if (attr.getCount() > -1 && attr.getCount() < Integer.MAX_VALUE) { |
|
this.toXRadioButton.setSelected(true); |
|
this.toXSpinner.setValue(new Integer(attr.getCount())); |
|
this.toXSpinner.setEnabled(true); |
|
} else if (attr.getMaxCount() > -1 && attr.getMaxCount() < Integer.MAX_VALUE) { |
|
this.maxRadioButton.setSelected(true); |
|
this.maxNumberSpinner.setValue(new Integer(attr.getMaxCount())); |
|
this.maxNumberSpinner.setEnabled(true); |
|
} |
|
} |
|
|
|
/** |
|
* 从worksheet中populate数据 |
|
* |
|
* @param worksheet 当前worksheet |
|
*/ |
|
public void populate(WorkSheet worksheet) { |
|
if (worksheet == null) { |
|
return; |
|
} |
|
WorkSheetAttr attr = worksheet.getWorkSheetAttr(); |
|
if (attr == null) { |
|
attr = new WorkSheetAttr(); |
|
} |
|
int rowCount = worksheet.getRowCount(); |
|
int colCount = worksheet.getColumnCount(); |
|
populate(attr, rowCount, colCount); |
|
} |
|
|
|
/** |
|
* 将attr中的数据set到面板上 |
|
*/ |
|
private void setValueText(WorkSheetAttr attr, int rowCount, int colCount, UITextField repeatColDataTextField, |
|
UITextField copyTitleTextField, UICheckBox showBlankCheckBox) { |
|
int startRow,endRow = -1,startColumn,endColumn = -1; |
|
|
|
if(attr.getStartIndex() == -1 && attr.getEndIndex() == -1){ |
|
return; |
|
} |
|
|
|
if (attr.getDirection() == ROW) { |
|
startRow = attr.getStartIndex(); |
|
endRow = attr.getEndIndex() == -1 ? rowCount - 1 : attr.getEndIndex(); |
|
startColumn = attr.getOppoStartIndex() == -1 ? 0 : attr.getOppoStartIndex(); |
|
endColumn = attr.getOppoEndIndex() == -1 ? colCount - 1: attr.getOppoEndIndex(); |
|
} else { |
|
startRow = attr.getOppoStartIndex() == -1 ? 0: attr.getOppoStartIndex(); |
|
endRow = attr.getOppoEndIndex() == -1 ? rowCount - 1 : attr.getOppoEndIndex(); |
|
startColumn = attr.getStartIndex(); |
|
endColumn = attr.getEndIndex() == -1 ? colCount - 1 : attr.getEndIndex(); |
|
} |
|
|
|
repeatColDataTextField.setText(ColumnRow.valueOf(startColumn, startRow).toString() +":" |
|
+ ColumnRow.valueOf(endColumn, endRow).toString()); |
|
copyTitleTextField.setText(attr.getIndexsToCopy()); |
|
showBlankCheckBox.setSelected(attr.isShowBlank()); |
|
} |
|
|
|
/** |
|
* update行数据 |
|
*/ |
|
private void updateRow(WorkSheetAttr attr){ |
|
attr.setDirection(Constants.TOP_TO_BOTTOM); |
|
|
|
if (this.maxRadioButton.isSelected()) { |
|
int value = ((Integer) (this.maxNumberSpinner.getValue())).intValue(); |
|
if (value > 0 && value < Integer.MAX_VALUE) { |
|
attr.setMaxCount(value); |
|
} |
|
} else { |
|
int value = ((Integer) this.toXSpinner.getValue()).intValue(); |
|
if (value > 0 && value < Integer.MAX_VALUE) { |
|
attr.setCount(value); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* update列数据 |
|
*/ |
|
private void updateCol(WorkSheetAttr attr){ |
|
attr.setDirection(Constants.LEFT_TO_RIGHT); |
|
|
|
if (this.maxRadioButton.isSelected()) { |
|
double value = ((Integer) (this.maxNumberSpinner.getValue())).intValue(); |
|
if (value > 0 && value < Integer.MAX_VALUE) { |
|
attr.setMaxCount((int) value); |
|
} |
|
} else { |
|
double value = ((Integer) this.toXSpinner.getValue()).intValue(); |
|
if (value > 0 && value < Integer.MAX_VALUE) { |
|
attr.setCount((int) value); |
|
} |
|
} |
|
} |
|
|
|
/** |
|
* update数据给WorksheetAttr |
|
* |
|
*/ |
|
public void update(WorkSheetAttr attr){ |
|
if (!isRepeate) { |
|
attr.setDirection(Constants.NONE); |
|
return; |
|
} |
|
|
|
switch (rowOrColumn) { |
|
case ROW: |
|
updateRow(attr); |
|
divide(attr, repeatColDataTextField, copyTitleTextField, showBlankCheckBox); |
|
break; |
|
case COLUMN: |
|
updateCol(attr); |
|
divide(attr, repeatColDataTextField, copyTitleTextField, showBlankCheckBox); |
|
break; |
|
default: |
|
attr.setDirection(Constants.NONE); |
|
break; |
|
} |
|
} |
|
|
|
/** |
|
* update数据给worksheet |
|
* |
|
* @param worksheet 当前worksheet |
|
*/ |
|
public void update(WorkSheet worksheet) { |
|
if (worksheet == null) { |
|
return; |
|
} |
|
|
|
WorkSheetAttr attr = new WorkSheetAttr(); |
|
worksheet.setWorkSheetAttr(attr); |
|
|
|
update(attr); |
|
} |
|
|
|
|
|
/** |
|
* 从界面中赋值给WorkSheetAttr |
|
* |
|
* @param attr 报表分栏属性 |
|
* @param repeatColDataTextField 从哪行开始复制 |
|
* @param copyTitleTextField 复制列序列 |
|
* @param showBlankCheckBox 是否填充空白 |
|
*/ |
|
public void divide(WorkSheetAttr attr, UITextField repeatColDataTextField, |
|
UITextField copyTitleTextField, UICheckBox showBlankCheckBox) { |
|
String[] repeateData = repeatColDataTextField.getText().split(":"); |
|
if (repeateData.length != 2 ) { |
|
return; |
|
} |
|
ColumnRow startCR = ColumnRow.valueOf(repeateData[0]); |
|
ColumnRow endCR = ColumnRow.valueOf(repeateData[1]); |
|
int start,oppoStart,end,oppoEnd; |
|
if (attr.getDirection() == ROW) { |
|
start = startCR.getRow(); |
|
end = endCR.getRow(); |
|
oppoStart = startCR.getColumn(); |
|
oppoEnd = endCR.getColumn(); |
|
}else { |
|
start = startCR.getColumn(); |
|
end = endCR.getColumn(); |
|
oppoStart = startCR.getRow(); |
|
oppoEnd = endCR.getRow(); |
|
} |
|
attr.setStartIndex(start); |
|
attr.setOppoStartIndex(oppoStart); |
|
attr.setEndIndex(end); |
|
attr.setOppoEndIndex(oppoEnd); |
|
attr.setIndexsToCopy(copyTitleTextField.getText()); |
|
attr.setShowBlank(showBlankCheckBox.isSelected()); |
|
} |
|
|
|
|
|
/** |
|
* 判断输入是否合法 |
|
*/ |
|
@Override |
|
public void checkValid() throws Exception { |
|
String repeatText = repeatColDataTextField.getText().trim(); |
|
if(StringUtils.isEmpty(repeatText)){ |
|
return; |
|
} |
|
|
|
boolean valid = true; |
|
if(!repeatText.matches("[a-zA-Z]+[0-9]+[:][a-zA-Z]+[0-9]+")){ |
|
valid = false; |
|
}else{ |
|
String[] repeateTexts = repeatText.split(":"); |
|
ColumnRow start = ColumnRow.valueOf(repeateTexts[0]); |
|
ColumnRow end = ColumnRow.valueOf(repeateTexts[1]); |
|
valid = start.getRow() <= end.getRow() && start.getColumn() <= end.getColumn(); |
|
} |
|
|
|
if (!valid) { |
|
repeatColDataTextField.setText(StringUtils.EMPTY); |
|
throw new Exception(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Column_Warn_Text")); |
|
} |
|
} |
|
}
|
|
|