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.
194 lines
8.5 KiB
194 lines
8.5 KiB
package com.fr.design.gui.xpane; |
|
|
|
import com.fr.base.BaseFormula; |
|
import com.fr.data.impl.NameTableData; |
|
import com.fr.data.impl.RecursionTableData; |
|
import com.fr.data.impl.TableDataDictionary; |
|
import com.fr.design.DesignModelAdapter; |
|
import com.fr.design.data.BasicTableDataTreePane; |
|
import com.fr.design.data.DesignTableDataManager; |
|
import com.fr.design.data.datapane.EditOrNewLabel; |
|
import com.fr.design.data.datapane.EditOrNewLabel.Editable; |
|
import com.fr.design.data.datapane.TableDataTreePane; |
|
import com.fr.design.data.datapane.TreeTableDataComboBox; |
|
import com.fr.design.data.datapane.preview.PreviewLabel; |
|
import com.fr.design.data.datapane.preview.PreviewLabel.Previewable; |
|
import com.fr.design.data.tabledata.wrapper.AbstractTableDataWrapper; |
|
import com.fr.design.data.tabledata.wrapper.TableDataWrapper; |
|
import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; |
|
import com.fr.design.dialog.BasicPane; |
|
import com.fr.design.editor.ValueEditorPane; |
|
import com.fr.design.editor.ValueEditorPaneFactory; |
|
import com.fr.design.editor.editor.Editor; |
|
import com.fr.design.editor.editor.FormulaEditor; |
|
import com.fr.design.editor.editor.OldColumnIndexEditor; |
|
import com.fr.design.gui.ilable.UILabel; |
|
import com.fr.design.layout.FRGUIPaneFactory; |
|
import com.fr.design.layout.TableLayout; |
|
import com.fr.design.layout.TableLayoutHelper; |
|
|
|
|
|
import javax.swing.*; |
|
import java.awt.*; |
|
import java.awt.event.ItemEvent; |
|
import java.awt.event.ItemListener; |
|
import java.util.List; |
|
|
|
public class JTreeAutoBuildPane extends BasicPane implements Previewable, Editable { |
|
private TreeTableDataComboBox treeTableDataComboBox; |
|
private ValueEditorPane valuePane; |
|
private ValueEditorPane textPane; |
|
private JPanel centerPane; |
|
private JPanel selectTreeDataPanel; |
|
|
|
public JTreeAutoBuildPane() { |
|
this.initComponent(); |
|
} |
|
|
|
public void initComponent() { |
|
this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); |
|
UILabel selectTreeDataLabel = new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Select_A_Tree_DataSource_To_Build") + ": "); |
|
treeTableDataComboBox = new TreeTableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); |
|
treeTableDataComboBox.setPreferredSize(new Dimension(180, 20)); |
|
selectTreeDataPanel = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); |
|
selectTreeDataPanel.add(selectTreeDataLabel); |
|
treeTableDataComboBox.addItemListener(new ItemListener() { |
|
public void itemStateChanged(ItemEvent e) { |
|
tdChange(); |
|
} |
|
}); |
|
selectTreeDataPanel.add(treeTableDataComboBox); |
|
treeTableDataComboBox.setPreferredSize(new Dimension(200, 25)); |
|
PreviewLabel pl = new PreviewLabel(this); |
|
pl.setPreferredSize(new Dimension(25, 25)); |
|
EditOrNewLabel enl = new EditOrNewLabel(this, this); |
|
enl.setPreferredSize(new Dimension(25, 25)); |
|
selectTreeDataPanel.add(pl); |
|
selectTreeDataPanel.add(enl); |
|
|
|
this.add(selectTreeDataPanel, BorderLayout.NORTH); |
|
|
|
valuePane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new OldColumnIndexEditor(com.fr.design.i18n.Toolkit.i18nText("Columns"))}); |
|
FormulaEditor formulaEditor = new FormulaEditor(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
|
formulaEditor.setEnabled(true); |
|
textPane = ValueEditorPaneFactory.createValueEditorPane(new Editor[]{new OldColumnIndexEditor(com.fr.design.i18n.Toolkit.i18nText("Columns")), formulaEditor}); |
|
Component[][] coms = { |
|
{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Actual_Value") + ":"), |
|
valuePane}, |
|
{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Display_Value") + ":"), |
|
textPane}}; |
|
|
|
double p = TableLayout.PREFERRED; |
|
|
|
double[] rowSize = {p, p, p}; |
|
double[] columnSize = {p, p}; |
|
centerPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, |
|
columnSize); |
|
|
|
this.add(centerPane, BorderLayout.CENTER); |
|
tdChange(); |
|
} |
|
|
|
private void tdChange() { |
|
TableDataWrapper tableDataWrappe = this.treeTableDataComboBox.getSelectedItem(); |
|
if (tableDataWrappe == null) { |
|
return; |
|
} |
|
try { |
|
List<String> namelist = tableDataWrappe.calculateColumnNameList(); |
|
String[] columnNames = new String[namelist.size()]; |
|
namelist.toArray(columnNames); |
|
valuePane.setEditors(new Editor[]{new OldColumnIndexEditor(columnNames, com.fr.design.i18n.Toolkit.i18nText("ColumnName"))}, 1); |
|
FormulaEditor formulaEditor = new FormulaEditor(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
|
formulaEditor.setEnabled(true); |
|
textPane.setEditors(new Editor[]{new OldColumnIndexEditor(columnNames, com.fr.design.i18n.Toolkit.i18nText("ColumnName")), formulaEditor}, 1); |
|
} catch (Exception e) { |
|
valuePane.setEditors(new Editor[]{new OldColumnIndexEditor(100, com.fr.design.i18n.Toolkit.i18nText("ColumnName"))}, 1); |
|
FormulaEditor formulaEditor = new FormulaEditor(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
|
formulaEditor.setEnabled(true); |
|
textPane.setEditors(new Editor[]{new OldColumnIndexEditor(100, com.fr.design.i18n.Toolkit.i18nText("ColumnName")), formulaEditor}, 1); |
|
} |
|
} |
|
|
|
public void populate(TableDataDictionary tableDataDict) { |
|
if (tableDataDict == null) { |
|
this.treeTableDataComboBox.setSelectedItem(""); |
|
this.textPane.populate(1); |
|
this.valuePane.populate(1); |
|
return; |
|
} else { |
|
String _name = ""; |
|
if (tableDataDict.getTableData() instanceof NameTableData) { |
|
_name = ((NameTableData) tableDataDict.getTableData()).getName(); |
|
} |
|
this.treeTableDataComboBox.setSelectedTableDataByName(_name); |
|
tdChange(); |
|
// alex:因为显示到界面上的index是以1为始的,所以要加1 |
|
this.textPane.populate(tableDataDict.getKeyColumnIndex() + 1); |
|
Object value = null; |
|
if ((tableDataDict).getFormula() != null) { |
|
value = (tableDataDict).getFormula(); |
|
} else { |
|
value = tableDataDict.getValueColumnIndex() + 1; |
|
} |
|
|
|
this.valuePane.populate(value); |
|
} |
|
} |
|
|
|
public TableDataDictionary update() { |
|
TableDataDictionary tableDataDict = new TableDataDictionary(); |
|
Object object = this.valuePane.update(); |
|
// alex:因为显示到界面上的index是以1为始的,所以要减1 |
|
// carl:假如这里的序号要变,请考虑6.2的兼容 |
|
if (object instanceof Integer) { |
|
tableDataDict.setValueColumnIndex((Integer) object - 1); |
|
} else { |
|
tableDataDict.setFormula(((BaseFormula) object)); |
|
} |
|
TableDataWrapper tableDataWrappe = this.treeTableDataComboBox.getSelectedItem(); |
|
if (tableDataWrappe != null) { |
|
tableDataDict.setTableData(new NameTableData(tableDataWrappe.getTableDataName())); |
|
tableDataDict.setKeyColumnIndex((Integer) this.textPane.update() - 1); |
|
} |
|
|
|
return tableDataDict; |
|
} |
|
|
|
@Override |
|
protected String title4PopupWindow() { |
|
return "Auto Build Tree"; |
|
} |
|
|
|
@Override |
|
public void preview() { |
|
TableDataWrapper tableDataWrappe = treeTableDataComboBox.getSelectedItem(); |
|
if (tableDataWrappe == null) { |
|
return; |
|
} |
|
tableDataWrappe.previewData(); |
|
} |
|
|
|
@Override |
|
public void edit(JPanel jPanel) { |
|
RecursionTableData rtd = null; |
|
String name = ""; |
|
BasicTableDataTreePane tdtp = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); |
|
if (treeTableDataComboBox.getSelectedItem() == null) { |
|
//新建 |
|
rtd = new RecursionTableData(); |
|
name = TableDataTreePane.createUnrepeatedName(tdtp.getDataTree(), "Tree"); |
|
} else { |
|
//编辑 |
|
rtd = treeTableDataComboBox.getSelcetedTableData(); |
|
name = treeTableDataComboBox.getSelectedItem().getTableDataName(); |
|
} |
|
AbstractTableDataWrapper atdw = new TemplateTableDataWrapper(rtd, ""); |
|
tdtp.dgEdit(atdw.creatTableDataPane(), name); |
|
treeTableDataComboBox.refresh(); |
|
treeTableDataComboBox.setSelectedTableDataByName(name); |
|
textPane.populate(1); |
|
valuePane.populate(1); |
|
} |
|
|
|
}
|
|
|