チェンジセット 347

差分発生行の前後
無視リスト:
コミット日時:
2008/04/27 17:40:13 (4 年前)
コミッタ:
Mk-10
ログメッセージ:

SequenceCommand?SerialCommand? に変更
SendAndLoadCommand? を ASyncCommand に変更
FuseCommand?, TraceCommand?, XMLLoadCommand の追加

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as2/Commands/src/jp/cellfusion/commands/ASyncCommand.as

    r323 r347  
    2323 * @author Makoto 
    2424 */ 
    25 class jp.cellfusion.commands.SendAndLoadCommand extends Command implements ICommand  
     25class jp.cellfusion.commands.ASyncCommand extends Command implements ICommand  
    2626{ 
    27         private var _url:String, _send:LoadVars, _load:LoadVars; 
    28         private var _thisObj:Object, _funcRef:Function, _args:Array; 
     27        private var _url:String; 
     28        private var _sendLV:LoadVars; 
     29        private var _receiveLV:LoadVars; 
     30        private var _method:String; 
     31        private var _params:Object; 
     32         
     33        public function result():LoadVars { return _receiveLV; } 
    2934 
    3035        /** 
    3136         *  
    3237         */ 
    33         function SendAndLoadCommand(url:String, send:LoadVars, load:LoadVars, thisObj:Object, funcRef:Function, args:Array)  
     38        function ASyncCommand(url:String, params:Object, method:String)  
    3439        { 
    35                 super(); 
    3640                _url = url; 
    37                 _send = send
    38                 _load = load; 
     41                _params = params
     42                _method = method == null ? "POST" : method; 
    3943                 
    40                 if (thisObj != undefined) { 
    41                         _thisObj = thisObj; 
    42                         _funcRef = funcRef; 
    43                         _args = args; 
    44                 } 
     44                _sendLV = new LoadVars(); 
     45                _receiveLV = new LoadVars(); 
    4546                 
    46                 _load.onLoad = Delegate.create(this, _loadHandler); 
     47                _receiveLV.onLoad = Delegate.create(this, _loadHandler); 
    4748        } 
    4849 
    4950        public function execute():Void 
    5051        { 
    51                 _send.sendAndLoad(_url, _load); 
     52                // パラメーター設定 
     53                for (var idx:String in _params) { 
     54                        _sendLV[idx] = _params[idx]; 
     55                } 
     56                 
     57                _sendLV.sendAndLoad(_url, _receiveLV, _method); 
    5258                 
    5359                dispatchEvent(new CommandEvent(CommandEvent.COMMAND_START, this)); 
     
    6874        } 
    6975 
    70         public function clone():Command 
     76        public function clone():ICommand 
    7177        { 
    72                 return new SendAndLoadCommand(_url, _send, _load, _thisObj, _funcRef, _args); 
     78                return new ASyncCommand(_url, _params, _method); 
    7379        } 
    7480 
    7581        public function toString():String 
    7682        { 
    77                 return "[object SendAndLoadCommand]"; 
     83                return "[object ASyncCommand]"; 
    7884        } 
    7985 
     
    8187        { 
    8288                if (success) { 
    83                         var args:Array = new Array(_load).concat(_args); 
    84                         var rslt = _funcRef.apply(_thisObj, args); 
    85                          
    8689                        dispatchEvent(new CommandEvent(CommandEvent.COMMAND_COMPLETE, this)); 
    8790                } 
  • as2/Commands/src/jp/cellfusion/commands/Command.as

    r323 r347  
    6868                dispatchEvent(new CommandEvent(CommandEvent.COMMAND_COMPLETE, this)); 
    6969        } 
    70         public function clone():Command  
     70        public function clone():ICommand  
    7171        { 
    7272                return new Command(_thisObj, _funcRef, _args); 
  • as2/Commands/src/jp/cellfusion/commands/EnterFrameCommand.as

    r323 r347  
    9393         * クローン 
    9494         */ 
    95         public function clone():Command  
     95        public function clone():ICommand  
    9696        { 
    9797                return new EnterFrameCommand(_thisObj, _funcRef, _args, _delay, _repeatCount); 
  • as2/Commands/src/jp/cellfusion/commands/ICommand.as

    r323 r347  
    1313         *  
    1414         */ 
    15         public function clone():Command; 
     15        public function clone():ICommand; 
    1616         
    1717        /** 
     
    2424         */ 
    2525        public function resume():Void; 
     26         
     27        function addEventListener(event:String, handler:Object):Void; 
     28         
     29        function removeEventListener(event:String, handler:Object):Void; 
    2630} 
  • as2/Commands/src/jp/cellfusion/commands/LoaderCommand.as

    r323 r347  
    3434        /** 
    3535         * 読み込み処理を行うコマンド 
     36         * <pre> 
     37         * var cmd:LoaderCommand = new LoaderCommand("example.swf", main); 
     38         * cmd.execute(); 
     39         *  
     40         * // プログレスバーを表示する場合には addEventListener を使って COMMAND_PROGRESS イベントを監視します 
     41         * var cmd:LoaderCommand = new LoaderCommand("example.swf", main); 
     42         *  
     43         * // AS2 では任意の関数に委譲するには Delegate.create を使って指定します 
     44         * _progressDelegate = Delegate.create(this, progressHandler); 
     45         *  
     46         * // 先ほど作成した _progressDelegate を追加 
     47         * cmd.addEventListener(CommandEvent.COMMAND_PROGRESS, _progressDelegate); 
     48         *  
     49         * cmd.execute(); 
     50         *  
     51         * // progressHandler 
     52         * function progressHandler(e:CommandEvent):Void { 
     53         *   var cmd:LoaderCommand = LoaderCommand(e.target); 
     54         *    
     55         *   var percent:Number = cmd.loaded / cmd.total; 
     56         *   trace("load progress:"+(percent*100)+"%"); 
     57         * } 
     58         * </pre> 
    3659         * @param       url 読み込むURL 
    3760         * @param       path 読み込み先 
     
    82105         * クローン 
    83106         */ 
    84         public function clone():Command  
     107        public function clone():ICommand  
    85108        { 
    86109                return new LoaderCommand(_url, _path); 
  • as2/Commands/src/jp/cellfusion/commands/MacroCommand.as

    r323 r347  
    3131         * <pre> 
    3232         * // MacroCommand を作成後、add で Command を追加する 
    33          * var mq:MacroCommand = new SequenceCommand(); 
    34          * mq.add(new Command(null, trace, ["1秒後"])); 
     33         * var mq:MacroCommand = new MacroCommand(); 
     34         * mq.add(new TraceCommand("1秒後")); 
    3535         * mq.add(new TimerCommand(null, trace, ["1秒後に実行"], 1000, 1)); 
    3636         *  
     
    3939         *  
    4040         * // MacroCommand を作成時に Command を追加する 
    41          * var mq:MacroCommand = new SequenceCommand( 
    42          *   new Command(null, trace, ["1秒後"]), 
     41         * var mq:MacroCommand = new MacroCommand( 
     42         *   new TraceCommand("1秒後"), 
    4343         *   new TimerCommand(null, trace, ["1秒後に実行"], 1000, 1) 
    4444         * ); 
     
    4747         * mq.execute(); 
    4848         * </pre> 
    49          * @param       commands 登録するコマンドの列 
     49         * @param       commands 登録するコマンドの列 
    5050         */ 
    5151        public function MacroCommand()  
     
    7979        public function add(cmd:Command):Void 
    8080        { 
    81                 if (cmd == null) return; 
     81                if (cmd == null) { 
     82                        throw new Error("Command がありません"); 
     83                        return; 
     84                } 
     85                 
    8286                var idx:Number = getItemIndex(_commands, cmd); 
    8387                if (idx == -1) { 
     
    97101        public function remove(cmd:Command):Void 
    98102        { 
    99                 if (cmd == null) return; 
     103                if (cmd == null) { 
     104                        throw new Error("Command がありません"); 
     105                        return; 
     106                } 
     107                 
    100108                var idx:Number = getItemIndex(_commands, cmd); 
    101109                if (idx != -1) { 
     
    143151         *  
    144152         */ 
    145         public function clone():Command  
     153        public function clone():ICommand  
    146154        { 
    147155                return new MacroCommand(_commands); 
     
    160168        private function _commandCompleteHandler(e:CommandEvent)  
    161169        { 
     170                // 終了した Command の数と登録されている Command の数が一致したらイベントを発行する 
    162171                if (++_endCommand == _commands.length) { 
    163172                        dispatchEvent(new CommandEvent(CommandEvent.COMMAND_COMPLETE, this)); 
  • as2/Commands/src/jp/cellfusion/commands/SerialCommand.as

    r323 r347  
    2222 * @author Makoto 
    2323 */ 
    24 class jp.cellfusion.commands.SequenceCommand extends Command implements ICommand 
     24class jp.cellfusion.commands.SerialCommand extends Command implements ICommand 
    2525{        
    2626        private var _commands:Array; 
     
    3030 
    3131        /** 
    32          * 登録したコマンドを順番よく実行します。 
     32         * 登録した複数のコマンドを一つずつ順番に実行します。 
    3333         * <pre> 
    34          * // SequenceCommand を作成後、add で Command を追加する 
    35          * var sq:SequenceCommand = new SequenceCommand(); 
     34         * // SerialCommand を作成後、add で Command を追加する 
     35         * var sq:SerialCommand = new SerialCommand(); 
    3636         * sq.add(new Command(null, trace, ["hoge"])); 
    3737         * sq.add(new TimerCommand(null, trace, ["1秒後に実行"], 1000, 1)); 
     
    4141         * sq.execute(); 
    4242         *  
    43          * // コンストラクタ時に Command を追加する 
    44          * var sq:SequenceCommand = new SequenceCommand( 
    45          *      new Command(null, trace, ["hoge"]), 
     43         * // 作成時に Command を追加する 
     44         * var sq:SerialCommand = new SerialCommand( 
     45         *      new TraceCommand("hoge"), 
    4646         *      new TimerCommand(null, trace, ["1秒後に実行"], 1000, 1), 
    47          *      new Command(null, trace, ["1秒後"]) 
     47         *      [new TraceCommand("同時に"), new TraceCommand("実行(といっても微妙に誤差は生じる)")] 
    4848         * ); 
    4949         *  
     
    5151         * sq.execute(); 
    5252         * </pre> 
    53          * @param      commands Command を入れた配列。順番通りに登録されます。 
    54          */ 
    55         public function SequenceCommand() 
     53         * @param ... Command クラス 
     54         */ 
     55        public function SerialCommand() 
    5656        { 
    5757                _commandProgressDelegate = Delegate.create(this, _commandProgressHandler); 
     
    6565                                break; 
    6666                        case 1: 
    67                                 // 一つの場合でも配列ではない場合があるのでインスタンスを確認する 
    6867                                if (arguments[0] instanceof Array) { 
    6968                                        var arr:Array = arguments[0]; 
     
    8281         * @param       cmd 追加するコマンド 
    8382         */ 
    84         public function add(cmd:Command):Void 
     83        public function add(cmd:Object):Void 
    8584        { 
    8685                var idx:Number = getItemIndex(_commands, cmd); 
    87                 if (idx == -1) { 
    88                         _commands.push(cmd); 
    89 //                      cmd.addEventListener(CommandEvent.COMMAND_PROGRESS, _commandProgressDelegate); 
    90 //                      cmd.addEventListener(CommandEvent.COMMAND_COMPLETE, _commandCompleteDelegate); 
    91                 } 
    92                 else { 
    93                         throw new Error("同じ command が見つかりました。"); 
    94                 } 
     86                if (idx == -1) _commands.push(cmd); 
     87                else throw new Error("同じ command が見つかりました。"); 
    9588        } 
    9689 
     
    10295        { 
    10396                var idx:Number = getItemIndex(_commands, cmd); 
    104                 if (idx != -1) { 
    105                         _commands.splice(idx, 1); 
    106 //                      cmd.removeEventListener(CommandEvent.COMMAND_PROGRESS, _commandProgressDelegate); 
    107 //                      cmd.removeEventListener(CommandEvent.COMMAND_COMPLETE, _commandCompleteDelegate); 
    108                 } 
    109                 else { 
    110                         throw new Error("commandが見つかりませんでした。"); 
    111                 } 
     97                if (idx != -1) _commands.splice(idx, 1); 
     98                else throw new Error("commandが見つかりませんでした。"); 
    11299        } 
    113100 
     
    123110                         
    124111                        _executeNext(); 
    125                 } 
    126                 else { 
     112                } else { 
    127113                        throw new Error("commandが登録されていません。"); 
    128114                } 
     
    151137         *  
    152138         */ 
    153         public function clone():Command  
    154         { 
    155                 return new SequenceCommand(_commands); 
     139        public function clone():ICommand  
     140        { 
     141                var temp:SerialCommand = new SerialCommand(); 
     142                 
     143                var i:Number = 0; 
     144                var cmd:ICommand; 
     145                while (cmd = _commands[i++]) { 
     146                        temp.add(cmd.clone()); 
     147                } 
     148                 
     149                return new temp 
    156150        } 
    157151 
    158152        public function toString():String 
    159153        { 
    160                 return "[object SequenceCommand]"; 
     154                return "[object SerialCommand]"; 
    161155        } 
    162156 
     
    174168        } 
    175169 
    176         private function _executeNext()  
    177         { 
    178                 var command = _commands[_currentIndex++]; 
     170        /** 
     171         * 次のコマンドを実行する 
     172         */ 
     173        private function _executeNext():Void 
     174        { 
     175                var command:ICommand = _commands[_currentIndex++]; 
    179176                if (command) { 
    180177                        command.addEventListener(CommandEvent.COMMAND_PROGRESS, _commandProgressDelegate); 
     
    185182                } 
    186183        } 
    187  
    188         private function _commandProgressHandler(e:CommandEvent)  
    189         { 
    190                 //              dispatchEvent({type:COMMAND_PROGRESS, current:_currentIndex, length:_commands.length}); 
    191                  
    192                 //              eventObj.current = _currentIndex; 
    193                 //              eventObj.length = _commands.length; 
    194                 //              dispatchEvent(eventObj); 
     184         
     185        /** 
     186         * コマンドを実行したときに呼び出される 
     187         */ 
     188        private function _commandProgressHandler(e:CommandEvent):Void 
     189        { 
    195190                dispatchEvent(new CommandEvent(CommandEvent.COMMAND_PROGRESS, this)); 
    196191        } 
    197  
    198         private function _commandCompleteHandler(e:CommandEvent)  
    199         { 
    200                 var command:Command = e.target; 
     192         
     193        /** 
     194         * コマンドを実行し終わると呼び出される 
     195         */ 
     196        private function _commandCompleteHandler(e:CommandEvent):Void 
     197        { 
     198                var command:ICommand = e.target; 
    201199                command.removeEventListener(CommandEvent.COMMAND_PROGRESS, _commandProgressDelegate); 
    202200                command.removeEventListener(CommandEvent.COMMAND_COMPLETE, _commandCompleteDelegate); 
  • as2/Commands/src/jp/cellfusion/commands/TimerCommand.as

    r323 r347  
    170170         *  
    171171         */ 
    172         public function clone():Command 
     172        public function clone():ICommand 
    173173        { 
    174174                return new TimerCommand(_thisObj, _funcRef, _args, _delay, _repeatCount); 
  • as2/Commands/src/jp/cellfusion/commands/TweenCommand.as

    r323 r347  
    1313        private var target:Object, prop:Array, func:Function, begin:Array, finish:Array, duration:Number, useSeconds:Boolean; 
    1414        private var _tweens:Array; 
    15  
    16         // 参照渡しの場合はどうするべきか? 
     15         
     16        /** 
     17         * 標準搭載の Tween クラスを使って動きをつけます 
     18         */ 
    1719        public function TweenCommand(target:Object, prop:Array, func:Function, begin:Array, finish:Array, duration:Number, useSeconds:Boolean) 
    1820        { 
     
    6163        } 
    6264 
    63         public function clone():Command 
     65        public function clone():ICommand 
    6466        { 
    6567                return new TweenCommand(target, prop, func, begin, finish, duration, useSeconds);