From 9d69dec685c5385a130c2850bbe86ee70dd83ccf Mon Sep 17 00:00:00 2001 From: megacz Date: Fri, 30 Jan 2004 06:50:08 +0000 Subject: [PATCH] 2002/08/16 23:40:42 darcs-hash:20040130065008-2ba56-73f2de8cbec2938de3611b9ff2bb01d38d6a2f98.gz --- src/org/xwt/SpecialBoxProperty.java | 41 +++++++++++++++++++++++++++++++++++ src/org/xwt/XWT.java | 4 ++-- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/org/xwt/SpecialBoxProperty.java b/src/org/xwt/SpecialBoxProperty.java index ea3060a..6302f49 100644 --- a/src/org/xwt/SpecialBoxProperty.java +++ b/src/org/xwt/SpecialBoxProperty.java @@ -657,6 +657,11 @@ class SpecialBoxProperty { return get(b.redirect); } }); + + specialBoxProperties.put("apply", new SpecialBoxProperty() { + public void put(Box b, Object value) { } + public Object get(Box b) { return new Apply(b); } + }); } @@ -692,6 +697,42 @@ class SpecialBoxProperty { catch (NumberFormatException e) { return 0; } } + /** helper that converts a String to a short according to JavaScript coercion rules */ + private static class Apply extends JSObject.JSFunction { + + Box b; + public Apply(Box b) { this.b = b; } + + public Object call(Context cx, Scriptable thisObj, Scriptable ctorObj, Object[] args) throws JavaScriptException { + + // apply a template + if (args[0] instanceof String) { + String templatename = (String)args[0]; + Template t = Template.getTemplate(templatename, null); + if (t == null) { + if (Log.on) Log.log(this, "template " + templatename + " not found at " + + Context.enter().interpreterSourceFile + ":" + Context.enter().interpreterLine); + } else { + if (!ThreadMessage.suspendThread()) try { + Function callback = args.length < 2 ? null : (Function)args[1]; + t.apply(b, null, null, callback, 0, t.numUnits()); + } finally { + ThreadMessage.resumeThread(); + } + } + + // apply a list of properties + } else if (args[0] instanceof Scriptable && !(args[0] instanceof Box)) { + // FIXME: need to ensure that this is putGlobally(), but still run traps... + Scriptable s = (Scriptable)args[0]; + Object[] keys = s.getIds(); + for(int j=0; j 0 && args[0] != null && !args[0].equals("box") && !(Thread.currentThread() instanceof ThreadMessage)) - if (Log.on) Log.log(XWT.class, "DEPRECATED: you should not call xwt.newBox() from the foreground thread at " + + if (args.length > 0) + if (Log.on) Log.log(XWT.class, "DEPRECATED: xwt.newBox() with multiple arguments is deprecated; use xwt.newBox().apply() " + Context.enter().interpreterSourceFile + ":" + Context.enter().interpreterLine); Function callback = null; -- 1.7.10.4