Generate DSet add/remove/update signals for AS3 DObjects.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6338 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -47,6 +47,7 @@ import com.threerings.io.Streamable;
|
|||||||
|
|
||||||
import com.threerings.presents.data.InvocationMarshaller;
|
import com.threerings.presents.data.InvocationMarshaller;
|
||||||
import com.threerings.presents.dobj.DObject;
|
import com.threerings.presents.dobj.DObject;
|
||||||
|
import com.threerings.presents.dobj.DSet;
|
||||||
|
|
||||||
public class GenActionScriptStreamableTask extends GenTask
|
public class GenActionScriptStreamableTask extends GenTask
|
||||||
{
|
{
|
||||||
@@ -95,6 +96,7 @@ public class GenActionScriptStreamableTask extends GenTask
|
|||||||
for (Field f : reqs.streamedFields) {
|
for (Field f : reqs.streamedFields) {
|
||||||
fields.add(new ASField(f, imports));
|
fields.add(new ASField(f, imports));
|
||||||
}
|
}
|
||||||
|
|
||||||
String output = mergeTemplate("com/threerings/presents/tools/streamable_as.tmpl",
|
String output = mergeTemplate("com/threerings/presents/tools/streamable_as.tmpl",
|
||||||
"header", _header,
|
"header", _header,
|
||||||
"package", sclass.getPackage().getName(),
|
"package", sclass.getPackage().getName(),
|
||||||
@@ -126,6 +128,7 @@ public class GenActionScriptStreamableTask extends GenTask
|
|||||||
public final String reader;
|
public final String reader;
|
||||||
public final String writer;
|
public final String writer;
|
||||||
public final String dobjectField;
|
public final String dobjectField;
|
||||||
|
public boolean dset;
|
||||||
|
|
||||||
public ASField (Field f, Set<String> imports)
|
public ASField (Field f, Set<String> imports)
|
||||||
{
|
{
|
||||||
@@ -140,6 +143,9 @@ public class GenActionScriptStreamableTask extends GenTask
|
|||||||
imports.add("com.threerings.io.streamers.MapStreamer");
|
imports.add("com.threerings.io.streamers.MapStreamer");
|
||||||
} else if (Set.class.isAssignableFrom(f.getType())) {
|
} else if (Set.class.isAssignableFrom(f.getType())) {
|
||||||
imports.add("com.threerings.io.streamers.SetStreamer");
|
imports.add("com.threerings.io.streamers.SetStreamer");
|
||||||
|
} else if (DSet.class.isAssignableFrom(f.getType())) {
|
||||||
|
dset = true;
|
||||||
|
imports.add("com.threerings.presents.dobj.DSet_Entry"); // Used for signals
|
||||||
}
|
}
|
||||||
reader = ActionScriptUtils.toReadObject(f.getType());
|
reader = ActionScriptUtils.toReadObject(f.getType());
|
||||||
writer = ActionScriptUtils.toWriteObject(f.getType(), name);
|
writer = ActionScriptUtils.toWriteObject(f.getType(), name);
|
||||||
|
|||||||
@@ -23,6 +23,11 @@ public class {{classname}} {{^extends.isEmpty}}extends {{extends}}
|
|||||||
{{#dobject}}
|
{{#dobject}}
|
||||||
{{#fields}}
|
{{#fields}}
|
||||||
public var {{name}}Changed :Signal = new Signal({{simpleType}}, {{simpleType}});
|
public var {{name}}Changed :Signal = new Signal({{simpleType}}, {{simpleType}});
|
||||||
|
{{#dset}}
|
||||||
|
public var {{name}}Added :Signal = new Signal(DSet_Entry);
|
||||||
|
public var {{name}}Removed :Signal = new Signal(DSet_Entry);
|
||||||
|
public var {{name}}Updated :Signal = new Signal(DSet_Entry, DSet_Entry);
|
||||||
|
{{/dset}}
|
||||||
{{/fields}}
|
{{/fields}}
|
||||||
|
|
||||||
{{#fields}}
|
{{#fields}}
|
||||||
@@ -71,11 +76,15 @@ import org.osflash.signals.Signal;
|
|||||||
|
|
||||||
import com.threerings.presents.dobj.AttributeChangedEvent;
|
import com.threerings.presents.dobj.AttributeChangedEvent;
|
||||||
import com.threerings.presents.dobj.AttributeChangeListener;
|
import com.threerings.presents.dobj.AttributeChangeListener;
|
||||||
|
import com.threerings.presents.dobj.EntryAddedEvent;
|
||||||
|
import com.threerings.presents.dobj.EntryRemovedEvent;
|
||||||
|
import com.threerings.presents.dobj.EntryUpdatedEvent;
|
||||||
|
import com.threerings.presents.dobj.SetListener;
|
||||||
|
|
||||||
import {{package}}.{{classname}};
|
import {{package}}.{{classname}};
|
||||||
|
|
||||||
class Signaller
|
class Signaller
|
||||||
implements AttributeChangeListener
|
implements AttributeChangeListener, SetListener
|
||||||
{
|
{
|
||||||
public function Signaller (obj :{{classname}})
|
public function Signaller (obj :{{classname}})
|
||||||
{
|
{
|
||||||
@@ -98,6 +107,51 @@ class Signaller
|
|||||||
signal.dispatch(event.getValue(), event.getOldValue());
|
signal.dispatch(event.getValue(), event.getOldValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function entryAdded (event :EntryAddedEvent) :void
|
||||||
|
{
|
||||||
|
var signal :Signal;
|
||||||
|
switch (event.getName()) {
|
||||||
|
{{#fields}}{{#dset}}
|
||||||
|
case "{{name}}":
|
||||||
|
signal = _obj.{{name}}Added;
|
||||||
|
break;
|
||||||
|
{{/dset}}{{/fields}}
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
signal.dispatch(event.getEntry());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function entryRemoved (event :EntryRemovedEvent) :void
|
||||||
|
{
|
||||||
|
var signal :Signal;
|
||||||
|
switch (event.getName()) {
|
||||||
|
{{#fields}}{{#dset}}
|
||||||
|
case "{{name}}":
|
||||||
|
signal = _obj.{{name}}Removed;
|
||||||
|
break;
|
||||||
|
{{/dset}}{{/fields}}
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
signal.dispatch(event.getOldEntry());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function entryUpdated (event :EntryUpdatedEvent) :void
|
||||||
|
{
|
||||||
|
var signal :Signal;
|
||||||
|
switch (event.getName()) {
|
||||||
|
{{#fields}}{{#dset}}
|
||||||
|
case "{{name}}":
|
||||||
|
signal = _obj.{{name}}Updated;
|
||||||
|
break;
|
||||||
|
{{/dset}}{{/fields}}
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
signal.dispatch(event.getEntry(), event.getOldEntry());
|
||||||
|
}
|
||||||
|
|
||||||
protected var _obj :{{classname}};
|
protected var _obj :{{classname}};
|
||||||
}
|
}
|
||||||
// GENERATED SIGNALLER END
|
// GENERATED SIGNALLER END
|
||||||
|
|||||||
Reference in New Issue
Block a user