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

192 lines
6.5 KiB

package com.fr.design.dscolumn;
import com.fr.design.constants.LayoutConstants;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.icombobox.FunctionComboBox;
import com.fr.design.i18n.Toolkit;
import com.fr.report.cell.TemplateCellElement;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.report.cell.cellattr.core.group.CustomGrouper;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.report.cell.cellattr.core.group.FunctionGrouper;
import com.fr.report.cell.cellattr.core.group.RecordGrouper;
import com.fr.report.cell.cellattr.core.group.SummaryGrouper;
import javax.swing.ButtonGroup;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import static com.fine.swing.ui.layout.Layouts.cell;
import static com.fine.swing.ui.layout.Layouts.column;
import static com.fine.swing.ui.layout.Layouts.row;
public class ResultSetGroupPopUpPane extends ResultSetGroupPane {
private UIRadioButton groupRadioButton;
private UIButton advancedButton;
private UIRadioButton listRadioButton;
private UIRadioButton summaryRadioButton;
private FunctionComboBox functionComboBox;
public ResultSetGroupPopUpPane() {
this(true);
}
// 将结果集进行分组: 分组,列表,汇总,自定义
public ResultSetGroupPopUpPane(boolean isGroup) {
super();
this.initComponents(isGroup);
}
public void initComponents(boolean isGroup) {
this.setLayout(new BorderLayout());
// 分组
groupRadioButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Report_Bind_Column_Group(Merger_The_Items_Which_Have_The_Same_Value_in_Column)"));
groupRadioButton.addActionListener(checkEnabledActionListener);
groupComboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
checkButtonEnabled();
}
});
advancedButton = new UIButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Custom"));
advancedButton.addActionListener(groupAdvancedListener);
// 列表
listRadioButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Report_Bind_Column_Select(Regardless_of_Having_the_Same_Value,Display_All_Item_in_Column)"));
listRadioButton.addActionListener(checkEnabledActionListener);
// 汇总
summaryRadioButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Report_Bind_Column_Summary(Including_SUM_,_AVERAGE_,_MAX_,_MIN_And_So_On)"), true);
summaryRadioButton.addActionListener(checkEnabledActionListener);
functionComboBox = new FunctionComboBox(GUICoreUtils.getFunctionArray());
this.add(column(LayoutConstants.VERTICAL_GAP,
row(10,
cell(groupRadioButton), cell(groupComboBox), cell(advancedButton)
),
cell(listRadioButton),
row(10,
cell(summaryRadioButton), cell(functionComboBox)
)
).getComponent());
ButtonGroup resultSetGroupButtonGroup = new ButtonGroup();
resultSetGroupButtonGroup.add(groupRadioButton);
if (isGroup) {
groupRadioButton.setSelected(true);
} else {
listRadioButton.setSelected(true);
}
resultSetGroupButtonGroup.add(listRadioButton);
resultSetGroupButtonGroup.add(summaryRadioButton);
checkButtonEnabled();
}
@Override
public void populate(TemplateCellElement cellElement) {
this.cellElement = cellElement;
if (isNPE(cellElement)) {
return;
}
DSColumn dSColumn = (DSColumn) cellElement.getValue();
// populate groupPane
// RecordGrouper
recordGrouper = dSColumn.getGrouper();
if (recordGrouper instanceof FunctionGrouper && !((FunctionGrouper) recordGrouper).isCustom()) {
int mode = ((FunctionGrouper) recordGrouper).getDivideMode();
if (mode == FunctionGrouper.GROUPING_MODE) {
this.groupRadioButton.setSelected(true);
this.groupComboBox.setSelectedIndex(COMMON);
} else if (mode == FunctionGrouper.CONTINUUM_MODE) {
this.groupRadioButton.setSelected(true);
this.groupComboBox.setSelectedIndex(CONTINUUM);
} else if (mode == FunctionGrouper.LIST_MODE) {
this.listRadioButton.setSelected(true);
}
} else if (recordGrouper instanceof FunctionGrouper && ((FunctionGrouper) recordGrouper).isCustom()) {
// 这种情况也放到自定义分组里面
this.groupRadioButton.setSelected(true);
this.groupComboBox.setSelectedIndex(ADVANCED);
} else if (recordGrouper instanceof SummaryGrouper) {
this.summaryRadioButton.setSelected(true);
this.functionComboBox.setFunction(((SummaryGrouper) recordGrouper).getFunction());
} else if (recordGrouper instanceof CustomGrouper) {
// 自定义分组 or 高级分组
this.groupRadioButton.setSelected(true);
this.groupComboBox.setSelectedIndex(ADVANCED);
}
checkButtonEnabled();
}
@Override
public void update() {
if (isNPE(cellElement)) {
return;
}
DSColumn dSColumn = (DSColumn) cellElement.getValue();
if (this.groupRadioButton.isSelected()) {
recordGrouper = updateGroupCombox();
} else if (this.listRadioButton.isSelected()) {
FunctionGrouper valueGrouper = new FunctionGrouper();
valueGrouper.setDivideMode(FunctionGrouper.LIST_MODE);
valueGrouper.setCustom(false);
recordGrouper = valueGrouper;
} else if (this.summaryRadioButton.isSelected()) {
SummaryGrouper summaryGrouper = new SummaryGrouper();
summaryGrouper.setFunction(functionComboBox.getFunction());
recordGrouper = summaryGrouper;
}
dSColumn.setGrouper(recordGrouper);
}
private void checkButtonEnabled() {
advancedButton.setEnabled(false);
functionComboBox.setEnabled(false);
groupComboBox.setEnabled(false);
if (summaryRadioButton.isSelected()) {
functionComboBox.setEnabled(true);
}
if (groupRadioButton.isSelected()) {
groupComboBox.setEnabled(true);
if (groupComboBox.getSelectedIndex() == 2) {
advancedButton.setEnabled(true);
}
}
}
public boolean isSummaryRadioButtonSelected() {
return summaryRadioButton.isSelected();
}
public void addListeners(ActionListener summaryListener, ActionListener otherListener, ActionListener sdcListener) {
summaryRadioButton.addActionListener(summaryListener);
groupRadioButton.addActionListener(otherListener);
listRadioButton.addActionListener(otherListener);
advancedButton.addActionListener(sdcListener);
}
ActionListener checkEnabledActionListener = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
checkButtonEnabled();
}
};
@Override
public void setRecordGrouper(RecordGrouper recordGrouper) {
this.recordGrouper = recordGrouper;
}
}