|
|
|
@ -1,49 +1,57 @@
|
|
|
|
|
package com.fr.solution.plugin.design.formula.ui; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.fanruan.api.cal.CalculatorKit; |
|
|
|
|
import com.fanruan.api.cal.ParameterKit; |
|
|
|
|
import com.fanruan.api.cal.namespace.SimpleCellValueNameSpaceKit; |
|
|
|
|
import com.fanruan.api.design.DesignKit; |
|
|
|
|
import com.fanruan.api.design.ui.container.DialogActionAdapter; |
|
|
|
|
import com.fanruan.api.design.ui.component.*; |
|
|
|
|
import com.fanruan.api.design.ui.container.BasicPane; |
|
|
|
|
import com.fanruan.api.design.ui.action.UpdateAction; |
|
|
|
|
import com.fanruan.api.design.ui.container.HistoryTemplateListPane; |
|
|
|
|
import com.fanruan.api.design.ui.container.ParameterInputPane; |
|
|
|
|
import com.fanruan.api.design.ui.container.UIScrollPane; |
|
|
|
|
import com.fanruan.api.design.ui.component.QuickList; |
|
|
|
|
import com.fanruan.api.macro.EncodeConstants; |
|
|
|
|
import com.fanruan.api.util.IOKit; |
|
|
|
|
import com.fanruan.api.design.util.GUICoreKit; |
|
|
|
|
import com.fanruan.api.util.*; |
|
|
|
|
import com.fr.base.BaseFormula; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.fr.base.FRContext; |
|
|
|
|
import com.fr.base.Parameter; |
|
|
|
|
import com.fr.base.ParameterMapNameSpace; |
|
|
|
|
import com.fr.base.io.IOFile; |
|
|
|
|
/** |
|
|
|
|
* 接口 |
|
|
|
|
*/ |
|
|
|
|
import com.fr.base.BaseFormula; |
|
|
|
|
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.dialog.DialogActionAdapter; |
|
|
|
|
import com.fr.design.file.HistoryTemplateListPane; |
|
|
|
|
import com.fr.design.formula.FunctionGroup; |
|
|
|
|
import com.fr.design.formula.NameAndDescription; |
|
|
|
|
import com.fr.design.formula.UIFormula; |
|
|
|
|
import com.fr.design.formula.VariableResolver; |
|
|
|
|
import com.fr.design.gui.ibutton.UIButton; |
|
|
|
|
import com.fr.design.gui.icontainer.UIScrollPane; |
|
|
|
|
import com.fr.design.gui.ilable.UILabel; |
|
|
|
|
import com.fr.design.gui.ilist.QuickList; |
|
|
|
|
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.general.FRLogger; |
|
|
|
|
import com.fr.stable.ParameterProvider; |
|
|
|
|
import com.fr.stable.script.CalculatorProvider; |
|
|
|
|
import com.fr.design.formula.FunctionGroup; |
|
|
|
|
/** |
|
|
|
|
* 调用了其他函数的方法,返回值是父类,无法赋值给子类 |
|
|
|
|
*/ |
|
|
|
|
import com.fr.design.dialog.BasicDialog; |
|
|
|
|
import com.fr.design.formula.NameAndDescription; |
|
|
|
|
import com.fr.design.mainframe.JTemplate; |
|
|
|
|
import com.fr.design.parameter.ParameterInputPane; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 类似于上一个问题,不过是无法获取父类异常 |
|
|
|
|
*/ |
|
|
|
|
import com.fr.stable.UtilEvalError; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* IOFile更改后悔出错不敢换,有instance,可能出错 |
|
|
|
|
*/ |
|
|
|
|
import com.fr.base.io.IOFile; |
|
|
|
|
|
|
|
|
|
import com.fr.general.FRLogger; |
|
|
|
|
import com.fr.report.core.namespace.SimpleCellValueNameSpace; |
|
|
|
|
import com.fr.script.Calculator; |
|
|
|
|
import com.fr.solution.plugin.design.formula.compat.DesignToolkit; |
|
|
|
|
import com.fr.solution.plugin.design.formula.compat.FunctionConstants; |
|
|
|
|
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.UtilEvalError; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.swing.*; |
|
|
|
|
import javax.swing.event.ListSelectionEvent; |
|
|
|
@ -325,31 +333,31 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
|
|
|
|
|
private ActionListener calculateActionListener = new ActionListener() { |
|
|
|
|
@Override |
|
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
|
Calculator calculator = Calculator.createCalculator(); |
|
|
|
|
CalculatorProvider calculator = CalculatorKit.createCalculator(); |
|
|
|
|
JTemplate<?, ?> template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); |
|
|
|
|
if (template != null) { |
|
|
|
|
IOFile file = (IOFile) template.getTarget(); |
|
|
|
|
calculator.setAttribute(TableDataSource.class, file); |
|
|
|
|
calculator.pushNameSpace(SimpleCellValueNameSpace.getInstance()); |
|
|
|
|
calculator.pushNameSpace(SimpleCellValueNameSpaceKit.getInstance()); |
|
|
|
|
} |
|
|
|
|
BaseFormula formula = GroupFormulaPane.this.update(); |
|
|
|
|
String message = calculate(formula, formulaPane.analyze4Parameters(calculator), calculator); |
|
|
|
|
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), message); |
|
|
|
|
JOptionPane.showMessageDialog(DesignKit.getDesignerFrame(), message); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
private String calculate(BaseFormula formula, Parameter[] parameters, Calculator calculator) { |
|
|
|
|
private String calculate(BaseFormula formula, ParameterProvider[] parameters, CalculatorProvider calculator) { |
|
|
|
|
final Map<String, Object> parameterMap = new HashMap<String, Object>(); |
|
|
|
|
if (ArrayKit.isNotEmpty(parameters)) { |
|
|
|
|
final ParameterInputPane pPane = new ParameterInputPane(parameters); |
|
|
|
|
pPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { |
|
|
|
|
pPane.showSmallWindow(DesignKit.getDesignerFrame(), new DialogActionAdapter() { |
|
|
|
|
@Override |
|
|
|
|
public void doOk() { |
|
|
|
|
parameterMap.putAll(pPane.update()); |
|
|
|
|
} |
|
|
|
|
}).setVisible(true); |
|
|
|
|
} |
|
|
|
|
calculator.pushNameSpace(ParameterMapNameSpace.create(parameterMap)); |
|
|
|
|
calculator.pushNameSpace(ParameterKit.createParameterMapNameSpace(parameterMap)); |
|
|
|
|
String message; |
|
|
|
|
try { |
|
|
|
|
Object result = formula.evalValue(calculator); |
|
|
|
@ -551,7 +559,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
|
|
|
|
|
StringBuilder desBuf = new StringBuilder(); |
|
|
|
|
try { |
|
|
|
|
String path; |
|
|
|
|
Locale locale = FRContext.getLocale(); |
|
|
|
|
Locale locale = GeneralKit.getLocale(); |
|
|
|
|
if (locale.equals(Locale.CHINA)) { |
|
|
|
|
path = "/com/fr/design/insert/formula/variable/cn/"; |
|
|
|
|
} else { |
|
|
|
@ -627,7 +635,7 @@ public class GroupFormulaPane extends BasicPane implements UIFormula, OperateLis
|
|
|
|
|
// desArea。setEnabled(false);
|
|
|
|
|
desArea.setText(this.getTextAreaText()); |
|
|
|
|
basicPane.add(new UIScrollPane(desArea), BorderLayout.CENTER); |
|
|
|
|
BasicDialog dialog = basicPane.showWindow(DesignerContext.getDesignerFrame()); |
|
|
|
|
BasicDialog dialog = basicPane.showWindow(DesignKit.getDesignerFrame()); |
|
|
|
|
dialog.setVisible(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|