From 6a9170a93c944dc6c46a289a6bf0324aa55e5687 Mon Sep 17 00:00:00 2001 From: finereport Date: Wed, 25 Oct 2017 16:15:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F=EF=BC=8C?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E9=83=A8=E5=88=86=E5=8F=AF=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../insert/flot/FormulaFloatAction.java | 3 +- .../design/cell/editor/FormulaCellEditor.java | 10 +- .../cell/editor/FormulaFloatEditor.java | 10 +- .../design/cell/editor/RichTextToolBar.java | 5 +- .../design/dscolumn/DSColumnAdvancedPane.java | 10 +- .../dscolumn/SpecifiedGroupAttrPane.java | 6 +- .../headerfooter/HFAttributesEditDialog.java | 5 +- .../fr/design/mainframe/ElementCasePane.java | 2 +- .../com/fr/design/module/DesignerModule.java | 2 +- .../fr/design/report/RichTextEditingPane.java | 5 +- .../design/report/ValueVerifierEditPane.java | 142 +-- .../widget/ui/DateEditorDefinePane.java | 47 +- designer/src/com/fr/grid/IntelliElements.java | 22 +- .../com/fr/grid/selection/CellSelection.java | 18 +- .../cellquick/CellDSColumnEditor.java | 13 +- .../cellquick/CellFormulaQuickEditor.java | 12 +- .../cellquick/CellStringQuickEditor.java | 8 +- .../floatquick/FloatStringQuickEditor.java | 8 +- .../fr/design/actions/core/ActionFactory.java | 25 +- .../design/condition/LiteConditionPane.java | 10 +- .../datapane/ChoosePaneSupportFormula.java | 239 ++++- .../tabledatapane/MultiTDTableDataPane.java | 4 +- .../editor/DoubleDeckValueEditorPane.java | 17 +- .../com/fr/design/editor/ValueEditorPane.java | 811 +++++++-------- .../design/editor/editor/ConstantsEditor.java | 5 +- .../design/editor/editor/FormulaEditor.java | 28 +- .../com/fr/design/formula/FormulaPane.java | 41 +- .../FormulaPaneWhenReserveFormula.java | 7 +- .../fr/design/formula/SortFormulaPane.java | 7 +- .../fr/design/formula/TinyFormulaPane.java | 7 +- .../src/com/fr/design/formula/UIFormula.java | 7 +- .../design/present/dict/FormulaDictPane.java | 232 +++-- .../widget/component/DateValuePane.java | 11 +- .../write/submit/DBManipulationPane.java | 64 +- .../com/fr/design/chart/ChartSwingUtils.java | 5 +- .../chart/axis/ChartAlertValuePane.java | 7 +- .../fr/design/chart/axis/MinMaxValuePane.java | 14 +- .../report/GisMapReportDataContentPane.java | 596 ++++++----- .../chart/report/MapMoreReportIndexPane.java | 396 ++++---- .../chart/report/MapReportDataSinglePane.java | 33 +- .../report/AbstractReportDataContentPane.java | 6 +- .../CategoryPlotReportDataContentPane.java | 3 +- .../other/ChartDesignerInteractivePane.java | 4 +- .../chart/gui/other/ChartInteractivePane.java | 4 +- .../chart/gui/other/TimeSwitchPane.java | 25 +- .../chart/gui/style/ChartAxisLabelPane.java | 938 +++++++++--------- .../chart/gui/style/ChartAxisTitlePane.java | 6 +- .../chart/gui/style/DateAxisValuePane.java | 723 +++++++------- .../chart/gui/style/axis/ChartValuePane.java | 5 +- .../gui/style/series/UIColorPickerPane.java | 24 +- .../chart/gui/style/title/ChartTitlePane.java | 384 ++++--- .../other/VanChartInteractivePane.java | 14 +- .../designer/style/VanChartTitlePane.java | 8 +- .../style/axis/VanChartBaseAxisPane.java | 12 +- .../style/axis/VanChartTimeAxisPane.java | 16 +- .../style/axis/VanChartValueAxisPane.java | 5 +- .../component/MinMaxValuePaneWithOutTick.java | 6 +- .../background/VanChartAlertValuePane.java | 5 +- .../VanChartCustomIntervalBackgroundPane.java | 6 +- .../creator/XBorderStyleWidgetCreator.java | 308 +++--- .../accessibles/AccessibleFormulaEditor.java | 3 +- .../widget/wrappers/FormulaWrapper.java | 3 +- .../ui/designer/DateEditorDefinePane.java | 49 - 63 files changed, 2812 insertions(+), 2639 deletions(-) diff --git a/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java b/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java index 4e2a7cbb02..63dad86a27 100644 --- a/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java +++ b/designer/src/com/fr/design/actions/insert/flot/FormulaFloatAction.java @@ -3,6 +3,7 @@ */ package com.fr.design.actions.insert.flot; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; import com.fr.base.DynamicUnitList; import com.fr.base.Formula; @@ -108,7 +109,7 @@ public class FormulaFloatAction extends ElementCaseAction { reportPane.stopEditing(); final FloatElement floatElement = new FloatElement(); final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(StringUtils.EMPTY)); + formulaPane.populate(BaseFormula.createFormulaBuilder().build()); BasicDialog dialog = formulaPane.showLargeWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { diff --git a/designer/src/com/fr/design/cell/editor/FormulaCellEditor.java b/designer/src/com/fr/design/cell/editor/FormulaCellEditor.java index e69742ea95..38b8b75518 100644 --- a/designer/src/com/fr/design/cell/editor/FormulaCellEditor.java +++ b/designer/src/com/fr/design/cell/editor/FormulaCellEditor.java @@ -3,7 +3,7 @@ */ package com.fr.design.cell.editor; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.UIFormula; @@ -34,7 +34,7 @@ public class FormulaCellEditor extends com.fr.design.cell.editor.AbstractCellEdi */ @Override public Object getCellEditorValue() throws Exception { - Formula newFormula = this.formulaEditorPane.update(); + BaseFormula newFormula = this.formulaEditorPane.update(); if (newFormula.getContent() != null && newFormula.getContent().trim().length() > 1) { return newFormula; } else { @@ -64,13 +64,13 @@ public class FormulaCellEditor extends com.fr.design.cell.editor.AbstractCellEdi if (cellElement != null) { value = cellElement.getValue(); } - if (value == null || !(value instanceof Formula)) { - value = new Formula(""); + if (value == null || !(value instanceof BaseFormula)) { + value = BaseFormula.createFormulaBuilder().build(); } this.formulaEditorPane = FormulaFactory.createFormulaPaneWhenReserveFormula(); - this.formulaEditorPane.populate((Formula) value); + this.formulaEditorPane.populate((BaseFormula) value); return this.formulaEditorPane.showLargeWindow(SwingUtilities.getWindowAncestor(grid), new DialogActionAdapter() { @Override diff --git a/designer/src/com/fr/design/cell/editor/FormulaFloatEditor.java b/designer/src/com/fr/design/cell/editor/FormulaFloatEditor.java index 046b3ebe30..23a41bbdde 100644 --- a/designer/src/com/fr/design/cell/editor/FormulaFloatEditor.java +++ b/designer/src/com/fr/design/cell/editor/FormulaFloatEditor.java @@ -3,7 +3,7 @@ */ package com.fr.design.cell.editor; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.UIFormula; @@ -31,7 +31,7 @@ public class FormulaFloatEditor extends AbstractFloatEditor { */ @Override public Object getFloatEditorValue() throws Exception { - Formula newFormula = this.formulaEditorPane.update(); + BaseFormula newFormula = this.formulaEditorPane.update(); if (newFormula.getContent() != null && newFormula.getContent().trim().length() > 1) { return newFormula; } else { @@ -59,12 +59,12 @@ public class FormulaFloatEditor extends AbstractFloatEditor { public Component getFloatEditorComponent(Grid grid, FloatElement floatElement, int resolution) { //populate data to UI Object value = floatElement.getValue(); - if (value == null || !(value instanceof com.fr.base.Formula)) { - value = new Formula(""); + if (value == null || !(value instanceof BaseFormula)) { + value = BaseFormula.createFormulaBuilder().build(); } this.formulaEditorPane = FormulaFactory.createFormulaPane(); - this.formulaEditorPane.populate((Formula) value); + this.formulaEditorPane.populate((BaseFormula) value); return this.formulaEditorPane.showLargeWindow(SwingUtilities.getWindowAncestor(grid), new DialogActionAdapter() { diff --git a/designer/src/com/fr/design/cell/editor/RichTextToolBar.java b/designer/src/com/fr/design/cell/editor/RichTextToolBar.java index 0b5721975d..2fc9ff2005 100644 --- a/designer/src/com/fr/design/cell/editor/RichTextToolBar.java +++ b/designer/src/com/fr/design/cell/editor/RichTextToolBar.java @@ -3,6 +3,7 @@ */ package com.fr.design.cell.editor; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.Formula; @@ -311,12 +312,12 @@ public class RichTextToolBar extends BasicPane{ private ActionListener formulaActionListener = new ActionListener() { public void actionPerformed(ActionEvent evt) { final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula()); + formulaPane.populate(BaseFormula.createFormulaBuilder().build()); formulaPane.showLargeWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { StyledDocument doc = (StyledDocument) textPane.getDocument(); - Formula fm = formulaPane.update(); + BaseFormula fm = formulaPane.update(); String content = RichTextConverter.asFormula(fm.getContent()); int start = textPane.getSelectionStart(); AttributeSet attrs = start > 0 ? doc.getCharacterElement(start - 1).getAttributes() : new SimpleAttributeSet(); diff --git a/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java b/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java index 59fdb2205c..02776c2733 100644 --- a/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java +++ b/designer/src/com/fr/design/dscolumn/DSColumnAdvancedPane.java @@ -1,6 +1,6 @@ package com.fr.design.dscolumn; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.data.util.SortOrder; import com.fr.design.data.DesignTableDataManager; import com.fr.design.dialog.BasicPane; @@ -31,7 +31,9 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.*; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.BOTTOM; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.SPECIFY; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.TOP; public class DSColumnAdvancedPane extends BasicPane { @@ -460,7 +462,7 @@ public class DSColumnAdvancedPane extends BasicPane { private ActionListener formulaButtonActionListener = new ActionListener() { public void actionPerformed(ActionEvent evt) { - Formula valueFormula = new Formula(); + BaseFormula valueFormula = BaseFormula.createFormulaBuilder().build(); String text = formulaTextField.getText(); if (text == null || text.length() <= 0) { valueFormula.setContent(defaultValue); @@ -485,7 +487,7 @@ public class DSColumnAdvancedPane extends BasicPane { formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(JFormulaField.this), new DialogActionAdapter() { @Override public void doOk() { - Formula valueFormula = formulaPane.update(); + BaseFormula valueFormula = formulaPane.update(); if (valueFormula.getContent().length() <= 1) { formulaTextField.setText(defaultValue); } else { diff --git a/designer/src/com/fr/design/dscolumn/SpecifiedGroupAttrPane.java b/designer/src/com/fr/design/dscolumn/SpecifiedGroupAttrPane.java index 7321f2ca64..d03a6e47b0 100644 --- a/designer/src/com/fr/design/dscolumn/SpecifiedGroupAttrPane.java +++ b/designer/src/com/fr/design/dscolumn/SpecifiedGroupAttrPane.java @@ -1,6 +1,6 @@ package com.fr.design.dscolumn; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.design.beans.BasicBeanPane; import com.fr.design.condition.DSColumnLiteConditionPane; import com.fr.design.dialog.BasicPane; @@ -333,7 +333,7 @@ public class SpecifiedGroupAttrPane extends BasicPane { formulaButton.setPreferredSize(new Dimension(25, valueField.getPreferredSize().height)); formulaButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - Formula valueFormula = new Formula(); + BaseFormula valueFormula = BaseFormula.createFormulaBuilder().build(); String text = valueField.getText(); if (text == null || text.length() <= 0) { valueFormula.setContent("$$$"); @@ -347,7 +347,7 @@ public class SpecifiedGroupAttrPane extends BasicPane { formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(FormulaGroupPane.this), new DialogActionAdapter(){ @Override public void doOk() { - Formula valueFormula = formulaPane.update(); + BaseFormula valueFormula = formulaPane.update(); if (valueFormula.getContent().length() <= 1) { valueField.setText("$$$"); } else { diff --git a/designer/src/com/fr/design/headerfooter/HFAttributesEditDialog.java b/designer/src/com/fr/design/headerfooter/HFAttributesEditDialog.java index f30a6e2129..fb68157271 100644 --- a/designer/src/com/fr/design/headerfooter/HFAttributesEditDialog.java +++ b/designer/src/com/fr/design/headerfooter/HFAttributesEditDialog.java @@ -3,6 +3,7 @@ */ package com.fr.design.headerfooter; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.base.headerfooter.*; import com.fr.design.dialog.BasicPane; @@ -121,7 +122,7 @@ public class HFAttributesEditDialog extends BasicPane { formulaButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { - Formula valueFormula = new Formula(); + BaseFormula valueFormula = BaseFormula.createFormulaBuilder().build(); String text = formulaContentField.getText(); if (text == null || text.length() <= 0) { valueFormula.setContent(""); @@ -135,7 +136,7 @@ public class HFAttributesEditDialog extends BasicPane { @Override public void doOk() { - Formula valueFormula = formulaPane.update(); + BaseFormula valueFormula = formulaPane.update(); if (valueFormula.getContent().length() <= 1) { formulaContentField.setText(""); } else { diff --git a/designer/src/com/fr/design/mainframe/ElementCasePane.java b/designer/src/com/fr/design/mainframe/ElementCasePane.java index 0445b09877..8a84788b6d 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePane.java @@ -322,7 +322,7 @@ public abstract class ElementCasePane extends Tar private void initDefaultEditors() { Grid grid = this.getGrid(); grid.setDefaultCellEditor(DSColumn.class, new DSColumnCellEditor(this)); - grid.setDefaultCellEditor(Formula.class, new FormulaCellEditor(this)); + grid.setDefaultCellEditor(BaseFormula.class, new FormulaCellEditor(this)); grid.setDefaultCellEditor(RichText.class, new RichTextCellEditor(this)); grid.setDefaultCellEditor(BiasTextPainter.class, new BiasTextPainterCellEditor(this)); diff --git a/designer/src/com/fr/design/module/DesignerModule.java b/designer/src/com/fr/design/module/DesignerModule.java index c037267fbc..ba10f42259 100644 --- a/designer/src/com/fr/design/module/DesignerModule.java +++ b/designer/src/com/fr/design/module/DesignerModule.java @@ -112,7 +112,7 @@ public class DesignerModule extends DesignModule { private void registerCellEditor() { ActionFactory.registerCellEditor(String.class, CellStringQuickEditor.class); ActionFactory.registerCellEditor(Number.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditor(Formula.class, CellFormulaQuickEditor.class); + ActionFactory.registerCellEditor(BaseFormula.class, CellFormulaQuickEditor.class); ActionFactory.registerCellEditor(SubReport.class, CellSubReportEditor.class); ActionFactory.registerCellEditor(RichText.class, CellRichTextEditor.class); ActionFactory.registerCellEditor(DSColumn.class, CellDSColumnEditor.class); diff --git a/designer/src/com/fr/design/report/RichTextEditingPane.java b/designer/src/com/fr/design/report/RichTextEditingPane.java index 15b3496bd3..6999f26a7b 100644 --- a/designer/src/com/fr/design/report/RichTextEditingPane.java +++ b/designer/src/com/fr/design/report/RichTextEditingPane.java @@ -3,6 +3,7 @@ */ package com.fr.design.report; +import com.fr.base.BaseFormula; import com.fr.base.FRContext; import com.fr.base.Formula; import com.fr.design.dialog.DialogActionAdapter; @@ -139,12 +140,12 @@ public class RichTextEditingPane extends UITextPane{ private void popUpFormulaEditPane(final String formulaContent, final int formulaStart, final AttributeSet attrs){ final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(formulaContent)); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(formulaContent)); formulaPane.showLargeWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { StyledDocument doc = (StyledDocument) RichTextEditingPane.this.getDocument(); - Formula fm = formulaPane.update(); + BaseFormula fm = formulaPane.update(); String content = RichTextConverter.asFormula(fm.getContent()); try { doc.remove(formulaStart, formulaContent.length() + WRAPPER_LEN); diff --git a/designer/src/com/fr/design/report/ValueVerifierEditPane.java b/designer/src/com/fr/design/report/ValueVerifierEditPane.java index f3ebda61a5..5eea0f207c 100644 --- a/designer/src/com/fr/design/report/ValueVerifierEditPane.java +++ b/designer/src/com/fr/design/report/ValueVerifierEditPane.java @@ -1,71 +1,71 @@ -package com.fr.design.report; - -import com.fr.base.Formula; -import com.fr.data.VerifyItem; -import com.fr.design.gui.itableeditorpane.ActionStyle; -import com.fr.design.gui.itableeditorpane.UIArrayFormulaTableModel; -import com.fr.design.gui.itableeditorpane.UITableEditorPane; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.GeneralUtils; -import com.fr.general.Inter; -import com.fr.report.write.ValueVerifier; -import com.fr.stable.FormulaProvider; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; - -public class ValueVerifierEditPane extends JPanel { - private UITableEditorPane tableEditorPane; - private final String[] columnNames = new String[] { - Inter.getLocText(new String[] {"Verify-Verify_Formula", "Verify-ToolTips"}, new String[] {"(", ")"}), - Inter.getLocText("Verify-Error_Information") }; - - public ValueVerifierEditPane() { - // ben:UITableEditorPane; - this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); - tableEditorPane = new UITableEditorPane(new UIArrayFormulaTableModel(columnNames, new int[] { - ActionStyle.ADDSTYLE, ActionStyle.DELETESTYLE, - ActionStyle.MOVEUPSTYLE, ActionStyle.MOVEDOWNSTYLE})); - this.add(tableEditorPane, BorderLayout.CENTER); - } - - /** - * populate - */ - public void populate(ValueVerifier valueVerifier) { - if (valueVerifier == null) { - return; - } - int rowCount = valueVerifier.getVerifyItemsCount(); - Object[][] os = new Object[rowCount][]; - int tableDataCount = 0; - for (int i = 0; i < rowCount; i ++) { - VerifyItem item = valueVerifier.getVerifyItem(i); - FormulaProvider formula = item.getFormula(); - if (formula == null) { - continue; - } - String msg = item.getMessage(); - if (!StableUtils.canBeFormula(msg)) { - msg = "\"" + msg + "\"";//如果报错信息是以前的写法(字符串)就拼上"" - } - os[tableDataCount++] = new Object[]{formula, new Formula(msg)}; - } - this.tableEditorPane.populate(os); - } - - public ValueVerifier update() { - ValueVerifier valueVerifier = new ValueVerifier(); - java.util.List list = tableEditorPane.update(); - for (int i = 0; i < list.size(); i++) { - Object[] o = list.get(i); - if (o == null || o[0] == null) { - continue; - } - VerifyItem item = new VerifyItem(new Formula(GeneralUtils.objectToString(o[0])), GeneralUtils.objectToString(o[1])); - valueVerifier.addVerifyItem(item); - } - return valueVerifier; - } -} +package com.fr.design.report; + +import com.fr.base.BaseFormula; +import com.fr.data.VerifyItem; +import com.fr.design.gui.itableeditorpane.ActionStyle; +import com.fr.design.gui.itableeditorpane.UIArrayFormulaTableModel; +import com.fr.design.gui.itableeditorpane.UITableEditorPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.GeneralUtils; +import com.fr.general.Inter; +import com.fr.report.write.ValueVerifier; +import com.fr.stable.FormulaProvider; +import com.fr.stable.StableUtils; + +import javax.swing.*; +import java.awt.*; + +public class ValueVerifierEditPane extends JPanel { + private UITableEditorPane tableEditorPane; + private final String[] columnNames = new String[] { + Inter.getLocText(new String[] {"Verify-Verify_Formula", "Verify-ToolTips"}, new String[] {"(", ")"}), + Inter.getLocText("Verify-Error_Information") }; + + public ValueVerifierEditPane() { + // ben:UITableEditorPane; + this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); + tableEditorPane = new UITableEditorPane(new UIArrayFormulaTableModel(columnNames, new int[] { + ActionStyle.ADDSTYLE, ActionStyle.DELETESTYLE, + ActionStyle.MOVEUPSTYLE, ActionStyle.MOVEDOWNSTYLE})); + this.add(tableEditorPane, BorderLayout.CENTER); + } + + /** + * populate + */ + public void populate(ValueVerifier valueVerifier) { + if (valueVerifier == null) { + return; + } + int rowCount = valueVerifier.getVerifyItemsCount(); + Object[][] os = new Object[rowCount][]; + int tableDataCount = 0; + for (int i = 0; i < rowCount; i ++) { + VerifyItem item = valueVerifier.getVerifyItem(i); + FormulaProvider formula = item.getFormula(); + if (formula == null) { + continue; + } + String msg = item.getMessage(); + if (!StableUtils.canBeFormula(msg)) { + msg = "\"" + msg + "\"";//如果报错信息是以前的写法(字符串)就拼上"" + } + os[tableDataCount++] = new Object[]{formula, BaseFormula.createFormulaBuilder().build(msg)}; + } + this.tableEditorPane.populate(os); + } + + public ValueVerifier update() { + ValueVerifier valueVerifier = new ValueVerifier(); + java.util.List list = tableEditorPane.update(); + for (int i = 0; i < list.size(); i++) { + Object[] o = list.get(i); + if (o == null || o[0] == null) { + continue; + } + VerifyItem item = new VerifyItem(BaseFormula.createFormulaBuilder().build(o[0]), GeneralUtils.objectToString(o[1])); + valueVerifier.addVerifyItem(item); + } + return valueVerifier; + } +} diff --git a/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java b/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java index 6847745b7e..843c185c47 100644 --- a/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java +++ b/designer/src/com/fr/design/widget/ui/DateEditorDefinePane.java @@ -17,6 +17,7 @@ import com.fr.general.DateUtils; import com.fr.general.Inter; import com.fr.script.Calculator; import com.fr.stable.ArrayUtils; +import com.fr.stable.FormulaProvider; import com.fr.stable.UtilEvalError; import javax.swing.*; @@ -214,52 +215,6 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane 0 && textValue.charAt(0) == '=') { - ec.setCellValue(column + c, row + r, new Formula(textValue)); + ec.setCellValue(column + c, row + r, BaseFormula.createFormulaBuilder().build(textValue)); } else { Number number = Utils.string2Number(lineTextArray[c]); if (number != null) { diff --git a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java index 9c45dd3bcc..21383b73d1 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -1,6 +1,6 @@ package com.fr.quickeditor.cellquick; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.design.actions.UpdateAction; import com.fr.design.actions.columnrow.DSColumnConditionAction; import com.fr.design.actions.core.ActionFactory; @@ -47,7 +47,12 @@ import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; -import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.*; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.BOTTOM; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.EVEN; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.ODD; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.SPECIFY; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.TOP; +import static com.fr.report.cell.cellattr.core.group.FilterTypeEnum.UNDEFINE; /** @@ -974,7 +979,7 @@ public class CellDSColumnEditor extends CellQuickEditor { private ActionListener formulaButtonActionListener = new ActionListener() { public void actionPerformed(ActionEvent evt) { - Formula valueFormula = new Formula(); + BaseFormula valueFormula = BaseFormula.createFormulaBuilder().build(); String text = formulaTextField.getText(); if (text == null || text.length() <= 0) { valueFormula.setContent(defaultValue); @@ -991,7 +996,7 @@ public class CellDSColumnEditor extends CellQuickEditor { formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(DSColumnAdvancedEditorPane.JFormulaField.this), new DialogActionAdapter() { @Override public void doOk() { - Formula valueFormula = formulaPane.update(); + BaseFormula valueFormula = formulaPane.update(); if (valueFormula.getContent().length() <= 1) { formulaTextField.setText(defaultValue); } else { diff --git a/designer/src/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java index 7d245434cc..695410cb0d 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellFormulaQuickEditor.java @@ -1,6 +1,6 @@ package com.fr.quickeditor.cellquick; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.base.Style; import com.fr.base.TextFormat; import com.fr.design.actions.core.ActionFactory; @@ -99,11 +99,11 @@ public class CellFormulaQuickEditor extends CellQuickEditor { public void actionPerformed(ActionEvent evt) { String text = formulaTextField.getText(); final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(text)); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(text)); formulaPane.showLargeWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { - Formula fm = formulaPane.update(); + BaseFormula fm = formulaPane.update(); if (fm.getContent().length() <= 1) { formulaTextField.setText(DEFAULT_FORMULA); } else { @@ -146,7 +146,7 @@ public class CellFormulaQuickEditor extends CellQuickEditor { tc.getEditingElementCase().addCellElement(cellElement, false); } if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { - Formula textFormula = new Formula(tmpText); + BaseFormula textFormula = BaseFormula.createFormulaBuilder().build(tmpText); textFormula.setReserveInResult(reserveInResult); textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly); cellElement.setValue(textFormula); @@ -175,8 +175,8 @@ public class CellFormulaQuickEditor extends CellQuickEditor { Object value = cellElement.getValue(); if (value == null) { str = StringUtils.EMPTY; - } else if (value instanceof Formula) { - Formula formula = (Formula) value; + } else if (value instanceof BaseFormula) { + BaseFormula formula = (BaseFormula) value; str = formula.getContent(); reserveInResult = formula.isReserveInResult(); reserveOnWriteOrAnaly = formula.isReserveOnWriteOrAnaly(); diff --git a/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java b/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java index bd5ea60d1c..5f335ffb76 100644 --- a/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java +++ b/designer/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java @@ -1,6 +1,6 @@ package com.fr.quickeditor.cellquick; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.base.Style; import com.fr.base.TextFormat; import com.fr.design.gui.itextarea.UITextArea; @@ -110,7 +110,7 @@ public class CellStringQuickEditor extends CellQuickEditor { tc.getEditingElementCase().addCellElement(cellElement, false); } if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { - Formula textFormula = new Formula(tmpText); + BaseFormula textFormula = BaseFormula.createFormulaBuilder().build(tmpText); textFormula.setReserveInResult(reserveInResult); textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly); cellElement.setValue(textFormula); @@ -139,8 +139,8 @@ public class CellStringQuickEditor extends CellQuickEditor { Object value = cellElement.getValue(); if (value == null) { str = StringUtils.EMPTY; - } else if (value instanceof Formula) { - Formula formula = (Formula) value; + } else if (value instanceof BaseFormula) { + BaseFormula formula = (BaseFormula) value; str = formula.getContent(); reserveInResult = formula.isReserveInResult(); reserveOnWriteOrAnaly = formula.isReserveOnWriteOrAnaly(); diff --git a/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java b/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java index 3749407e97..1f5718a9e9 100644 --- a/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java +++ b/designer/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java @@ -1,7 +1,7 @@ package com.fr.quickeditor.floatquick; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.base.Style; import com.fr.base.TextFormat; import com.fr.design.constants.UIConstants; @@ -68,10 +68,10 @@ public class FloatStringQuickEditor extends FloatQuickEditor { Object value = floatElement.getValue(); if (value == null) { str = StringUtils.EMPTY; - } else if (value instanceof Formula) { + } else if (value instanceof BaseFormula) { //MoMeak: 没拆文本框和公式所以需要这么个玩意 formulaButton.setVisible(true); - Formula formula = (Formula) value; + BaseFormula formula = (BaseFormula) value; str = formula.getContent(); stringTextField.setLineWrap(false); this.setBorder(BorderFactory.createEmptyBorder(10, 75, 10, 10)); @@ -110,7 +110,7 @@ public class FloatStringQuickEditor extends FloatQuickEditor { protected void changeReportPaneCell(String tmpText) { if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { - Formula textFormula = new Formula(tmpText); + BaseFormula textFormula = BaseFormula.createFormulaBuilder().build(tmpText); textFormula.setReserveInResult(reserveInResult); textFormula.setReserveOnWriteOrAnaly(reserveOnWriteOrAnaly); floatElement.setValue(textFormula); diff --git a/designer_base/src/com/fr/design/actions/core/ActionFactory.java b/designer_base/src/com/fr/design/actions/core/ActionFactory.java index bf59e82332..8f0213562c 100644 --- a/designer_base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer_base/src/com/fr/design/actions/core/ActionFactory.java @@ -127,23 +127,32 @@ public class ActionFactory { } private static QuickEditor createEditor(Class clazz, Map> editorMap) { - Class c = editorMap.get(clazz); + Class c = findQuickEditorClass(clazz, editorMap); + if (c == null) { + return null; + } try { Constructor constructor = c.getDeclaredConstructor(); constructor.setAccessible(true); return constructor.newInstance(); - } catch (NoSuchMethodException e) { - FRContext.getLogger().error(e.getMessage(), e); - } catch (IllegalAccessException e) { - FRContext.getLogger().error(e.getMessage(), e); - } catch (InstantiationException e) { - FRContext.getLogger().error(e.getMessage(), e); - } catch (InvocationTargetException e) { + } catch (Exception e) { FRContext.getLogger().error(e.getMessage(), e); } return null; } + private static Class findQuickEditorClass(Class clazz, Map> editorMap) { + Class c = editorMap.get(clazz); + if (c == null) { + Class superClazz = clazz.getSuperclass(); + if (superClazz == null) { + return null; + } + return findQuickEditorClass(superClazz, editorMap); + } + return c; + } + public static QuickEditor getCellEditor(Class clazz) { return createEditor(clazz, cellEditor); } diff --git a/designer_base/src/com/fr/design/condition/LiteConditionPane.java b/designer_base/src/com/fr/design/condition/LiteConditionPane.java index ab1757153b..575281c7eb 100644 --- a/designer_base/src/com/fr/design/condition/LiteConditionPane.java +++ b/designer_base/src/com/fr/design/condition/LiteConditionPane.java @@ -1,7 +1,7 @@ package com.fr.design.condition; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.data.DataConstants; import com.fr.data.condition.*; import com.fr.design.beans.BasicBeanPane; @@ -75,13 +75,13 @@ public abstract class LiteConditionPane extends BasicBeanPa @Override public void actionPerformed(ActionEvent evt) { - Formula formula; + BaseFormula formula; String text = formulaTextArea.getText(); if (text == null || text.length() <= 0) { - formula = new Formula(StringUtils.EMPTY); + formula = BaseFormula.createFormulaBuilder().build(); } else { - formula = new Formula(text); + formula = BaseFormula.createFormulaBuilder().build(text); } final UIFormula formulaPane = FormulaFactory.createFormulaPane(); @@ -90,7 +90,7 @@ public abstract class LiteConditionPane extends BasicBeanPa @Override public void doOk() { - Formula formula = formulaPane.update(); + BaseFormula formula = formulaPane.update(); if (formula.getContent().length() <= 1) {// 如果没有填任何字符,则是空白文本 formulaTextArea.setText(StringUtils.EMPTY); } else { diff --git a/designer_base/src/com/fr/design/data/datapane/ChoosePaneSupportFormula.java b/designer_base/src/com/fr/design/data/datapane/ChoosePaneSupportFormula.java index c59f187f56..0bc32dcf0a 100644 --- a/designer_base/src/com/fr/design/data/datapane/ChoosePaneSupportFormula.java +++ b/designer_base/src/com/fr/design/data/datapane/ChoosePaneSupportFormula.java @@ -1 +1,238 @@ -package com.fr.design.data.datapane; import com.fr.base.*; import com.fr.design.data.datapane.preview.PreviewLabel; import com.fr.design.data.datapane.preview.PreviewTablePane; import com.fr.data.impl.EmbeddedTableData; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.parameter.ParameterInputPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.ComparatorUtils; import com.fr.script.Calculator; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.*; /** * Author : Shockway * Date: 13-8-16 * Time: 下午3:46 */ public class ChoosePaneSupportFormula extends ChoosePane { private String ori_ds_formula; private String ori_ds_name; private String ori_table_formula; private String ori_table_name; public ChoosePaneSupportFormula() { this(null); } public ChoosePaneSupportFormula(PreviewLabel.Previewable parent) { this(parent, -1); } public ChoosePaneSupportFormula(PreviewLabel.Previewable parent, int labelSize) { super(parent, labelSize); this.dsNameComboBox.setEditable(true); } protected void addDSBoxListener() { dsNameComboBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { schemaBox.setSelectedIndex(-1); // 如果table是用公式编辑的 没必要联动清除 if (Utils.objectToString(tableNameComboBox.getEditor().getItem()).startsWith("=")) { return; } tableNameComboBox.setSelectedItem(""); JTree tree = tableNameComboBox.getTree(); if (tree == null) { return; } DefaultMutableTreeNode rootTreeNode = (DefaultMutableTreeNode) tree.getModel().getRoot(); rootTreeNode.removeAllChildren(); rootTreeNode.add(new ExpandMutableTreeNode("Loading...")); ((DefaultTreeModel) tree.getModel()).reload(); } }); } protected void addFocusListener() { } /** * 只弹出数据库框里的参数 * * @return */ protected String getDSName() { String selectedDSName = null; String item = Utils.objectToString(this.dsNameComboBox.getEditor().getItem()); // 没有选中的列表项 那么看看是不是手输值 if (item == null) { return null; } if (ComparatorUtils.equals(ori_ds_formula, item)) { return ori_ds_name; } ori_ds_formula = item; // 公式 需要解析 输入默认值 if (item.startsWith("=")) { Calculator ca = Calculator.createCalculator(); boolean isFormula = true; Parameter[] parameters = ParameterHelper.analyze4Parameters(new String[]{item}, isFormula); if (parameters.length > 0) { final Map paraMap = new HashMap(); analyseParaDefaultValue(parameters); final ParameterInputPane pPane = new ParameterInputPane(parameters, false); pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { public void doOk() { paraMap.putAll(pPane.update()); } }).setVisible(true); ca.pushNameSpace(ParameterMapNameSpace.create(paraMap)); } try { selectedDSName = Utils.objectToString(ca.eval(new Formula(item))); // selectedDSName = ParameterHelper.analyzeCurrentContextTableData4Templatee(item, parameters); } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } } else { selectedDSName = item; } ori_ds_name = selectedDSName; return selectedDSName; } /** * 在一个参数弹窗中弹出数据库框和表框的参数 * * @return */ protected String[] getDSAndTableName() { String dsName = "", tableName = ""; String dsItem = Utils.objectToString(this.dsNameComboBox.getEditor().getItem()); String tableItem = this.getTableName(); if (ComparatorUtils.equals(ori_ds_formula, dsItem) && ComparatorUtils.equals(ori_table_formula, tableItem)) { return new String[]{ori_ds_name, ori_table_name}; } ori_ds_formula = dsItem; ori_table_formula = tableItem; List paraList = new ArrayList(); pushPara(dsItem, paraList); pushPara(tableItem, paraList); Calculator ca = Calculator.createCalculator(); if (!paraList.isEmpty()) { Parameter[] parameters = (Parameter[]) paraList.toArray(new Parameter[paraList.size()]); final Map paraMap = new HashMap(); analyseParaDefaultValue(parameters); final ParameterInputPane pPane = new ParameterInputPane(parameters, false); pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { public void doOk() { paraMap.putAll(pPane.update()); } }).setVisible(true); ca.pushNameSpace(ParameterMapNameSpace.create(paraMap)); } try { dsName = dsItem.startsWith("=") ? Utils.objectToString(ca.eval(new Formula(dsItem))) : dsItem; tableName = tableItem.startsWith("=") ? Utils.objectToString(ca.eval(new Formula(tableItem))) : tableItem; } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } ori_ds_name = dsName; ori_table_name = tableName; return new String[]{dsName, tableName}; } private void pushPara(String item, List paraList) { if (item.startsWith("=")) { Parameter[] parameters = ParameterHelper.analyze4Parameters(new String[]{item}, true); for (Parameter p : parameters) { if (!paraList.contains(p)) { paraList.add(p); } } } } protected void failedToFindTable() { this.ori_ds_formula = null; this.ori_table_formula = null; } /** * 预览key value对应的数据 * @param key 键 * @param value 值 */ public void preview(int key, int value) { EmbeddedTableData tb = PreviewTablePane.previewTableData(createSelectTableData(), key, value); if (tb == null) { failedToFindTable(); } } public DataBaseItems updateBean() { return updateBean(false); } /** * 这个分两种情况 设计的时候弹窗填入参数 需要返回计算后的值 * 而当写入xml的时候 需要取他的原始formula * * @param getFormula * @return */ public DataBaseItems updateBean(boolean getFormula) { String[] names; if (getFormula) { names = new String[]{Utils.objectToString(this.dsNameComboBox.getEditor().getItem()), this.getTableName()}; } else { names = getDSAndTableName(); } if (names != null && names.length == 2) { return new DataBaseItems(names[0], this.schemaBox.getSelectedItem(), names[1]); } else { return new DataBaseItems("", "", ""); } } /** * 从模板参数和全局参数中取参数的默认值 * * @param ps 参数 */ public void analyseParaDefaultValue(Parameter[] ps) { JTemplate jTemplate = DesignerContext.getDesignerFrame().getSelectedJTemplate(); Parameter[] allParas = jTemplate.getParameters(); for (int i = 0; i < ps.length; i++) { Parameter p = ps[i]; for (int j = 0; j < allParas.length; j++) { if (ComparatorUtils.equals(p.getName(), allParas[j].getName())) { p.setValue(allParas[j].getValue()); } } } } } \ No newline at end of file +package com.fr.design.data.datapane; + +import com.fr.base.BaseFormula; +import com.fr.base.FRContext; +import com.fr.base.Parameter; +import com.fr.base.ParameterHelper; +import com.fr.base.ParameterMapNameSpace; +import com.fr.base.Utils; +import com.fr.data.impl.EmbeddedTableData; +import com.fr.design.data.datapane.preview.PreviewLabel; +import com.fr.design.data.datapane.preview.PreviewTablePane; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.parameter.ParameterInputPane; +import com.fr.general.ComparatorUtils; +import com.fr.script.Calculator; + +import javax.swing.*; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Author : Shockway + * Date: 13-8-16 + * Time: 下午3:46 + */ +public class ChoosePaneSupportFormula extends ChoosePane { + private String ori_ds_formula; + private String ori_ds_name; + private String ori_table_formula; + private String ori_table_name; + + public ChoosePaneSupportFormula() { + this(null); + } + + public ChoosePaneSupportFormula(PreviewLabel.Previewable parent) { + this(parent, -1); + } + + public ChoosePaneSupportFormula(PreviewLabel.Previewable parent, int labelSize) { + super(parent, labelSize); + this.dsNameComboBox.setEditable(true); + } + + protected void addDSBoxListener() { + dsNameComboBox.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + schemaBox.setSelectedIndex(-1); + // 如果table是用公式编辑的 没必要联动清除 + if (Utils.objectToString(tableNameComboBox.getEditor().getItem()).startsWith("=")) { + return; + } + tableNameComboBox.setSelectedItem(""); + JTree tree = tableNameComboBox.getTree(); + if (tree == null) { + return; + } + DefaultMutableTreeNode rootTreeNode = (DefaultMutableTreeNode) tree.getModel().getRoot(); + rootTreeNode.removeAllChildren(); + rootTreeNode.add(new ExpandMutableTreeNode("Loading...")); + ((DefaultTreeModel) tree.getModel()).reload(); + } + }); + } + + protected void addFocusListener() { + } + + /** + * 只弹出数据库框里的参数 + * + * @return + */ + protected String getDSName() { + String selectedDSName = null; + String item = Utils.objectToString(this.dsNameComboBox.getEditor().getItem()); + // 没有选中的列表项 那么看看是不是手输值 + if (item == null) { + return null; + } + if (ComparatorUtils.equals(ori_ds_formula, item)) { + return ori_ds_name; + } + ori_ds_formula = item; + // 公式 需要解析 输入默认值 + if (item.startsWith("=")) { + Calculator ca = Calculator.createCalculator(); + boolean isFormula = true; + Parameter[] parameters = ParameterHelper.analyze4Parameters(new String[]{item}, isFormula); + if (parameters.length > 0) { + final Map paraMap = new HashMap(); + analyseParaDefaultValue(parameters); + final ParameterInputPane pPane = new ParameterInputPane(parameters, false); + pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + public void doOk() { + paraMap.putAll(pPane.update()); + } + }).setVisible(true); + ca.pushNameSpace(ParameterMapNameSpace.create(paraMap)); + } + try { + selectedDSName = Utils.objectToString(ca.eval(BaseFormula.createFormulaBuilder().build(item))); +// selectedDSName = ParameterHelper.analyzeCurrentContextTableData4Templatee(item, parameters); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + } else { + selectedDSName = item; + } + ori_ds_name = selectedDSName; + return selectedDSName; + } + + /** + * 在一个参数弹窗中弹出数据库框和表框的参数 + * + * @return + */ + protected String[] getDSAndTableName() { + String dsName = "", tableName = ""; + String dsItem = Utils.objectToString(this.dsNameComboBox.getEditor().getItem()); + String tableItem = this.getTableName(); + if (ComparatorUtils.equals(ori_ds_formula, dsItem) && ComparatorUtils.equals(ori_table_formula, tableItem)) { + return new String[]{ori_ds_name, ori_table_name}; + } + ori_ds_formula = dsItem; + ori_table_formula = tableItem; + List paraList = new ArrayList(); + pushPara(dsItem, paraList); + pushPara(tableItem, paraList); + Calculator ca = Calculator.createCalculator(); + if (!paraList.isEmpty()) { + Parameter[] parameters = (Parameter[]) paraList.toArray(new Parameter[paraList.size()]); + final Map paraMap = new HashMap(); + analyseParaDefaultValue(parameters); + final ParameterInputPane pPane = new ParameterInputPane(parameters, false); + pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { + public void doOk() { + paraMap.putAll(pPane.update()); + } + }).setVisible(true); + ca.pushNameSpace(ParameterMapNameSpace.create(paraMap)); + } + try { + dsName = dsItem.startsWith("=") ? Utils.objectToString(ca.eval(BaseFormula.createFormulaBuilder().build(dsItem))) : dsItem; + tableName = tableItem.startsWith("=") ? Utils.objectToString(ca.eval(BaseFormula.createFormulaBuilder().build(tableItem))) : tableItem; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + ori_ds_name = dsName; + ori_table_name = tableName; + return new String[]{dsName, tableName}; + } + + private void pushPara(String item, List paraList) { + if (item.startsWith("=")) { + Parameter[] parameters = ParameterHelper.analyze4Parameters(new String[]{item}, true); + for (Parameter p : parameters) { + if (!paraList.contains(p)) { + paraList.add(p); + } + } + } + } + + + protected void failedToFindTable() { + this.ori_ds_formula = null; + this.ori_table_formula = null; + } + + /** + * 预览key value对应的数据 + * @param key 键 + * @param value 值 + */ + public void preview(int key, int value) { + EmbeddedTableData tb = PreviewTablePane.previewTableData(createSelectTableData(), key, value); + if (tb == null) { + failedToFindTable(); + } + } + + public DataBaseItems updateBean() { + return updateBean(false); + } + + /** + * 这个分两种情况 设计的时候弹窗填入参数 需要返回计算后的值 + * 而当写入xml的时候 需要取他的原始formula + * + * @param getFormula + * @return + */ + public DataBaseItems updateBean(boolean getFormula) { + String[] names; + if (getFormula) { + names = new String[]{Utils.objectToString(this.dsNameComboBox.getEditor().getItem()), this.getTableName()}; + } else { + names = getDSAndTableName(); + } + if (names != null && names.length == 2) { + return new DataBaseItems(names[0], this.schemaBox.getSelectedItem(), names[1]); + } else { + return new DataBaseItems("", "", ""); + } + } + + /** + * 从模板参数和全局参数中取参数的默认值 + * + * @param ps 参数 + */ + public void analyseParaDefaultValue(Parameter[] ps) { + JTemplate jTemplate = DesignerContext.getDesignerFrame().getSelectedJTemplate(); + Parameter[] allParas = jTemplate.getParameters(); + for (int i = 0; i < ps.length; i++) { + Parameter p = ps[i]; + for (int j = 0; j < allParas.length; j++) { + if (ComparatorUtils.equals(p.getName(), allParas[j].getName())) { + p.setValue(allParas[j].getValue()); + } + } + } + } + +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/MultiTDTableDataPane.java b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/MultiTDTableDataPane.java index 3ba059d221..e13719c1bf 100644 --- a/designer_base/src/com/fr/design/data/tabledata/tabledatapane/MultiTDTableDataPane.java +++ b/designer_base/src/com/fr/design/data/tabledata/tabledatapane/MultiTDTableDataPane.java @@ -386,10 +386,10 @@ public class MultiTDTableDataPane extends AbstractTableDataPane 1) { - arrowButton.setBackground(new Color(228, 246, 255)); - arrowButton.repaint(); - } - } - - public void mouseExited(MouseEvent a) { - arrowButton.setBackground(beforeColor); - arrowButton.setBorder(null); - } - }); - arrowButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (cards != null && cards.length > 1) { // 如果只有“列”的话,就不需要弹出菜单了 - Rectangle re = centerPane.getBounds(); - menu.setPopupSize(re.width + arrowButton.getWidth(), menu.getPreferredSize().height); - menu.show(centerPane, -arrowButton.getWidth(), re.height); - } - } - }); - - this.add(centerPane, BorderLayout.CENTER); - if (cards.length > 1) { - this.add(arrowButton, BorderLayout.WEST); - } - } - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("FR-Designer_Values-Editor"); - } - - public Editor getCurrentEditor() { - return currentEditor; - } - - public int getCurrentEditorIndex() { - for (int i = 0;i < cards.length; i++){ - if (cards[i].getClass() == currentEditor.getClass()){ - return i; - } - } - return 0; - } - - public void setCurrentEditor(int i) { - this.add(arrowButton, BorderLayout.WEST); - currentEditor = this.cards[i]; - centerPane.removeAll(); - centerPane.add(currentEditor); - centerPane.validate(); - centerPane.repaint(); - arrowButton.setIcon(cards[i].getIcon()); - if (this.cards.length == 1) { - this.remove(arrowButton); - } - } - - public void setCurrentEditor(Class editorClass) { - for (int i = 0; i < cards.length; i++) { - if (cards[i].getClass() == editorClass) { - setCurrentEditor(i); - break; - } - } - } - - - private JPopupMenu createPopMenu() { - JPopupMenu scate = new UIPopupEastAttrMenu(); - - if (this.cards == null) { - return scate; - } - - for (int i = 0; i < this.cards.length; i++) { - JMenuItem item = new UIMenuEastAttrItem(cards[i].getName()); - final int j = i; - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - if (globalNameListener != null) { - globalNameListener.setGlobalName(Inter.getLocText("CellWrite-InsertRow_Policy")); - } - Object oldValue = currentEditor.getValue(); - setCurrentEditor(j); - currentEditor.selected(); - value = currentEditor.getValue(); - if (uiObserverListener != null) { - uiObserverListener.doChange(); - } - - ValueEditorPane.this.firePropertyChange("value", oldValue, value); - } - }); - scate.add(item); - } - return scate; - } - - public void populate(Object object) { - for (int i = 0; i < cards.length; i++) { - if (cards[i].accept(object)) { - setCardValue(i,object); - break; - } - } - } - - public void populate(Object object,String name) { - for (int i = 0; i < cards.length; i++) { - if (cards[i].accept(object) && ComparatorUtils.equals(cards[i].getName(),name)) { - setCardValue(i,object); - break; - } - } - } - - private void setCardValue(int i,Object object){ - setCurrentEditor(i); - cards[i].setValue(object); - // kunsnat: bug7861 所有的Editor值都要跟随改变, 因为populate的editor 从"" - // 一定是最后的Editor哦. - for (int j = 0; j < cards.length; j++) { - if (i == j) { - continue; - } - this.cards[j].setValue(null); - } - } - - public Object update() { - String name = currentEditor.getName(); - Object columnIndex = currentEditor.getValue(); - //bug86542,这边为啥要new一个公式出来,只保留content,其他属性全不要了? - //MoMeak:我也想注释了,但是有bug啊。。。 - if (columnIndex == null && ComparatorUtils.equals(name, Inter.getLocText("Formula"))) { - columnIndex = ((FormulaEditor) currentEditor).getFormula(); - } - - return columnIndex; - } - - public Object update(String makeAdiff) { - String name = currentEditor.getName(); - Object columnIndex = currentEditor.getValue(); - Object columnName = StringUtils.EMPTY; - - if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { - columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString()); - } - - if (currentEditor instanceof ColumnNameEditor) { - columnName = ((ColumnNameEditor) currentEditor).getColumnName(); - } - - return new Object[]{columnIndex, columnName}; - } - - public Object update(boolean isXMLA) { - String name = currentEditor.getName(); - Object columnIndex = currentEditor.getValue(); - Object columnName = StringUtils.EMPTY; - - if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { - columnIndex = new Formula(columnIndex == null ? "" : columnIndex.toString()); - } - - if (isXMLA) { - columnName = ((XMLANameEditor) currentEditor).getColumnName(); - } - - return new Object[]{columnIndex, columnName}; - } - - public void setEditors(Editor[] editors, Object obj) { - this.cards = editors; - this.populate(obj); - } - - /** - * 检查是否有效 - * - * @throws Exception 异常 - */ - public void checkValid() throws Exception { - if (!(currentEditor instanceof TextEditor)) { - return; - } - - int i; - boolean containFormulaType = false; - for (i = 0; i < cards.length; i++) { - if (ComparatorUtils.equals(cards[i].getName(), Inter.getLocText("FR-Engine_Parameter-Formula"))) { - containFormulaType = true; - break; - } - } - if (!containFormulaType) { - return; - } - - final int j = i; - - if (!(currentEditor instanceof TextEditor)) { - return; - } - String string = (String) currentEditor.getValue(); - if (isFormula(string)) { - DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); - if (designerEnvManager.isSupportStringToFormula()) { - if (!designerEnvManager.isDefaultStringToFormula()) { - int returnValue = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Edit_String_To_Formula") - + "?", Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.YES_NO_OPTION); - if (returnValue == JOptionPane.OK_OPTION) { - - setCurrentEditor(j); - Formula formula = new Formula(string); - currentEditor.setValue(formula); - } - } else { - setCurrentEditor(j); - Formula formula = new Formula(string); - currentEditor.setValue(formula); - } - } - } - - } - - private boolean isFormula(String string) { - return StringUtils.isNotBlank(string) && (string.length() > 0 && string.charAt(0) == '='); - } - - @Override - public void setEnabled(boolean enabled) { - arrowButton.setEnabled(enabled); - for (Editor card : cards) { - card.setEnabled(enabled); - } - } - - /** - * 重置组件 - */ - public void resetComponets() { - for (Editor card : cards) { - card.reset(); - } - } - - /** - * 清除组件数据 - */ - public void clearComponentsData() { - for (Editor card : cards) { - card.clearData(); - } - } - - public Editor[] getCards() { - return this.cards; - } - - public JPopupMenu getMenu() { - return this.menu; - } - - - /** - * 注册全局名字监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerNameListener(GlobalNameListener listener) { - globalNameListener = listener; - } - - /** - * 是否对名字listener监听器做出响应 - * - * @return 如果要做出响应,则返回true - */ - public boolean shouldResponseNameListener() { - return false; - } - - public void setGlobalName(String name) { - for (Editor card : cards) { - setComponentGlobalName(card, name); - } - } - - private void setComponentGlobalName(Container card, String name) { - for (int i = 0, len = card.getComponentCount(); i < len; i++) { - Component component = card.getComponent(i); - if (component instanceof GlobalNameObserver) { - ((GlobalNameObserver) component).setGlobalName(name); - } else { - setComponentGlobalName((Container) component, name); - } - } - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(UIObserverListener listener) { - uiObserverListener = listener; - for (Editor card : cards) { - doLoop(card, listener); - } - } - - private void doLoop(Container card, UIObserverListener listener) { - for (int i = 0, len = card.getComponentCount(); i < len; i++) { - Component component = card.getComponent(i); - if (component instanceof UIObserver) { - ((UIObserver) component).registerChangeListener(listener); - } else { - doLoop((Container) component, listener); - } - } - } - - /** - * 组件是否需要响应添加的观察者事件 - * - * @return 如果需要响应观察者事件则返回true,否则返回false - */ - public boolean shouldResponseChangeListener() { - return true; - } +package com.fr.design.editor; + +import com.fr.base.BaseFormula; +import com.fr.design.DesignerEnvManager; +import com.fr.design.dialog.BasicPane; +import com.fr.design.editor.editor.ColumnNameEditor; +import com.fr.design.editor.editor.Editor; +import com.fr.design.editor.editor.FormulaEditor; +import com.fr.design.editor.editor.TextEditor; +import com.fr.design.editor.editor.XMLANameEditor; +import com.fr.design.event.GlobalNameListener; +import com.fr.design.event.GlobalNameObserver; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.imenu.UIMenuEastAttrItem; +import com.fr.design.gui.imenu.UIPopupEastAttrMenu; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.general.ComparatorUtils; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +public class ValueEditorPane extends BasicPane implements UIObserver, GlobalNameObserver { + + private Editor[] cards; + + private Editor currentEditor; + + private UIButton arrowButton; + private JPopupMenu menu; + private JPanel centerPane; + + private Object value; + + private GlobalNameListener globalNameListener = null; + private UIObserverListener uiObserverListener = null; + + public ValueEditorPane(Editor[] cards) { + this(cards, null, null); + } + + public ValueEditorPane(Editor[] cards, String popupName, String textEditorValue) { + initComponents(cards, popupName, textEditorValue, 200); + } + + public ValueEditorPane(Editor[] cards, String popupName, String textEditorValue, int centerPaneWidth) { + initComponents(cards, popupName, textEditorValue, centerPaneWidth); + } + + private void initComponents(final Editor[] cards, String popupName, String textEditorValue, int centerPaneWidth) { + + this.cards = cards; + + // Frank:布局 + this.setLayout(new BorderLayout(2, 0)); + centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + arrowButton = new UIButton(); + arrowButton.set4ToolbarButton(); + setCurrentEditor(0); + centerPane.setPreferredSize(new Dimension(centerPaneWidth, centerPane.getPreferredSize().height)); + arrowButton.setPreferredSize(new Dimension(20, centerPane.getPreferredSize().height)); + final Color beforeColor = arrowButton.getBackground(); + menu = createPopMenu(); + + arrowButton.addMouseListener(new MouseAdapter() { + public void mouseEntered(MouseEvent a) { + if (cards != null && cards.length > 1) { + arrowButton.setBackground(new Color(228, 246, 255)); + arrowButton.repaint(); + } + } + + public void mouseExited(MouseEvent a) { + arrowButton.setBackground(beforeColor); + arrowButton.setBorder(null); + } + }); + arrowButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (cards != null && cards.length > 1) { // 如果只有“列”的话,就不需要弹出菜单了 + Rectangle re = centerPane.getBounds(); + menu.setPopupSize(re.width + arrowButton.getWidth(), menu.getPreferredSize().height); + menu.show(centerPane, -arrowButton.getWidth(), re.height); + } + } + }); + + this.add(centerPane, BorderLayout.CENTER); + if (cards.length > 1) { + this.add(arrowButton, BorderLayout.WEST); + } + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Values-Editor"); + } + + public Editor getCurrentEditor() { + return currentEditor; + } + + public int getCurrentEditorIndex() { + for (int i = 0;i < cards.length; i++){ + if (cards[i].getClass() == currentEditor.getClass()){ + return i; + } + } + return 0; + } + + public void setCurrentEditor(int i) { + this.add(arrowButton, BorderLayout.WEST); + currentEditor = this.cards[i]; + centerPane.removeAll(); + centerPane.add(currentEditor); + centerPane.validate(); + centerPane.repaint(); + arrowButton.setIcon(cards[i].getIcon()); + if (this.cards.length == 1) { + this.remove(arrowButton); + } + } + + public void setCurrentEditor(Class editorClass) { + for (int i = 0; i < cards.length; i++) { + if (cards[i].getClass() == editorClass) { + setCurrentEditor(i); + break; + } + } + } + + + private JPopupMenu createPopMenu() { + JPopupMenu scate = new UIPopupEastAttrMenu(); + + if (this.cards == null) { + return scate; + } + + for (int i = 0; i < this.cards.length; i++) { + JMenuItem item = new UIMenuEastAttrItem(cards[i].getName()); + final int j = i; + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (globalNameListener != null) { + globalNameListener.setGlobalName(Inter.getLocText("CellWrite-InsertRow_Policy")); + } + Object oldValue = currentEditor.getValue(); + setCurrentEditor(j); + currentEditor.selected(); + value = currentEditor.getValue(); + if (uiObserverListener != null) { + uiObserverListener.doChange(); + } + + ValueEditorPane.this.firePropertyChange("value", oldValue, value); + } + }); + scate.add(item); + } + return scate; + } + + public void populate(Object object) { + for (int i = 0; i < cards.length; i++) { + if (cards[i].accept(object)) { + setCardValue(i,object); + break; + } + } + } + + public void populate(Object object,String name) { + for (int i = 0; i < cards.length; i++) { + if (cards[i].accept(object) && ComparatorUtils.equals(cards[i].getName(),name)) { + setCardValue(i,object); + break; + } + } + } + + private void setCardValue(int i,Object object){ + setCurrentEditor(i); + cards[i].setValue(object); + // kunsnat: bug7861 所有的Editor值都要跟随改变, 因为populate的editor 从"" + // 一定是最后的Editor哦. + for (int j = 0; j < cards.length; j++) { + if (i == j) { + continue; + } + this.cards[j].setValue(null); + } + } + + public Object update() { + String name = currentEditor.getName(); + Object columnIndex = currentEditor.getValue(); + //bug86542,这边为啥要new一个公式出来,只保留content,其他属性全不要了? + //MoMeak:我也想注释了,但是有bug啊。。。 + if (columnIndex == null && ComparatorUtils.equals(name, Inter.getLocText("Formula"))) { + columnIndex = ((FormulaEditor) currentEditor).getFormula(); + } + + return columnIndex; + } + + public Object update(String makeAdiff) { + String name = currentEditor.getName(); + Object columnIndex = currentEditor.getValue(); + Object columnName = StringUtils.EMPTY; + + if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { + columnIndex = BaseFormula.createFormulaBuilder().build(columnIndex == null ? "" : columnIndex.toString()); + } + + if (currentEditor instanceof ColumnNameEditor) { + columnName = ((ColumnNameEditor) currentEditor).getColumnName(); + } + + return new Object[]{columnIndex, columnName}; + } + + public Object update(boolean isXMLA) { + String name = currentEditor.getName(); + Object columnIndex = currentEditor.getValue(); + Object columnName = StringUtils.EMPTY; + + if (ComparatorUtils.equals(name, Inter.getLocText("FR-Designer_Formula"))) { + columnIndex = BaseFormula.createFormulaBuilder().build(columnIndex == null ? "" : columnIndex.toString()); + } + + if (isXMLA) { + columnName = ((XMLANameEditor) currentEditor).getColumnName(); + } + + return new Object[]{columnIndex, columnName}; + } + + public void setEditors(Editor[] editors, Object obj) { + this.cards = editors; + this.populate(obj); + } + + /** + * 检查是否有效 + * + * @throws Exception 异常 + */ + public void checkValid() throws Exception { + if (!(currentEditor instanceof TextEditor)) { + return; + } + + int i; + boolean containFormulaType = false; + for (i = 0; i < cards.length; i++) { + if (ComparatorUtils.equals(cards[i].getName(), Inter.getLocText("FR-Engine_Parameter-Formula"))) { + containFormulaType = true; + break; + } + } + if (!containFormulaType) { + return; + } + + final int j = i; + + if (!(currentEditor instanceof TextEditor)) { + return; + } + String string = (String) currentEditor.getValue(); + if (isFormula(string)) { + DesignerEnvManager designerEnvManager = DesignerEnvManager.getEnvManager(); + if (designerEnvManager.isSupportStringToFormula()) { + if (!designerEnvManager.isDefaultStringToFormula()) { + int returnValue = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Edit_String_To_Formula") + + "?", Inter.getLocText("FR-Designer_Tooltips"), JOptionPane.YES_NO_OPTION); + if (returnValue == JOptionPane.OK_OPTION) { + + setCurrentEditor(j); + BaseFormula formula = BaseFormula.createFormulaBuilder().build(string); + currentEditor.setValue(formula); + } + } else { + setCurrentEditor(j); + BaseFormula formula = BaseFormula.createFormulaBuilder().build(string); + currentEditor.setValue(formula); + } + } + } + } + + private boolean isFormula(String string) { + return StringUtils.isNotBlank(string) && (string.length() > 0 && string.charAt(0) == '='); + } + + @Override + public void setEnabled(boolean enabled) { + arrowButton.setEnabled(enabled); + for (Editor card : cards) { + card.setEnabled(enabled); + } + } + + /** + * 重置组件 + */ + public void resetComponets() { + for (Editor card : cards) { + card.reset(); + } + } + + /** + * 清除组件数据 + */ + public void clearComponentsData() { + for (Editor card : cards) { + card.clearData(); + } + } + + public Editor[] getCards() { + return this.cards; + } + + public JPopupMenu getMenu() { + return this.menu; + } + + + /** + * 注册全局名字监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerNameListener(GlobalNameListener listener) { + globalNameListener = listener; + } + + /** + * 是否对名字listener监听器做出响应 + * + * @return 如果要做出响应,则返回true + */ + public boolean shouldResponseNameListener() { + return false; + } + + public void setGlobalName(String name) { + for (Editor card : cards) { + setComponentGlobalName(card, name); + } + } + + private void setComponentGlobalName(Container card, String name) { + for (int i = 0, len = card.getComponentCount(); i < len; i++) { + Component component = card.getComponent(i); + if (component instanceof GlobalNameObserver) { + ((GlobalNameObserver) component).setGlobalName(name); + } else { + setComponentGlobalName((Container) component, name); + } + } + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(UIObserverListener listener) { + uiObserverListener = listener; + for (Editor card : cards) { + doLoop(card, listener); + } + } + + private void doLoop(Container card, UIObserverListener listener) { + for (int i = 0, len = card.getComponentCount(); i < len; i++) { + Component component = card.getComponent(i); + if (component instanceof UIObserver) { + ((UIObserver) component).registerChangeListener(listener); + } else { + doLoop((Container) component, listener); + } + } + } + + /** + * 组件是否需要响应添加的观察者事件 + * + * @return 如果需要响应观察者事件则返回true,否则返回false + */ + public boolean shouldResponseChangeListener() { + return true; + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/editor/editor/ConstantsEditor.java b/designer_base/src/com/fr/design/editor/editor/ConstantsEditor.java index bf4a7f006c..ec12015211 100644 --- a/designer_base/src/com/fr/design/editor/editor/ConstantsEditor.java +++ b/designer_base/src/com/fr/design/editor/editor/ConstantsEditor.java @@ -1,11 +1,12 @@ package com.fr.design.editor.editor; +import com.fr.base.BaseFormula; import com.fr.base.Formula; public class ConstantsEditor extends FormulaEditor { - public ConstantsEditor(String name, Formula formula) { + public ConstantsEditor(String name, BaseFormula formula) { super(name, formula); } @@ -13,7 +14,7 @@ public class ConstantsEditor extends FormulaEditor { // do nothing 防止修改... } - public void setValue(Formula value) { + public void setValue(BaseFormula value) { // do nothing 防止修改... } diff --git a/designer_base/src/com/fr/design/editor/editor/FormulaEditor.java b/designer_base/src/com/fr/design/editor/editor/FormulaEditor.java index 943fb3a66d..ba12a1c6b7 100644 --- a/designer_base/src/com/fr/design/editor/editor/FormulaEditor.java +++ b/designer_base/src/com/fr/design/editor/editor/FormulaEditor.java @@ -3,13 +3,13 @@ */ package com.fr.design.editor.editor; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.formula.FormulaFactory; import com.fr.design.formula.UIFormula; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.stable.StringUtils; import javax.swing.*; import javax.swing.event.DocumentListener; @@ -23,10 +23,10 @@ import java.awt.event.MouseEvent; * @editor zhou * @since 2012-3-29下午6:27:27 */ -public class FormulaEditor extends Editor { - private Formula formula = new Formula(StringUtils.EMPTY); +public class FormulaEditor extends Editor { + private BaseFormula formula = BaseFormula.createFormulaBuilder().build(); private UITextField currentTextField; - private ShowPaneListener listerner = new ShowPaneListener(); + private ShowPaneListener listener = new ShowPaneListener(); /** * Constructor. @@ -39,7 +39,7 @@ public class FormulaEditor extends Editor { this(name, null); } - public FormulaEditor(String name, Formula formula) { + public FormulaEditor(String name, BaseFormula formula) { if (formula != null) { this.formula = formula; } @@ -51,7 +51,7 @@ public class FormulaEditor extends Editor { editPane.add(currentTextField, BorderLayout.CENTER); currentTextField.setEditable(false); - currentTextField.addMouseListener(listerner); + currentTextField.addMouseListener(listener); this.add(editPane, BorderLayout.CENTER); this.setName(name); } @@ -96,7 +96,7 @@ public class FormulaEditor extends Editor { }).setVisible(true); } - public Formula getFormula(){ + public BaseFormula getFormula(){ return formula; } @@ -104,7 +104,7 @@ public class FormulaEditor extends Editor { * Return the value of the CellEditor. */ @Override - public Formula getValue() { + public BaseFormula getValue() { if (formula != null && "=".equals(formula.getContent())) { return null; } @@ -115,9 +115,9 @@ public class FormulaEditor extends Editor { * Set the value to the CellEditor. */ @Override - public void setValue(Formula value) { + public void setValue(BaseFormula value) { if (value == null) { - value = new Formula(StringUtils.EMPTY); + value = BaseFormula.createFormulaBuilder().build(); } this.formula = value; currentTextField.setText(value.toString()); @@ -151,7 +151,7 @@ public class FormulaEditor extends Editor { */ public void reset() { currentTextField.setText("="); - formula = new Formula(StringUtils.EMPTY); + formula = BaseFormula.createFormulaBuilder().build(); } /** @@ -170,13 +170,13 @@ public class FormulaEditor extends Editor { this.setEnabled(flag); this.currentTextField.setEnabled(flag); if (flag == false) { - this.currentTextField.removeMouseListener(listerner); + this.currentTextField.removeMouseListener(listener); } else { int listenerSize = this.currentTextField.getMouseListeners().length; for (int i = 0; i < listenerSize; i++) { - this.currentTextField.removeMouseListener(listerner); + this.currentTextField.removeMouseListener(listener); } - this.currentTextField.addMouseListener(listerner); + this.currentTextField.addMouseListener(listener); } } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index 156a2e2f2e..0347731722 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -1,8 +1,8 @@ package com.fr.design.formula; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; import com.fr.base.FRContext; -import com.fr.base.Formula; import com.fr.design.actions.UpdateAction; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; @@ -32,13 +32,27 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.*; - +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.MutableTreeNode; +import javax.swing.tree.TreePath; import java.awt.*; -import java.awt.event.*; -import java.io.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringReader; import java.util.Locale; -import java.util.Set; /** * 公式编辑面板 @@ -468,11 +482,11 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { /** * Populate */ - public void populate(Formula formula) { + public void populate(BaseFormula formula) { this.populate(formula, VariableResolver.DEFAULT); } - public void populate(Formula formula, VariableResolver variableResolver) { + public void populate(BaseFormula formula, VariableResolver variableResolver) { this.variableTreeAndDescriptionArea.populate(variableResolver); // set text @@ -508,19 +522,18 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula { /** * update */ - public Formula update() { - Formula formula; + public BaseFormula update() { + BaseFormula formula; if (ifHasBeenWriten == 0) { - String content = StringUtils.EMPTY; - formula = new Formula(content); + formula = BaseFormula.createFormulaBuilder().build(); return formula; } else { String content = this.formulaTextArea.getText(); if (StringUtils.isEmpty(content) || content.trim().charAt(0) == '=') { - formula = new Formula(content); + formula = BaseFormula.createFormulaBuilder().build(content); } else { - formula = new Formula("=" + content); + formula = BaseFormula.createFormulaBuilder().build("=" + content); } return formula; } diff --git a/designer_base/src/com/fr/design/formula/FormulaPaneWhenReserveFormula.java b/designer_base/src/com/fr/design/formula/FormulaPaneWhenReserveFormula.java index 05530d6303..ecd89c0101 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPaneWhenReserveFormula.java +++ b/designer_base/src/com/fr/design/formula/FormulaPaneWhenReserveFormula.java @@ -1,5 +1,6 @@ package com.fr.design.formula; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.general.Inter; @@ -46,15 +47,15 @@ public class FormulaPaneWhenReserveFormula extends FormulaPane { } @Override - public void populate(Formula formula, VariableResolver variableResolver) { + public void populate(BaseFormula formula, VariableResolver variableResolver) { super.populate(formula, variableResolver); reserveCheckBox4Result.setSelected(formula.isReserveInResult()); reserveCheckBox4Write.setSelected(formula.isReserveOnWriteOrAnaly()); } @Override - public Formula update() { - Formula formula = super.update(); + public BaseFormula update() { + BaseFormula formula = super.update(); if (formula != null) { formula.setReserveInResult(this.reserveCheckBox4Result.isSelected()); formula.setReserveOnWriteOrAnaly(this.reserveCheckBox4Write.isSelected()); diff --git a/designer_base/src/com/fr/design/formula/SortFormulaPane.java b/designer_base/src/com/fr/design/formula/SortFormulaPane.java index 5e3398ec5e..1ab101cd2a 100644 --- a/designer_base/src/com/fr/design/formula/SortFormulaPane.java +++ b/designer_base/src/com/fr/design/formula/SortFormulaPane.java @@ -1,7 +1,7 @@ package com.fr.design.formula; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.data.util.SortOrder; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.ibutton.UIButton; @@ -57,12 +57,11 @@ public abstract class SortFormulaPane extends JPanel { public void showFormulaDialog(String[] displayNames) { String text = sortFormulaTextField.getText(); final UIFormula formulaPane = FormulaFactory.createFormulaPaneWhenReserveFormula(); - - formulaPane.populate(new Formula(text), new CustomVariableResolver(displayNames, true)); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(text), new CustomVariableResolver(displayNames, true)); formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(SortFormulaPane.this), new DialogActionAdapter() { public void doOk() { - Formula fm = formulaPane.update(); + BaseFormula fm = formulaPane.update(); if (fm.getContent().length() <= 1) { sortFormulaTextField.setText(""); } else { diff --git a/designer_base/src/com/fr/design/formula/TinyFormulaPane.java b/designer_base/src/com/fr/design/formula/TinyFormulaPane.java index a37b384c30..5c67eaff14 100644 --- a/designer_base/src/com/fr/design/formula/TinyFormulaPane.java +++ b/designer_base/src/com/fr/design/formula/TinyFormulaPane.java @@ -1,5 +1,6 @@ package com.fr.design.formula; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; import com.fr.base.Formula; import com.fr.design.beans.BasicBeanPane; @@ -51,11 +52,11 @@ public class TinyFormulaPane extends BasicBeanPane implements UIObserver String text = formulaTextField.getText(); final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(text)); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(text)); formulaPane.showLargeWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { - Formula fm = formulaPane.update(); + BaseFormula fm = formulaPane.update(); populateTextField(fm); okEvent(); } @@ -65,7 +66,7 @@ public class TinyFormulaPane extends BasicBeanPane implements UIObserver initLayout(); } - protected void populateTextField(Formula fm) { + protected void populateTextField(BaseFormula fm) { if (fm.getContent().length() <= 1) { formulaTextField.setText("$$$"); } else { diff --git a/designer_base/src/com/fr/design/formula/UIFormula.java b/designer_base/src/com/fr/design/formula/UIFormula.java index fa6c75c3a6..23f380a870 100644 --- a/designer_base/src/com/fr/design/formula/UIFormula.java +++ b/designer_base/src/com/fr/design/formula/UIFormula.java @@ -1,5 +1,6 @@ package com.fr.design.formula; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionListener; @@ -17,20 +18,20 @@ public interface UIFormula { * 从已有的公式还原公式面板 * @param formula 公式 */ - void populate(Formula formula); + void populate(BaseFormula formula); /** * 根据指定的变量处理和公式还原公式面板 * @param formula 公式 * @param variableResolver 变量处理器 */ - void populate(Formula formula, VariableResolver variableResolver); + void populate(BaseFormula formula, VariableResolver variableResolver); /** * 获取公式面板的参数 * @return 公式 */ - Formula update(); + BaseFormula update(); /** * 显示窗口 diff --git a/designer_base/src/com/fr/design/present/dict/FormulaDictPane.java b/designer_base/src/com/fr/design/present/dict/FormulaDictPane.java index 98a2c9986a..1246d1845d 100644 --- a/designer_base/src/com/fr/design/present/dict/FormulaDictPane.java +++ b/designer_base/src/com/fr/design/present/dict/FormulaDictPane.java @@ -1,118 +1,116 @@ -package com.fr.design.present.dict; - -import com.fr.base.BaseUtils; -import com.fr.base.Formula; -import com.fr.data.impl.FormulaDictionary; -import com.fr.design.beans.FurtherBasicBeanPane; -import com.fr.design.constants.LayoutConstants; -import com.fr.design.constants.UIConstants; -import com.fr.design.editor.editor.FormulaEditor; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.Inter; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import javax.swing.event.DocumentListener; -import java.awt.*; - -public class FormulaDictPane extends FurtherBasicBeanPane { - - private static final int EDITOR_COLUMN = 15; - private static final int LEFT_BORDER = 5; - private FormulaEditor keyFormulaEditor; - private FormulaEditor valueFormulaEditor; - - public FormulaDictPane() { - initComponents(); - } - - private void initComponents() { - keyFormulaEditor = new FormulaEditor(); - keyFormulaEditor.setColumns(EDITOR_COLUMN); - JPanel keyFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, LEFT_BORDER, 0)); - keyFormulaContainer.setBorder(BorderFactory.createEmptyBorder(0, -LEFT_BORDER, 0, -LEFT_BORDER)); - keyFormulaEditor.setPreferredSize(new Dimension(144, 20)); - Icon icon = BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png"); - keyFormulaContainer.add(new JLabel(icon)); - keyFormulaContainer.add(keyFormulaEditor); - - valueFormulaEditor = new FormulaEditor(); - valueFormulaEditor.setColumns(EDITOR_COLUMN); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {p, f}; - double[] rowSize = {p, p, p}; - int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; - - UILabel tag = new UILabel(Inter.getLocText("FR-Designer-Formula_Dictionary_Display_Examples_Html")); - tag.setForeground(new Color(143, 143, 146)); - tag.setPreferredSize(new Dimension(225, 80)); - JPanel t = new JPanel(new BorderLayout()); - t.add(tag, BorderLayout.CENTER); - - Formula vf = new Formula("$$$"); - valueFormulaEditor = new FormulaEditor(StringUtils.EMPTY, vf); - - JPanel valueFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, LEFT_BORDER, 0)); - valueFormulaContainer.setBorder(BorderFactory.createEmptyBorder(0, -LEFT_BORDER, 0, -LEFT_BORDER)); - valueFormulaEditor.setPreferredSize(new Dimension(144, 20)); - valueFormulaContainer.add(new JLabel(icon)); - valueFormulaContainer.add(valueFormulaEditor); - - - Component[][] components = new Component[][]{ - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value"), UILabel.LEFT), keyFormulaContainer}, - new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value"), UILabel.LEFT), valueFormulaContainer}, - new Component[]{tag, null} - }; - JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_LARGE); - - this.setLayout(new BorderLayout()); - this.add(panel, BorderLayout.CENTER); - - } - - public void addChangeListener(DocumentListener l) { - keyFormulaEditor.addDocumentListener(l); - valueFormulaEditor.addDocumentListener(l); - } - - @Override - public String title4PopupWindow() { - return Inter.getLocText("FR-Designer_Formula"); - } - - @Override - public void populateBean(FormulaDictionary dict) { - keyFormulaEditor.setValue(new Formula(dict.getProduceFormula() == null ? StringUtils.EMPTY : dict.getProduceFormula())); - valueFormulaEditor.setValue(new Formula(dict.getExcuteFormula() == null ? StringUtils.EMPTY : dict.getExcuteFormula())); - } - - @Override - public FormulaDictionary updateBean() { - FormulaDictionary dict = new FormulaDictionary(); - if (keyFormulaEditor.getValue() != null) { - dict.setProduceFormula(keyFormulaEditor.getValue().getContent()); - } - if (valueFormulaEditor.getValue() != null) { - dict.setExcuteFormula(valueFormulaEditor.getValue().getContent()); - } - - return dict; - } - - @Override - public boolean accept(Object ob) { - return ob instanceof FormulaDictionary; - } - - @Override - public void reset() { - keyFormulaEditor.reset(); - valueFormulaEditor.reset(); - } +package com.fr.design.present.dict; + +import com.fr.base.BaseFormula; +import com.fr.base.BaseUtils; +import com.fr.data.impl.FormulaDictionary; +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.editor.editor.FormulaEditor; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.event.DocumentListener; +import java.awt.*; + +public class FormulaDictPane extends FurtherBasicBeanPane { + + private static final int EDITOR_COLUMN = 15; + private static final int LEFT_BORDER = 5; + private FormulaEditor keyFormulaEditor; + private FormulaEditor valueFormulaEditor; + + public FormulaDictPane() { + initComponents(); + } + + private void initComponents() { + keyFormulaEditor = new FormulaEditor(); + keyFormulaEditor.setColumns(EDITOR_COLUMN); + JPanel keyFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, LEFT_BORDER, 0)); + keyFormulaContainer.setBorder(BorderFactory.createEmptyBorder(0, -LEFT_BORDER, 0, -LEFT_BORDER)); + keyFormulaEditor.setPreferredSize(new Dimension(144, 20)); + Icon icon = BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png"); + keyFormulaContainer.add(new JLabel(icon)); + keyFormulaContainer.add(keyFormulaEditor); + + valueFormulaEditor = new FormulaEditor(); + valueFormulaEditor.setColumns(EDITOR_COLUMN); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + double[] rowSize = {p, p, p}; + int[][] rowCount = {{1, 1}, {1, 1}, {1, 1}}; + + UILabel tag = new UILabel(Inter.getLocText("FR-Designer-Formula_Dictionary_Display_Examples_Html")); + tag.setForeground(new Color(143, 143, 146)); + tag.setPreferredSize(new Dimension(225, 80)); + JPanel t = new JPanel(new BorderLayout()); + t.add(tag, BorderLayout.CENTER); + + BaseFormula vf = BaseFormula.createFormulaBuilder().build("$$$"); + valueFormulaEditor = new FormulaEditor(StringUtils.EMPTY, vf); + + JPanel valueFormulaContainer = new JPanel(new FlowLayout(FlowLayout.RIGHT, LEFT_BORDER, 0)); + valueFormulaContainer.setBorder(BorderFactory.createEmptyBorder(0, -LEFT_BORDER, 0, -LEFT_BORDER)); + valueFormulaEditor.setPreferredSize(new Dimension(144, 20)); + valueFormulaContainer.add(new JLabel(icon)); + valueFormulaContainer.add(valueFormulaEditor); + + + Component[][] components = new Component[][]{ + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Actual_Value"), UILabel.LEFT), keyFormulaContainer}, + new Component[]{new UILabel(Inter.getLocText("FR-Designer_Display_Value"), UILabel.LEFT), valueFormulaContainer}, + new Component[]{tag, null} + }; + JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, LayoutConstants.VGAP_LARGE, LayoutConstants.VGAP_LARGE); + + this.setLayout(new BorderLayout()); + this.add(panel, BorderLayout.CENTER); + + } + + public void addChangeListener(DocumentListener l) { + keyFormulaEditor.addDocumentListener(l); + valueFormulaEditor.addDocumentListener(l); + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Formula"); + } + + @Override + public void populateBean(FormulaDictionary dict) { + keyFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build(dict.getProduceFormula() == null ? StringUtils.EMPTY : dict.getProduceFormula())); + valueFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build(dict.getExcuteFormula() == null ? StringUtils.EMPTY : dict.getExcuteFormula())); + } + + @Override + public FormulaDictionary updateBean() { + FormulaDictionary dict = new FormulaDictionary(); + if (keyFormulaEditor.getValue() != null) { + dict.setProduceFormula(keyFormulaEditor.getValue().getContent()); + } + if (valueFormulaEditor.getValue() != null) { + dict.setExcuteFormula(valueFormulaEditor.getValue().getContent()); + } + + return dict; + } + + @Override + public boolean accept(Object ob) { + return ob instanceof FormulaDictionary; + } + + @Override + public void reset() { + keyFormulaEditor.reset(); + valueFormulaEditor.reset(); + } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/widget/component/DateValuePane.java b/designer_base/src/com/fr/design/widget/component/DateValuePane.java index b6f59ec6e5..e96e885b9b 100644 --- a/designer_base/src/com/fr/design/widget/component/DateValuePane.java +++ b/designer_base/src/com/fr/design/widget/component/DateValuePane.java @@ -1,12 +1,15 @@ package com.fr.design.widget.component; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.design.constants.LayoutConstants; -import com.fr.design.editor.editor.*; +import com.fr.design.editor.editor.DateEditor; +import com.fr.design.editor.editor.Editor; +import com.fr.design.editor.editor.FormulaEditor; +import com.fr.design.editor.editor.NoneEditor; import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import com.fr.stable.StringUtils; + import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -61,7 +64,7 @@ public class DateValuePane extends JPanel { Editor e = editor[index]; Object value = e.getValue(); if(value == null && ComparatorUtils.equals(FORMULA_EDITOR_NAME, e.getName())){ - value = new Formula(StringUtils.EMPTY); + value = BaseFormula.createFormulaBuilder().build(); } return value; } diff --git a/designer_base/src/com/fr/design/write/submit/DBManipulationPane.java b/designer_base/src/com/fr/design/write/submit/DBManipulationPane.java index 23eb50f850..dc00830510 100644 --- a/designer_base/src/com/fr/design/write/submit/DBManipulationPane.java +++ b/designer_base/src/com/fr/design/write/submit/DBManipulationPane.java @@ -1,46 +1,7 @@ package com.fr.design.write.submit; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.GridLayout; -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 java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.Date; -import java.util.EventObject; -import java.util.List; - -import javax.swing.AbstractCellEditor; -import javax.swing.BorderFactory; -import javax.swing.DefaultCellEditor; -import javax.swing.DefaultComboBoxModel; -import javax.swing.Icon; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTree; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; -import javax.swing.table.AbstractTableModel; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableColumn; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.DefaultTreeModel; - +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.base.Parameter; import com.fr.data.DataConstants; import com.fr.data.condition.JoinCondition; @@ -86,6 +47,27 @@ import com.fr.write.config.InsertConfig; import com.fr.write.config.IntelliDMLConfig; import com.fr.write.config.UpdateConfig; +import javax.swing.*; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableColumn; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import java.awt.*; +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 java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Date; +import java.util.EventObject; +import java.util.List; + //august:这个东西应该分成两类,一类是有单元格的情况,一类是没有单元格的情况 public class DBManipulationPane extends BasicBeanPane { private static final Image ICODS_IMAGE = BaseUtils.readImage("/com/fr/web/core/css/images/icons.png"); @@ -752,7 +734,7 @@ public class DBManipulationPane extends BasicBeanPane { String columnName = column.getColumnName(); if (!acceptPara && column.getColumnValue() instanceof Parameter) { // 表单中,将以前的参数转换为公式 - column.setColumnValue(new Formula(((Parameter)column.getColumnValue()).getName())); + column.setColumnValue(BaseFormula.createFormulaBuilder().build(((Parameter)column.getColumnValue()).getName())); } KeyColumnNameValue newColumnNameValue = new KeyColumnNameValue(column.isKey(), new ColumnName(columnName), new ColumnValue(column.getColumnValue()), diff --git a/designer_chart/src/com/fr/design/chart/ChartSwingUtils.java b/designer_chart/src/com/fr/design/chart/ChartSwingUtils.java index 0f60814ccd..92f5dda5c3 100644 --- a/designer_chart/src/com/fr/design/chart/ChartSwingUtils.java +++ b/designer_chart/src/com/fr/design/chart/ChartSwingUtils.java @@ -1,5 +1,6 @@ package com.fr.design.chart; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.design.dialog.DialogActionAdapter; @@ -58,10 +59,10 @@ public class ChartSwingUtils { private static void showFormulaPane(final UITextField jTextField, final OKListener l) { final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(jTextField.getText())); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(jTextField.getText())); formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane()), new DialogActionAdapter(){ public void doOk() { - Formula formula = formulaPane.update(); + BaseFormula formula = formulaPane.update(); jTextField.setText(Utils.objectToString(formula)); if (l != null) { l.action(); diff --git a/designer_chart/src/com/fr/design/chart/axis/ChartAlertValuePane.java b/designer_chart/src/com/fr/design/chart/axis/ChartAlertValuePane.java index c38d2eb738..c0fa135c1d 100644 --- a/designer_chart/src/com/fr/design/chart/axis/ChartAlertValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/ChartAlertValuePane.java @@ -1,5 +1,6 @@ package com.fr.design.chart.axis; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.chart.chartattr.ChartAlertValue; @@ -162,10 +163,10 @@ public class ChartAlertValuePane extends BasicBeanPane { private void showFormulaPane() { final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(textField.getText())); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(textField.getText())); formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(ChartAlertValuePane.this), new DialogActionAdapter(){ public void doOk() { - Formula formula = formulaPane.update(); + BaseFormula formula = formulaPane.update(); textField.setText(Utils.objectToString(formula)); } }).setVisible(true); @@ -206,7 +207,7 @@ public class ChartAlertValuePane extends BasicBeanPane { public void updateBean(ChartAlertValue chartAlertValue) { - chartAlertValue.setAlertValueFormula(new Formula(textField.getText())); + chartAlertValue.setAlertValueFormula(BaseFormula.createFormulaBuilder().build(textField.getText())); chartAlertValue.getLineColor().setSeriesColor(colorBox.getSelectObject()); chartAlertValue.getLineStyle().setLineStyle(lineCombo.getSelectedLineStyle()); chartAlertValue.setAlertLineAlpha(alphaPane.update()); diff --git a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java index 5f73635d82..458adbf078 100644 --- a/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java +++ b/designer_chart/src/com/fr/design/chart/axis/MinMaxValuePane.java @@ -1,6 +1,6 @@ package com.fr.design.chart.axis; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.chart.base.ChartBaseUtils; import com.fr.chart.chartattr.Axis; import com.fr.design.chart.ChartSwingUtils; @@ -147,13 +147,13 @@ public class MinMaxValuePane extends JPanel { // 最大最小值 if (minCheckBox.isSelected()) { axis.setCustomMinValue(StringUtils.isNotEmpty(minValueField.getText())); - axis.setMinValue(new Formula(minValueField.getText())); + axis.setMinValue(BaseFormula.createFormulaBuilder().build(minValueField.getText())); } else { axis.setCustomMinValue(false); } if (maxCheckBox.isSelected()) { axis.setCustomMaxValue(StringUtils.isNotEmpty(maxValueField.getText())); - axis.setMaxValue(new Formula(maxValueField.getText())); + axis.setMaxValue(BaseFormula.createFormulaBuilder().build(maxValueField.getText())); } else { axis.setCustomMaxValue(false); } @@ -170,10 +170,10 @@ public class MinMaxValuePane extends JPanel { axis.setMainUnit(null); } else { axis.setCustomMainUnit(true); - Formula formula = new Formula(increment); + BaseFormula formula = BaseFormula.createFormulaBuilder().build(increment); Number number = ChartBaseUtils.formula2Number(formula); if(number != null && number.doubleValue() < 0) { - axis.setMainUnit(new Formula("10")); + axis.setMainUnit(BaseFormula.createFormulaBuilder().build("10")); } else { axis.setMainUnit(formula); } @@ -189,10 +189,10 @@ public class MinMaxValuePane extends JPanel { axis.setSecUnit(null); } else { axis.setCustomSecUnit(true); - Formula formula = new Formula(increment); + BaseFormula formula = BaseFormula.createFormulaBuilder().build(increment); Number number = ChartBaseUtils.formula2Number(formula); if(number != null && number.doubleValue() < 0) { - axis.setSecUnit(new Formula("10")); + axis.setSecUnit(BaseFormula.createFormulaBuilder().build("10")); } else { axis.setSecUnit(formula); } diff --git a/designer_chart/src/com/fr/design/chart/report/GisMapReportDataContentPane.java b/designer_chart/src/com/fr/design/chart/report/GisMapReportDataContentPane.java index 1c2a970272..3d8faa2bf9 100644 --- a/designer_chart/src/com/fr/design/chart/report/GisMapReportDataContentPane.java +++ b/designer_chart/src/com/fr/design/chart/report/GisMapReportDataContentPane.java @@ -1,301 +1,297 @@ -package com.fr.design.chart.report; - -import java.awt.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.SwingConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import com.fr.base.Formula; -import com.fr.base.Utils; -import com.fr.chart.chartdata.BaseSeriesDefinition; -import com.fr.chart.chartdata.GisMapReportDefinition; -import com.fr.chart.chartdata.SeriesDefinition; -import com.fr.design.constants.LayoutConstants; -import com.fr.design.constants.UIConstants; -import com.fr.design.beans.FurtherBasicBeanPane; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.formula.TinyFormulaPane; -import com.fr.design.gui.frpane.UICorrelationPane; -import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itable.UITableEditor; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.general.Inter; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; - -/** - * 属性表gis地图单元格数据源设置界面 - * - * @author eason - */ -public class GisMapReportDataContentPane extends FurtherBasicBeanPane implements UIObserver { - private UIButtonGroup addressType; - private UIButtonGroup lnglatOrder; - private TinyFormulaPane addressPane; - private TinyFormulaPane addressNamePane; - private UICorrelationPane seriesPane; - private JPanel orderPane; - private ArrayList changeListeners = new ArrayList(); - - public GisMapReportDataContentPane() { - initCom(); - } - - private void initCom() { - this.setLayout(new BorderLayout(0, 0)); - addressType = new UIButtonGroup(new String[]{Inter.getLocText("Chart-Address"), Inter.getLocText("Chart-LngLat")}); - lnglatOrder = new UIButtonGroup(new String[]{Inter.getLocText("Chart-LngFirst"), Inter.getLocText("Chart-LatFirst")}); - addressPane = new TinyFormulaPane(); - addressNamePane = new TinyFormulaPane(); - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = new double[]{p, f}; - double[] rowSize = new double[]{p, p, p}; - - orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM, 0)) { - @Override - public Dimension getPreferredSize() { - if (this.isVisible()) { - return super.getPreferredSize(); - } else { - return new Dimension(0, 0); - } - } - }; - orderPane.add(new UILabel(Inter.getLocText("Chart-LatLngOrder")), BorderLayout.WEST); - orderPane.add(lnglatOrder, BorderLayout.CENTER); - orderPane.setVisible(false); - lnglatOrder.setSelectedIndex(0); - addressType.setSelectedIndex(0); - Component[][] components = new Component[][]{ - new Component[]{addressType, addressPane}, - new Component[]{orderPane, null}, - new Component[]{new UILabel(" " +Inter.getLocText("Chart-Address-Name")+":", SwingConstants.RIGHT), addressNamePane}, - }; - JPanel northPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - - this.add(northPane, BorderLayout.NORTH); - - String[] columnNames = new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}; - seriesPane = new UICorrelationPane(columnNames) { - public UITableEditor createUITableEditor() { - return new InnerTableEditor(); - } - }; - - this.add(seriesPane, BorderLayout.CENTER); - } - - /** - * 界面接入. - * @param ob 对象 - * @return true表示接受 - */ - public boolean accept(Object ob) { - return true; - } - - /** - * 重置 - */ - public void reset() { - - } - - /** - * 界面弹出标题. - * @return 标题 - */ - public String title4PopupWindow() { - return Inter.getLocText("Cell"); - } - - @Override - public void populateBean(GisMapReportDefinition ob) { - if (ob.getCategoryName() != null) { - if (ob.isAddress()) { - addressType.setSelectedIndex(0); - orderPane.setVisible(false); - } else { - addressType.setSelectedIndex(1); - orderPane.setVisible(true); - } - - if (ob.isLngFirst()) { - lnglatOrder.setSelectedIndex(0); - } else { - lnglatOrder.setSelectedIndex(1); - } - - addressPane.populateBean(Utils.objectToString(ob.getCategoryName())); - if (ob.getAddressName() != null) { - addressNamePane.populateBean(Utils.objectToString(ob.getAddressName())); - } - int size = ob.getTitleValueSize(); - List paneList = new ArrayList(); - for (int i = 0; i < size; i++) { - BaseSeriesDefinition first = ob.getTitleValueWithIndex(i); - if (first != null && first.getSeriesName() != null && first.getValue() != null) { - paneList.add(new Object[]{first.getSeriesName(), first.getValue()}); - } - } - if (!paneList.isEmpty()) { - seriesPane.populateBean(paneList); - } - } - } - - @Override - public GisMapReportDefinition updateBean() { - GisMapReportDefinition reportDefinition = new GisMapReportDefinition(); - if (this.addressType.getSelectedIndex() == 0) { - reportDefinition.setAddressType(true); - orderPane.setVisible(false); - } else { - reportDefinition.setAddressType(false); - orderPane.setVisible(true); - } - - if (this.lnglatOrder.getSelectedIndex() == 0) { - reportDefinition.setLnglatOrder(true); - } else { - reportDefinition.setLnglatOrder(false); - } - - String address = addressPane.updateBean(); - if (StringUtils.isBlank(address)) { - return null; - } - if (StableUtils.canBeFormula(address)) { - reportDefinition.setCategoryName(new Formula(address)); - } else { - reportDefinition.setCategoryName(address); - } - - String addressName = addressNamePane.updateBean(); - if (addressName != null && !StringUtils.isBlank(addressName)) { - if (StableUtils.canBeFormula(addressName)) { - reportDefinition.setAddressName(addressName); - } else { - reportDefinition.setAddressName(addressName); - } - } - List values = seriesPane.updateBean(); - if (values != null && !values.isEmpty()) { - for (int i = 0, size = values.size(); i < size; i++) { - Object[] objects = (Object[]) values.get(i); - Object name = objects[0]; - Object value = objects[1]; - - if (StableUtils.canBeFormula(value)) { - value = new Formula(Utils.objectToString(value)); - } - SeriesDefinition definition = new SeriesDefinition(name, value); - reportDefinition.addTitleValue(definition); - } - } - return reportDefinition; - } - - /** - * 给组件登记一个观察者监听事件 - * - * @param listener 观察者监听事件 - */ - public void registerChangeListener(final UIObserverListener listener) { - changeListeners.add(new ChangeListener() { - public void stateChanged(ChangeEvent e) { - listener.doChange(); - } - }); - } - - /** - * 组件是否需要响应添加的观察者事件 - * - * @return 如果需要响应观察者事件则返回true,否则返回false - */ - public boolean shouldResponseChangeListener() { - return true; - } - - private class InnerTableEditor extends UITableEditor { - private JComponent editorComponent; - - /** - * 返回当前编辑器的值 - */ - public Object getCellEditorValue() { - if (editorComponent instanceof TinyFormulaPane) { - return ((TinyFormulaPane) editorComponent).getUITextField().getText(); - } else if (editorComponent instanceof UITextField) { - return ((UITextField) editorComponent).getText(); - } - - return super.getCellEditorValue(); - } - - /** - * 返回当前编辑器.. - */ - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - if (column == table.getModel().getColumnCount()) { - return null; - } - return getEditorComponent(column, value); - } - - private JComponent getEditorComponent(int column, Object value) { - if (column == 0) { - UITextField field = new UITextField(); - addListener4UITextFiled(field); - - if (value != null) { - field.setText(Utils.objectToString(value)); - } - editorComponent = field; - } else { - TinyFormulaPane tinyPane = new TinyFormulaPane() { - @Override - public void okEvent() { - seriesPane.stopCellEditing(); - seriesPane.fireTargetChanged(); - } - }; - tinyPane.setBackground(UIConstants.FLESH_BLUE); - - addListener4UITextFiled(tinyPane.getUITextField()); - - if (value != null) { - tinyPane.getUITextField().setText(Utils.objectToString(value)); - } - - editorComponent = tinyPane; - } - return editorComponent; - } - - private void addListener4UITextFiled(UITextField textField) { - - textField.addFocusListener(new FocusAdapter() { - @Override - public void focusLost(FocusEvent e) { -// seriesPane.stopCellEditing(); //kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出. - seriesPane.fireTargetChanged(); - } - }); - } - } +package com.fr.design.chart.report; + +import com.fr.base.BaseFormula; +import com.fr.base.Utils; +import com.fr.chart.chartdata.BaseSeriesDefinition; +import com.fr.chart.chartdata.GisMapReportDefinition; +import com.fr.chart.chartdata.SeriesDefinition; +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.constants.UIConstants; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.design.formula.TinyFormulaPane; +import com.fr.design.gui.frpane.UICorrelationPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itable.UITableEditor; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.util.ArrayList; +import java.util.List; + +/** + * 属性表gis地图单元格数据源设置界面 + * + * @author eason + */ +public class GisMapReportDataContentPane extends FurtherBasicBeanPane implements UIObserver { + private UIButtonGroup addressType; + private UIButtonGroup lnglatOrder; + private TinyFormulaPane addressPane; + private TinyFormulaPane addressNamePane; + private UICorrelationPane seriesPane; + private JPanel orderPane; + private ArrayList changeListeners = new ArrayList(); + + public GisMapReportDataContentPane() { + initCom(); + } + + private void initCom() { + this.setLayout(new BorderLayout(0, 0)); + addressType = new UIButtonGroup(new String[]{Inter.getLocText("Chart-Address"), Inter.getLocText("Chart-LngLat")}); + lnglatOrder = new UIButtonGroup(new String[]{Inter.getLocText("Chart-LngFirst"), Inter.getLocText("Chart-LatFirst")}); + addressPane = new TinyFormulaPane(); + addressNamePane = new TinyFormulaPane(); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = new double[]{p, f}; + double[] rowSize = new double[]{p, p, p}; + + orderPane = new JPanel(new BorderLayout(LayoutConstants.VGAP_MEDIUM, 0)) { + @Override + public Dimension getPreferredSize() { + if (this.isVisible()) { + return super.getPreferredSize(); + } else { + return new Dimension(0, 0); + } + } + }; + orderPane.add(new UILabel(Inter.getLocText("Chart-LatLngOrder")), BorderLayout.WEST); + orderPane.add(lnglatOrder, BorderLayout.CENTER); + orderPane.setVisible(false); + lnglatOrder.setSelectedIndex(0); + addressType.setSelectedIndex(0); + Component[][] components = new Component[][]{ + new Component[]{addressType, addressPane}, + new Component[]{orderPane, null}, + new Component[]{new UILabel(" " +Inter.getLocText("Chart-Address-Name")+":", SwingConstants.RIGHT), addressNamePane}, + }; + JPanel northPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + + this.add(northPane, BorderLayout.NORTH); + + String[] columnNames = new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}; + seriesPane = new UICorrelationPane(columnNames) { + public UITableEditor createUITableEditor() { + return new InnerTableEditor(); + } + }; + + this.add(seriesPane, BorderLayout.CENTER); + } + + /** + * 界面接入. + * @param ob 对象 + * @return true表示接受 + */ + public boolean accept(Object ob) { + return true; + } + + /** + * 重置 + */ + public void reset() { + + } + + /** + * 界面弹出标题. + * @return 标题 + */ + public String title4PopupWindow() { + return Inter.getLocText("Cell"); + } + + @Override + public void populateBean(GisMapReportDefinition ob) { + if (ob.getCategoryName() != null) { + if (ob.isAddress()) { + addressType.setSelectedIndex(0); + orderPane.setVisible(false); + } else { + addressType.setSelectedIndex(1); + orderPane.setVisible(true); + } + + if (ob.isLngFirst()) { + lnglatOrder.setSelectedIndex(0); + } else { + lnglatOrder.setSelectedIndex(1); + } + + addressPane.populateBean(Utils.objectToString(ob.getCategoryName())); + if (ob.getAddressName() != null) { + addressNamePane.populateBean(Utils.objectToString(ob.getAddressName())); + } + int size = ob.getTitleValueSize(); + List paneList = new ArrayList(); + for (int i = 0; i < size; i++) { + BaseSeriesDefinition first = ob.getTitleValueWithIndex(i); + if (first != null && first.getSeriesName() != null && first.getValue() != null) { + paneList.add(new Object[]{first.getSeriesName(), first.getValue()}); + } + } + if (!paneList.isEmpty()) { + seriesPane.populateBean(paneList); + } + } + } + + @Override + public GisMapReportDefinition updateBean() { + GisMapReportDefinition reportDefinition = new GisMapReportDefinition(); + if (this.addressType.getSelectedIndex() == 0) { + reportDefinition.setAddressType(true); + orderPane.setVisible(false); + } else { + reportDefinition.setAddressType(false); + orderPane.setVisible(true); + } + + if (this.lnglatOrder.getSelectedIndex() == 0) { + reportDefinition.setLnglatOrder(true); + } else { + reportDefinition.setLnglatOrder(false); + } + + String address = addressPane.updateBean(); + if (StringUtils.isBlank(address)) { + return null; + } + if (StableUtils.canBeFormula(address)) { + reportDefinition.setCategoryName(BaseFormula.createFormulaBuilder().build(address)); + } else { + reportDefinition.setCategoryName(address); + } + + String addressName = addressNamePane.updateBean(); + if (addressName != null && !StringUtils.isBlank(addressName)) { + if (StableUtils.canBeFormula(addressName)) { + reportDefinition.setAddressName(addressName); + } else { + reportDefinition.setAddressName(addressName); + } + } + List values = seriesPane.updateBean(); + if (values != null && !values.isEmpty()) { + for (int i = 0, size = values.size(); i < size; i++) { + Object[] objects = (Object[]) values.get(i); + Object name = objects[0]; + Object value = objects[1]; + + if (StableUtils.canBeFormula(value)) { + value = BaseFormula.createFormulaBuilder().build(value); + } + SeriesDefinition definition = new SeriesDefinition(name, value); + reportDefinition.addTitleValue(definition); + } + } + return reportDefinition; + } + + /** + * 给组件登记一个观察者监听事件 + * + * @param listener 观察者监听事件 + */ + public void registerChangeListener(final UIObserverListener listener) { + changeListeners.add(new ChangeListener() { + public void stateChanged(ChangeEvent e) { + listener.doChange(); + } + }); + } + + /** + * 组件是否需要响应添加的观察者事件 + * + * @return 如果需要响应观察者事件则返回true,否则返回false + */ + public boolean shouldResponseChangeListener() { + return true; + } + + private class InnerTableEditor extends UITableEditor { + private JComponent editorComponent; + + /** + * 返回当前编辑器的值 + */ + public Object getCellEditorValue() { + if (editorComponent instanceof TinyFormulaPane) { + return ((TinyFormulaPane) editorComponent).getUITextField().getText(); + } else if (editorComponent instanceof UITextField) { + return ((UITextField) editorComponent).getText(); + } + + return super.getCellEditorValue(); + } + + /** + * 返回当前编辑器.. + */ + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + if (column == table.getModel().getColumnCount()) { + return null; + } + return getEditorComponent(column, value); + } + + private JComponent getEditorComponent(int column, Object value) { + if (column == 0) { + UITextField field = new UITextField(); + addListener4UITextFiled(field); + + if (value != null) { + field.setText(Utils.objectToString(value)); + } + editorComponent = field; + } else { + TinyFormulaPane tinyPane = new TinyFormulaPane() { + @Override + public void okEvent() { + seriesPane.stopCellEditing(); + seriesPane.fireTargetChanged(); + } + }; + tinyPane.setBackground(UIConstants.FLESH_BLUE); + + addListener4UITextFiled(tinyPane.getUITextField()); + + if (value != null) { + tinyPane.getUITextField().setText(Utils.objectToString(value)); + } + + editorComponent = tinyPane; + } + return editorComponent; + } + + private void addListener4UITextFiled(UITextField textField) { + + textField.addFocusListener(new FocusAdapter() { + @Override + public void focusLost(FocusEvent e) { +// seriesPane.stopCellEditing(); //kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出. + seriesPane.fireTargetChanged(); + } + }); + } + } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/chart/report/MapMoreReportIndexPane.java b/designer_chart/src/com/fr/design/chart/report/MapMoreReportIndexPane.java index 70f11f8b46..bba5fc3019 100644 --- a/designer_chart/src/com/fr/design/chart/report/MapMoreReportIndexPane.java +++ b/designer_chart/src/com/fr/design/chart/report/MapMoreReportIndexPane.java @@ -1,202 +1,196 @@ -package com.fr.design.chart.report; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTable; - -import com.fr.base.Formula; -import com.fr.base.Utils; -import com.fr.chart.chartdata.BaseSeriesDefinition; -import com.fr.chart.chartdata.MapSingleLayerReportDefinition; -import com.fr.chart.chartdata.SeriesDefinition; -import com.fr.design.constants.UIConstants; -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.formula.TinyFormulaPane; -import com.fr.design.gui.frpane.UICorrelationPane; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.itable.UITableEditor; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.general.Inter; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; - -/** - * 多层地图, 单元格, 多层切换 单界面. - * @author kunsnat E-mail:kunsnat@gmail.com - * @version 创建时间:2013-4-22 下午04:26:10 - */ -public class MapMoreReportIndexPane extends BasicBeanPane implements UIObserver{ - private String title = StringUtils.EMPTY; - - private TinyFormulaPane areaNamePane; - private UICorrelationPane tabPane; - - public MapMoreReportIndexPane() { - initPane(); - } - - public MapMoreReportIndexPane(String titleName) { - title = titleName; - initPane(); - } - - private void initPane() { - this.setLayout(new BorderLayout(0, 0)); - - JPanel northPane = new JPanel(); - this.add(northPane, BorderLayout.NORTH); - northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); - - northPane.add(new UILabel(Inter.getLocText("Area_Name") + ":")); - - areaNamePane = new TinyFormulaPane(); - areaNamePane.setPreferredSize(new Dimension(120, 20)); - northPane.add(areaNamePane); - - tabPane = new UICorrelationPane(new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}){ - public UITableEditor createUITableEditor() { - return new InnerTableEditor(); - } - }; - - this.add(tabPane, BorderLayout.CENTER); - } - - @Override - public void populateBean(MapSingleLayerReportDefinition definition) { - if(definition != null && definition.getCategoryName() != null) { - areaNamePane.populateBean(Utils.objectToString(definition.getCategoryName())); - - List paneList = new ArrayList(); - int titleValueSize = definition.getTitleValueSize(); - for(int i = 0; i < titleValueSize; i++) { - BaseSeriesDefinition sd = definition.getTitleValueWithIndex(i); - if(sd != null && sd.getSeriesName() != null && sd.getValue() != null) { - paneList.add(new Object[]{sd.getSeriesName(), sd.getValue()}); - } - } - - if(!paneList.isEmpty()) { - tabPane.populateBean(paneList); - } - } - } - - public MapSingleLayerReportDefinition updateBean() { - MapSingleLayerReportDefinition definition = new MapSingleLayerReportDefinition(); - - String areaName = areaNamePane.updateBean(); - if(StableUtils.canBeFormula(areaName)) { - definition.setCategoryName(new Formula(areaName)); - } else { - definition.setCategoryName(areaName); - } - - List paneList = tabPane.updateBean(); - for(int i = 0, size = paneList.size(); i < size; i++) { - Object[] values = (Object[])paneList.get(i); - if(values.length == 2) { - SeriesDefinition seriesDefinition = new SeriesDefinition(); - seriesDefinition.setSeriesName(values[0]); - seriesDefinition.setValue(values[1]); - definition.addTitleValue(seriesDefinition); - } - } - - return definition; - } - - @Override - protected String title4PopupWindow() { - return title; - } - - private class InnerTableEditor extends UITableEditor { - private JComponent editorComponent; - - /** - * 返回当前编辑器的值 - */ - public Object getCellEditorValue() { - if(editorComponent instanceof TinyFormulaPane) { - return ((TinyFormulaPane)editorComponent).getUITextField().getText(); - } else if(editorComponent instanceof UITextField) { - return ((UITextField)editorComponent).getText(); - } - - return super.getCellEditorValue(); - } - - /** - * 返回当前编辑器.. - */ - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - if (column == table.getModel().getColumnCount()) { - return null; - } - return getEditorComponent(column, value); - } - - private JComponent getEditorComponent(int column, Object value) { - if(column == 0) { - UITextField field = new UITextField(); - editorComponent = field; - - if(value != null) { - field.setText(Utils.objectToString(value)); - } - } else { - TinyFormulaPane tinyPane = new TinyFormulaPane() { - @Override - public void okEvent() { - tabPane.stopCellEditing(); - tabPane.fireTargetChanged(); - } - }; - tinyPane.setBackground(UIConstants.FLESH_BLUE); - - tinyPane.getUITextField().addFocusListener(new FocusAdapter() { - @Override - public void focusLost(FocusEvent e) { -// tabPane.stopCellEditing();//kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出. - tabPane.fireTargetChanged(); - } - }); - - if(value != null) { - tinyPane.getUITextField().setText(Utils.objectToString(value)); - } - - editorComponent = tinyPane; - } - return editorComponent; - } - } - - @Override - public void registerChangeListener(UIObserverListener listener) { - if(tabPane != null) { - tabPane.registerChangeListener(listener); - } - if(areaNamePane != null) { - areaNamePane.registerChangeListener(listener); - } - } - - @Override - public boolean shouldResponseChangeListener() { - return true; - } - +package com.fr.design.chart.report; + +import com.fr.base.BaseFormula; +import com.fr.base.Utils; +import com.fr.chart.chartdata.BaseSeriesDefinition; +import com.fr.chart.chartdata.MapSingleLayerReportDefinition; +import com.fr.chart.chartdata.SeriesDefinition; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.constants.UIConstants; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.design.formula.TinyFormulaPane; +import com.fr.design.gui.frpane.UICorrelationPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itable.UITableEditor; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.general.Inter; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.util.ArrayList; +import java.util.List; + +/** + * 多层地图, 单元格, 多层切换 单界面. + * @author kunsnat E-mail:kunsnat@gmail.com + * @version 创建时间:2013-4-22 下午04:26:10 + */ +public class MapMoreReportIndexPane extends BasicBeanPane implements UIObserver{ + private String title = StringUtils.EMPTY; + + private TinyFormulaPane areaNamePane; + private UICorrelationPane tabPane; + + public MapMoreReportIndexPane() { + initPane(); + } + + public MapMoreReportIndexPane(String titleName) { + title = titleName; + initPane(); + } + + private void initPane() { + this.setLayout(new BorderLayout(0, 0)); + + JPanel northPane = new JPanel(); + this.add(northPane, BorderLayout.NORTH); + northPane.setLayout(new FlowLayout(FlowLayout.LEFT)); + + northPane.add(new UILabel(Inter.getLocText("Area_Name") + ":")); + + areaNamePane = new TinyFormulaPane(); + areaNamePane.setPreferredSize(new Dimension(120, 20)); + northPane.add(areaNamePane); + + tabPane = new UICorrelationPane(new String[]{Inter.getLocText(new String[]{"Filed", "Title"}), Inter.getLocText("Area_Value")}){ + public UITableEditor createUITableEditor() { + return new InnerTableEditor(); + } + }; + + this.add(tabPane, BorderLayout.CENTER); + } + + @Override + public void populateBean(MapSingleLayerReportDefinition definition) { + if(definition != null && definition.getCategoryName() != null) { + areaNamePane.populateBean(Utils.objectToString(definition.getCategoryName())); + + List paneList = new ArrayList(); + int titleValueSize = definition.getTitleValueSize(); + for(int i = 0; i < titleValueSize; i++) { + BaseSeriesDefinition sd = definition.getTitleValueWithIndex(i); + if(sd != null && sd.getSeriesName() != null && sd.getValue() != null) { + paneList.add(new Object[]{sd.getSeriesName(), sd.getValue()}); + } + } + + if(!paneList.isEmpty()) { + tabPane.populateBean(paneList); + } + } + } + + public MapSingleLayerReportDefinition updateBean() { + MapSingleLayerReportDefinition definition = new MapSingleLayerReportDefinition(); + + String areaName = areaNamePane.updateBean(); + if(StableUtils.canBeFormula(areaName)) { + definition.setCategoryName(BaseFormula.createFormulaBuilder().build(areaName)); + } else { + definition.setCategoryName(areaName); + } + + List paneList = tabPane.updateBean(); + for(int i = 0, size = paneList.size(); i < size; i++) { + Object[] values = (Object[])paneList.get(i); + if(values.length == 2) { + SeriesDefinition seriesDefinition = new SeriesDefinition(); + seriesDefinition.setSeriesName(values[0]); + seriesDefinition.setValue(values[1]); + definition.addTitleValue(seriesDefinition); + } + } + + return definition; + } + + @Override + protected String title4PopupWindow() { + return title; + } + + private class InnerTableEditor extends UITableEditor { + private JComponent editorComponent; + + /** + * 返回当前编辑器的值 + */ + public Object getCellEditorValue() { + if(editorComponent instanceof TinyFormulaPane) { + return ((TinyFormulaPane)editorComponent).getUITextField().getText(); + } else if(editorComponent instanceof UITextField) { + return ((UITextField)editorComponent).getText(); + } + + return super.getCellEditorValue(); + } + + /** + * 返回当前编辑器.. + */ + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + if (column == table.getModel().getColumnCount()) { + return null; + } + return getEditorComponent(column, value); + } + + private JComponent getEditorComponent(int column, Object value) { + if(column == 0) { + UITextField field = new UITextField(); + editorComponent = field; + + if(value != null) { + field.setText(Utils.objectToString(value)); + } + } else { + TinyFormulaPane tinyPane = new TinyFormulaPane() { + @Override + public void okEvent() { + tabPane.stopCellEditing(); + tabPane.fireTargetChanged(); + } + }; + tinyPane.setBackground(UIConstants.FLESH_BLUE); + + tinyPane.getUITextField().addFocusListener(new FocusAdapter() { + @Override + public void focusLost(FocusEvent e) { +// tabPane.stopCellEditing();//kunsnat: 不stop是因为可能直接点击公式编辑按钮, 否则需要点击两次才能弹出. + tabPane.fireTargetChanged(); + } + }); + + if(value != null) { + tinyPane.getUITextField().setText(Utils.objectToString(value)); + } + + editorComponent = tinyPane; + } + return editorComponent; + } + } + + @Override + public void registerChangeListener(UIObserverListener listener) { + if(tabPane != null) { + tabPane.registerChangeListener(listener); + } + if(areaNamePane != null) { + areaNamePane.registerChangeListener(listener); + } + } + + @Override + public boolean shouldResponseChangeListener() { + return true; + } + } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/chart/report/MapReportDataSinglePane.java b/designer_chart/src/com/fr/design/chart/report/MapReportDataSinglePane.java index c8f1b4f1e2..03ddfc015d 100644 --- a/designer_chart/src/com/fr/design/chart/report/MapReportDataSinglePane.java +++ b/designer_chart/src/com/fr/design/chart/report/MapReportDataSinglePane.java @@ -1,28 +1,12 @@ package com.fr.design.chart.report; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.SwingConstants; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.base.Utils; import com.fr.chart.chartdata.BaseSeriesDefinition; import com.fr.chart.chartdata.MapSingleLayerReportDefinition; import com.fr.chart.chartdata.SeriesDefinition; -import com.fr.design.constants.UIConstants; import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.constants.UIConstants; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; import com.fr.design.formula.TinyFormulaPane; @@ -33,6 +17,15 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.general.Inter; import com.fr.stable.StableUtils; +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.util.ArrayList; +import java.util.List; + /** * 地图 单元格数据 单层地图 界面 * @@ -118,7 +111,7 @@ public class MapReportDataSinglePane extends FurtherBasicBeanPane refreshList(HashMap map) { List list = new ArrayList(); - java.util.HashMap hyperLinkEditorMap = plot.getHyperLinkEditorMap(); + java.util.HashMap hyperLinkEditorMap = plot.getHyperLinkEditorMap(); list.add(new ChartUIMenuNameableCreator(hyperLinkEditorMap, Inter.getLocText("Hyperlink-Web_link"), new WebHyperlink(), getUseMap(map, WebHyperlink.class))); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartInteractivePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartInteractivePane.java index e5f9a8a7d2..f6b7d20238 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartInteractivePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/other/ChartInteractivePane.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.chart.gui.other; +import com.fr.base.BaseFormula; import com.fr.base.CoreDecimalFormat; -import com.fr.base.Formula; import com.fr.base.Style; import com.fr.base.chart.chartdata.TopDefinitionProvider; import com.fr.chart.base.AttrContents; @@ -854,7 +854,7 @@ public class ChartInteractivePane extends BasicScrollPane implements UIOb protected List refreshList(HashMap map) { List list = new ArrayList(); - java.util.HashMap hyperLinkEditorMap = plot.getHyperLinkEditorMap(); + java.util.HashMap hyperLinkEditorMap = plot.getHyperLinkEditorMap(); list.add(new ChartUIMenuNameableCreator(hyperLinkEditorMap, Inter.getLocText("Chart-Link_Reportlet"), new ReportletHyperlink(), getUseMap(map, ReportletHyperlink.class))); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/other/TimeSwitchPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/other/TimeSwitchPane.java index 21e680da2c..0e1a65ffbf 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/other/TimeSwitchPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/other/TimeSwitchPane.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.chart.gui.other; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.chart.base.ChartConstants; import com.fr.chart.base.TimeSwitchAttr; @@ -22,7 +22,12 @@ import com.fr.general.Inter; import javax.swing.*; import java.awt.*; -import java.awt.event.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -85,10 +90,10 @@ public class TimeSwitchPane extends JPanel implements UIObserver { private void initTablePane(){ tablePane = new JPanel(new TableLayout()); - tablePane.add(new TimeTickBox(new Formula("1"),ChartConstants.MONTH_TYPE)); - tablePane.add(new TimeTickBox(new Formula("3"),ChartConstants.MONTH_TYPE)); - tablePane.add(new TimeTickBox(new Formula("6"),ChartConstants.MONTH_TYPE)); - tablePane.add(new TimeTickBox(new Formula("1"), ChartConstants.YEAR_TYPE)); + tablePane.add(new TimeTickBox(BaseFormula.createFormulaBuilder().build("1"),ChartConstants.MONTH_TYPE)); + tablePane.add(new TimeTickBox(BaseFormula.createFormulaBuilder().build("3"),ChartConstants.MONTH_TYPE)); + tablePane.add(new TimeTickBox(BaseFormula.createFormulaBuilder().build("6"),ChartConstants.MONTH_TYPE)); + tablePane.add(new TimeTickBox(BaseFormula.createFormulaBuilder().build("1"), ChartConstants.YEAR_TYPE)); tablePane.revalidate(); } @@ -111,7 +116,7 @@ public class TimeSwitchPane extends JPanel implements UIObserver { return new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - tablePane.add(new TimeTickBox(new Formula(),ChartConstants.YEAR_TYPE)); + tablePane.add(new TimeTickBox(BaseFormula.createFormulaBuilder().build(),ChartConstants.YEAR_TYPE)); tablePane.revalidate(); fireChange(); } @@ -150,7 +155,7 @@ public class TimeSwitchPane extends JPanel implements UIObserver { continue; } TimeTickBox box =(TimeTickBox) component; - timeMap.add(new TimeSwitchAttr(new Formula(box.mainUnitField.getText()),VALUES.get(box.mainType.getSelectedItem()))); + timeMap.add(new TimeSwitchAttr(BaseFormula.createFormulaBuilder().build(box.mainUnitField.getText()),VALUES.get(box.mainType.getSelectedItem()))); } } @@ -267,7 +272,7 @@ public class TimeSwitchPane extends JPanel implements UIObserver { private UIComboBox mainType; private UIButton delButton; - public TimeTickBox(Formula time,int unit){ + public TimeTickBox(BaseFormula time,int unit){ this.setLayout(new FlowLayout(FlowLayout.CENTER, 4, 0)); mainUnitField = new UITextField(time.toString()); mainUnitField.setEditable(false); @@ -310,7 +315,7 @@ public class TimeSwitchPane extends JPanel implements UIObserver { private void showFormulaPane(final UITextField jTextField) { final UIFormula formulaPane = FormulaFactory.createFormulaPane(); final String original = jTextField.getText(); - formulaPane.populate(new Formula(original)); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(original)); BasicDialog dlg = formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(TimeSwitchPane.this), new DialogActionAdapter() { public void doOk() { String newText = Utils.objectToString(formulaPane.update()); diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisLabelPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisLabelPane.java index 5aefede5c6..899c4c0199 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisLabelPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisLabelPane.java @@ -1,471 +1,469 @@ -package com.fr.design.mainframe.chart.gui.style; - -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; - -import javax.swing.JPanel; -import javax.swing.SpinnerNumberModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import com.fr.base.Formula; -import com.fr.base.Style; -import com.fr.base.Utils; -import com.fr.chart.base.ChartBaseUtils; -import com.fr.chart.base.TextAttr; -import com.fr.chart.chartattr.Axis; -import com.fr.design.constants.LayoutConstants; -import com.fr.design.event.UIObserver; -import com.fr.design.event.UIObserverListener; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.icombobox.UIComboBox; -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.gui.style.NumberDragBar; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.dialog.BasicPane; -import com.fr.general.Inter; - -public class ChartAxisLabelPane extends BasicPane implements UIObserver{ - private static final int LABEL_INTERVAL = 0; - private static final int LABEL_WRAP =1; - - private static final long serialVersionUID = 6601571951210596823L; - private static final int NUM90 = 90; - private UICheckBox isLabelShow; - private UIComboBox showWay;//显示方式 - private UITextField customLabelSamleTime; - private UIComboBox labelOrientationChoose; - private NumberDragBar orientationBar; - private UIBasicSpinner orientationSpinner; - private ChartTextAttrPane textAttrPane; - private UICheckBox auto; - private UICheckBox custom; - private UIComboBox labelSampleChoose; - - private JPanel labelPane; - private JPanel showWayPane; - private UIObserverListener observerListener; - private ActionListener autoActionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - auto.removeActionListener(autoActionListener); - custom.removeActionListener(customActionListener); - auto.setSelected(true); - custom.setSelected(false); - customLabelSamleTime.setEnabled(false); - auto.addActionListener(autoActionListener); - custom.addActionListener(customActionListener); - } - }; - - private ActionListener customActionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - auto.removeActionListener(autoActionListener); - custom.removeActionListener(customActionListener); - auto.setSelected(false); - custom.setSelected(true); - customLabelSamleTime.setEnabled(true); - customLabelSamleTime.setText("1"); - auto.addActionListener(autoActionListener); - custom.addActionListener(customActionListener); - } - }; - - public ChartAxisLabelPane() { - initComponents(); - } - - private void initComponents() { - isLabelShow = new UICheckBox(Inter.getLocText("FR-Utils_Label")); - auto = new UICheckBox(Inter.getLocText(new String[]{"FR-App-All_Auto", "FR-Chart-Axis_labelInterval"})); - custom = new UICheckBox(Inter.getLocText(new String[]{"FR-App-All_Custom", "FR-Chart-Axis_labelInterval"})); - showWay = new UIComboBox(new String[]{Inter.getLocText("FR-Chart-Axis_labelInterval"),Inter.getLocText("FR-Chart-Axis_labelWrap")}); - customLabelSamleTime = new UITextField(); - - String[] nameObjects = {Inter.getLocText("FR-Chart_All_Normal"), Inter.getLocText("FR-Chart-Text_Vertical"), Inter.getLocText("FR-Chart-Text_Rotation")}; - labelOrientationChoose = new UIComboBox(nameObjects); - orientationBar = new NumberDragBar(-NUM90, NUM90); - orientationSpinner = new UIBasicSpinner(new SpinnerNumberModel(0, -NUM90, NUM90, 1)); - - String[] sampleType = {Inter.getLocText("FR-App-All_Auto"), Inter.getLocText("FR-App-All_Custom")}; - labelSampleChoose = new UIComboBox(sampleType); - customLabelSamleTime = new UITextField(); - checkCustomSampleField(); - - checkOrientationField(); - - textAttrPane = new ChartTextAttrPane(); - this.setLayout(new BorderLayout()); - - initListener(); - } - - private void initListener(){ - - showWay.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - checkShowWay(); - } - }); - - orientationSpinner.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - orientationBar.setValue((Integer) orientationSpinner.getValue()); - - } - }); - orientationBar.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - orientationSpinner.setValue((Integer) orientationBar.getValue()); - - } - }); - - - labelSampleChoose.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - checkCustomSampleField(); - } - }); - - auto.addActionListener(autoActionListener); - - custom.addActionListener(customActionListener); - labelOrientationChoose.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - checkOrientationField(); - } - }); - isLabelShow.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - checkLabelUse(); - } - }); - } - - private JPanel getWrapShowWayPane() { - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; - double[] rowSize = {p, p, p, p}; - - Component[][] components = new Component[][]{ - new Component[]{null, new UILabel(Inter.getLocText("FR-Chart-Axis_labelShowway")), showWay, null}, - new Component[]{null, new UILabel(Inter.getLocText("StyleAlignment-Text_Rotation")), labelOrientationChoose, null}, - new Component[]{null, orientationSpinner, orientationBar, null}, - new Component[]{null, textAttrPane, null, null}, - }; - return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - } - - private JPanel getIntervalShowWayPane() { - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {f}; - double[] rowSize = {p, p, p}; - - Component[][] components = new Component[][]{ - new Component[]{getCombox()}, - new Component[]{getTowChoose()}, - new Component[]{getOther()} - }; - return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - } - - private JPanel getTowChoose() { - auto.registerChangeListener(this.observerListener); - custom.registerChangeListener(this.observerListener); - customLabelSamleTime.registerChangeListener(this.observerListener); - auto.setSelected(true); - custom.setSelected(false); - customLabelSamleTime.setVisible(true); - customLabelSamleTime.setEnabled(false); - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, f}; - double[] rowSize = {p, p}; - - JPanel customPane = TableLayoutHelper.createTableLayoutPane(new Component[][]{ - new Component[]{custom, customLabelSamleTime, null}, - }, new double[]{p}, new double[]{p, p, f}); - - Component[][] components = new Component[][]{ - new Component[]{null, auto,}, - new Component[]{null, customPane} - }; - return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - } - - private JPanel getCombox() { - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; - double[] rowSize = {p}; - - Component[][] components = new Component[][]{ - new Component[]{null, new UILabel(Inter.getLocText("FR-Chart-Axis_labelShowway")), showWay, null} - }; - return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - } - - private JPanel getOther() { - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; - double[] rowSize = {p, p, p}; - - Component[][] components = new Component[][]{ - new Component[]{null, new UILabel(Inter.getLocText("StyleAlignment-Text_Rotation")), labelOrientationChoose, null}, - new Component[]{null, orientationSpinner, orientationBar, null}, - new Component[]{null, textAttrPane, null, null}, - }; - return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - } - - private void checkShowWay() { - if (showWayPane != null) { - this.remove(showWayPane); - } - showWay.registerChangeListener(this.observerListener); - orientationSpinner.registerChangeListener(this.observerListener); - labelOrientationChoose.registerChangeListener(this.observerListener); - if (showWay.getSelectedIndex() == LABEL_INTERVAL) { - labelPane = getIntervalShowWayPane(); - } else { - labelPane = getWrapShowWayPane(); - } - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] row = {p, p}; - double[] col = {f}; - showWayPane = TableLayoutHelper.createTableLayoutPane(new Component[][]{ - new Component[]{isLabelShow}, new Component[]{labelPane}}, row, col); - this.add(showWayPane, BorderLayout.CENTER); - this.validate(); - } - - - - private void checkOrientationField() { - if (labelOrientationChoose.getSelectedIndex() != 2) { - orientationBar.setVisible(false); - orientationSpinner.setVisible(false); - } else { - orientationBar.setVisible(true); - orientationSpinner.setVisible(true); - } - } - - private void checkPaneOnlyInterval(){ - if (showWayPane != null) { - this.remove(showWayPane); - } - showWayPane = getPanel(); - this.add(showWayPane, BorderLayout.CENTER); - this.validate(); - } - - - private JPanel getPanel() { - labelSampleChoose.registerChangeListener(this.observerListener); - customLabelSamleTime.registerChangeListener(this.observerListener); - orientationSpinner.registerChangeListener(this.observerListener); - labelOrientationChoose.registerChangeListener(this.observerListener); - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; - double[] rowSize = {p, p, p, p}; - - Component[][] components = new Component[][]{ - new Component[]{null,new UILabel(Inter.getLocText("ChartF-Label_Interval")), labelSampleChoose, customLabelSamleTime}, - new Component[]{null,new UILabel(Inter.getLocText("StyleAlignment-Text_Rotation")), labelOrientationChoose, null}, - new Component[]{null,orientationSpinner, orientationBar, null}, - new Component[]{null,textAttrPane, null, null}, - }; - labelPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); - - double[] row = {p,p}; - double[] col = {f}; - return TableLayoutHelper.createTableLayoutPane(new Component[][]{ - new Component[]{isLabelShow}, new Component[]{labelPane}}, row, col); - } - - private void checkCustomSampleField() { - if (labelSampleChoose.getSelectedIndex() == 0) { - customLabelSamleTime.setVisible(false); - } else { - customLabelSamleTime.setVisible(true); - customLabelSamleTime.setText("1"); - } - } - - - /** - * 界面标签 - */ - protected String title4PopupWindow() { - return Inter.getLocText("ChartF-Tick_Label"); - } - - private int getLabelTextOrientationIndex(TextAttr textAttr) { - if (textAttr.getAlignText() == Style.VERTICALTEXT) { - return 1; - } else if (textAttr.getRotation() != 0) { - return 2; - } else { - return 0; - } - } - - private int getLabelSampleNumber(Formula formula) { - Number number = ChartBaseUtils.formula2Number(formula); - if (number != null) { - int num = number.intValue(); - return num < 1 ? 0 : 1; - } - return 0; - } - - private boolean isWrapShow(Formula formula){ - Number number = ChartBaseUtils.formula2Number(formula); - return number == null; - } - - /** - * 检查 标签界面是否可用. - */ - private void checkLabelUse() { - isLabelShow.setEnabled(true); - labelPane.setVisible(isLabelShow.isSelected()); - } - - @Override - public Dimension getPreferredSize() { - if (isLabelShow.isSelected()) { - return super.getPreferredSize(); - } else { - return this.isLabelShow.getPreferredSize(); - } - } - - /** - * 更新界面内容. - */ - public void populate(Axis axis) { - if(axis.isSupportAxisLabelWrap()){ - checkShowWay(); - if (isWrapShow(axis.getLabelNumber())) { - showWay.setSelectedIndex(LABEL_WRAP); - } else { - showWay.setSelectedIndex(LABEL_INTERVAL); - boolean isAuto = getLabelSampleNumber(axis.getLabelNumber()) == 0; - auto.setSelected(isAuto); - custom.setSelected(!isAuto); - customLabelSamleTime.setText(isAuto ? "" : String.valueOf(ChartBaseUtils.formula2Number(axis.getLabelNumber()))); - customLabelSamleTime.setEnabled(!isAuto); - } - }else{ - checkPaneOnlyInterval(); - labelSampleChoose.setSelectedIndex(getLabelSampleNumber(axis.getLabelNumber())); - if (labelSampleChoose.getSelectedIndex() == 1) { - customLabelSamleTime.setText(String.valueOf(ChartBaseUtils.formula2Number(axis.getLabelNumber()))); - } - } - isLabelShow.setSelected(axis.isShowAxisLabel()); - textAttrPane.populate(axis.getTextAttr()); - labelOrientationChoose.setSelectedIndex(getLabelTextOrientationIndex(axis.getTextAttr())); - orientationBar.setValue(axis.getTextAttr().getRotation()); - orientationSpinner.setValue(axis.getTextAttr().getRotation()); - checkLabelUse(); - this.initSelfListener(this); - } - - - /** - * 保存界面属性. - */ - public void update(Axis axis) { - axis.setShowAxisLabel(isLabelShow.isSelected()); - if (isLabelShow.isSelected()) { - if(axis.isSupportAxisLabelWrap()){ - this.update4Wrap(axis); - }else{ - update4Normal(axis); - } - - TextAttr textAttr = axis.getTextAttr(); - textAttrPane.update(textAttr); - if (labelOrientationChoose.getSelectedIndex() == 0) { - textAttr.setRotation(0); - textAttr.setAlignText(Style.HORIZONTALTEXT); - } else if (labelOrientationChoose.getSelectedIndex() == 1) { - textAttr.setRotation(0); - textAttr.setAlignText(Style.VERTICALTEXT); - } else { - textAttr.setAlignText(Style.HORIZONTALTEXT); - textAttr.setRotation(Utils.objectToNumber(orientationSpinner.getValue(), false).intValue()); - } - } - } - - private void update4Normal(Axis axis){ - if (labelSampleChoose.getSelectedIndex() == 0) { - axis.setLabelIntervalNumber(new Formula("0")); - } else { - axis.setLabelIntervalNumber(new Formula(customLabelSamleTime.getText())); - } - } - - private void update4Wrap(Axis axis){ - if (showWay.getSelectedIndex() == LABEL_WRAP) { - axis.setLabelIntervalNumber(new Formula()); - } else if (showWay.getSelectedIndex() == LABEL_INTERVAL) { - if (auto.isSelected()) { - axis.setLabelIntervalNumber(new Formula("0")); - } else if (custom.isSelected()) { - axis.setLabelIntervalNumber(new Formula(customLabelSamleTime.getText())); - } - } - } - - /** - * 注册时间监听器 - * @param listener 观察者监听事件 - */ - public void registerChangeListener(UIObserverListener listener) { - this.observerListener = listener; - } - - private void initSelfListener(Container parentComponent) { - for (int i = 0; i < parentComponent.getComponentCount(); i++) { - Component tmpComp = parentComponent.getComponent(i); - if (tmpComp instanceof Container) { - initSelfListener((Container) tmpComp); - } - if (tmpComp instanceof UIObserver) { - ((UIObserver) tmpComp).registerChangeListener(observerListener); - } - } - } - - /** - * 是否响应事件监听 - * @return 是则返回true - */ - public boolean shouldResponseChangeListener() { - return true; - } +package com.fr.design.mainframe.chart.gui.style; + +import com.fr.base.BaseFormula; +import com.fr.base.Style; +import com.fr.base.Utils; +import com.fr.chart.base.ChartBaseUtils; +import com.fr.chart.base.TextAttr; +import com.fr.chart.chartattr.Axis; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.BasicPane; +import com.fr.design.event.UIObserver; +import com.fr.design.event.UIObserverListener; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icombobox.UIComboBox; +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.gui.style.NumberDragBar; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +public class ChartAxisLabelPane extends BasicPane implements UIObserver{ + private static final int LABEL_INTERVAL = 0; + private static final int LABEL_WRAP =1; + + private static final long serialVersionUID = 6601571951210596823L; + private static final int NUM90 = 90; + private UICheckBox isLabelShow; + private UIComboBox showWay;//显示方式 + private UITextField customLabelSamleTime; + private UIComboBox labelOrientationChoose; + private NumberDragBar orientationBar; + private UIBasicSpinner orientationSpinner; + private ChartTextAttrPane textAttrPane; + private UICheckBox auto; + private UICheckBox custom; + private UIComboBox labelSampleChoose; + + private JPanel labelPane; + private JPanel showWayPane; + private UIObserverListener observerListener; + private ActionListener autoActionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + auto.removeActionListener(autoActionListener); + custom.removeActionListener(customActionListener); + auto.setSelected(true); + custom.setSelected(false); + customLabelSamleTime.setEnabled(false); + auto.addActionListener(autoActionListener); + custom.addActionListener(customActionListener); + } + }; + + private ActionListener customActionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + auto.removeActionListener(autoActionListener); + custom.removeActionListener(customActionListener); + auto.setSelected(false); + custom.setSelected(true); + customLabelSamleTime.setEnabled(true); + customLabelSamleTime.setText("1"); + auto.addActionListener(autoActionListener); + custom.addActionListener(customActionListener); + } + }; + + public ChartAxisLabelPane() { + initComponents(); + } + + private void initComponents() { + isLabelShow = new UICheckBox(Inter.getLocText("FR-Utils_Label")); + auto = new UICheckBox(Inter.getLocText(new String[]{"FR-App-All_Auto", "FR-Chart-Axis_labelInterval"})); + custom = new UICheckBox(Inter.getLocText(new String[]{"FR-App-All_Custom", "FR-Chart-Axis_labelInterval"})); + showWay = new UIComboBox(new String[]{Inter.getLocText("FR-Chart-Axis_labelInterval"),Inter.getLocText("FR-Chart-Axis_labelWrap")}); + customLabelSamleTime = new UITextField(); + + String[] nameObjects = {Inter.getLocText("FR-Chart_All_Normal"), Inter.getLocText("FR-Chart-Text_Vertical"), Inter.getLocText("FR-Chart-Text_Rotation")}; + labelOrientationChoose = new UIComboBox(nameObjects); + orientationBar = new NumberDragBar(-NUM90, NUM90); + orientationSpinner = new UIBasicSpinner(new SpinnerNumberModel(0, -NUM90, NUM90, 1)); + + String[] sampleType = {Inter.getLocText("FR-App-All_Auto"), Inter.getLocText("FR-App-All_Custom")}; + labelSampleChoose = new UIComboBox(sampleType); + customLabelSamleTime = new UITextField(); + checkCustomSampleField(); + + checkOrientationField(); + + textAttrPane = new ChartTextAttrPane(); + this.setLayout(new BorderLayout()); + + initListener(); + } + + private void initListener(){ + + showWay.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + checkShowWay(); + } + }); + + orientationSpinner.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + orientationBar.setValue((Integer) orientationSpinner.getValue()); + + } + }); + orientationBar.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + orientationSpinner.setValue((Integer) orientationBar.getValue()); + + } + }); + + + labelSampleChoose.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkCustomSampleField(); + } + }); + + auto.addActionListener(autoActionListener); + + custom.addActionListener(customActionListener); + labelOrientationChoose.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkOrientationField(); + } + }); + isLabelShow.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkLabelUse(); + } + }); + } + + private JPanel getWrapShowWayPane() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; + double[] rowSize = {p, p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{null, new UILabel(Inter.getLocText("FR-Chart-Axis_labelShowway")), showWay, null}, + new Component[]{null, new UILabel(Inter.getLocText("StyleAlignment-Text_Rotation")), labelOrientationChoose, null}, + new Component[]{null, orientationSpinner, orientationBar, null}, + new Component[]{null, textAttrPane, null, null}, + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + private JPanel getIntervalShowWayPane() { + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {f}; + double[] rowSize = {p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{getCombox()}, + new Component[]{getTowChoose()}, + new Component[]{getOther()} + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + private JPanel getTowChoose() { + auto.registerChangeListener(this.observerListener); + custom.registerChangeListener(this.observerListener); + customLabelSamleTime.registerChangeListener(this.observerListener); + auto.setSelected(true); + custom.setSelected(false); + customLabelSamleTime.setVisible(true); + customLabelSamleTime.setEnabled(false); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, f}; + double[] rowSize = {p, p}; + + JPanel customPane = TableLayoutHelper.createTableLayoutPane(new Component[][]{ + new Component[]{custom, customLabelSamleTime, null}, + }, new double[]{p}, new double[]{p, p, f}); + + Component[][] components = new Component[][]{ + new Component[]{null, auto,}, + new Component[]{null, customPane} + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + private JPanel getCombox() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; + double[] rowSize = {p}; + + Component[][] components = new Component[][]{ + new Component[]{null, new UILabel(Inter.getLocText("FR-Chart-Axis_labelShowway")), showWay, null} + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + private JPanel getOther() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; + double[] rowSize = {p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{null, new UILabel(Inter.getLocText("StyleAlignment-Text_Rotation")), labelOrientationChoose, null}, + new Component[]{null, orientationSpinner, orientationBar, null}, + new Component[]{null, textAttrPane, null, null}, + }; + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + } + + private void checkShowWay() { + if (showWayPane != null) { + this.remove(showWayPane); + } + showWay.registerChangeListener(this.observerListener); + orientationSpinner.registerChangeListener(this.observerListener); + labelOrientationChoose.registerChangeListener(this.observerListener); + if (showWay.getSelectedIndex() == LABEL_INTERVAL) { + labelPane = getIntervalShowWayPane(); + } else { + labelPane = getWrapShowWayPane(); + } + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] row = {p, p}; + double[] col = {f}; + showWayPane = TableLayoutHelper.createTableLayoutPane(new Component[][]{ + new Component[]{isLabelShow}, new Component[]{labelPane}}, row, col); + this.add(showWayPane, BorderLayout.CENTER); + this.validate(); + } + + + + private void checkOrientationField() { + if (labelOrientationChoose.getSelectedIndex() != 2) { + orientationBar.setVisible(false); + orientationSpinner.setVisible(false); + } else { + orientationBar.setVisible(true); + orientationSpinner.setVisible(true); + } + } + + private void checkPaneOnlyInterval(){ + if (showWayPane != null) { + this.remove(showWayPane); + } + showWayPane = getPanel(); + this.add(showWayPane, BorderLayout.CENTER); + this.validate(); + } + + + private JPanel getPanel() { + labelSampleChoose.registerChangeListener(this.observerListener); + customLabelSamleTime.registerChangeListener(this.observerListener); + orientationSpinner.registerChangeListener(this.observerListener); + labelOrientationChoose.registerChangeListener(this.observerListener); + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, p, f}; + double[] rowSize = {p, p, p, p}; + + Component[][] components = new Component[][]{ + new Component[]{null,new UILabel(Inter.getLocText("ChartF-Label_Interval")), labelSampleChoose, customLabelSamleTime}, + new Component[]{null,new UILabel(Inter.getLocText("StyleAlignment-Text_Rotation")), labelOrientationChoose, null}, + new Component[]{null,orientationSpinner, orientationBar, null}, + new Component[]{null,textAttrPane, null, null}, + }; + labelPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); + + double[] row = {p,p}; + double[] col = {f}; + return TableLayoutHelper.createTableLayoutPane(new Component[][]{ + new Component[]{isLabelShow}, new Component[]{labelPane}}, row, col); + } + + private void checkCustomSampleField() { + if (labelSampleChoose.getSelectedIndex() == 0) { + customLabelSamleTime.setVisible(false); + } else { + customLabelSamleTime.setVisible(true); + customLabelSamleTime.setText("1"); + } + } + + + /** + * 界面标签 + */ + protected String title4PopupWindow() { + return Inter.getLocText("ChartF-Tick_Label"); + } + + private int getLabelTextOrientationIndex(TextAttr textAttr) { + if (textAttr.getAlignText() == Style.VERTICALTEXT) { + return 1; + } else if (textAttr.getRotation() != 0) { + return 2; + } else { + return 0; + } + } + + private int getLabelSampleNumber(BaseFormula formula) { + Number number = ChartBaseUtils.formula2Number(formula); + if (number != null) { + int num = number.intValue(); + return num < 1 ? 0 : 1; + } + return 0; + } + + private boolean isWrapShow(BaseFormula formula){ + Number number = ChartBaseUtils.formula2Number(formula); + return number == null; + } + + /** + * 检查 标签界面是否可用. + */ + private void checkLabelUse() { + isLabelShow.setEnabled(true); + labelPane.setVisible(isLabelShow.isSelected()); + } + + @Override + public Dimension getPreferredSize() { + if (isLabelShow.isSelected()) { + return super.getPreferredSize(); + } else { + return this.isLabelShow.getPreferredSize(); + } + } + + /** + * 更新界面内容. + */ + public void populate(Axis axis) { + if(axis.isSupportAxisLabelWrap()){ + checkShowWay(); + if (isWrapShow(axis.getLabelNumber())) { + showWay.setSelectedIndex(LABEL_WRAP); + } else { + showWay.setSelectedIndex(LABEL_INTERVAL); + boolean isAuto = getLabelSampleNumber(axis.getLabelNumber()) == 0; + auto.setSelected(isAuto); + custom.setSelected(!isAuto); + customLabelSamleTime.setText(isAuto ? "" : String.valueOf(ChartBaseUtils.formula2Number(axis.getLabelNumber()))); + customLabelSamleTime.setEnabled(!isAuto); + } + }else{ + checkPaneOnlyInterval(); + labelSampleChoose.setSelectedIndex(getLabelSampleNumber(axis.getLabelNumber())); + if (labelSampleChoose.getSelectedIndex() == 1) { + customLabelSamleTime.setText(String.valueOf(ChartBaseUtils.formula2Number(axis.getLabelNumber()))); + } + } + isLabelShow.setSelected(axis.isShowAxisLabel()); + textAttrPane.populate(axis.getTextAttr()); + labelOrientationChoose.setSelectedIndex(getLabelTextOrientationIndex(axis.getTextAttr())); + orientationBar.setValue(axis.getTextAttr().getRotation()); + orientationSpinner.setValue(axis.getTextAttr().getRotation()); + checkLabelUse(); + this.initSelfListener(this); + } + + + /** + * 保存界面属性. + */ + public void update(Axis axis) { + axis.setShowAxisLabel(isLabelShow.isSelected()); + if (isLabelShow.isSelected()) { + if(axis.isSupportAxisLabelWrap()){ + this.update4Wrap(axis); + }else{ + update4Normal(axis); + } + + TextAttr textAttr = axis.getTextAttr(); + textAttrPane.update(textAttr); + if (labelOrientationChoose.getSelectedIndex() == 0) { + textAttr.setRotation(0); + textAttr.setAlignText(Style.HORIZONTALTEXT); + } else if (labelOrientationChoose.getSelectedIndex() == 1) { + textAttr.setRotation(0); + textAttr.setAlignText(Style.VERTICALTEXT); + } else { + textAttr.setAlignText(Style.HORIZONTALTEXT); + textAttr.setRotation(Utils.objectToNumber(orientationSpinner.getValue(), false).intValue()); + } + } + } + + private void update4Normal(Axis axis){ + if (labelSampleChoose.getSelectedIndex() == 0) { + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build("0")); + } else { + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build(customLabelSamleTime.getText())); + } + } + + private void update4Wrap(Axis axis){ + if (showWay.getSelectedIndex() == LABEL_WRAP) { + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build()); + } else if (showWay.getSelectedIndex() == LABEL_INTERVAL) { + if (auto.isSelected()) { + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build("0")); + } else if (custom.isSelected()) { + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build(customLabelSamleTime.getText())); + } + } + } + + /** + * 注册时间监听器 + * @param listener 观察者监听事件 + */ + public void registerChangeListener(UIObserverListener listener) { + this.observerListener = listener; + } + + private void initSelfListener(Container parentComponent) { + for (int i = 0; i < parentComponent.getComponentCount(); i++) { + Component tmpComp = parentComponent.getComponent(i); + if (tmpComp instanceof Container) { + initSelfListener((Container) tmpComp); + } + if (tmpComp instanceof UIObserver) { + ((UIObserver) tmpComp).registerChangeListener(observerListener); + } + } + } + + /** + * 是否响应事件监听 + * @return 是则返回true + */ + public boolean shouldResponseChangeListener() { + return true; + } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisTitlePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisTitlePane.java index 469ec4b535..8348b0cba8 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisTitlePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/ChartAxisTitlePane.java @@ -1,19 +1,19 @@ package com.fr.design.mainframe.chart.gui.style; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.base.Style; import com.fr.base.Utils; import com.fr.chart.chartattr.Axis; import com.fr.chart.chartattr.Title; import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.BasicPane; import com.fr.design.formula.TinyFormulaPane; import com.fr.design.gui.ibutton.UIButtonGroup; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.dialog.BasicPane; import com.fr.general.FRFont; import com.fr.general.Inter; import com.fr.stable.Constants; @@ -109,7 +109,7 @@ public class ChartAxisTitlePane extends BasicPane{ title.getTextAttr().setAlignText(Style.VERTICALTEXT); } if(StableUtils.canBeFormula(axisTitleContentPane.updateBean())) { - title.setTextObject(new Formula(axisTitleContentPane.updateBean())); + title.setTextObject(BaseFormula.createFormulaBuilder().build(axisTitleContentPane.updateBean())); } else { title.setTextObject(axisTitleContentPane.updateBean()); } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/DateAxisValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/DateAxisValuePane.java index 7276ab8dfe..f9683e39a1 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/DateAxisValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/DateAxisValuePane.java @@ -1,360 +1,365 @@ -package com.fr.design.mainframe.chart.gui.style; - -import com.fr.base.Formula; -import com.fr.base.Utils; -import com.fr.chart.base.ChartConstants; -import com.fr.chart.chartattr.CategoryAxis; -import com.fr.design.beans.FurtherBasicBeanPane; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.editor.ValueEditorPane; -import com.fr.design.editor.editor.DateEditor; -import com.fr.design.editor.editor.Editor; -import com.fr.design.editor.editor.FormulaEditor; -import com.fr.design.formula.FormulaFactory; -import com.fr.design.formula.UIFormula; -import com.fr.design.gui.date.UIDatePicker; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.style.FormatBox; -import com.fr.general.DateUtils; -import com.fr.general.FRLogger; -import com.fr.general.Inter; -import com.fr.stable.StringUtils; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; -import java.text.ParseException; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Pattern; - -/** - * 属性表, 坐标轴, 日期范围定义界面 - * @author kunsnat E-mail:kunsnat@gmail.com - * @version 创建时间:2013-1-4 上午10:25:15 - */ -public class DateAxisValuePane extends FurtherBasicBeanPane{ - - private static String[] TYPES = new String[]{ - Inter.getLocText("Year"), Inter.getLocText("Month"), Inter.getLocText("Sun"), - Inter.getLocText("Sche-Hour"), Inter.getLocText("Sche-Minute"), - Inter.getLocText("Sche-Second") - }; - - private static Map VALUES = new HashMap(); - static { - VALUES.put(Inter.getLocText("Year"), ChartConstants.YEAR_TYPE); - VALUES.put(Inter.getLocText("Month"), ChartConstants.MONTH_TYPE); - VALUES.put(Inter.getLocText("Sun"), ChartConstants.DAY_TYPE); - VALUES.put(Inter.getLocText("Sche-Hour"), ChartConstants.HOUR_TYPE); - VALUES.put(Inter.getLocText("Sche-Minute"), ChartConstants.MINUTE_TYPE); - VALUES.put(Inter.getLocText("Sche-Second"), ChartConstants.SECOND_TYPE); - } - - private static Map INTS = new HashMap(); - static { - INTS.put(ChartConstants.YEAR_TYPE, Inter.getLocText("Year")); - INTS.put(ChartConstants.MONTH_TYPE, Inter.getLocText("Month")); - INTS.put(ChartConstants.DAY_TYPE, Inter.getLocText("Sun")); - INTS.put(ChartConstants.HOUR_TYPE, Inter.getLocText("Sche-Hour")); - INTS.put(ChartConstants.MINUTE_TYPE, Inter.getLocText("Sche-Minute")); - INTS.put(ChartConstants.SECOND_TYPE, Inter.getLocText("Sche-Second")); - } - - // 最大最小值 - private UICheckBox maxCheckBox; - private ValueEditorPane maxValueField; - private UICheckBox minCheckBox; - private ValueEditorPane minValueField; - - private UICheckBox mainTickBox; - private UITextField mainUnitField; - private UIComboBox mainType; - - private FormatBox formatBox; - public FormatBox getFormatBox() { - return this.formatBox; - } - - public DateAxisValuePane() { - this.initComponents(); - } - - private void initMin() { - // 最小值. - minCheckBox = new UICheckBox(Inter.getLocText("Min_Value")); - Date tmp = null; - DateEditor dateEditor = new DateEditor(tmp, true, Inter.getLocText("Date"), UIDatePicker.STYLE_CN_DATETIME1); - Editor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); - Editor[] editor = new Editor[]{dateEditor, formulaEditor}; - minValueField = new ValueEditorPane(editor); - minValueField.setEnabled(false); - minCheckBox.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - } - - private void initMax() { - // 最大值 - maxCheckBox = new UICheckBox(Inter.getLocText("Max_Value")); - Date tmp = null; - DateEditor dateEditor = new DateEditor(tmp, true, Inter.getLocText("Date"), UIDatePicker.STYLE_CN_DATETIME1); - Editor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); - Editor[] editor = new Editor[]{dateEditor, formulaEditor}; - maxValueField = new ValueEditorPane(editor); - maxValueField.setEnabled(false); - maxCheckBox.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - } - - private void initMain() { - // 主要刻度单位 - mainTickBox = new UICheckBox(Inter.getLocText("MainGraduationUnit")); - mainUnitField = new UITextField(); - mainUnitField.setPreferredSize(new Dimension(30, 20)); - mainUnitField.setEditable(false); - mainType = new UIComboBox(TYPES); - mainType.setEnabled(false); - - mainTickBox.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - checkBoxUse(); - } - }); - - addListener(mainTickBox, mainUnitField); - } - - private void initComponents() { - setLayout(FRGUIPaneFactory.createBorderLayout()); - formatBox = new FormatBox(); - JPanel pane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); - add(pane, BorderLayout.NORTH); - - initMin(); - initMax(); - initMain(); - - JPanel mainTickPane = new JPanel(); - mainTickPane.setLayout(new FlowLayout(FlowLayout.CENTER, 4, 0)); - - mainTickPane.add(mainUnitField); - mainTickPane.add(mainType); - - JPanel secTickPane = new JPanel(); - secTickPane.setLayout(new FlowLayout(FlowLayout.CENTER, 4, 0)); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] rowSize = {p, p, p}; - double[] columnSize = {p, f}; - Component[][] maxMin = { - {minCheckBox, minValueField}, - {maxCheckBox, maxValueField}, - - }; - JPanel maxMinPane = TableLayoutHelper.createTableLayoutPane(maxMin, rowSize, columnSize); - Component[][] components = { - {maxMinPane, null}, - {mainTickBox, mainTickPane} - - }; - pane.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize)); - } - - private void addListener(final UICheckBox box, final UITextField textField) { - textField.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent e) { - if (box.isSelected()) { - showFormulaPane(textField); - } - } - }); - textField.addKeyListener(new KeyAdapter() { - public void keyTyped(KeyEvent e) { - if (box.isSelected()) { - e.consume(); - showFormulaPane(textField); - } - } - }); - } - - private void showFormulaPane(final UITextField jTextField) { - final UIFormula formulaPane = FormulaFactory.createFormulaPane(); - formulaPane.populate(new Formula(jTextField.getText())); - BasicDialog dlg = formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(DateAxisValuePane.this), new DialogActionAdapter() { - public void doOk() { - jTextField.setText(Utils.objectToString(formulaPane.update())); - } - }); - dlg.setVisible(true); - } - - private void populateMain(CategoryAxis axis) { - if (axis.isCustomMainUnit() && axis.getMainUnit() != null) { - mainTickBox.setSelected(true); - mainUnitField.setText(Utils.objectToString(axis.getMainUnit())); - mainType.setSelectedItem(INTS.get(axis.getMainType())); - } - } - - private void updateMain(CategoryAxis axis) { - if (mainTickBox.isSelected() && StringUtils.isNotEmpty(mainUnitField.getText())) { - axis.setCustomMainUnit(true); - axis.setMainUnit(new Formula(mainUnitField.getText())); - axis.setMainType(VALUES.get(mainType.getSelectedItem())); - } else { - axis.setCustomMainUnit(false); - } - } - - @Override - public boolean accept(Object ob) { - return ob instanceof CategoryAxis; - } - - @Override - public void reset() { - - } - - @Override - public String title4PopupWindow() { - return Inter.getLocText("Chart_Date_Axis"); - } - - private void checkBoxUse() { - minValueField.setEnabled(minCheckBox.isSelected()); - maxValueField.setEnabled(maxCheckBox.isSelected()); - if(minValueField.getCurrentEditor() instanceof FormulaEditor){ - FormulaEditor tmpEditor = (FormulaEditor)minValueField.getCurrentEditor(); - tmpEditor.enableEditor(minCheckBox.isSelected()); - } - - if(maxValueField.getCurrentEditor() instanceof FormulaEditor){ - FormulaEditor tmpEditor = (FormulaEditor)maxValueField.getCurrentEditor(); - tmpEditor.enableEditor(maxCheckBox.isSelected()); - } - - mainType.setEnabled(mainTickBox.isSelected()); - mainUnitField.setEnabled(mainTickBox.isSelected()); - } - - @Override - public void populateBean(CategoryAxis axis) { - if (axis == null) { - return; - } - if (!axis.isDate()) { - return; - } - // 最小值 - if (axis.isCustomMinValue() && axis.getMinValue() != null) { - minCheckBox.setSelected(true); - String dateStr = axis.getMinValue().getPureContent(); - if(!isDateForm(dateStr)){ - minValueField.populate(axis.getMinValue()); - }else{ - Date tmpDate = getDateFromFormula(axis.getMinValue()); - minValueField.populate(tmpDate); - } - - } - - - // 最大值 - if (axis.isCustomMaxValue() && axis.getMaxValue() != null) { - maxCheckBox.setSelected(true); - String dateStr = axis.getMaxValue().getPureContent(); - if(!isDateForm(dateStr)){ - maxValueField.populate(axis.getMaxValue()); - }else{ - Date tmpDate = getDateFromFormula(axis.getMaxValue()); - maxValueField.populate(tmpDate); - } - } - populateMain(axis); - - checkBoxUse(); - } - - private boolean isDateForm(String form){ - form = Pattern.compile("\"").matcher(form).replaceAll(StringUtils.EMPTY); - //全部是数字的话直接返回,string2Date会把全部是数字也会转化成日期 - if(form.matches("^[+-]?[0-9]*[0-9]$")){ - return false; - } - return (DateUtils.string2Date(form, true) != null); - } - - public void updateBean(CategoryAxis axis) { - updateMain(axis); - //最小值 - if (minCheckBox.isSelected()) { - if(minValueField.getCurrentEditor() instanceof FormulaEditor){ - Formula min = (Formula)minValueField.update(); - axis.setMinValue(min); - axis.setCustomMinValue(!StringUtils.isEmpty(min.getPureContent())); - }else{ - Date datetmp = (Date)minValueField.update(); - DateEditor dateEditor = (DateEditor)minValueField.getCurrentEditor(); - String dateString = dateEditor.getUIDatePickerFormat().format(datetmp); - axis.setCustomMinValue(!StringUtils.isEmpty(dateString)); - axis.setMinValue(new Formula(dateString)); - } - } else { - axis.setCustomMinValue(false); - } - - //最大值 - if (maxCheckBox.isSelected()) { - if(maxValueField.getCurrentEditor() instanceof FormulaEditor){ - Formula max = (Formula)maxValueField.update(); - axis.setMaxValue(max); - axis.setCustomMaxValue(!StringUtils.isEmpty(max.getPureContent())); - }else{ - Date datetmp = (Date)maxValueField.update(); - DateEditor dateEditor = (DateEditor)maxValueField.getCurrentEditor(); - String dateString = dateEditor.getUIDatePickerFormat().format(datetmp); - axis.setCustomMaxValue(!StringUtils.isEmpty(dateString)); - axis.setMaxValue(new Formula(dateString)); - } - } else { - axis.setCustomMaxValue(false); - } - - this.checkBoxUse(); - } - - @Override - public CategoryAxis updateBean() { - return null; - } - - //将从formula读出来的内容转化为指定格式的日期 - private static final Date getDateFromFormula(Formula dateFormula){ - String dateStr = dateFormula.getPureContent(); - dateStr = Pattern.compile("\"").matcher(dateStr).replaceAll(StringUtils.EMPTY); - Date toDate = DateUtils.string2Date(dateStr, true); - try { - String tmp = DateUtils.getDate2LStr(toDate); - toDate = DateUtils.DATETIMEFORMAT2.parse(tmp); - } catch (ParseException e) { - FRLogger.getLogger().error(Inter.getLocText("Cannot_Get_Date")); - } - return toDate; - } +package com.fr.design.mainframe.chart.gui.style; + +import com.fr.base.BaseFormula; +import com.fr.base.Utils; +import com.fr.chart.base.ChartConstants; +import com.fr.chart.chartattr.CategoryAxis; +import com.fr.design.beans.FurtherBasicBeanPane; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.editor.ValueEditorPane; +import com.fr.design.editor.editor.DateEditor; +import com.fr.design.editor.editor.Editor; +import com.fr.design.editor.editor.FormulaEditor; +import com.fr.design.formula.FormulaFactory; +import com.fr.design.formula.UIFormula; +import com.fr.design.gui.date.UIDatePicker; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.style.FormatBox; +import com.fr.general.DateUtils; +import com.fr.general.FRLogger; +import com.fr.general.Inter; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.text.ParseException; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +/** + * 属性表, 坐标轴, 日期范围定义界面 + * @author kunsnat E-mail:kunsnat@gmail.com + * @version 创建时间:2013-1-4 上午10:25:15 + */ +public class DateAxisValuePane extends FurtherBasicBeanPane{ + + private static String[] TYPES = new String[]{ + Inter.getLocText("Year"), Inter.getLocText("Month"), Inter.getLocText("Sun"), + Inter.getLocText("Sche-Hour"), Inter.getLocText("Sche-Minute"), + Inter.getLocText("Sche-Second") + }; + + private static Map VALUES = new HashMap(); + static { + VALUES.put(Inter.getLocText("Year"), ChartConstants.YEAR_TYPE); + VALUES.put(Inter.getLocText("Month"), ChartConstants.MONTH_TYPE); + VALUES.put(Inter.getLocText("Sun"), ChartConstants.DAY_TYPE); + VALUES.put(Inter.getLocText("Sche-Hour"), ChartConstants.HOUR_TYPE); + VALUES.put(Inter.getLocText("Sche-Minute"), ChartConstants.MINUTE_TYPE); + VALUES.put(Inter.getLocText("Sche-Second"), ChartConstants.SECOND_TYPE); + } + + private static Map INTS = new HashMap(); + static { + INTS.put(ChartConstants.YEAR_TYPE, Inter.getLocText("Year")); + INTS.put(ChartConstants.MONTH_TYPE, Inter.getLocText("Month")); + INTS.put(ChartConstants.DAY_TYPE, Inter.getLocText("Sun")); + INTS.put(ChartConstants.HOUR_TYPE, Inter.getLocText("Sche-Hour")); + INTS.put(ChartConstants.MINUTE_TYPE, Inter.getLocText("Sche-Minute")); + INTS.put(ChartConstants.SECOND_TYPE, Inter.getLocText("Sche-Second")); + } + + // 最大最小值 + private UICheckBox maxCheckBox; + private ValueEditorPane maxValueField; + private UICheckBox minCheckBox; + private ValueEditorPane minValueField; + + private UICheckBox mainTickBox; + private UITextField mainUnitField; + private UIComboBox mainType; + + private FormatBox formatBox; + public FormatBox getFormatBox() { + return this.formatBox; + } + + public DateAxisValuePane() { + this.initComponents(); + } + + private void initMin() { + // 最小值. + minCheckBox = new UICheckBox(Inter.getLocText("Min_Value")); + Date tmp = null; + DateEditor dateEditor = new DateEditor(tmp, true, Inter.getLocText("Date"), UIDatePicker.STYLE_CN_DATETIME1); + Editor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); + Editor[] editor = new Editor[]{dateEditor, formulaEditor}; + minValueField = new ValueEditorPane(editor); + minValueField.setEnabled(false); + minCheckBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + } + + private void initMax() { + // 最大值 + maxCheckBox = new UICheckBox(Inter.getLocText("Max_Value")); + Date tmp = null; + DateEditor dateEditor = new DateEditor(tmp, true, Inter.getLocText("Date"), UIDatePicker.STYLE_CN_DATETIME1); + Editor formulaEditor = new FormulaEditor(Inter.getLocText("Parameter-Formula")); + Editor[] editor = new Editor[]{dateEditor, formulaEditor}; + maxValueField = new ValueEditorPane(editor); + maxValueField.setEnabled(false); + maxCheckBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + } + + private void initMain() { + // 主要刻度单位 + mainTickBox = new UICheckBox(Inter.getLocText("MainGraduationUnit")); + mainUnitField = new UITextField(); + mainUnitField.setPreferredSize(new Dimension(30, 20)); + mainUnitField.setEditable(false); + mainType = new UIComboBox(TYPES); + mainType.setEnabled(false); + + mainTickBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkBoxUse(); + } + }); + + addListener(mainTickBox, mainUnitField); + } + + private void initComponents() { + setLayout(FRGUIPaneFactory.createBorderLayout()); + formatBox = new FormatBox(); + JPanel pane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); + add(pane, BorderLayout.NORTH); + + initMin(); + initMax(); + initMain(); + + JPanel mainTickPane = new JPanel(); + mainTickPane.setLayout(new FlowLayout(FlowLayout.CENTER, 4, 0)); + + mainTickPane.add(mainUnitField); + mainTickPane.add(mainType); + + JPanel secTickPane = new JPanel(); + secTickPane.setLayout(new FlowLayout(FlowLayout.CENTER, 4, 0)); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] rowSize = {p, p, p}; + double[] columnSize = {p, f}; + Component[][] maxMin = { + {minCheckBox, minValueField}, + {maxCheckBox, maxValueField}, + + }; + JPanel maxMinPane = TableLayoutHelper.createTableLayoutPane(maxMin, rowSize, columnSize); + Component[][] components = { + {maxMinPane, null}, + {mainTickBox, mainTickPane} + + }; + pane.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize)); + } + + private void addListener(final UICheckBox box, final UITextField textField) { + textField.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + if (box.isSelected()) { + showFormulaPane(textField); + } + } + }); + textField.addKeyListener(new KeyAdapter() { + public void keyTyped(KeyEvent e) { + if (box.isSelected()) { + e.consume(); + showFormulaPane(textField); + } + } + }); + } + + private void showFormulaPane(final UITextField jTextField) { + final UIFormula formulaPane = FormulaFactory.createFormulaPane(); + formulaPane.populate(BaseFormula.createFormulaBuilder().build(jTextField.getText())); + BasicDialog dlg = formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(DateAxisValuePane.this), new DialogActionAdapter() { + public void doOk() { + jTextField.setText(Utils.objectToString(formulaPane.update())); + } + }); + dlg.setVisible(true); + } + + private void populateMain(CategoryAxis axis) { + if (axis.isCustomMainUnit() && axis.getMainUnit() != null) { + mainTickBox.setSelected(true); + mainUnitField.setText(Utils.objectToString(axis.getMainUnit())); + mainType.setSelectedItem(INTS.get(axis.getMainType())); + } + } + + private void updateMain(CategoryAxis axis) { + if (mainTickBox.isSelected() && StringUtils.isNotEmpty(mainUnitField.getText())) { + axis.setCustomMainUnit(true); + axis.setMainUnit(BaseFormula.createFormulaBuilder().build(mainUnitField.getText())); + axis.setMainType(VALUES.get(mainType.getSelectedItem())); + } else { + axis.setCustomMainUnit(false); + } + } + + @Override + public boolean accept(Object ob) { + return ob instanceof CategoryAxis; + } + + @Override + public void reset() { + + } + + @Override + public String title4PopupWindow() { + return Inter.getLocText("Chart_Date_Axis"); + } + + private void checkBoxUse() { + minValueField.setEnabled(minCheckBox.isSelected()); + maxValueField.setEnabled(maxCheckBox.isSelected()); + if(minValueField.getCurrentEditor() instanceof FormulaEditor){ + FormulaEditor tmpEditor = (FormulaEditor)minValueField.getCurrentEditor(); + tmpEditor.enableEditor(minCheckBox.isSelected()); + } + + if(maxValueField.getCurrentEditor() instanceof FormulaEditor){ + FormulaEditor tmpEditor = (FormulaEditor)maxValueField.getCurrentEditor(); + tmpEditor.enableEditor(maxCheckBox.isSelected()); + } + + mainType.setEnabled(mainTickBox.isSelected()); + mainUnitField.setEnabled(mainTickBox.isSelected()); + } + + @Override + public void populateBean(CategoryAxis axis) { + if (axis == null) { + return; + } + if (!axis.isDate()) { + return; + } + // 最小值 + if (axis.isCustomMinValue() && axis.getMinValue() != null) { + minCheckBox.setSelected(true); + String dateStr = axis.getMinValue().getPureContent(); + if(!isDateForm(dateStr)){ + minValueField.populate(axis.getMinValue()); + }else{ + Date tmpDate = getDateFromFormula(axis.getMinValue()); + minValueField.populate(tmpDate); + } + + } + + + // 最大值 + if (axis.isCustomMaxValue() && axis.getMaxValue() != null) { + maxCheckBox.setSelected(true); + String dateStr = axis.getMaxValue().getPureContent(); + if(!isDateForm(dateStr)){ + maxValueField.populate(axis.getMaxValue()); + }else{ + Date tmpDate = getDateFromFormula(axis.getMaxValue()); + maxValueField.populate(tmpDate); + } + } + populateMain(axis); + + checkBoxUse(); + } + + private boolean isDateForm(String form){ + form = Pattern.compile("\"").matcher(form).replaceAll(StringUtils.EMPTY); + //全部是数字的话直接返回,string2Date会把全部是数字也会转化成日期 + if(form.matches("^[+-]?[0-9]*[0-9]$")){ + return false; + } + return (DateUtils.string2Date(form, true) != null); + } + + public void updateBean(CategoryAxis axis) { + updateMain(axis); + //最小值 + if (minCheckBox.isSelected()) { + if(minValueField.getCurrentEditor() instanceof FormulaEditor){ + BaseFormula min = (BaseFormula) minValueField.update(); + axis.setMinValue(min); + axis.setCustomMinValue(!StringUtils.isEmpty(min.getPureContent())); + }else{ + Date datetmp = (Date)minValueField.update(); + DateEditor dateEditor = (DateEditor)minValueField.getCurrentEditor(); + String dateString = dateEditor.getUIDatePickerFormat().format(datetmp); + axis.setCustomMinValue(!StringUtils.isEmpty(dateString)); + axis.setMinValue(BaseFormula.createFormulaBuilder().build(dateString)); + } + } else { + axis.setCustomMinValue(false); + } + + //最大值 + if (maxCheckBox.isSelected()) { + if(maxValueField.getCurrentEditor() instanceof FormulaEditor){ + BaseFormula max = (BaseFormula) maxValueField.update(); + axis.setMaxValue(max); + axis.setCustomMaxValue(!StringUtils.isEmpty(max.getPureContent())); + }else{ + Date datetmp = (Date)maxValueField.update(); + DateEditor dateEditor = (DateEditor)maxValueField.getCurrentEditor(); + String dateString = dateEditor.getUIDatePickerFormat().format(datetmp); + axis.setCustomMaxValue(!StringUtils.isEmpty(dateString)); + axis.setMaxValue(BaseFormula.createFormulaBuilder().build(dateString)); + } + } else { + axis.setCustomMaxValue(false); + } + + this.checkBoxUse(); + } + + @Override + public CategoryAxis updateBean() { + return null; + } + + //将从formula读出来的内容转化为指定格式的日期 + private static final Date getDateFromFormula(BaseFormula dateFormula){ + String dateStr = dateFormula.getPureContent(); + dateStr = Pattern.compile("\"").matcher(dateStr).replaceAll(StringUtils.EMPTY); + Date toDate = DateUtils.string2Date(dateStr, true); + try { + String tmp = DateUtils.getDate2LStr(toDate); + toDate = DateUtils.DATETIMEFORMAT2.parse(tmp); + } catch (ParseException e) { + FRLogger.getLogger().error(Inter.getLocText("Cannot_Get_Date")); + } + return toDate; + } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java index f62be44fbb..28737b0a1c 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/axis/ChartValuePane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.chart.gui.style.axis; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.chart.base.ChartBaseUtils; @@ -280,11 +281,11 @@ public class ChartValuePane extends ChartAxisUsePane{ numberAxis.setLogBase(null); } else { numberAxis.setLog(true); - Formula formula = new Formula(increment); + BaseFormula formula = BaseFormula.createFormulaBuilder().build(increment); Number number = ChartBaseUtils.formula2Number(formula); // 界面处理防止 遇到 对数增量为小于1的值. if (number != null && number.doubleValue() <= 1.0) { - numberAxis.setLogBase(new Formula("2")); + numberAxis.setLogBase(BaseFormula.createFormulaBuilder().build("2")); } else { numberAxis.setLogBase(formula); } diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java index 945fd4d5e5..7beb177097 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/series/UIColorPickerPane.java @@ -1,6 +1,6 @@ package com.fr.design.mainframe.chart.gui.style.series; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.chart.base.AreaColor; import com.fr.chart.base.ChartBaseUtils; import com.fr.chart.chartglyph.MapHotAreaColor; @@ -465,7 +465,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { private class TextFieldGroupPane extends JPanel { private static final long serialVersionUID = -8390474551829486013L; - public void refreshTextGroupPane(Formula[] values) { + public void refreshTextGroupPane(BaseFormula[] values) { if (values.length == textFieldList.size()) { for (int i = 0; i < textFieldList.size(); i++) { @@ -519,13 +519,13 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { if(i == size - 1) { backValue = -Double.MAX_VALUE; } else { - Number backNumber = ChartBaseUtils.formula2Number(new Formula(getValue4Index(i+1))); + Number backNumber = ChartBaseUtils.formula2Number(BaseFormula.createFormulaBuilder().build(getValue4Index(i+1))); if(backNumber != null){ backValue = backNumber.doubleValue(); } } - Number number = ChartBaseUtils.formula2Number(new Formula(getValue4Index(i))); + Number number = ChartBaseUtils.formula2Number(BaseFormula.createFormulaBuilder().build(getValue4Index(i))); if(number != null) { double value = number.doubleValue(); @@ -633,7 +633,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { * @param colorArray 颜色值 * @param valueArray 值区间 */ - public void refreshGroupPane(Color[] colorArray, Formula[] valueArray) { + public void refreshGroupPane(Color[] colorArray, BaseFormula[] valueArray) { colorGroup.refreshColorGroupPane(colorArray); textGroup.refreshTextGroupPane(valueArray); @@ -657,7 +657,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { UIColorPickerPane.this.add(textGroup); UIColorPickerPane.this.add(colorGroup); Color[] colors = hotAreaColor.initColor(); - Formula[] values = hotAreaColor.initValues(); + BaseFormula[] values = hotAreaColor.initValues(); refreshGroupPane(colors, values); this.initContainerLister(); regionNumPane.populateBean(value); @@ -686,7 +686,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { } hotAreaColor.clearColor(); Color[] colors = getColors4Custom(fillStyleCombox.getSelectObject(), regionNumPane.updateBean().intValue()); - Formula[] value = getValueArray(regionNumPane.updateBean().intValue()); + BaseFormula[] value = getValueArray(regionNumPane.updateBean().intValue()); for (int i = 0; i < colors.length; i++) { hotAreaColor.addAreaColor(new AreaColor(value[i], value[i + 1], colors[i])); @@ -705,7 +705,7 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { if(StringUtils.isEmpty(getValue4Index(i))){ return false; } - Number number = ChartBaseUtils.formula2Number(new Formula(getValue4Index(i))); + Number number = ChartBaseUtils.formula2Number(BaseFormula.createFormulaBuilder().build(getValue4Index(i))); if(number != null) { double value = number.doubleValue(); if(value > maxValue) { @@ -739,13 +739,13 @@ public class UIColorPickerPane extends BasicPane implements UIObserver { return ChartBaseUtils.createColorsWithHSB(color, sum); } - private Formula[] getValueArray(int count) { - Formula[] valueArray = new Formula[count + 1]; + private BaseFormula[] getValueArray(int count) { + BaseFormula[] valueArray = new BaseFormula[count + 1]; for (int i = 0; i < valueArray.length; i++) { if (i >= textFieldList.size()) { - valueArray[i] = new Formula(new Double((count + 1 - i) * VALUE).toString()); + valueArray[i] = BaseFormula.createFormulaBuilder().build((count + 1 - i) * VALUE); } else { - valueArray[i] = new Formula(getValue4Index(i)); + valueArray[i] = BaseFormula.createFormulaBuilder().build(getValue4Index(i)); } } return valueArray; diff --git a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/title/ChartTitlePane.java b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/title/ChartTitlePane.java index 247e17ee5d..bbd10ed4d5 100644 --- a/designer_chart/src/com/fr/design/mainframe/chart/gui/style/title/ChartTitlePane.java +++ b/designer_chart/src/com/fr/design/mainframe/chart/gui/style/title/ChartTitlePane.java @@ -1,195 +1,191 @@ -package com.fr.design.mainframe.chart.gui.style.title; - - -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.Icon; -import javax.swing.JPanel; -import javax.swing.JSeparator; - -import com.fr.base.BaseUtils; -import com.fr.base.Formula; -import com.fr.base.Utils; -import com.fr.chart.base.TextAttr; -import com.fr.chart.chartattr.Chart; -import com.fr.chart.chartattr.Title; -import com.fr.design.constants.LayoutConstants; -import com.fr.design.formula.TinyFormulaPane; -import com.fr.design.gui.ibutton.UIButtonGroup; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.ilable.BoldFontTextLabel; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.chart.PaneTitleConstants; -import com.fr.design.mainframe.chart.gui.style.ChartBackgroundNoImagePane; -import com.fr.design.mainframe.chart.gui.style.ChartBorderPane; -import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; -import com.fr.design.dialog.BasicScrollPane; -import com.fr.general.Inter; -import com.fr.stable.Constants; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; - -public class ChartTitlePane extends BasicScrollPane { - private static final long serialVersionUID = 5748881235830708722L; - private UICheckBox isTitleVisable; - - private TinyFormulaPane titleContent; - private ChartTextAttrPane textAttrPane; - private UIButtonGroup alignmentPane; - - private JPanel chartDefaultAttrPane; - private ChartBorderPane borderPane; - private ChartBackgroundNoImagePane backgroundPane; - - private JPanel titlePane; - - private class ContentPane extends JPanel { - private static final long serialVersionUID = -6455600016731592455L; - - public ContentPane() { - initComponents(); - } - - private void initComponents() { - isTitleVisable = new UICheckBox(Inter.getLocText("Chart_Title_Is_Visible")); - titlePane = createTitlePane(); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {f}; - double[] rowSize = {p, p}; - Component[][] components = new Component[][]{ - new Component[]{isTitleVisable}, - new Component[]{titlePane} - } ; - - JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); - this.setLayout(new BorderLayout()); - this.add(panel,BorderLayout.CENTER); - - isTitleVisable.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - checkTitlePaneUse(); - } - }); - } - } - - private JPanel createTitlePane(){ - borderPane = new ChartBorderPane(); - backgroundPane = new ChartBackgroundNoImagePane(); - chartDefaultAttrPane = createDefaultAttrPane(); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {p, f}; - double[] rowSize = {p,p,p,p,p}; - Component[][] components = new Component[][]{ - new Component[]{chartDefaultAttrPane,null}, - new Component[]{new JSeparator(),null}, - new Component[]{borderPane,null}, - new Component[]{backgroundPane,null} - } ; - - return TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); - } - - private JPanel createDefaultAttrPane(){ - titleContent = new TinyFormulaPane(); - textAttrPane = new ChartTextAttrPane(); - Icon[] alignmentIconArray = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), - BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png")}; - Integer[] alignment = new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT}; - alignmentPane = new UIButtonGroup(alignmentIconArray, alignment); - - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, f}; - double[] rowSize = {p, p,p}; - Component[][] components = new Component[][]{ - new Component[]{null,titleContent,null}, - new Component[]{null,textAttrPane,null}, - new Component[]{null,new BoldFontTextLabel(Inter.getLocText("Alignment-Style") + ":"),alignmentPane} , - } ; - - return TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); - } - - // 检查标题界面是否可用. - private void checkTitlePaneUse() { - isTitleVisable.setVisible(true); - isTitleVisable.setEnabled(true); - titlePane.setVisible(isTitleVisable.isSelected()); - this.repaint(); - } - - /** - * 弹出框的界面标题 - * @return 界面标题 - */ - public String title4PopupWindow() { - return PaneTitleConstants.CHART_STYLE_TITLE_TITLE; - } - - @Override - protected JPanel createContentPane() { - return new ContentPane(); - } - - @Override - public void populateBean(Chart chart) { - Title title = chart.getTitle(); - if (title == null) { - return; - } - isTitleVisable.setSelected(title.isTitleVisible()); - if (title.getTextObject() instanceof Formula) { - titleContent.populateBean(((Formula) title.getTextObject()).getContent()); - } else { - titleContent.populateBean(Utils.objectToString(title.getTextObject())); - } - alignmentPane.setSelectedItem(title.getPosition()); - TextAttr textAttr = title.getTextAttr(); - if (textAttr == null) { - textAttr = new TextAttr(); - } - textAttrPane.populate(textAttr); - borderPane.populate(title); - backgroundPane.populate(title); - - checkTitlePaneUse(); - } - - @Override - public void updateBean(Chart chart) { - if (chart == null) { - chart = new Chart(); - } - Title title = chart.getTitle(); - if (title == null) { - title = new Title(StringUtils.EMPTY); - } - title.setTitleVisible(isTitleVisable.isSelected()); - String titleString = titleContent.updateBean(); - Object titleObj; - if (StableUtils.maybeFormula(titleString)) { - titleObj = new Formula(titleString); - } else { - titleObj = titleString; - } - title.setTextObject(titleObj); - TextAttr textAttr = title.getTextAttr(); - if (textAttr == null) { - textAttr = new TextAttr(); - } - title.setPosition(alignmentPane.getSelectedItem()); - textAttrPane.update(textAttr); - borderPane.update(title); - backgroundPane.update(title); - } +package com.fr.design.mainframe.chart.gui.style.title; + + +import com.fr.base.BaseFormula; +import com.fr.base.BaseUtils; +import com.fr.base.Utils; +import com.fr.chart.base.TextAttr; +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.Title; +import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.BasicScrollPane; +import com.fr.design.formula.TinyFormulaPane; +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.BoldFontTextLabel; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.chart.PaneTitleConstants; +import com.fr.design.mainframe.chart.gui.style.ChartBackgroundNoImagePane; +import com.fr.design.mainframe.chart.gui.style.ChartBorderPane; +import com.fr.design.mainframe.chart.gui.style.ChartTextAttrPane; +import com.fr.general.Inter; +import com.fr.stable.Constants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class ChartTitlePane extends BasicScrollPane { + private static final long serialVersionUID = 5748881235830708722L; + private UICheckBox isTitleVisable; + + private TinyFormulaPane titleContent; + private ChartTextAttrPane textAttrPane; + private UIButtonGroup alignmentPane; + + private JPanel chartDefaultAttrPane; + private ChartBorderPane borderPane; + private ChartBackgroundNoImagePane backgroundPane; + + private JPanel titlePane; + + private class ContentPane extends JPanel { + private static final long serialVersionUID = -6455600016731592455L; + + public ContentPane() { + initComponents(); + } + + private void initComponents() { + isTitleVisable = new UICheckBox(Inter.getLocText("Chart_Title_Is_Visible")); + titlePane = createTitlePane(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {f}; + double[] rowSize = {p, p}; + Component[][] components = new Component[][]{ + new Component[]{isTitleVisable}, + new Component[]{titlePane} + } ; + + JPanel panel = TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); + this.setLayout(new BorderLayout()); + this.add(panel,BorderLayout.CENTER); + + isTitleVisable.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + checkTitlePaneUse(); + } + }); + } + } + + private JPanel createTitlePane(){ + borderPane = new ChartBorderPane(); + backgroundPane = new ChartBackgroundNoImagePane(); + chartDefaultAttrPane = createDefaultAttrPane(); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {p, f}; + double[] rowSize = {p,p,p,p,p}; + Component[][] components = new Component[][]{ + new Component[]{chartDefaultAttrPane,null}, + new Component[]{new JSeparator(),null}, + new Component[]{borderPane,null}, + new Component[]{backgroundPane,null} + } ; + + return TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); + } + + private JPanel createDefaultAttrPane(){ + titleContent = new TinyFormulaPane(); + textAttrPane = new ChartTextAttrPane(); + Icon[] alignmentIconArray = {BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_left_normal.png"), + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_center_normal.png"), + BaseUtils.readIcon("/com/fr/design/images/m_format/cellstyle/h_right_normal.png")}; + Integer[] alignment = new Integer[]{Constants.LEFT, Constants.CENTER, Constants.RIGHT}; + alignmentPane = new UIButtonGroup(alignmentIconArray, alignment); + + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] columnSize = {LayoutConstants.CHART_ATTR_TOMARGIN, p, f}; + double[] rowSize = {p, p,p}; + Component[][] components = new Component[][]{ + new Component[]{null,titleContent,null}, + new Component[]{null,textAttrPane,null}, + new Component[]{null,new BoldFontTextLabel(Inter.getLocText("Alignment-Style") + ":"),alignmentPane} , + } ; + + return TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); + } + + // 检查标题界面是否可用. + private void checkTitlePaneUse() { + isTitleVisable.setVisible(true); + isTitleVisable.setEnabled(true); + titlePane.setVisible(isTitleVisable.isSelected()); + this.repaint(); + } + + /** + * 弹出框的界面标题 + * @return 界面标题 + */ + public String title4PopupWindow() { + return PaneTitleConstants.CHART_STYLE_TITLE_TITLE; + } + + @Override + protected JPanel createContentPane() { + return new ContentPane(); + } + + @Override + public void populateBean(Chart chart) { + Title title = chart.getTitle(); + if (title == null) { + return; + } + isTitleVisable.setSelected(title.isTitleVisible()); + if (title.getTextObject() instanceof BaseFormula) { + titleContent.populateBean(((BaseFormula) title.getTextObject()).getContent()); + } else { + titleContent.populateBean(Utils.objectToString(title.getTextObject())); + } + alignmentPane.setSelectedItem(title.getPosition()); + TextAttr textAttr = title.getTextAttr(); + if (textAttr == null) { + textAttr = new TextAttr(); + } + textAttrPane.populate(textAttr); + borderPane.populate(title); + backgroundPane.populate(title); + + checkTitlePaneUse(); + } + + @Override + public void updateBean(Chart chart) { + if (chart == null) { + chart = new Chart(); + } + Title title = chart.getTitle(); + if (title == null) { + title = new Title(StringUtils.EMPTY); + } + title.setTitleVisible(isTitleVisable.isSelected()); + String titleString = titleContent.updateBean(); + Object titleObj; + if (StableUtils.maybeFormula(titleString)) { + titleObj = BaseFormula.createFormulaBuilder().build(titleString); + } else { + titleObj = titleString; + } + title.setTextObject(titleObj); + TextAttr textAttr = title.getTextAttr(); + if (textAttr == null) { + textAttr = new TextAttr(); + } + title.setPosition(alignmentPane.getSelectedItem()); + textAttrPane.update(textAttr); + borderPane.update(title); + backgroundPane.update(title); + } } \ No newline at end of file diff --git a/designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePane.java b/designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePane.java index 5e2b1fd9b0..2f10e968c4 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/other/VanChartInteractivePane.java @@ -1,6 +1,6 @@ package com.fr.plugin.chart.designer.other; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.base.Utils; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; @@ -296,13 +296,13 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane { zoomWidget.setSelectedIndex(zoom.isZoomVisible() ? 0 : 1); zoomGesture.setSelectedIndex(zoom.isZoomGesture() ? 0 : 1); zoomResize.setSelectedIndex(zoom.isZoomResize() ? 0 : 1); - if (zoom.getFrom() instanceof Formula) { - from.populateBean(((Formula) zoom.getFrom()).getContent()); + if (zoom.getFrom() instanceof BaseFormula) { + from.populateBean(((BaseFormula) zoom.getFrom()).getContent()); } else { from.populateBean(Utils.objectToString(zoom.getFrom())); } - if (zoom.getTo() instanceof Formula) { - to.populateBean(((Formula) zoom.getTo()).getContent()); + if (zoom.getTo() instanceof BaseFormula) { + to.populateBean(((BaseFormula) zoom.getTo()).getContent()); } else { to.populateBean(Utils.objectToString(zoom.getTo())); } @@ -381,7 +381,7 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane { String fromString = from.updateBean(); Object fromObject; if (StableUtils.maybeFormula(fromString)) { - fromObject = new Formula(fromString); + fromObject = BaseFormula.createFormulaBuilder().build(fromString); } else { fromObject = fromString; } @@ -389,7 +389,7 @@ public class VanChartInteractivePane extends AbstractVanChartScrollPane { String toString = to.updateBean(); Object toObject; if (StableUtils.maybeFormula(toString)) { - toObject = new Formula(toString); + toObject = BaseFormula.createFormulaBuilder().build(toString); } else { toObject = toString; } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/VanChartTitlePane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/VanChartTitlePane.java index e7ebc7bd74..11e9695221 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/VanChartTitlePane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/VanChartTitlePane.java @@ -1,7 +1,7 @@ package com.fr.plugin.chart.designer.style; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.base.Style; import com.fr.base.Utils; import com.fr.chart.base.TextAttr; @@ -272,8 +272,8 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane { return; } isTitleVisible.setSelected(title.isTitleVisible()); - if (title.getTextObject() instanceof Formula) { - titleContent.populateBean(((Formula) title.getTextObject()).getContent()); + if (title.getTextObject() instanceof BaseFormula) { + titleContent.populateBean(((BaseFormula) title.getTextObject()).getContent()); } else { titleContent.populateBean(Utils.objectToString(title.getTextObject())); } @@ -313,7 +313,7 @@ public class VanChartTitlePane extends AbstractVanChartScrollPane { String titleString = titleContent.updateBean(); Object titleObj; if (StableUtils.maybeFormula(titleString)) { - titleObj = new Formula(titleString); + titleObj = BaseFormula.createFormulaBuilder().build(titleString); } else { titleObj = titleString; } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartBaseAxisPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartBaseAxisPane.java index 9a5c0ee4da..8cec9d7038 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartBaseAxisPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartBaseAxisPane.java @@ -1,7 +1,7 @@ package com.fr.plugin.chart.designer.style.axis; +import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; -import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.chart.base.TextAttr; import com.fr.chart.chartattr.Title; @@ -428,8 +428,8 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane { private void populateTitle(VanChartAxis axis){ Title axisTitle = axis.getTitle(); if(axisTitle != null){ - if (axisTitle.getTextObject() instanceof Formula && titleContent != null) { - titleContent.populateBean(((Formula) axisTitle.getTextObject()).getContent()); + if (axisTitle.getTextObject() instanceof BaseFormula && titleContent != null) { + titleContent.populateBean(((BaseFormula) axisTitle.getTextObject()).getContent()); } else if(titleContent != null){ titleContent.populateBean(Utils.objectToString(axisTitle.getTextObject())); } @@ -547,7 +547,7 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane { String titleString = titleContent.updateBean(); Object titleObj; if (StableUtils.maybeFormula(titleString)) { - titleObj = new Formula(titleString); + titleObj = BaseFormula.createFormulaBuilder().build(titleString); } else { titleObj = titleString; } @@ -586,9 +586,9 @@ public class VanChartBaseAxisPane extends FurtherBasicBeanPane { } if(labelGapValue != null){ if(axis.isAutoLabelGap()){ - axis.setLabelIntervalNumber(new Formula("1")); + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build("1")); } else { - axis.setLabelIntervalNumber(new Formula(labelGapValue.getText())); + axis.setLabelIntervalNumber(BaseFormula.createFormulaBuilder().build(labelGapValue.getText())); } } } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartTimeAxisPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartTimeAxisPane.java index 09b4ead6ed..5523b0756d 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartTimeAxisPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartTimeAxisPane.java @@ -1,6 +1,6 @@ package com.fr.plugin.chart.designer.style.axis; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.base.Utils; import com.fr.design.chart.ChartSwingUtils; import com.fr.design.editor.ValueEditorPane; @@ -267,7 +267,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane { public void update(VanChartTimeAxis timeAxis){ if (minCheckBox.isSelected()) {//最小值 if(minValueField.getCurrentEditor() instanceof FormulaEditor){ - Formula min = (Formula)minValueField.update(); + BaseFormula min = (BaseFormula) minValueField.update(); timeAxis.setMinValue(min); timeAxis.setCustomMinValue(StringUtils.isNotEmpty(min.getPureContent())); }else{ @@ -275,14 +275,14 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane { DateEditor dateEditor = (DateEditor)minValueField.getCurrentEditor(); String dateString = dateEditor.getUIDatePickerFormat().format(datetmp); timeAxis.setCustomMinValue(StringUtils.isNotEmpty(dateString)); - timeAxis.setMinValue(new Formula(dateString)); + timeAxis.setMinValue(BaseFormula.createFormulaBuilder().build(dateString)); } } else { timeAxis.setCustomMinValue(false); } if (maxCheckBox.isSelected()) {//最大值 if(maxValueField.getCurrentEditor() instanceof FormulaEditor){ - Formula max = (Formula)maxValueField.update(); + BaseFormula max = (BaseFormula) maxValueField.update(); timeAxis.setMaxValue(max); timeAxis.setCustomMaxValue(StringUtils.isNotEmpty(max.getPureContent())); }else{ @@ -290,14 +290,14 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane { DateEditor dateEditor = (DateEditor)maxValueField.getCurrentEditor(); String dateString = dateEditor.getUIDatePickerFormat().format(datetmp); timeAxis.setCustomMaxValue(StringUtils.isNotEmpty(dateString)); - timeAxis.setMaxValue(new Formula(dateString)); + timeAxis.setMaxValue(BaseFormula.createFormulaBuilder().build(dateString)); } } else { timeAxis.setCustomMaxValue(false); } if (mainTickBox.isSelected() && StringUtils.isNotEmpty(mainUnitField.getText())) {//主要刻度单位 timeAxis.setCustomMainUnit(true); - timeAxis.setMainUnit(new Formula(mainUnitField.getText())); + timeAxis.setMainUnit(BaseFormula.createFormulaBuilder().build(mainUnitField.getText())); String item = mainType.getSelectedItem().toString(); timeAxis.setMainType(TimeType.parseString(item)); } else { @@ -305,7 +305,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane { } if (secondTickBox.isSelected() && StringUtils.isNotEmpty(secondUnitField.getText())) { //次要刻度单位 timeAxis.setCustomSecUnit(true); - timeAxis.setSecUnit(new Formula(secondUnitField.getText())); + timeAxis.setSecUnit(BaseFormula.createFormulaBuilder().build(secondUnitField.getText())); String item = secondType.getSelectedItem().toString(); timeAxis.setSecondType(TimeType.parseString(item)); } else { @@ -367,7 +367,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane { } //将从formula读出来的内容转化为指定格式的日期 - private Date getDateFromFormula(Formula dateFormula){ + private Date getDateFromFormula(BaseFormula dateFormula){ String dateStr = dateFormula.getPureContent(); dateStr = Pattern.compile("\"").matcher(dateStr).replaceAll(StringUtils.EMPTY); Date toDate = DateUtils.string2Date(dateStr, true); diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartValueAxisPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartValueAxisPane.java index 3749f77ac2..be5bc4c7b0 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartValueAxisPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/VanChartValueAxisPane.java @@ -1,5 +1,6 @@ package com.fr.plugin.chart.designer.style.axis; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.chart.base.ChartBaseUtils; import com.fr.design.chart.ChartSwingUtils; @@ -162,11 +163,11 @@ public class VanChartValueAxisPane extends VanChartBaseAxisPane { valueAxis.setLogBase(null); } else { valueAxis.setLog(true); - Formula formula = new Formula(increment); + BaseFormula formula = BaseFormula.createFormulaBuilder().build(increment); Number number = ChartBaseUtils.formula2Number(formula); // 界面处理防止 遇到 对数增量为小于1的值. if (number != null && number.doubleValue() <= 1.0) { - valueAxis.setLogBase(new Formula("2")); + valueAxis.setLogBase(BaseFormula.createFormulaBuilder().build("2")); } else { valueAxis.setLogBase(formula); } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/MinMaxValuePaneWithOutTick.java b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/MinMaxValuePaneWithOutTick.java index 43eedd3ebe..da43d7f8a3 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/MinMaxValuePaneWithOutTick.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/axis/component/MinMaxValuePaneWithOutTick.java @@ -1,6 +1,6 @@ package com.fr.plugin.chart.designer.style.axis.component; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.plugin.chart.range.MinAndMaxValue; import javax.swing.*; @@ -35,8 +35,8 @@ public class MinMaxValuePaneWithOutTick extends VanChartMinMaxValuePane { if(minAndMaxValue == null) { return; } - minAndMaxValue.setMinValue(new Formula(minValueField.getText())); - minAndMaxValue.setMaxValue(new Formula(maxValueField.getText())); + minAndMaxValue.setMinValue(BaseFormula.createFormulaBuilder().build(minValueField.getText())); + minAndMaxValue.setMaxValue(BaseFormula.createFormulaBuilder().build(maxValueField.getText())); minAndMaxValue.setCustomMin(minCheckBox.isSelected()); minAndMaxValue.setCustomMax(maxCheckBox.isSelected()); } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAlertValuePane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAlertValuePane.java index ec934be6fe..23dc70b01c 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAlertValuePane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartAlertValuePane.java @@ -1,5 +1,6 @@ package com.fr.plugin.chart.designer.style.background; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.base.Utils; import com.fr.design.beans.BasicBeanPane; @@ -171,14 +172,14 @@ public class VanChartAlertValuePane extends BasicBeanPane { public VanChartAlertValue updateBean(){ chartAlertValue.setAxisName(alertAxis.getSelectedItem().toString()); - chartAlertValue.setAlertValueFormula(new Formula(alertValue.updateBean())); + chartAlertValue.setAlertValueFormula(BaseFormula.createFormulaBuilder().build(alertValue.updateBean())); chartAlertValue.getLineColor().setSeriesColor(alertLineColor.getSelectObject()); chartAlertValue.getLineStyle().setLineStyle(alertLineStyle.getSelectedLineStyle()); String contentString = alertText.updateBean(); Object contentObj; if (StableUtils.maybeFormula(contentString)) { - contentObj = new Formula(contentString); + contentObj = BaseFormula.createFormulaBuilder().build(contentString); } else { contentObj = contentString; } diff --git a/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartCustomIntervalBackgroundPane.java b/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartCustomIntervalBackgroundPane.java index b67f115290..8fb5423b78 100644 --- a/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartCustomIntervalBackgroundPane.java +++ b/designer_chart/src/com/fr/plugin/chart/designer/style/background/VanChartCustomIntervalBackgroundPane.java @@ -1,6 +1,6 @@ package com.fr.plugin.chart.designer.style.background; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.base.Utils; import com.fr.design.beans.BasicBeanPane; import com.fr.design.formula.TinyFormulaPane; @@ -105,8 +105,8 @@ public class VanChartCustomIntervalBackgroundPane extends BasicBeanPane 1) { - parent.remove(parent.getTitleCreator()); - } - } - - /** - * 设置样式为标题样式时,对应组件加上标题 - * @param style 样式 - */ - protected void initTitleStyle(LayoutBorderStyle style){ - if (style.getTitle() == null) { - return; - } - XWTitleLayout parent = (XWTitleLayout) this.getParent(); - if (parent.getComponentCount() > 1) { - XLabel title = (XLabel) parent.getTitleCreator(); - Label widget = title.toData(); - updateTitleWidgetStyle(widget, style); - title.initXCreatorProperties(); - return; - } - // 初始化标题控件 - XLabel title = new XLabel(new Label(), new Dimension()); - Label label = title.toData(); - updateTitleWidgetStyle(label, style); - parent.add(title, WTitleLayout.TITLE); - // 初始化标题边框 - title.initXCreatorProperties(); - WTitleLayout layout = parent.toData(); - layout.updateChildBounds(layout.getBodyBoundsWidget().getBounds()); - } - - /** - * 更新标题控件所有的样式 - */ - private void updateTitleWidgetStyle(Label title, LayoutBorderStyle style) { - //标题的边框样式目前是取对应的控件的边框样式 - title.setBorder(style.getBorder()); - title.setColor(style.getColor()); -// title.setCorner(style.isCorner()); - - WidgetTitle wTitle = style.getTitle(); - //设置成随机不重复的, 不然都用一个名字的话, 联动只能联动一个 - title.setWidgetName(wTitle.TITLE_NAME_INDEX + this.toData().getWidgetName()); - title.setWidgetValue(getTitleValue(wTitle)); - title.setFont(wTitle.getFrFont()); - title.setTextalign(wTitle.getPosition()); - title.setBackground(wTitle.getBackground()); - } - - private WidgetValue getTitleValue(WidgetTitle wTitle){ - String content = String.valueOf(wTitle.getTextObject()); - Object vlaue = content.startsWith("=") ? new Formula(content) : content; - return new WidgetValue(vlaue); - } - - @Override - protected String getIconName() { - return StringUtils.EMPTY; - } - @Override - protected JComponent initEditor() { - return this; - } - - /** - * 内边距 - * @return 同上 - */ - @Override - public Insets getInsets() { - PaddingMargin padding = toData().getMargin(); - if (padding == null) { - return new Insets(0, 0, 0, 0); - } - return new Insets(padding.getTop(), padding.getLeft(), padding.getBottom(), padding.getRight()); - } - - /** - * data属性改变触发其他操作 - * - */ - public void firePropertyChange(){ - - } - +package com.fr.design.designer.creator; + +import com.fr.base.BaseFormula; +import com.fr.design.border.UIRoundedBorder; +import com.fr.form.ui.AbstractBorderStyleWidget; +import com.fr.form.ui.Label; +import com.fr.form.ui.LayoutBorderStyle; +import com.fr.form.ui.PaddingMargin; +import com.fr.form.ui.Widget; +import com.fr.form.ui.WidgetTitle; +import com.fr.form.ui.WidgetValue; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.general.ComparatorUtils; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; + +/** + * Created with IntelliJ IDEA. + * User: zx + * Date: 14-9-22 + * Time: 上午10:40 + */ + +public class XBorderStyleWidgetCreator extends XWidgetCreator{ + protected static final Dimension BORDER_PREFERRED_SIZE = new Dimension(250, 150); + + public XBorderStyleWidgetCreator(Widget widget, Dimension initSize) { + super(widget, initSize); + } + + /** + * 返回容器对应的widget + * @return 同上 + */ + @Override + public AbstractBorderStyleWidget toData() { + return (AbstractBorderStyleWidget) data; + } + + protected void initStyle() { + LayoutBorderStyle style = toData().getBorderStyle(); + initBorderStyle(); + if (ComparatorUtils.equals(style.getType(), LayoutBorderStyle.TITLE)) { + initTitleStyle(style); + } else { + clearTitleWidget(); + } + } + + // 边框默认值设为NONE,不然像scalelayout这种只用默认边框的会不显示边框 + protected void initBorderStyle() { + LayoutBorderStyle style = toData().getBorderStyle(); + if (style != null && style.getBorder() != Constants.LINE_NONE) { + this.setBorder(new UIRoundedBorder(style.getBorder(), style.getColor(), style.getBorderRadius())); + } else { + this.setBorder(DEFALUTBORDER); + } + } + + private void clearTitleWidget() { + if (acceptType(XWFitLayout.class)) { + return; + } + XWTitleLayout parent = (XWTitleLayout) this.getParent(); + if (parent.getComponentCount() > 1) { + parent.remove(parent.getTitleCreator()); + } + } + + /** + * 设置样式为标题样式时,对应组件加上标题 + * @param style 样式 + */ + protected void initTitleStyle(LayoutBorderStyle style){ + if (style.getTitle() == null) { + return; + } + XWTitleLayout parent = (XWTitleLayout) this.getParent(); + if (parent.getComponentCount() > 1) { + XLabel title = (XLabel) parent.getTitleCreator(); + Label widget = title.toData(); + updateTitleWidgetStyle(widget, style); + title.initXCreatorProperties(); + return; + } + // 初始化标题控件 + XLabel title = new XLabel(new Label(), new Dimension()); + Label label = title.toData(); + updateTitleWidgetStyle(label, style); + parent.add(title, WTitleLayout.TITLE); + // 初始化标题边框 + title.initXCreatorProperties(); + WTitleLayout layout = parent.toData(); + layout.updateChildBounds(layout.getBodyBoundsWidget().getBounds()); + } + + /** + * 更新标题控件所有的样式 + */ + private void updateTitleWidgetStyle(Label title, LayoutBorderStyle style) { + //标题的边框样式目前是取对应的控件的边框样式 + title.setBorder(style.getBorder()); + title.setColor(style.getColor()); +// title.setCorner(style.isCorner()); + + WidgetTitle wTitle = style.getTitle(); + //设置成随机不重复的, 不然都用一个名字的话, 联动只能联动一个 + title.setWidgetName(wTitle.TITLE_NAME_INDEX + this.toData().getWidgetName()); + title.setWidgetValue(getTitleValue(wTitle)); + title.setFont(wTitle.getFrFont()); + title.setTextalign(wTitle.getPosition()); + title.setBackground(wTitle.getBackground()); + } + + private WidgetValue getTitleValue(WidgetTitle wTitle){ + String content = String.valueOf(wTitle.getTextObject()); + Object vlaue = content.startsWith("=") ? BaseFormula.createFormulaBuilder().build(content) : content; + return new WidgetValue(vlaue); + } + + @Override + protected String getIconName() { + return StringUtils.EMPTY; + } + @Override + protected JComponent initEditor() { + return this; + } + + /** + * 内边距 + * @return 同上 + */ + @Override + public Insets getInsets() { + PaddingMargin padding = toData().getMargin(); + if (padding == null) { + return new Insets(0, 0, 0, 0); + } + return new Insets(padding.getTop(), padding.getLeft(), padding.getBottom(), padding.getRight()); + } + + /** + * data属性改变触发其他操作 + * + */ + public void firePropertyChange(){ + + } + } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleFormulaEditor.java b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleFormulaEditor.java index d23b7634b5..8c810dd05d 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleFormulaEditor.java +++ b/designer_form/src/com/fr/design/mainframe/widget/accessibles/AccessibleFormulaEditor.java @@ -3,6 +3,7 @@ */ package com.fr.design.mainframe.widget.accessibles; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; @@ -37,7 +38,7 @@ public class AccessibleFormulaEditor extends BaseAccessibleEditor { fireStateChanged(); } }); - formulaPane.populate((Formula) getValue()); + formulaPane.populate((BaseFormula) getValue()); dlg.setVisible(true); } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/widget/wrappers/FormulaWrapper.java b/designer_form/src/com/fr/design/mainframe/widget/wrappers/FormulaWrapper.java index e74348bac7..9a87c9adc1 100644 --- a/designer_form/src/com/fr/design/mainframe/widget/wrappers/FormulaWrapper.java +++ b/designer_form/src/com/fr/design/mainframe/widget/wrappers/FormulaWrapper.java @@ -3,6 +3,7 @@ */ package com.fr.design.mainframe.widget.wrappers; +import com.fr.base.BaseFormula; import com.fr.base.Formula; import com.fr.general.Inter; import com.fr.stable.StringUtils; @@ -29,7 +30,7 @@ public class FormulaWrapper implements Encoder, Decoder{ @Override public Object decode(String txt) { - return new Formula(txt); + return BaseFormula.createFormulaBuilder().build(txt); } @Override diff --git a/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java b/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java index a46ed3830a..b797594670 100644 --- a/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java +++ b/designer_form/src/com/fr/design/widget/ui/designer/DateEditorDefinePane.java @@ -217,55 +217,6 @@ public class DateEditorDefinePane extends DirectWriteEditorDefinePane