forked from fanruan/finekit
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.3 KiB
161 lines
4.3 KiB
6 years ago
|
package com.fanruan.api.design.ui.editor;
|
||
|
|
||
|
import com.fanruan.api.design.ui.component.UITextField;
|
||
|
import com.fanruan.api.util.StringKit;
|
||
|
import com.fr.base.BaseFormula;
|
||
|
import com.fr.design.dialog.DialogActionAdapter;
|
||
|
import com.fr.design.formula.FormulaFactory;
|
||
|
import com.fr.design.formula.UIFormula;
|
||
|
|
||
|
import javax.swing.*;
|
||
|
import java.awt.*;
|
||
|
import java.awt.event.MouseAdapter;
|
||
|
import java.awt.event.MouseEvent;
|
||
|
|
||
|
/**
|
||
|
* @author richie
|
||
|
* @version 10.0
|
||
|
* Created by richie on 2019/11/1
|
||
|
* 用于编辑和展示公式的编辑器
|
||
|
* TODO:待补充文档
|
||
|
*/
|
||
|
public class TypeFormulaEditor extends BaseEditor<BaseFormula> {
|
||
|
private BaseFormula formula = BaseFormula.createFormulaBuilder().build();
|
||
|
private UITextField currentTextField;
|
||
|
private TypeFormulaEditor.ShowPaneListener listener = new TypeFormulaEditor.ShowPaneListener();
|
||
|
|
||
|
|
||
|
public TypeFormulaEditor() {
|
||
|
this(StringKit.EMPTY);
|
||
|
}
|
||
|
|
||
|
public TypeFormulaEditor(String name) {
|
||
|
this(name, null);
|
||
|
}
|
||
|
|
||
|
public TypeFormulaEditor(String name, BaseFormula formula) {
|
||
|
if (formula != null) {
|
||
|
this.formula = formula;
|
||
|
}
|
||
|
this.setLayout(new BorderLayout());
|
||
|
|
||
|
JPanel editPane = new JPanel(new BorderLayout());
|
||
|
currentTextField = new UITextField(28);
|
||
|
currentTextField.setText(this.formula.getContent());
|
||
|
|
||
|
editPane.add(currentTextField, BorderLayout.CENTER);
|
||
|
currentTextField.setEditable(false);
|
||
|
currentTextField.addMouseListener(listener);
|
||
|
this.add(editPane, BorderLayout.CENTER);
|
||
|
this.setName(name);
|
||
|
}
|
||
|
|
||
|
private class ShowPaneListener extends MouseAdapter {
|
||
|
public void mousePressed(MouseEvent e) {
|
||
|
if (currentTextField.isEnabled()) {
|
||
|
showFormulaPane();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 选中时弹出公式编辑框
|
||
|
*/
|
||
|
public void selected() {
|
||
|
showFormulaPane();
|
||
|
}
|
||
|
|
||
|
public void setEnabled(boolean enabled) {
|
||
|
super.setEnabled(enabled);
|
||
|
currentTextField.setEnabled(enabled);
|
||
|
}
|
||
|
|
||
|
private void showFormulaPane() {
|
||
|
final UIFormula formulaPane = FormulaFactory.createFormulaPaneWhenReserveFormula();
|
||
|
formulaPane.populate(formula);
|
||
|
formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(TypeFormulaEditor.this), new DialogActionAdapter() {
|
||
|
|
||
|
@Override
|
||
|
public void doOk() {
|
||
|
formula = formulaPane.update();
|
||
|
setValue(formula);
|
||
|
fireStateChanged();
|
||
|
}
|
||
|
}).setVisible(true);
|
||
|
}
|
||
|
|
||
|
public BaseFormula getFormula() {
|
||
|
return formula;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public UITextField getSwingComponent() {
|
||
|
return currentTextField;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* object是否是公式类型对象
|
||
|
*
|
||
|
* @param object 需判断的对象
|
||
|
* @return 是公式类型则返回true
|
||
|
*/
|
||
|
public boolean accept(Object object) {
|
||
|
return object instanceof BaseFormula;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public BaseFormula getValue() {
|
||
|
if (formula != null && "=".equals(formula.getContent())) {
|
||
|
return null;
|
||
|
}
|
||
|
return formula;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void setValue(BaseFormula value) {
|
||
|
if (value == null) {
|
||
|
value = BaseFormula.createFormulaBuilder().build();
|
||
|
}
|
||
|
this.formula = value;
|
||
|
currentTextField.setText(value.toString());
|
||
|
}
|
||
|
|
||
|
public String getIconName() {
|
||
|
return "type_formula";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 重置
|
||
|
*/
|
||
|
public void reset() {
|
||
|
currentTextField.setText("=");
|
||
|
formula = BaseFormula.createFormulaBuilder().build();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 清楚数据
|
||
|
*/
|
||
|
public void clearData() {
|
||
|
reset();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 是否可用
|
||
|
*
|
||
|
* @param flag 为true代表可用
|
||
|
*/
|
||
|
public void enableEditor(boolean flag) {
|
||
|
this.setEnabled(flag);
|
||
|
this.currentTextField.setEnabled(flag);
|
||
|
if (!flag) {
|
||
|
this.currentTextField.removeMouseListener(listener);
|
||
|
} else {
|
||
|
int listenerSize = this.currentTextField.getMouseListeners().length;
|
||
|
for (int i = 0; i < listenerSize; i++) {
|
||
|
this.currentTextField.removeMouseListener(listener);
|
||
|
}
|
||
|
this.currentTextField.addMouseListener(listener);
|
||
|
}
|
||
|
}
|
||
|
}
|