From 5c3e389b851ddda409d37d6bae5ea14f1efa62fe Mon Sep 17 00:00:00 2001 From: RichieJi Date: Tue, 12 Dec 2017 14:20:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.xml | 4 +- .../design/formula/ScriptFormulaUI.java | 7 +- .../design/formula/locale/formula.properties | 7 +- .../formula/locale/formula_en_US.properties | 7 +- .../formula/locale/formula_ja_JP.properties | 7 +- .../formula/locale/formula_zh_CN.properties | 7 +- ...FormulaPane.java => GroupFormulaPane.java} | 40 +++++- .../GroupFormulaPaneWhenReserveFormula.java | 59 +++++++++ ...lFormulaPane.java => BaseFormulaPane.java} | 117 ++++++++---------- .../formula/ui/type/CategoryFormulaPane.java | 8 +- .../ui/type/impl/BasicFormulaPane.java | 60 +++++++++ .../ui/type/impl/ScriptFormulaPane.java | 55 +++----- 12 files changed, 252 insertions(+), 126 deletions(-) rename src/com/fr/solution/plugin/design/formula/ui/{ScriptFormulaPane.java => GroupFormulaPane.java} (93%) create mode 100644 src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPaneWhenReserveFormula.java rename src/com/fr/solution/plugin/design/formula/ui/type/{impl/NormalFormulaPane.java => BaseFormulaPane.java} (76%) create mode 100644 src/com/fr/solution/plugin/design/formula/ui/type/impl/BasicFormulaPane.java diff --git a/plugin.xml b/plugin.xml index fbbac50..833987b 100644 --- a/plugin.xml +++ b/plugin.xml @@ -2,7 +2,7 @@ com.fr.solution.plugin com.fr.solution.plugin.design.formula.script - + yes 3.0 9.0 @@ -10,7 +10,7 @@ fanruan.richie + [2017-12-10]在公式编辑器中增加实时计算按钮。
]]>
diff --git a/src/com/fr/solution/plugin/design/formula/ScriptFormulaUI.java b/src/com/fr/solution/plugin/design/formula/ScriptFormulaUI.java index 05beb1e..195f9a7 100644 --- a/src/com/fr/solution/plugin/design/formula/ScriptFormulaUI.java +++ b/src/com/fr/solution/plugin/design/formula/ScriptFormulaUI.java @@ -4,7 +4,8 @@ import com.fr.design.formula.UIFormula; import com.fr.design.fun.impl.AbstractUIFormulaProcessor; import com.fr.plugin.transform.ExecuteFunctionRecord; import com.fr.plugin.transform.FunctionRecorder; -import com.fr.solution.plugin.design.formula.ui.ScriptFormulaPane; +import com.fr.solution.plugin.design.formula.ui.GroupFormulaPane; +import com.fr.solution.plugin.design.formula.ui.GroupFormulaPaneWhenReserveFormula; @FunctionRecorder(localeKey = "Script") public class ScriptFormulaUI extends AbstractUIFormulaProcessor { @@ -12,12 +13,12 @@ public class ScriptFormulaUI extends AbstractUIFormulaProcessor { @Override @ExecuteFunctionRecord public UIFormula appearanceFormula() { - return new ScriptFormulaPane(); + return new GroupFormulaPane(); } @Override @ExecuteFunctionRecord public UIFormula appearanceWhenReserveFormula() { - return new ScriptFormulaPane(); + return new GroupFormulaPaneWhenReserveFormula(); } } diff --git a/src/com/fr/solution/plugin/design/formula/locale/formula.properties b/src/com/fr/solution/plugin/design/formula/locale/formula.properties index 500d3bf..f45cd3e 100644 --- a/src/com/fr/solution/plugin/design/formula/locale/formula.properties +++ b/src/com/fr/solution/plugin/design/formula/locale/formula.properties @@ -1,2 +1,5 @@ -Plugin-Script_Formula_Title=Script Formula -Plugin-Basic_Formula_Title=Basic Formula \ No newline at end of file +FR-Designer_Group_Formula_Script_Title=Script Formula +FR-Designer_Group_Formula_Basic_Title=Basic Formula +FR-Designer_Group_Formula_Calculate=Calculate +FR-Designer_Group_Formula_Result=Result +FR-Designer_Group_Formula_Calculate_Error=Error \ No newline at end of file diff --git a/src/com/fr/solution/plugin/design/formula/locale/formula_en_US.properties b/src/com/fr/solution/plugin/design/formula/locale/formula_en_US.properties index 500d3bf..f45cd3e 100644 --- a/src/com/fr/solution/plugin/design/formula/locale/formula_en_US.properties +++ b/src/com/fr/solution/plugin/design/formula/locale/formula_en_US.properties @@ -1,2 +1,5 @@ -Plugin-Script_Formula_Title=Script Formula -Plugin-Basic_Formula_Title=Basic Formula \ No newline at end of file +FR-Designer_Group_Formula_Script_Title=Script Formula +FR-Designer_Group_Formula_Basic_Title=Basic Formula +FR-Designer_Group_Formula_Calculate=Calculate +FR-Designer_Group_Formula_Result=Result +FR-Designer_Group_Formula_Calculate_Error=Error \ No newline at end of file diff --git a/src/com/fr/solution/plugin/design/formula/locale/formula_ja_JP.properties b/src/com/fr/solution/plugin/design/formula/locale/formula_ja_JP.properties index 500d3bf..f45cd3e 100644 --- a/src/com/fr/solution/plugin/design/formula/locale/formula_ja_JP.properties +++ b/src/com/fr/solution/plugin/design/formula/locale/formula_ja_JP.properties @@ -1,2 +1,5 @@ -Plugin-Script_Formula_Title=Script Formula -Plugin-Basic_Formula_Title=Basic Formula \ No newline at end of file +FR-Designer_Group_Formula_Script_Title=Script Formula +FR-Designer_Group_Formula_Basic_Title=Basic Formula +FR-Designer_Group_Formula_Calculate=Calculate +FR-Designer_Group_Formula_Result=Result +FR-Designer_Group_Formula_Calculate_Error=Error \ No newline at end of file diff --git a/src/com/fr/solution/plugin/design/formula/locale/formula_zh_CN.properties b/src/com/fr/solution/plugin/design/formula/locale/formula_zh_CN.properties index d570721..fb45983 100644 --- a/src/com/fr/solution/plugin/design/formula/locale/formula_zh_CN.properties +++ b/src/com/fr/solution/plugin/design/formula/locale/formula_zh_CN.properties @@ -1,2 +1,5 @@ -Plugin-Script_Formula_Title=脚本公式 -Plugin-Basic_Formula_Title=普通公式 \ No newline at end of file +FR-Designer_Group_Formula_Script_Title=\u811A\u672C\u516C\u5F0F +FR-Designer_Group_Formula_Basic_Title=\u5E38\u89C4\u516C\u5F0F +FR-Designer_Group_Formula_Calculate=\u5B9E\u65F6\u8BA1\u7B97 +FR-Designer_Group_Formula_Result=\u516C\u5F0F\u7684\u8BA1\u7B97\u7ED3\u679C\u4E3A +FR-Designer_Group_Formula_Calculate_Error=\u53D1\u751F\u9519\u8BEF\uFF0C\u9519\u8BEF\u4FE1\u606F\u4E3A \ No newline at end of file diff --git a/src/com/fr/solution/plugin/design/formula/ui/ScriptFormulaPane.java b/src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPane.java similarity index 93% rename from src/com/fr/solution/plugin/design/formula/ui/ScriptFormulaPane.java rename to src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPane.java index 655a304..ec9a81c 100644 --- a/src/com/fr/solution/plugin/design/formula/ui/ScriptFormulaPane.java +++ b/src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPane.java @@ -3,11 +3,14 @@ package com.fr.solution.plugin.design.formula.ui; import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; import com.fr.base.FRContext; +import com.fr.base.io.IOFile; +import com.fr.data.TableDataSource; import com.fr.design.actions.UpdateAction; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; +import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.formula.FunctionConstants; import com.fr.design.formula.FunctionGroup; import com.fr.design.formula.NameAndDescription; @@ -21,12 +24,17 @@ import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JTemplate; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.GeneralUtils; import com.fr.general.Inter; +import com.fr.report.core.namespace.SimpleCellValueNameSpace; +import com.fr.script.Calculator; import com.fr.solution.plugin.design.formula.ui.evt.OperateListener; import com.fr.solution.plugin.design.formula.ui.type.CategoryFormulaPane; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; +import com.fr.stable.UtilEvalError; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -57,7 +65,7 @@ import java.util.Locale; /** * 组合了普通公式和脚本公式的编辑器面板 */ -public class ScriptFormulaPane extends BasicPane implements UIFormula, OperateListener { +public class GroupFormulaPane extends BasicPane implements UIFormula, OperateListener { private VariableTreeAndDescriptionArea variableTreeAndDescriptionArea; @@ -73,7 +81,7 @@ public class ScriptFormulaPane extends BasicPane implements UIFormula, OperateLi private DefaultListModel functionNameModel; private JList functionNameList; - public ScriptFormulaPane() { + public GroupFormulaPane() { initComponents(); } @@ -123,10 +131,13 @@ public class ScriptFormulaPane extends BasicPane implements UIFormula, OperateLi UIButton checkValidButton = new UIButton(Inter.getLocText("FormulaD-Check_Valid")); checkValidButton.addActionListener(checkValidActionListener); + UIButton calculateButton = new UIButton(Inter.getLocText("FR-Designer_Group_Formula_Calculate")); + calculateButton.addActionListener(calculateActionListener); + JPanel checkBoxPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); checkBoxPane.setPreferredSize(new Dimension(450, 30)); checkBoxAndButtonPane.add(checkBoxPane, BorderLayout.WEST); - checkBoxAndButtonPane.add(checkValidButton, BorderLayout.EAST); + checkBoxAndButtonPane.add(GUICoreUtils.createFlowPane(checkValidButton, calculateButton), BorderLayout.EAST); extendCheckBoxPane(checkBoxPane); variableTreeAndDescriptionArea = new VariableTreeAndDescriptionArea(); this.add(variableTreeAndDescriptionArea, BorderLayout.SOUTH); @@ -283,6 +294,7 @@ public class ScriptFormulaPane extends BasicPane implements UIFormula, OperateLi public void populate(BaseFormula formula, VariableResolver variableResolver) { this.variableTreeAndDescriptionArea.populate(variableResolver); + formulaPane.populateBean(formula); } /** @@ -299,6 +311,28 @@ public class ScriptFormulaPane extends BasicPane implements UIFormula, OperateLi } }; + private ActionListener calculateActionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Calculator calculator = Calculator.createCalculator(); + JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (template != null) { + IOFile file = template.getTarget(); + calculator.setAttribute(TableDataSource.class, file); + calculator.pushNameSpace(SimpleCellValueNameSpace.getInstance()); + } + String message; + try { + BaseFormula formula = GroupFormulaPane.this.update(); + Object result = formula.evalValue(calculator); + message = Inter.getLocText("FR-Designer_Group_Formula_Result") + ":" + GeneralUtils.objectToString(result); + } catch (UtilEvalError utilEvalError) { + message = Inter.getLocText("FR-Designer_Group_Formula_Calculate_Error") + ":" + utilEvalError.getMessage(); + } + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), message); + } + }; + public class VariableTreeAndDescriptionArea extends JPanel { private JTree variablesTree; diff --git a/src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPaneWhenReserveFormula.java b/src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPaneWhenReserveFormula.java new file mode 100644 index 0000000..8d4ba7a --- /dev/null +++ b/src/com/fr/solution/plugin/design/formula/ui/GroupFormulaPaneWhenReserveFormula.java @@ -0,0 +1,59 @@ +package com.fr.solution.plugin.design.formula.ui; + +import com.fr.base.BaseFormula; +import com.fr.design.formula.VariableResolver; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.general.Inter; + +import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.*; + +public class GroupFormulaPaneWhenReserveFormula extends GroupFormulaPane { + private UICheckBox reserveCheckBox4Result; + private UICheckBox reserveCheckBox4Write; + + public GroupFormulaPaneWhenReserveFormula() { + super(); + } + + @Override + protected void extendCheckBoxPane(JPanel checkBoxPane) { + reserveCheckBox4Result = new UICheckBox(Inter.getLocText("FR-Designer_Export-Save-Formula")); + reserveCheckBox4Result.setSelected(false); + reserveCheckBox4Result.addChangeListener(new ChangeListener() { + + public void stateChanged(ChangeEvent arg0) { + if (reserveCheckBox4Result.isSelected()) { + reserveCheckBox4Write.setSelected(true); + reserveCheckBox4Write.setEnabled(false); + } else { + reserveCheckBox4Write.setEnabled(true); + } + } + }); + reserveCheckBox4Write = new UICheckBox(Inter.getLocText("FR-Designer_Write-Save-Formula")); + reserveCheckBox4Write.setSelected(false); + + checkBoxPane.add(reserveCheckBox4Result, BorderLayout.CENTER); + checkBoxPane.add(reserveCheckBox4Write, BorderLayout.SOUTH); + } + + @Override + public void populate(BaseFormula formula, VariableResolver variableResolver) { + super.populate(formula, variableResolver); + reserveCheckBox4Result.setSelected(formula.isReserveInResult()); + reserveCheckBox4Write.setSelected(formula.isReserveOnWriteOrAnaly()); + } + + @Override + public BaseFormula update() { + BaseFormula formula = super.update(); + if (formula != null) { + formula.setReserveInResult(this.reserveCheckBox4Result.isSelected()); + formula.setReserveOnWriteOrAnaly(this.reserveCheckBox4Write.isSelected()); + } + return formula; + } +} diff --git a/src/com/fr/solution/plugin/design/formula/ui/type/impl/NormalFormulaPane.java b/src/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java similarity index 76% rename from src/com/fr/solution/plugin/design/formula/ui/type/impl/NormalFormulaPane.java rename to src/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java index b396dda..c7cbed5 100644 --- a/src/com/fr/solution/plugin/design/formula/ui/type/impl/NormalFormulaPane.java +++ b/src/com/fr/solution/plugin/design/formula/ui/type/BaseFormulaPane.java @@ -1,16 +1,14 @@ -package com.fr.solution.plugin.design.formula.ui.type.impl; +package com.fr.solution.plugin.design.formula.ui.type; -import com.fr.base.Formula; +import com.fr.base.BaseFormula; import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; -import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; import com.fr.solution.plugin.design.formula.ui.evt.OperateListener; -import com.fr.solution.plugin.design.formula.ui.type.CommonEvent; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.script.Expression; @@ -24,7 +22,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.StringReader; -public class NormalFormulaPane extends FurtherBasicBeanPane implements CommonEvent, KeyListener { +public abstract class BaseFormulaPane extends FurtherBasicBeanPane implements CommonEvent, KeyListener { private static final int KEY_10 = 10; //上下左右 @@ -42,7 +40,7 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements private OperateListener operateListener; - public NormalFormulaPane() { + public BaseFormulaPane() { setLayout(new BorderLayout()); initFormulaTextArea(); UIScrollPane formulaTextAreaScrollPane = new UIScrollPane(formulaTextArea); @@ -51,25 +49,12 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements } private void initFormulaTextArea() { - formulaTextArea = new RSyntaxTextArea(); - configFormulaArea(); + formulaTextArea = createContentEditor(); initFormulaTextAreaKeyListener(); initFormulaTextAreaMouseListener(); } - protected void configFormulaArea() { - formulaTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_FORMULA); - formulaTextArea.setAnimateBracketMatching(true); - formulaTextArea.setAntiAliasingEnabled(true); - formulaTextArea.setAutoIndentEnabled(true); - formulaTextArea.setCodeFoldingEnabled(true); - formulaTextArea.setUseSelectedTextColor(true); - formulaTextArea.setCloseCurlyBraces(true); - formulaTextArea.setBracketMatchingEnabled(true); - formulaTextArea.setAntiAliasingEnabled(true); - formulaTextArea.setCloseMarkupTags(true); - formulaTextArea.setLineWrap(true); - } + private void initFormulaTextAreaKeyListener() { formulaTextArea.addKeyListener(this); @@ -156,65 +141,58 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements } } - @Override - public boolean accept(Object ob) { - return ob instanceof Formula; - } - @Override public void reset() { } - @Override - public void populateBean(Formula formula) { - // set text - if (formula != null) { - String content = formula.getContent(); - if (content.trim().equals("=")) { - this.formulaTextArea.setForeground(Color.gray); - this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("FR-Designer_FormulaPane_Tips")); - this.formulaTextArea.setCaretPosition(0); - ifHasBeenWritten = 0; - operateListener.clearMathListModel(); - } else if (content.trim().charAt(0) == '=') { - this.formulaTextArea.setText(content.trim().substring(1)); - currentPosition = formulaTextArea.getCaretPosition(); - beginPosition = getBeginPosition(); - insertPosition = beginPosition; - firstStepToFindTips(beginPosition); - operateListener.fixFunctionNameList(); - ifHasBeenWritten = 1; - } else { - this.formulaTextArea.setText(content); - currentPosition = formulaTextArea.getCaretPosition(); - beginPosition = getBeginPosition(); - insertPosition = beginPosition; - firstStepToFindTips(beginPosition); - operateListener.fixFunctionNameList(); - ifHasBeenWritten = 1; - } + protected abstract RSyntaxTextArea createContentEditor(); + + protected void fixContent(String content) { + if (content.trim().equals("=")) { + this.formulaTextArea.setForeground(Color.gray); + this.formulaTextArea.setText("\n\n\n" + Inter.getLocText("FR-Designer_FormulaPane_Tips")); + this.formulaTextArea.setCaretPosition(0); + ifHasBeenWritten = 0; + operateListener.clearMathListModel(); + } else if (content.trim().charAt(0) == '=') { + this.formulaTextArea.setText(content.trim().substring(1)); + currentPosition = formulaTextArea.getCaretPosition(); + beginPosition = getBeginPosition(); + insertPosition = beginPosition; + firstStepToFindTips(beginPosition); + operateListener.fixFunctionNameList(); + ifHasBeenWritten = 1; + } else { + this.formulaTextArea.setText(content); + currentPosition = formulaTextArea.getCaretPosition(); + beginPosition = getBeginPosition(); + insertPosition = beginPosition; + firstStepToFindTips(beginPosition); + operateListener.fixFunctionNameList(); + ifHasBeenWritten = 1; } + } + + protected String getText() { + return formulaTextArea.getText(); } @Override - public Formula updateBean() { - Formula formula; + public T updateBean() { + String content = getText(); if (ifHasBeenWritten == 0) { - return new Formula(); + return createWrittenFormula(content); } else { - String content = this.formulaTextArea.getText(); - - if (StringUtils.isEmpty(content) || content.trim().charAt(0) == '=') { - formula = new Formula(content); - } else { - formula = new Formula("=" + content); - } - return formula; + return createFormula(content); } } + protected abstract T createWrittenFormula(String content); + + protected abstract T createFormula(String content); + @Override public void keyTyped(KeyEvent e) { @@ -267,6 +245,7 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements ifHasBeenWritten = 1; insertPosition = 0; } + text = wrapText(text); String textAll = formulaTextArea.getText(); currentPosition = formulaTextArea.getCaretPosition(); int insert = 0; @@ -289,6 +268,10 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements insertPosition = formulaTextArea.getCaretPosition(); } + protected String wrapText(String text) { + return text; + } + public void onDoubleClick(String currentLineContent) { if (ifHasBeenWritten == 0) { formulaTextArea.setForeground(Color.black); @@ -336,7 +319,7 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements } JOptionPane.showMessageDialog( - NormalFormulaPane.this, + BaseFormulaPane.this, (expression != null ? Inter.getLocText("FormulaD-Valid_Formula") : Inter.getLocText("FormulaD-Invalid_Formula")) + ".", ProductConstants.PRODUCT_NAME, JOptionPane.INFORMATION_MESSAGE); } @@ -353,6 +336,6 @@ public class NormalFormulaPane extends FurtherBasicBeanPane implements @Override public String title4PopupWindow() { - return Inter.getLocText("Plugin-Basic_Formula_Title"); + return Inter.getLocText("FR-Designer_Group_Formula_Basic_Title"); } } diff --git a/src/com/fr/solution/plugin/design/formula/ui/type/CategoryFormulaPane.java b/src/com/fr/solution/plugin/design/formula/ui/type/CategoryFormulaPane.java index 565c0c7..e0c6f91 100644 --- a/src/com/fr/solution/plugin/design/formula/ui/type/CategoryFormulaPane.java +++ b/src/com/fr/solution/plugin/design/formula/ui/type/CategoryFormulaPane.java @@ -4,7 +4,7 @@ import com.fr.base.BaseFormula; import com.fr.design.beans.FurtherBasicBeanPane; import com.fr.design.gui.frpane.UIRadioPane; import com.fr.solution.plugin.design.formula.ui.evt.OperateListener; -import com.fr.solution.plugin.design.formula.ui.type.impl.NormalFormulaPane; +import com.fr.solution.plugin.design.formula.ui.type.impl.BasicFormulaPane; import com.fr.solution.plugin.design.formula.ui.type.impl.ScriptFormulaPane; import java.util.ArrayList; @@ -19,7 +19,7 @@ public class CategoryFormulaPane extends UIRadioPane{ protected List> initPaneList() { List> list = new ArrayList>(); - NormalFormulaPane normal = new NormalFormulaPane(); + BasicFormulaPane normal = new BasicFormulaPane(); ScriptFormulaPane script = new ScriptFormulaPane(); list.add(normal); @@ -55,7 +55,9 @@ public class CategoryFormulaPane extends UIRadioPane{ } public void setOperateListener(OperateListener listener) { - events.get(cardNamesPane.getSelectedIndex()).setOperateListener(listener); + for (CommonEvent event : events) { + event.setOperateListener(listener); + } } @Override diff --git a/src/com/fr/solution/plugin/design/formula/ui/type/impl/BasicFormulaPane.java b/src/com/fr/solution/plugin/design/formula/ui/type/impl/BasicFormulaPane.java new file mode 100644 index 0000000..3cd60aa --- /dev/null +++ b/src/com/fr/solution/plugin/design/formula/ui/type/impl/BasicFormulaPane.java @@ -0,0 +1,60 @@ +package com.fr.solution.plugin.design.formula.ui.type.impl; + +import com.fr.base.Formula; +import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; +import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; +import com.fr.solution.plugin.design.formula.ui.type.BaseFormulaPane; +import com.fr.stable.StringUtils; + +public class BasicFormulaPane extends BaseFormulaPane { + + @Override + public boolean accept(Object ob) { + return ob instanceof Formula; + } + + @Override + public void populateBean(Formula formula) { + if (formula != null) { + String content = formula.getContent(); + fixContent(content); + } + } + + @Override + protected Formula createWrittenFormula(String content) { + return new Formula(); + } + + @Override + protected Formula createFormula(String content) { + Formula formula; + if (StringUtils.isEmpty(content) || content.trim().charAt(0) == '=') { + formula = new Formula(content); + } else { + formula = new Formula("=" + content); + } + return formula; + } + + @Override + protected RSyntaxTextArea createContentEditor() { + RSyntaxTextArea formulaTextArea = new RSyntaxTextArea(); + configFormulaArea(formulaTextArea); + return formulaTextArea; + } + + protected void configFormulaArea(RSyntaxTextArea formulaTextArea) { + formulaTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_FORMULA); + formulaTextArea.setAnimateBracketMatching(true); + formulaTextArea.setAntiAliasingEnabled(true); + formulaTextArea.setAutoIndentEnabled(true); + formulaTextArea.setCodeFoldingEnabled(true); + formulaTextArea.setUseSelectedTextColor(true); + formulaTextArea.setCloseCurlyBraces(true); + formulaTextArea.setBracketMatchingEnabled(true); + formulaTextArea.setAntiAliasingEnabled(true); + formulaTextArea.setCloseMarkupTags(true); + formulaTextArea.setLineWrap(true); + } +} diff --git a/src/com/fr/solution/plugin/design/formula/ui/type/impl/ScriptFormulaPane.java b/src/com/fr/solution/plugin/design/formula/ui/type/impl/ScriptFormulaPane.java index 21a6161..fc3a237 100644 --- a/src/com/fr/solution/plugin/design/formula/ui/type/impl/ScriptFormulaPane.java +++ b/src/com/fr/solution/plugin/design/formula/ui/type/impl/ScriptFormulaPane.java @@ -1,33 +1,23 @@ package com.fr.solution.plugin.design.formula.ui.type.impl; -import com.fr.base.Formula; import com.fr.base.ScriptFormula; -import com.fr.design.beans.FurtherBasicBeanPane; -import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.general.Inter; -import com.fr.solution.plugin.design.formula.ui.evt.OperateListener; -import com.fr.solution.plugin.design.formula.ui.type.CommonEvent; +import com.fr.solution.plugin.design.formula.ui.type.BaseFormulaPane; import com.fr.stable.StringUtils; -import java.awt.*; +public class ScriptFormulaPane extends BaseFormulaPane { -public class ScriptFormulaPane extends FurtherBasicBeanPane implements CommonEvent { - - private RSyntaxTextArea formulaTextArea; - - public ScriptFormulaPane() { - setLayout(new BorderLayout()); - formulaTextArea = new RSyntaxTextArea(); + @Override + protected RSyntaxTextArea createContentEditor() { + RSyntaxTextArea formulaTextArea = new RSyntaxTextArea(); formulaTextArea.setCloseCurlyBraces(true); formulaTextArea.setLineWrap(true); formulaTextArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT); formulaTextArea.setCodeFoldingEnabled(true); formulaTextArea.setAntiAliasingEnabled(true); - UIScrollPane formulaTextAreaScrollPane = new UIScrollPane(formulaTextArea); - formulaTextAreaScrollPane.setBorder(null); - add(formulaTextAreaScrollPane, BorderLayout.CENTER); + return formulaTextArea; } @Override @@ -43,14 +33,14 @@ public class ScriptFormulaPane extends FurtherBasicBeanPane imple @Override public void populateBean(ScriptFormula formula) { if (formula != null) { - formulaTextArea.setText(formula.getContent()); + String content = formula.getContent(); + fixContent(content); } } @Override - public ScriptFormula updateBean() { + protected ScriptFormula createFormula(String content) { ScriptFormula formula; - String content = formulaTextArea.getText(); if (StringUtils.isEmpty(content) || content.trim().charAt(0) == '=') { formula = new ScriptFormula(content); } else { @@ -60,37 +50,22 @@ public class ScriptFormulaPane extends FurtherBasicBeanPane imple } @Override - public void onDoubleClick(String currentLineContent) { - - } - - @Override - public void onSingleClick() { - + protected ScriptFormula createWrittenFormula(String content) { + return createFormula(content); } @Override - public void applyText(String text) { - - } - - @Override - public void checkContentValid() { - - } - - @Override - public void onSearch() { + public void onDoubleClick(String currentLineContent) { } @Override - public void setOperateListener(OperateListener listener) { - + protected String wrapText(String text) { + return "'${" + text + "}'"; } @Override public String title4PopupWindow() { - return Inter.getLocText("Plugin-Script_Formula_Title"); + return Inter.getLocText("FR-Designer_Group_Formula_Script_Title"); } }