|
|
|
@ -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<Formula> implements CommonEvent, KeyListener { |
|
|
|
|
public abstract class BaseFormulaPane<T extends BaseFormula> extends FurtherBasicBeanPane<T> implements CommonEvent, KeyListener { |
|
|
|
|
|
|
|
|
|
private static final int KEY_10 = 10; |
|
|
|
|
//上下左右
|
|
|
|
@ -42,7 +40,7 @@ public class NormalFormulaPane extends FurtherBasicBeanPane<Formula> 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<Formula> 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<Formula> 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<Formula> 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<Formula> 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<Formula> 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<Formula> implements
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public String title4PopupWindow() { |
|
|
|
|
return Inter.getLocText("Plugin-Basic_Formula_Title"); |
|
|
|
|
return Inter.getLocText("FR-Designer_Group_Formula_Basic_Title"); |
|
|
|
|
} |
|
|
|
|
} |