From edf6dccdf7fa0d9559c3e0cabf626fb188452236 Mon Sep 17 00:00:00 2001 From: Charlie Groves Date: Thu, 6 Jan 2011 09:08:24 +0000 Subject: [PATCH] Generate OidList signals for actionscript git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6418 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../tools/GenActionScriptStreamableTask.java | 4 ++ .../presents/tools/streamable_as.tmpl | 39 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/threerings/presents/tools/GenActionScriptStreamableTask.java b/src/main/java/com/threerings/presents/tools/GenActionScriptStreamableTask.java index 683c2469d..426c2898d 100644 --- a/src/main/java/com/threerings/presents/tools/GenActionScriptStreamableTask.java +++ b/src/main/java/com/threerings/presents/tools/GenActionScriptStreamableTask.java @@ -46,6 +46,7 @@ import com.threerings.io.Streamable; import com.threerings.presents.data.InvocationMarshaller; import com.threerings.presents.dobj.DObject; import com.threerings.presents.dobj.DSet; +import com.threerings.presents.dobj.OidList; public class GenActionScriptStreamableTask extends GenTask { @@ -165,6 +166,7 @@ public class GenActionScriptStreamableTask extends GenTask public final String dobjectField; public boolean dset; public boolean array; + public boolean oidList; public ASField (Field f, Set imports) { @@ -183,6 +185,8 @@ public class GenActionScriptStreamableTask extends GenTask } else if (DSet.class.isAssignableFrom(f.getType())) { dset = true; imports.add("com.threerings.presents.dobj.DSet_Entry"); // Used for signals + } else if (OidList.class.isAssignableFrom(f.getType())) { + oidList = true; } array = f.getType().isArray(); reader = ActionScriptUtils.toReadObject(f.getType()); diff --git a/src/main/resources/com/threerings/presents/tools/streamable_as.tmpl b/src/main/resources/com/threerings/presents/tools/streamable_as.tmpl index 1dd091566..c17742e4e 100644 --- a/src/main/resources/com/threerings/presents/tools/streamable_as.tmpl +++ b/src/main/resources/com/threerings/presents/tools/streamable_as.tmpl @@ -31,6 +31,10 @@ public class {{classname}} {{^extends.isEmpty}}extends {{extends}} {{#array}} public var {{name}}ElementUpdated :Signal = new Signal(int, Object, Object); {{/array}} +{{#oidList}} + public var {{name}}ObjectAdded :Signal = new Signal(int); + public var {{name}}ObjectRemoved :Signal = new Signal(int); +{{/oidList}} {{/pubFields}} public var messageReceived :Signal = new Signal(String, Array); public var destroyed :Signal = new Signal(); @@ -97,15 +101,18 @@ import com.threerings.presents.dobj.EntryRemovedEvent; import com.threerings.presents.dobj.EntryUpdatedEvent; import com.threerings.presents.dobj.MessageEvent; import com.threerings.presents.dobj.MessageListener; +import com.threerings.presents.dobj.ObjectAddedEvent; import com.threerings.presents.dobj.ObjectDeathListener; import com.threerings.presents.dobj.ObjectDestroyedEvent; +import com.threerings.presents.dobj.ObjectRemovedEvent; +import com.threerings.presents.dobj.OidListListener; import com.threerings.presents.dobj.SetListener; import {{package}}.{{classname}}; class Signaller implements AttributeChangeListener, SetListener, ElementUpdateListener, MessageListener, - ObjectDeathListener + ObjectDeathListener, OidListListener { public function Signaller (obj :{{classname}}) { @@ -198,6 +205,36 @@ class Signaller _obj.destroyed.dispatch(); } + public function objectAdded (event:ObjectAddedEvent) :void + { + var signal :Signal; + switch (event.getName()) { +{{#pubFields}}{{#oidList}} + case "{{name}}": + signal = _obj.{{name}}ObjectAdded; + break; +{{/oidList}}{{/pubFields}} + default: + return; + } + signal.dispatch(event.getOid()); + } + + public function objectRemoved (event :ObjectRemovedEvent) :void + { + var signal :Signal; + switch (event.getName()) { +{{#pubFields}}{{#oidList}} + case "{{name}}": + signal = _obj.{{name}}ObjectRemoved; + break; +{{/oidList}}{{/pubFields}} + default: + return; + } + signal.dispatch(event.getOid()); + } + protected var _obj :{{classname}}; } // GENERATED SIGNALLER END