From 5fa2691e8da5337a289f81f81cb9bac029172519 Mon Sep 17 00:00:00 2001 From: hugh Date: Wed, 11 Jan 2017 16:07:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E8=87=AA=E5=AE=9A=E4=B9=89=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E8=BF=9B=E8=A1=8C=E5=88=86=E7=BB=84=E3=80=90=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E5=BC=95=E5=85=A5=E4=B8=80=E7=BB=84=E5=85=AC=E5=BC=8F?= =?UTF-8?q?=E7=94=A8=EF=BC=8C=E6=AF=94=E5=A6=82=E8=B4=A2=E5=8A=A1=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E5=85=AC=E5=BC=8F=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/formula/AbstractFunctionGroup.java | 30 +++++++++++++++++++ .../com/fr/design/formula/FormulaPane.java | 12 +++++++- .../fr/design/formula/FunctionConstants.java | 10 ++++++- .../formula/FunctionGroupDefineProvider.java | 12 ++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java create mode 100644 designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java diff --git a/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java b/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java new file mode 100644 index 000000000..c8a80f809 --- /dev/null +++ b/designer_base/src/com/fr/design/formula/AbstractFunctionGroup.java @@ -0,0 +1,30 @@ +package com.fr.design.formula; + +import com.fr.stable.fun.mark.API; +import com.fr.stable.script.FunctionDef; + +@API(level = FunctionGroupDefineProvider.CURRENT_LEVEL) +public abstract class AbstractFunctionGroup implements FunctionGroupDefineProvider { + + @Override + public int currentAPILevel() { + return CURRENT_LEVEL; + } + + @Override + public String mark4Provider() { + return getClass().getName(); + } + + @Override + public NameAndDescription[] getDescriptions() { + FunctionDef[] funcs = getFunctionDefs(); + int count = funcs.length; + FunctionDefNAD[] nads = new FunctionDefNAD[count]; + for (int i = 0; i < count; i ++) { + nads[i] = new FunctionDefNAD(funcs[i]); + } + return nads; + } + +} diff --git a/designer_base/src/com/fr/design/formula/FormulaPane.java b/designer_base/src/com/fr/design/formula/FormulaPane.java index d7e3f21be..d2910fa96 100644 --- a/designer_base/src/com/fr/design/formula/FormulaPane.java +++ b/designer_base/src/com/fr/design/formula/FormulaPane.java @@ -22,8 +22,10 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; import com.fr.parser.FRLexer; import com.fr.parser.FRParser; +import com.fr.plugin.ExtraClassManager; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; +import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.Expression; import javax.swing.*; @@ -32,10 +34,12 @@ import javax.swing.event.ListSelectionListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.*; + import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.Locale; +import java.util.Set; /** * 公式编辑面板 * @editor zhou @@ -581,7 +585,13 @@ public class FormulaPane extends BasicPane implements KeyListener, UIFormula{ functionTypeListModel.addElement(FunctionConstants.ALL); functionTypeListModel.addElement(FunctionConstants.CUSTOM); functionTypeListModel.addElement(FunctionConstants.PLUGIN); - + //hugh:自定义函数分组 + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + if(!groups.isEmpty()){ + for(Mutable group : groups){ + functionTypeListModel.addElement(group); + } + } functionTypeList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent evt) { diff --git a/designer_base/src/com/fr/design/formula/FunctionConstants.java b/designer_base/src/com/fr/design/formula/FunctionConstants.java index cfb983dd7..d33ad58e8 100644 --- a/designer_base/src/com/fr/design/formula/FunctionConstants.java +++ b/designer_base/src/com/fr/design/formula/FunctionConstants.java @@ -11,6 +11,8 @@ import com.fr.stable.EncodeConstants; import com.fr.stable.OperatingSystem; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; +import com.fr.stable.fun.FunctionGroupDefineProvider; +import com.fr.stable.fun.mark.Mutable; import com.fr.stable.script.Function; import com.fr.stable.script.FunctionDef; @@ -96,7 +98,13 @@ public abstract class FunctionConstants { } Collections.addAll(all, PLUGIN.getDescriptions()); Collections.addAll(all, CUSTOM.getDescriptions()); - + //hugh:自定义函数分组 + Set groups = ExtraClassManager.getInstance().getArray(FunctionGroupDefineProvider.MARK_STRING); + if(!groups.isEmpty()){ + for(Mutable group : groups){ + Collections.addAll(all, ((FunctionGroup)group).getDescriptions()); + } + } java.util.Collections.sort(all, NameAndDescriptionComparator); return all.toArray(new NameAndDescription[all.size()]); diff --git a/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java b/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java new file mode 100644 index 000000000..671a07fc7 --- /dev/null +++ b/designer_base/src/com/fr/design/formula/FunctionGroupDefineProvider.java @@ -0,0 +1,12 @@ +package com.fr.design.formula; + +import com.fr.design.formula.FunctionGroup; +import com.fr.stable.fun.mark.Mutable; +import com.fr.stable.script.FunctionDef; + +public interface FunctionGroupDefineProvider extends Mutable,FunctionGroup{ + int CURRENT_LEVEL = 1; + String MARK_STRING = "FunctionGroupDefineProvider"; + + public FunctionDef[] getFunctionDefs(); +}