// ------------ local variables -------------------------------------------- //\r
// ------------------------------------------------------------------------- //\r
\r
-var /** @const */\r
+var \r
X_Callback_LIVE_LIST = [],\r
- /** @const */\r
+\r
X_Callback_POOL_LIST = [],\r
- /** @const */\r
+\r
X_Closure_COMMAND_BACK = X_Callback_LIVE_LIST,\r
- /** @const */\r
+\r
X_Closure_COMMAND_DROP = X_Callback_POOL_LIST,\r
\r
/** @const */\r
X_Callback_HANDLEEVENT = 2,\r
/** @const */\r
X_Callback_FUNC_ONLY = 3,\r
+ /** @const */\r
+ X_Callback_THIS_FUNCNAME = 4,\r
\r
/** @const */\r
X_Callback_NONE = 0,\r
/** @const */\r
X_Callback_PREVENT_DEFAULT = 8, // 結果動作のキャンセル,\r
/** @const */\r
- X_Callback_MONOPOLY = 16, // move event を独占する\r
- \r
X_Callback_CAPTURE_POINTER = 16,\r
+ /** @const */\r
X_Callback_RELEASE_POINTER = 32,\r
\r
/** @const */\r
X_Callback_SYS_CANCEL = 64 | 4 | 2;\r
\r
+\r
+\r
/*\r
* handleEvent という関数のメンバーを持つオブジェクト\r
* @typedef {{ handleEvent : function }}\r
*/\r
func : undefined,\r
/**\r
+ * コールバック名。コールバック作成時に関数が無い、関数が入れ替わっていても動作する。\r
+ * @type {string|undefined} \r
+ */\r
+ name : undefined,\r
+ /**\r
* コールバックの this コンテキスト。 \r
* @type {listener|object|undefined}\r
*/\r
/**\r
* X.Timer と X.EventDispatcher からのコールバックの返り値を定義。\r
* @namespace X.Callback\r
- * @alias X.Callback\r
*/\r
X[ 'Callback' ] = {\r
/**\r
* このコールバックでは返り値による操作は無い。\r
+ * @alias X.Callback.NONE\r
*/\r
'NONE' : X_Callback_NONE,\r
/**\r
* X.Timer, X.EventDispatcher のコールバックでタイマーやイベントリスナの解除に使用。\r
+ * @alias X.Callback.UN_LISTEN\r
*/\r
'UN_LISTEN' : X_Callback_UN_LISTEN,\r
/**\r
* 上位階層へのイベント伝播のキャンセル。DOM イベントのコールバックの戻り値に指定すると e.stopPropagation() が呼ばれる。\r
+ * @alias X.Callback.STOP_PROPAGATION\r
*/\r
'STOP_PROPAGATION' : X_Callback_STOP_PROPAGATION,\r
/**\r
* 以降のイベントのディスパッチを中断する。STOP_PROPAGATION との違いは、次に控えているコールバックもキャンセルされる点。但し system によって追加されたイベントはキャンセルされない。\r
+ * @alias X.Callback.STOP_NOW\r
*/\r
'STOP_NOW' : X_Callback_STOP_NOW,\r
/**\r
* DOM イベントのコールバックの戻り値に指定すると e.preventDefault() が呼ばれる。\r
* またフレームワーク内で定義されたデフォルト動作の回避にも使用される。\r
+ * @alias X.Callback.PREVENT_DEFAULT\r
*/\r
'PREVENT_DEFAULT' : X_Callback_PREVENT_DEFAULT,\r
/**\r
- * X.UI に於いて、ポインターイベントの戻り値に指定すると、以降のポインターベントを独占する。\r
+ * X.UI の uinode でポインターイベントの戻り値に指定すると、以降のポインターベントを独占する。\r
+ * @alias X.Callback.CAPTURE_POINTER\r
*/\r
- 'MONOPOLY' : X_Callback_MONOPOLY,\r
- \r
'CAPTURE_POINTER' : X_Callback_CAPTURE_POINTER,\r
- \r
+ /**\r
+ * X.UI の uinode でポインターイベントの戻り値に指定すると、以降のポインターベントを独占を解除する。\r
+ * @alias X.Callback.RELEASE_POINTER\r
+ */\r
'RELEASE_POINTER' : X_Callback_RELEASE_POINTER\r
};\r
\r
_obj = ret( X_Closure_COMMAND_BACK );\r
\r
_obj.kind = obj.kind;\r
+ _obj.name = obj.name;\r
_obj.func = obj.func;\r
_obj.context = obj.context;\r
_obj.supplement = obj.supplement;\r
function X_Callback_classifyCallbackArgs( arg1, arg2, arg3, alt_context ){\r
var obj;\r
\r
- if( arg1 && X_Type_isFunction( arg2 ) ){\r
+ if( X_Type_isObject( arg1 ) && X_Type_isFunction( arg2 ) ){\r
obj = { context : arg1, func : arg2, kind : X_Callback_THIS_FUNC };\r
} else\r
- if( arg1 && X_Type_isFunction( arg1[ 'handleEvent' ] ) ){\r
- obj = { context : arg1, kind : X_Callback_HANDLEEVENT };\r
- arg3 = arg2;\r
+ if( X_Type_isObject( arg1 ) ){\r
+ if( arg2 && X_Type_isString( arg2 ) ){\r
+ obj = { context : arg1, name : arg2, kind : X_Callback_THIS_FUNCNAME };\r
+ } else {\r
+ obj = { context : arg1, kind : X_Callback_HANDLEEVENT };\r
+ arg3 = arg2; \r
+ };\r
} else\r
if( X_Type_isFunction( arg1 ) ){\r
arg3 = arg2;\r
obj = { func : arg2, kind : X_Callback_FUNC_ONLY };\r
};\r
} else\r
+ if( alt_context && X_Type_isString( arg1 ) ){\r
+ arg3 = arg2;\r
+ obj = { context : alt_context, name : arg1, kind : X_Callback_THIS_FUNCNAME };\r
+ } else\r
if( alt_context ){\r
obj = { context : alt_context, kind : X_Callback_HANDLEEVENT };\r
arg3 = arg1;\r
thisObj = xfunc.context,\r
func = xfunc.func,\r
supp = xfunc.supplement,\r
- temp, ret; \r
+ temp, ret, funcName; \r
\r
if( supp && supp.length ){\r
temp = [];\r
\r
case X_Callback_THIS_FUNC :\r
return args.length === 0 ? func.call( thisObj ) : func.apply( thisObj, args );\r
- \r
+ \r
+ case X_Callback_THIS_FUNCNAME :\r
+ funcName = xfunc.name;\r
case X_Callback_HANDLEEVENT :\r
- temp = thisObj[ 'handleEvent' ];\r
+ funcName = funcName || 'handleEvent';\r
+ temp = thisObj[ funcName ];\r
if( X_Type_isFunction( temp ) ){\r
return args.length === 0 ? thisObj[ 'handleEvent' ]() :\r
args.length === 1 ? thisObj[ 'handleEvent' ]( args[ 0 ] ) : temp.apply( thisObj, args );\r
X_Callback_POOL_LIST[ X_Callback_POOL_LIST.length ] = f;\r
obj = f( X_Closure_COMMAND_BACK );\r
delete obj.kind;\r
+ if( obj.name ) delete obj.name;\r
if( obj.func ) delete obj.func;\r
if( obj.context ) delete obj.context;\r
if( obj.supplement ) delete obj.supplement;\r