diff --git a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/table/AbstractTableDataContentPane.java b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/table/AbstractTableDataContentPane.java index 75c7f47b8..1fff1bfe3 100644 --- a/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/table/AbstractTableDataContentPane.java +++ b/designer-chart/src/main/java/com/fr/design/mainframe/chart/gui/data/table/AbstractTableDataContentPane.java @@ -5,8 +5,8 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.design.gui.icombobox.UIComboBox; -import javax.swing.*; -import java.awt.*; +import javax.swing.JSeparator; +import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.List; @@ -46,8 +46,8 @@ public abstract class AbstractTableDataContentPane extends BasicBeanPane extends AbstractReportDataContentPane { + private TinyFormulaPane seriesPane; + private TinyFormulaPane valuePane; + public AbstractExtendedChartReportDataPane() { initComponents(); } @@ -30,11 +35,18 @@ public abstract class AbstractExtendedChartReportDataPane fieldList = new ArrayList(); + if (hasCustomFieldPane()) { + fieldList.add(new ExtendedField(seriesPane.updateBean())); + fieldList.add(new ExtendedField(valuePane.updateBean())); + } + dataConfig.setCustomFields(fieldList); chart.setFilterDefinition(dataSet); } diff --git a/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedChartTableDataPane.java b/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedChartTableDataPane.java index f9beeca2b..b49d34ec8 100644 --- a/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedChartTableDataPane.java +++ b/designer-chart/src/main/java/com/fr/extended/chart/AbstractExtendedChartTableDataPane.java @@ -11,11 +11,11 @@ import com.fr.design.mainframe.chart.gui.data.CalculateComboBox; import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.general.GeneralUtils; +import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.SwingConstants; import java.awt.BorderLayout; import java.awt.Component; -import java.awt.Dimension; import java.util.Arrays; import java.util.List; @@ -24,7 +24,7 @@ import java.util.List; */ public abstract class AbstractExtendedChartTableDataPane extends AbstractTableDataContentPane { - private CalculateComboBox function; + private ExtendedCustomFieldComboBoxPane customFieldComboBoxPane; public AbstractExtendedChartTableDataPane() { initComponents(); @@ -37,28 +37,27 @@ public abstract class AbstractExtendedChartTableDataPane { + private static final String[] HEADS = {com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Field_Name"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Series_Name"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Summary_Method")}; + + private UseFieldValuePane useFieldValuePane; + private CustomFieldNamePane customFieldNamePane; + + private List fieldList = new ArrayList(); + + @Override + protected void initLayout() { + this.setLayout(new BorderLayout(0, 6)); + JPanel northPane = new JPanel(new BorderLayout()); + northPane.add(jcb, BorderLayout.CENTER); + UILabel label = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Series_Name_From")); + label.setPreferredSize(new Dimension(82, 20)); + northPane.add(label, BorderLayout.WEST); + this.add(northPane, BorderLayout.NORTH); + this.add(cardPane, BorderLayout.CENTER); + } + + @Override + protected List> initPaneList() { + useFieldValuePane = new UseFieldValuePane(); + customFieldNamePane = new CustomFieldNamePane(); + List> list = new ArrayList>(); + list.add(useFieldValuePane); + list.add(customFieldNamePane); + return list; + } + + @Override + protected String title4PopupWindow() { + return StringUtils.EMPTY; + } + + public void checkBoxUse(boolean hasUse) { + jcb.setEnabled(hasUse); + useFieldValuePane.checkBoxUse(hasUse); + } + + public void clearAllBoxList() { + useFieldValuePane.clearAllBoxList(); + fieldList.clear(); + } + + protected void refreshBoxListWithSelectTableData(List columnNameList) { + useFieldValuePane.refreshBoxListWithSelectTableData(columnNameList); + fieldList = columnNameList; + } + + @Override + public void populateBean(AbstractDataConfig ob) { + if (ob.isCustomName()) { + customFieldNamePane.populateBean(ob); + jcb.setSelectedIndex(1); + } else { + useFieldValuePane.populateBean(ob); + jcb.setSelectedIndex(0); + } + } + + @Override + public void updateBean(AbstractDataConfig ob) { + if (jcb.getSelectedIndex() == 0) { + ob.setCustomName(false); + useFieldValuePane.updateBean(ob); + } else { + ob.setCustomName(true); + customFieldNamePane.updateBean(ob); + } + } + + private class UseFieldValuePane extends FurtherBasicBeanPane { + private UIComboBox series; + private UIComboBox value; + private CalculateComboBox function; + + private UseFieldValuePane() { + initComponents(); + } + + private void initComponents() { + + series = new UIComboBox(); + value = new UIComboBox(); + function = new CalculateComboBox(); + + Component[][] components = new Component[][]{ + new Component[]{new UILabel("series", SwingConstants.LEFT), series}, + new Component[]{new UILabel("value", SwingConstants.LEFT), value}, + new Component[]{new UILabel("function", SwingConstants.LEFT), function}, + }; + + double p = TableLayout.PREFERRED; + double[] columnSize = {76, 120}; + double[] rowSize = {p, p, p}; + + JPanel panel = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + + this.setLayout(new BorderLayout(0, 6)); + this.add(panel, BorderLayout.CENTER); + } + + public void checkBoxUse(boolean hasUse) { + series.setEnabled(hasUse); + value.setEnabled(hasUse); + function.setEnabled(hasUse); + } + + public void clearAllBoxList() { + AbstractTableDataContentPane.clearBoxItems(series); + AbstractTableDataContentPane.clearBoxItems(value); + } + + public void refreshBoxListWithSelectTableData(List columnNameList) { + AbstractTableDataContentPane.refreshBoxItems(series, columnNameList); + AbstractTableDataContentPane.refreshBoxItems(value, columnNameList); + } + + @Override + public void populateBean(AbstractDataConfig ob) { + List list = ob.getCustomFields(); + if (list.size() == 2) { + series.setSelectedItem(list.get(0).getFieldName()); + value.setSelectedItem(list.get(1).getFieldName()); + function.populateBean((AbstractDataFunction) list.get(1).getDataFunction()); + } + } + + @Override + public void updateBean(AbstractDataConfig ob) { + List list = new ArrayList(); + + list.add(new ExtendedField(Utils.objectToString(series.getSelectedItem()))); + ExtendedField field = new ExtendedField(Utils.objectToString(value.getSelectedItem())); + field.setDataFunction(function.updateBean()); + list.add(field); + + ob.setCustomFields(list); + } + + @Override + public boolean accept(Object ob) { + return true; + } + + @Override + public void reset() { + } + + @Override + public String title4PopupWindow() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Enable_Field_Value"); + } + + @Override + public AbstractDataConfig updateBean() { + return null; + } + } + + private class CustomFieldNamePane extends FurtherBasicBeanPane { + + private UICorrelationPane correlationPane; + + public CustomFieldNamePane() { + initComponents(); + } + + private void initComponents() { + + correlationPane = new UICorrelationPane(HEADS) { + @Override + protected ActionListener getAddButtonListener() { + return new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + tablePane.addLine(new String[]{StringUtils.EMPTY, StringUtils.EMPTY, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Use_None")}); + fireTargetChanged(); + } + }; + } + + public UITableEditor createUITableEditor() { + return new Editor() { + @Override + protected UICorrelationPane getParent() { + return correlationPane; + } + }; + } + }; + + this.setLayout(new BorderLayout()); + this.add(correlationPane, BorderLayout.CENTER); + + } + + @Override + public void populateBean(AbstractDataConfig ob) { + List customFields = ob.getCustomFields(); + + List list = new ArrayList(); + for (ExtendedField field : customFields) { + String[] array = {field.getFieldName(), field.getCustomName(), SeriesNameUseFieldNamePane.getFunctionString(field.getDataFunction())}; + list.add(array); + } + correlationPane.populateBean(list); + } + + + @Override + public void updateBean(AbstractDataConfig ob) { + List list = correlationPane.updateBean(); + + List customFields = new ArrayList(); + for (Object[] line : list) { + ExtendedField field = new ExtendedField(Utils.objectToString(line[0])); + field.setCustomName(Utils.objectToString(line[1])); + if (line.length > 2) { + field.setDataFunction(SeriesNameUseFieldNamePane.getFcuntionByName(Utils.objectToString(line[2]))); + } + customFields.add(field); + } + + ob.setCustomFields(customFields); + + } + + @Override + public boolean accept(Object ob) { + return true; + } + + @Override + public void reset() { + } + + @Override + public String title4PopupWindow() { + return com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Enable_Field_Name"); + } + + @Override + public AbstractDataConfig updateBean() { + return null; + } + } + + private abstract class Editor extends UITableEditor { + private JComponent editorComponent; + + protected abstract UICorrelationPane getParent(); + + @Override + public Object getCellEditorValue() { + if (editorComponent instanceof UIComboBox) { + return ((UIComboBox) editorComponent).getSelectedItem(); + } else if (editorComponent instanceof UITextField) { + return ((UITextField) editorComponent).getText(); + } else if (editorComponent instanceof CalculateComboBox) { + return ((CalculateComboBox) editorComponent).getSelectedItem(); + } + return super.getCellEditorValue(); + } + + @Override + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, final int row, int column) { + + switch (column) { + case 0: + editorComponent = createComboBoxEdit(row, value); + break; + case 1: + editorComponent = createTextEdit(value); + break; + default: + editorComponent = createCalculateComboBox(value); + break; + + } + return editorComponent; + } + + private void setDefaultName(int row) { + UITable table = getParent().getTable(); + Object object = table.getValueAt(row, 0); + if (object != null) { + table.setValueAt(object, row, 1); + } + } + + private UIComboBox createComboBoxEdit(final int row, Object value) { + UIComboBox uiComboBox = new UIComboBox(fieldList.toArray()); + + uiComboBox.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + getParent().stopCellEditing(); + getParent().fireTargetChanged(); + setDefaultName(row); + } + }); + + if (value != null && StringUtils.isNotEmpty(value.toString())) { + uiComboBox.getModel().setSelectedItem(value); + } else { + uiComboBox.getModel().setSelectedItem(value); + } + + return uiComboBox; + } + + private UITextField createTextEdit(Object value) { + UITextField uiTextField = new UITextField(); + if (value != null) { + uiTextField.setText(value.toString()); + } + + uiTextField.registerChangeListener(new UIObserverListener() { + @Override + public void doChange() { + getParent().fireTargetChanged(); + } + }); + + return uiTextField; + } + + private CalculateComboBox createCalculateComboBox(Object value) { + CalculateComboBox calculateComboBox = new CalculateComboBox(); + if (value != null) { + calculateComboBox.setSelectedItem(value); + } + calculateComboBox.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + getParent().stopCellEditing(); + getParent().fireTargetChanged(); + } + }); + return calculateComboBox; + } + } + +}