root/as3/Utils/src/org/libspark/utils/EventUtil.as

リビジョン 804, 10.6 kB (コミッタ: michi, コミット時期: 2 年 前)

asdoc追加

Line 
1 /*
2  * Copyright(c) 2006-2007 the Spark project.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13  * either express or implied. See the License for the specific language
14  * governing permissions and limitations under the License.
15  */
16
17
18 package org.libspark.utils
19 {
20 import flash.display.DisplayObject;
21 import flash.display.Shape;
22 import flash.events.Event;
23 import flash.events.EventDispatcher;
24 import flash.events.TimerEvent;
25 import flash.utils.Timer;
26
27
28 /**
29  * イベント系のユーティリティクラスです
30  */
31 public class EventUtil
32 {
33    
34         /**
35          * EventUtil クラスのクラスメソッドを使用した場合の useCapture のデフォルト値になります.
36          * リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。
37          */
38         public static var useCapture:Boolean = false;
39        
40         /**
41          * EventUtil クラスのクラスメソッドを使用した場合の priority のデフォルト値になります.
42          * イベントリスナーの優先度レベルです。
43          */
44         public static var priority:int = 0;
45        
46         /**
47          * EventUtil クラスのクラスメソッドを使用した場合の useWeakReference のデフォルト値になります.
48          * リスナーへの参照が強参照と弱参照のいずれであるかを判断します。
49          */
50         public static var useWeakReference:Boolean = false;
51        
52        
53        
54         /**
55          * 1度だけ登録したイベントリスナーが実行されます。実行後は登録は解除されます。
56          *
57          * @param       target イベントリスナーオブジェクトを登録する EventDispatcher オブジェクトです。
58          * @param       type イベントのタイプです。
59          * @param       listener イベントを処理するリスナー関数です。
60          * @param       useCapture リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。
61          * @param       priority イベントリスナーの優先度レベルです。
62          * @param       useWeakReference リスナーへの参照が強参照と弱参照のいずれであるかを判断します。
63          * @author  michi at seyself.com
64          */
65     public static function addOneTimeEventListener
66                 (target:EventDispatcher, type:String, listener:Function,
67         useCapture:Boolean = false, priority:int = 0,
68                 useWeakReference:Boolean = false):void
69     {
70                 if (arguments.length < 4) useCapture = EventUtil.useCapture;
71                 if (arguments.length < 5) priority = EventUtil.priority;
72                 if (arguments.length < 6) useWeakReference = EventUtil.useWeakReference;
73         target.addEventListener(type,
74             function( event:Event ):void {
75                 listener.call(target, event);
76                 target.removeEventListener( type, arguments.callee );
77             }
78             , useCapture, priority, useWeakReference);
79     }
80    
81         /**
82          * 指定時間の経過後にイベントリスナーが実行されます。
83          * 登録したイベントリスナーはイベントの通知を受けるたびに遅延実行します。
84          *
85          * @param       target イベントリスナーオブジェクトを登録する EventDispatcher オブジェクトです。
86          * @param       type イベントのタイプです。
87          * @param       listener イベントを処理するリスナー関数です。
88          * @param       delay 待機時間(ミリ秒単位)
89          * @param       useCapture リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。
90          * @param       priority イベントリスナーの優先度レベルです。
91          * @param       useWeakReference リスナーへの参照が強参照と弱参照のいずれであるかを判断します。
92          * @author  michi at seyself.com
93          */
94     public static function addDelayEventListener
95                 (target:EventDispatcher, type:String, listener:Function, delay:uint=0,
96         useCapture:Boolean = false, priority:int = 0,
97                 useWeakReference:Boolean = false):void
98     {
99         if (arguments.length < 5) useCapture = EventUtil.useCapture;
100                 if (arguments.length < 6) priority = EventUtil.priority;
101                 if (arguments.length < 7) useWeakReference = EventUtil.useWeakReference;
102         var timer:Timer = new Timer(delay, 1);
103         target.addEventListener(type,
104             function( event:Event ):void {
105                 timer.addEventListener( "timer",
106                     function(e:TimerEvent):void {
107                         listener.call(target, event);
108                         timer.removeEventListener( "timer", arguments.callee );
109                                                 timer.reset();
110                     }
111                 );
112                 timer.start();
113             },
114             useCapture, priority, useWeakReference);
115     }
116    
117     /**
118      * タイムラインが次のフレームに移った時にイベントリスナーが実行されます。
119          *
120          * @param       target イベントリスナーオブジェクトを登録する EventDispatcher オブジェクトです。
121          * @param       type イベントのタイプです。
122          * @param       listener イベントを処理するリスナー関数です。
123          * @param       useCapture リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。
124          * @param       priority イベントリスナーの優先度レベルです。
125          * @param       useWeakReference リスナーへの参照が強参照と弱参照のいずれであるかを判断します。
126          * @author  michi at seyself.com
127      */
128     public static function addNextFrameEventListener
129                 (target:EventDispatcher, type:String, listener:Function,
130         useCapture:Boolean = false, priority:int = 0,
131                 useWeakReference:Boolean = false):void
132     {
133         if (arguments.length < 4) useCapture = EventUtil.useCapture;
134                 if (arguments.length < 5) priority = EventUtil.priority;
135                 if (arguments.length < 6) useWeakReference = EventUtil.useWeakReference;
136         var dummy:Shape = new Shape();
137         target.addEventListener(type,
138             function( event:Event ):void {
139                 dummy.addEventListener( "enterFrame",
140                     function(e:Event):void {
141                         listener.call(target, event);
142                         dummy.removeEventListener( "enterFrame", arguments.callee );
143                     }
144                 );
145             },
146             useCapture, priority, useWeakReference);
147     }
148    
149         /**
150          * 任意の引数を設定したイベントリスナーを登録します。
151          *
152          * @param       target イベントリスナーオブジェクトを登録する EventDispatcher オブジェクトです。
153          * @param       type イベントのタイプです。
154          * @param       listener イベントを処理するリスナー関数です。
155          * @param       args 引数を指定した配列
156          * @param       useCapture リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。
157          * @param       priority イベントリスナーの優先度レベルです。
158          * @param       useWeakReference リスナーへの参照が強参照と弱参照のいずれであるかを判断します。
159          * @author  michi at seyself.com
160          */
161     public static function addCustomArgumentsEventListener
162                 (target:EventDispatcher, type:String, listener:Function, args:Array=null,
163         useCapture:Boolean = false, priority:int = 0,
164                 useWeakReference:Boolean = false):void
165     {
166         if (arguments.length < 5) useCapture = EventUtil.useCapture;
167                 if (arguments.length < 6) priority = EventUtil.priority;
168                 if (arguments.length < 7) useWeakReference = EventUtil.useWeakReference;
169         target.addEventListener(type,
170             function( event:Event ):void {
171                 listener.apply(target, args);
172             }
173             , useCapture, priority, useWeakReference);
174     }
175    
176         /**
177          * DisplayObject オブジェクトがステージ上に配置されている時だけイベントリスナーが登録されます.
178          * 指定の DisplayObject オブジェクトがステージ上から削除されると、イベントリスナーは解除されますが、再度ステージ上に配置されたときは再設定されます。
179          *
180          * @param       eventTarget イベントリスナーオブジェクトを登録する EventDispatcher オブジェクトです。
181          * @param       type イベントのタイプです。
182          * @param       listener イベントを処理するリスナー関数です。
183          * @param       displayTarget イベントの登録・解除のタイミングを決定する DisplayObject インスタンス。
184          * @param       useCapture リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。
185          * @param       priority イベントリスナーの優先度レベルです。
186          * @param       useWeakReference リスナーへの参照が強参照と弱参照のいずれであるかを判断します。
187          * @author  michi at seyself.com
188          */
189         public static function addOnStageEventListener
190                 (eventTarget:EventDispatcher, type:String, listener:Function,
191                 displayTarget:DisplayObject, useCapture:Boolean = false, priority:int = 0,
192                 useWeakReference:Boolean = false ):void
193         {
194                 if (arguments.length < 5) useCapture = EventUtil.useCapture;
195                 if (arguments.length < 6) priority = EventUtil.priority;
196                 if (arguments.length < 7) useWeakReference = EventUtil.useWeakReference;
197         if (displayTarget.stage && arguments.length<8 ) {
198                         eventTarget.addEventListener(
199                                 type, listener, useCapture, priority, useWeakReference);
200                 } else {
201                         displayTarget.addEventListener("addedToStage",
202                                 function(event:Event):void
203                                 {
204                                         displayTarget.removeEventListener("addedToStage", arguments.callee);
205                                         eventTarget.addEventListener(
206                                                 type, listener, useCapture, priority, useWeakReference);
207                                         displayTarget.addEventListener("removedFromStage",
208                                                 function(event:Event):void
209                                                 {
210                                                         eventTarget.removeEventListener(type, listener, useCapture);
211                                                         addOnStageEventListener.apply( eventTarget,
212                                                                 [eventTarget, type, listener, displayTarget,
213                                                                 useCapture, priority, useWeakReference, true] );
214                                                 }
215                                         );
216                                 }
217                         );
218                        
219                 }
220                        
221         }
222        
223 }
224
225 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。