Ignore:
Timestamp:
07/25/08 09:24:45 (16 years ago)
Author:
ra33
Message:

Added calculate action

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/expeditee/actions/Misc.java

    r154 r156  
    99import java.io.IOException;
    1010import java.lang.reflect.Method;
     11import java.text.NumberFormat;
    1112import java.util.ArrayList;
    1213import java.util.Collection;
    1314import java.util.List;
     15import java.util.Observable;
     16import java.util.Observer;
    1417
    1518import javax.imageio.ImageIO;
    1619
     20import org.expeditee.gui.AttributeUtils;
     21import org.expeditee.gui.AttributeValuePair;
    1722import org.expeditee.gui.DisplayIO;
    1823import org.expeditee.gui.Frame;
     
    2833import org.expeditee.stats.StatsLogger;
    2934import org.expeditee.stats.TreeStats;
     35import org.nfunk.jep.Node;
     36import org.nfunk.jep.Variable;
    3037
    3138/**
     
    8895                                                action);
    8996                        }
     97                } else {
     98                        MessageBay.errorMessage("Item must be a text item.");
    9099                }
    91100        }
     
    106115                        if (deletedFrameName != null) {
    107116                                DisplayIO.Back();
    108                                 //Remove any links on the previous frame to the one being deleted
     117                                // Remove any links on the previous frame to the one being
     118                                // deleted
    109119                                Frame current = DisplayIO.getCurrentFrame();
    110120                                for (Item i : current.getItems())
     
    116126                                MessageBay.displayMessage(deletedFrame + " renamed "
    117127                                                + deletedFrameName);
    118                                 //FrameGraphics.Repaint();
     128                                // FrameGraphics.Repaint();
    119129                                return;
    120130                        }
     
    645655                return item;
    646656        }
     657
     658        public static void calculate(Frame frame, Item toCalculate) {
     659                if (toCalculate instanceof Text) {
     660                        Text text = (Text) toCalculate;
     661                        org.nfunk.jep.JEP myParser = new org.nfunk.jep.JEP();
     662                        myParser.addStandardFunctions();
     663                        myParser.addStandardConstants();
     664                        myParser.setImplicitMul(true);
     665
     666                        Observer observer = new Observer() {
     667                                private String _attribute = "";
     668                                public void update(Observable ob, Object o) {
     669                                        _attribute = ((Variable)o).getName() + ": ";
     670                                }
     671                               
     672                                @Override
     673                                public String toString() {
     674                                        return _attribute;
     675                                }
     676                        };
     677
     678                        // Check for variables
     679                        for (Text t : frame.getTextItems()) {
     680                                AttributeValuePair avp = AttributeUtils.getPair(t.getText());
     681                                if (avp != null) {
     682                                        myParser.addVariable(avp.getAttribute(), avp
     683                                                        .getDoubleValue());
     684                                }
     685                        }
     686                       
     687                        myParser.getSymbolTable().addObserver(observer);
     688                        myParser.setAllowAssignment(true);
     689                        myParser.setAllowUndeclared(true);
     690                       
     691                        // Do the calculation
     692                        Node node = myParser.parseExpression(text.getText());
     693                        if (node == null) {
     694                                for (String s : myParser.getErrorInfo().split("\n")) {
     695                                        MessageBay.errorMessage(s);
     696                                }
     697                        } else {
     698                                Double result = myParser.getValue();
     699                                NumberFormat nf = NumberFormat.getInstance();
     700                                nf.setMinimumFractionDigits(0);
     701                                nf.setMaximumFractionDigits(15);
     702                                text.setText(observer.toString() + nf.format(result));
     703                                text.setPosition(FrameMouseActions.MouseX,
     704                                                FrameMouseActions.MouseY);
     705                                FrameMouseActions.resetOffset();
     706                        }
     707
     708                }
     709        }
    647710}
Note: See TracChangeset for help on using the changeset viewer.