It's just so handy, build-in the ability to specify a callback directly

instead of a command to CommandEvent. Weirdly, a CommandEvent will never
be generated with the callback way of doing things, but now CommandMenu and
CommandButton will both support the callback syntax.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4629 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Ray Greenwell
2007-03-16 21:26:53 +00:00
parent 94cdf6f2dc
commit 509e70548e
+28 -8
View File
@@ -35,16 +35,36 @@ public class CommandEvent extends Event
* Use this method to dispatch CommandEvents.
*/
public static function dispatch (
disp :IEventDispatcher, cmd :String, arg :Object = null) :void
disp :IEventDispatcher, cmdOrFn :Object, arg :Object = null) :void
{
// Create the event
var event :CommandEvent = create(cmd, arg);
if (cmdOrFn is Function) {
var fn :Function = (cmdOrFn as Function);
var args :Array = (arg as Array);
if (args == null && arg != null) {
args = [ arg ];
}
try {
fn.apply(null, args);
} catch (err :Error) {
var log :Log = Log.getLog(CommandEvent);
log.warning("Unable to call command callback, stack trace follows.");
log.logStackTrace(err);
}
// Dispatch it. A return value of true means that the event was
// never cancelled, so we complain.
if (disp == null || disp.dispatchEvent(event)) {
Log.getLog(CommandEvent).warning("Unhandled controller command " +
"[cmd=" + cmd + ", arg=" + arg + "].");
} else if (cmdOrFn is String) {
var cmd :String = String(cmdOrFn);
// Create the event to dispatch
var event :CommandEvent = create(cmd, arg);
// Dispatch it. A return value of true means that the event was
// never cancelled, so we complain.
if (disp == null || disp.dispatchEvent(event)) {
Log.getLog(CommandEvent).warning("Unhandled controller command " +
"[cmd=" + cmd + ", arg=" + arg + "].");
}
} else {
throw new ArgumentError("Argument 'cmdOrFn' must be a command (String) or a Function");
}
}