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:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user