Package org.freeplane.plugin.formula

Source Code of org.freeplane.plugin.formula.FormulaTextTransformer

package org.freeplane.plugin.formula;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.KeyEvent;

import javax.swing.JEditorPane;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.ui.components.JRestrictedSizeScrollPane;
import org.freeplane.core.util.HtmlUtils;
import org.freeplane.core.util.TextUtils;
import org.freeplane.features.format.FormattedFormula;
import org.freeplane.features.format.FormattedObject;
import org.freeplane.features.map.NodeModel;
import org.freeplane.features.text.AbstractContentTransformer;
import org.freeplane.features.text.TextController;
import org.freeplane.features.text.mindmapmode.EditNodeBase;
import org.freeplane.features.text.mindmapmode.EditNodeDialog;
import org.freeplane.features.text.mindmapmode.IEditBaseCreator;
import org.freeplane.features.text.mindmapmode.MTextController;
import org.freeplane.plugin.script.ExecuteScriptException;
import org.freeplane.plugin.script.FormulaUtils;

class FormulaTextTransformer extends AbstractContentTransformer implements IEditBaseCreator{
  FormulaTextTransformer(int priority) {
    super(priority);
  }

    public Object transformContent(TextController textController, final Object obj, final NodeModel node,
                                   Object transformedExtension) {
        if (obj instanceof FormattedFormula) {
            final FormattedFormula formattedFormula = (FormattedFormula) obj;
            final Object evaluationResult = transformContent(textController, formattedFormula.getObject(), node,
                transformedExtension);
            return new FormattedObject(evaluationResult, formattedFormula.getPattern());
        }
        if (!(obj instanceof String)) {
            return obj;
        }
        if (textController.isTextFormattingDisabled(node))
            return obj;
        final String text = obj.toString();
        if (!FormulaUtils.containsFormulaCheckHTML(text)) {
            return obj;
        }
        final String plainText = HtmlUtils.htmlToPlain(text);
        // starting a new ScriptContext in evalIfScript
        final Object result = FormulaUtils.evalIfScript(node, null, plainText);
        if (result == null) {
            throw new ExecuteScriptException("got null result from evaluating " + node.getID() + ", text='"
                    + plainText.substring(1) + "'");
        }
        return result;
    }

  public EditNodeBase createEditor(final NodeModel node, final EditNodeBase.IEditControl editControl,
                                   String text, final boolean editLong) {
    MTextController textController = MTextController.getController();
    if (textController.isTextFormattingDisabled(node))
      return null;
    final KeyEvent firstKeyEvent = textController.getEventQueue().getFirstEvent();
    if(firstKeyEvent != null){
      if (firstKeyEvent.getKeyChar() == '='){
        text = "=";
      }
      else{
        return null;
      }
    }
    if(text.startsWith("=")){
      JEditorPane textEditor = new JEditorPane();
      textEditor.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
      final JRestrictedSizeScrollPane scrollPane = new JRestrictedSizeScrollPane(textEditor);
      scrollPane.setMinimumSize(new Dimension(0, 60));
      final EditNodeDialog editNodeDialog = new FormulaEditor(node, text, firstKeyEvent, editControl, false, textEditor);
      editNodeDialog.setTitle(TextUtils.getText("formula_editor"));
      textEditor.setContentType("text/groovy");

      final String fontName = ResourceController.getResourceController().getProperty(FormulaEditor.GROOVY_EDITOR_FONT);
      final int fontSize = ResourceController.getResourceController().getIntProperty(FormulaEditor.GROOVY_EDITOR_FONT_SIZE);
      textEditor.setFont(new Font(fontName, Font.PLAIN, fontSize));

      return editNodeDialog;
    }
    return null;
    }
 
  public boolean markTransformation() {
      return true;
    }
}
TOP

Related Classes of org.freeplane.plugin.formula.FormulaTextTransformer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.