レスポンダヘのイベント配信規則はそれぞれのレスポンダのトレーサに設定します。
つまり、トレーサは親レスポンダから子レスポンダにどのようにイベントが配信されるかを制御します。
たとえば、SFEVT_KEY イベントは順にフォーカスを持つレスポンダを辿ること、SFEVT_RESUME イベントはすべてのレスポンダに通知されることをトレーサに設定します。
トレーサは親レスポンダから子レスポンダに継承されます。
トレーサに設定されるイベント配信規則の多くは、
標準トレーサとしてデフォルトで SFRApplication クラスに登録されています。
また、メニューやコントロールに関係するイベントの配信規則は、
標準トレーサとしてデフォルトでそれぞれ SFRMenu または SFRControl クラスに登録されています。
デフォルトで設定された標準トレーサの内容は、新しいイベント配信規則を登録するだけで変更可能です。
|
注意 |
親レスポンダから継承したトレーサは子レスポンダでオーバーライドできます。 |
SophiaFramework UNIVERSE には、「標準トレーサ」としてデフォルトで以下のイベント配信規則がトレーサに設定されています。
|
注意 |
通常、標準トレーサの設定で問題なくアプリを開発できます。特に、トレーサの設定を変更する必要はありません。 |
■ トレーサの配信規則
- イベントタイプと第 1 パラメータ : BREW イベントと同じ
- トレース順序 : 子階層へイベントを通知する規則
- 強制通知 : イベントを処理した後でイベントを子レスポンダへ通知するかどうかのフラグ
- 状態フィルタ : イベントを受け取れる状態
表 10.22. SophiaFramework UNIVERSE 標準トレーサの設定
|
トレーサの要素 |
1 : |
イベントの範囲:SFEVT_APPLICATION_CLASS_BEGIN から SFEVT_APPLICATION_CLASS_END |
トレース順序:なし |
強制通知:なし |
状態フィルタ:すべての状態 |
|
2 : |
イベントの範囲:SFEVT_APP_SUSPEND |
トレース順序:前面から背面へ |
強制通知:あり |
状態フィルタ:すべての状態 |
|
3 : |
イベントの範囲:SFEVT_APP_RESUME |
トレース順序:前面から背面へ |
強制通知:あり |
状態フィルタ:すべての状態 |
|
4 : |
イベントの範囲:SFEVT_KEY_CLASS_BEGIN から SFEVT_KEY_CLASS_END |
トレース順序:フォーカス |
強制通知:なし |
状態フィルタ:可視・応答可能・フォーカス・ターゲッティングがすべて設定されている状態 |
|
5 : |
イベントの範囲:SFEVT_CONTROL_CLASS_BEGIN から SFEVT_CONTROL_CLASS_END |
トレース順序:フォーカス |
強制通知:なし |
状態フィルタ:可視・応答可能・フォーカス・ターゲッティングがすべて設定されている状態 |
|
6 : |
イベントの範囲:SFEVT_DIALOG_CLASS_BEGIN から SFEVT_DIALOG_CLASS_END |
トレース順序:フォーカス |
強制通知:なし |
状態フィルタ:可視・応答可能・フォーカス・ターゲッティングがすべて設定されている状態 |
|
7 : |
イベントの範囲:SFEVT_SHELL_CLASS_BEGIN から SFEVT_SHELL_CLASS_END |
トレース順序:なし |
強制通知:あり |
状態フィルタ:すべての状態 |
|
8 : |
イベントの範囲:SFEVT_DEVICE_CLASS_BEGIN から SFEVT_DEVICE_CLASS_END |
トレース順序:なし |
強制通知:あり |
状態フィルタ:すべての状態 |
|
9 : |
イベントの範囲:SFEVT_CLIPBOARD_CLASS_BEGIN から SFEVT_CLIPBOARD_CLASS_END |
トレース順序:なし |
強制通知:あり |
状態フィルタ:すべての状態 |
|
10 : |
イベントの範囲:SREVT_RESPONDER_RENDER |
トレース順序:なし |
強制通知:あり |
状態フィルタ:可視状態 |
|
11.1 : |
イベントの範囲:SREVT_RESPONDER_TERMINATE |
トレース順序:なし |
強制通知:なし |
状態フィルタ:すべての状態 |
|
11.2 : |
イベントの範囲:SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_TRY |
トレース順序:前面から背面へ |
強制通知:あり |
状態フィルタ:すべての状態 |
|
12 : |
イベントの範囲:SREVT_MENU |
トレース順序:なし |
強制通知:なし |
状態フィルタ:すべての状態 |
|
13 : |
イベントの範囲:SREVT_DIALOG |
トレース順序:なし |
強制通知:なし |
状態フィルタ:すべての状態 |
|
14 : |
イベントの範囲:SREVT_CONTROL |
トレース順序:なし |
強制通知:なし |
状態フィルタ:すべての状態 |
|
|
注意 |
SFEVT_KEY は、通常の用途ではどれか1つのレスポンダがイベントを処理した場合は通知を続ける必要は無いため強制通知フラグは設定されていません。
SFEVT_RESUME などはすべてのレスポンダにイベントの通知する必要があるので、強制通知フラグが設定されています。
|
イベント配信規則をトレーサに追加登録することによって、SophiaFramework UNIVERSE 標準トレーサをカスタマイズできます。
RegisterTracer 関数でイベント配信規則をトレーサに登録し、
UnregisterTracer 関数でトレーサに登録されているイベント配信規則を破棄します。
例 10.83. SREVT_CONTROL イベントを可視オブジェクトに、子階層への通知は前面から背面で強制通知する規則の登録
SFRResponderPtr responder;
SFCError error;
error = responder->RegisterTracer(SREVT_CONTROL,
STATUS_VISIBLE | TRACER_PROVIDE,
TRACER_FORWARD);
例 10.84. SFEVT_KEY から SFEVT_KEY_HELD までのイベントを、応答可能な可視オブジェクト、子階層への通知なし、強制通知なしで通知する規則の登録
SFRResponderPtr responder;
SFCError error;
error = responder->RegisterTracer(SFEVT_KEY,
SFEVT_KEY_HELD,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_NONE);
トレーサに登録された、ひとつのイベントに対する 2 つ以上のイベント配信規則は最後に登録されたものが有効となります。
|
注意 |
以下の 2 つのイベント配信規則のトレーサへの登録内容は異なります。 |
例 10.85. イベント配信規則のトレーサへの登録 1
SFRResponderPtr responder;
responder->RegisterTracer(SFEVT_KEY,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_NONE);
responder->RegisterTracer(SFEVT_KEY,
SFEVT_KEY_RELEASE,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_NONE);
responder->RegisterTracer(SFEVT_KEY,
SFEVT_KEY_RELEASE,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_FOCUS);
例 10.86. イベント配信規則のトレーサへの登録 2
SFRResponderPtr responder;
responder->RegisterTracer(SFEVT_KEY,
SFEVT_KEY_RELEASE,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_NONE);
responder->RegisterTracer(SFEVT_KEY,
SFEVT_KEY_RELEASE,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_FOCUS);
responder->RegisterTracer(SFEVT_KEY,
STATUS_VISIBLE | STATUS_ENABLE,
TRACER_NONE);