Update of /cvsroot/bprocessor/gui/src/net/sourceforge/bprocessor/gui/attrview
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv6000/src/net/sourceforge/bprocessor/gui/attrview
Modified Files:
StringAttribute.java
Log Message:
Made double labels use scripts, they are always evaluated and only used if the result is a double
Index: StringAttribute.java
===================================================================
RCS file: /cvsroot/bprocessor/gui/src/net/sourceforge/bprocessor/gui/attrview/StringAttribute.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** StringAttribute.java 22 Sep 2007 13:54:26 -0000 1.16
--- StringAttribute.java 12 Oct 2007 08:05:06 -0000 1.17
***************
*** 13,19 ****
--- 13,23 ----
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
+ import java.io.Reader;
+ import java.io.StringReader;
+ import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+ import java.util.Stack;
import javax.swing.Box;
***************
*** 25,28 ****
--- 29,38 ----
import net.sourceforge.bprocessor.gui.GUI;
import net.sourceforge.bprocessor.model.Attribute;
+ import net.sourceforge.bprocessor.model.Project;
+ import net.sourceforge.bprocessor.model.evaluator.Environment;
+ import net.sourceforge.bprocessor.model.evaluator.Function;
+ import net.sourceforge.bprocessor.model.evaluator.Invokable;
+ import net.sourceforge.bprocessor.parser.ScriptLexer;
+ import net.sourceforge.bprocessor.parser.ScriptParser;
import org.apache.log4j.Logger;
***************
*** 227,231 ****
}
}
!
/**
* Stop editing the value by replacing the editor with an label,
--- 237,248 ----
}
}
!
! /**
! * Builtin function
! */
! private abstract class Builtin implements Invokable {
!
! }
!
/**
* Stop editing the value by replacing the editor with an label,
***************
*** 239,243 ****
attribute.setValue(editor.getText());
} else if (val instanceof Double) {
! attribute.setValue(Double.valueOf(editor.getText()) / 1000);
}
component.remove(editor);
--- 256,295 ----
attribute.setValue(editor.getText());
} else if (val instanceof Double) {
! HashMap<String, Object> globals = Project.getInstance().getGlobals().environment();
! globals.put("echo", new Builtin() {
! public void evaluate(Environment env, Stack<Object> stack) {
! stack.push(env.get(0));
! }
! });
! String script = Project.getInstance().getScript();
! try {
! Reader input = new StringReader(script);
! ScriptLexer lexer = new ScriptLexer(input);
! ScriptParser parser = new ScriptParser(lexer);
! parser.script(globals);
! try {
! Environment global = new Environment(globals, null);
! Environment env = new Environment(global, new HashMap(), new LinkedList());
! input = new StringReader("echo (" + editor.getText() + ")");
! lexer = new ScriptLexer(input);
! parser = new ScriptParser(lexer);
! Function function = new Function();
! parser.statement(function);
! Stack stack = new Stack();
! function.evaluate(env, stack);
! Object o = stack.pop();
! if (o instanceof Double) {
! attribute.setValue((Double)o / 1000);
! } else {
! attribute.setValue(0);
! }
! } catch (Exception error) {
! log.error(error);
! error.printStackTrace();
! }
! } catch (Exception error) {
! log.error(error);
! }
! //attribute.setValue(Double.valueOf(editor.getText()) / 1000);
}
component.remove(editor);
|