前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXEventBypass
イベントを優先的に処理するハンドラ(優先的イベントハンドラ)を設定・解除するためのクラスです。
#include <SFXEventBypass.h.hpp>
class SFXEventBypass;
SFMTYPEDEFCLASS(SFXEventBypass)

解説

SFXEventBypass は、 イベントを優先的に処理するコールバックを設定・解除するためのクラスです。

■ 優先的イベントハンドラ

SFY アプリでは、 BREW 環境から受信したイベント(以下、BREW イベント)は最初にレスポンダに配信されます。

[Note] 注意

厳密に言えば、BREW イベントは最初に アプリケーションクラス(SFYApplication を継承するクラス)が内部に保持する ルートに渡されます。 その後、トレーサの配信規則により、 ルートを頂点とするレスポンダツリー上の各レスポンダに配信されます。

アプリが受信した BREW イベントをレスポンダよりも優先して先に渡す関数のことを 優先的イベントハンドラと呼びます。 このイベントハンドラは、SFXEventBypass::Register 関数を使用して BREW アプリ 1 つにつき 1 つまで登録可能です。

優先的イベントハンドラを登録すると、 BREW イベントは『優先的イベントハンドラレスポンダ』の順に配信されるようになります。 SFXEventBypass::Unregister 関数を呼び出してコールバックの登録が解除されるまでの間、 BREW イベントはこの順序で配信されます。

UI を表示する BREW インターフェースでは、 アプリが UI 表示中に受信した BREW イベントは最初に BREW インターフェースの HandleEvent 関数に渡す必要があります。

この処理は、 優先的イベントハンドラ内で、 アプリが受け取った BREW イベントを BREW インターフェースの HandleEvent 関数に渡すことで実現できます。

UI 表示終了時は、 その時に起動されるコールバック内などで SFXEventBypass::Unregister 関数を使用して 優先的イベントハンドラの登録を解除します。 同時に、SFYApplication::Render 関数を呼び出して UI 表示により変更された画面を再描画します。

[Note] BREW インターフェースの UI 終了後の処理について

優先的イベントハンドラの登録を解除すると BREW イベントは最初にレスポンダに配信される設定に戻ります。

UI 処理の結果、再描画後の画面が UI 表示前と異なる場合もあります(例: FEP からテキストを入力したとき)。

[Note] SophiaFramework UNIVERSE の BREW イベントの配信について

優先的イベントハンドラに関わる SophiaFramework UNIVERSE の BREW イベントの配信の詳細については、 SFCApplication クラスの解説にある『イベント処理−全体的な処理の流れ−』を参照してください。

参照

SFXEventBypass::Register | SFXEventBypass::Unregister | SFCApplication::RegisterBypass | SFCApplication::UnregisterBypass | SFCApplication::CallbackSPP | UI を表示する BREW インターフェース | SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース

メンバ

パブリック関数
static
SFCError
Register( SFCApplication::CallbackSPP spp , VoidPtr reference )
優先的イベントハンドラを登録します。
static
Void
Unregister( SFCApplication::CallbackSPP spp , VoidPtr reference )
イベントを優先的に処理するためのハンドラ関数の登録を解除します。

SFXEventBypass::Register
優先的イベントハンドラを登録します。
[ public, static ]
SFCError Register(
    SFCApplication::CallbackSPP spp   // 優先的イベントハンドラ
    VoidPtr reference                 // 優先的イベントハンドラに渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • spp 引数が null とき: SFERR_INVALID_PARAM
  • 優先的イベントハンドラが登録済み、またはアプリケーションクラスのインスタンスが取得できなかったとき: SFERR_INVALID_STATE

解説

この関数は、 優先的イベントハンドラを登録します。

[Note] 優先的イベントハンドラについて

SFXEventBypass にある解説を参照してください。

SFY アプリでは、 デフォルトでは、BREW イベントは最初にレスポンダに配信されます

[Note] 注意

厳密に言えば、BREW イベントは最初に アプリケーションクラス(SFYApplication を継承するクラス)が内部に保持する ルートに渡されます。 その後、トレーサの配信規則により、 ルートを頂点とするレスポンダツリー上の各レスポンダに配信されます。

一般に、UI を表示する BREW インターフェースでは、 アプリが UI 表示中に受信した BREW イベントは最初に BREW インターフェースの HandleEvent 関数に渡す必要があります。

SFXEventBypass::Register 関数を使用して優先的イベントハンドラを登録すれば、 BREW イベントは『優先的イベントハンドラレスポンダ』の順に配信されるようになります。 SFXEventBypass::Unregister 関数を呼び出してコールバックの登録が解除されるまでの間、 BREW イベントはこの順序で配信されます。

優先的イベントハンドラの実装コード内で、 受け取った BREW イベントをそのまま BREW インターフェースの HandleEvent 関数に渡せば、 レスポンダよりも先に BREW イベントを BREW インターフェースの HandleEvent 関数に渡すことが可能になります。

BREW インターフェースの UI 表示終了時に起動されるコールバック内などで、 SFXEventBypass::Unregister 関数を呼び出して優先的イベントハンドラの登録を解除し、 SFYApplication::Render 関数を呼び出して再描画を行います。

[Note] 注意

優先的イベントハンドラの登録を解除すると BREW イベントは最初にレスポンダに配信されます。

BREW インターフェースの UI 表示により画面が変更されているので、 UI 表示終了時は全画面を再描画する必要があります。 UI 処理により、再描画後の画面が UI 表示前と異なる場合もあります。

[Note] SophiaFramework UNIVERSE の BREW イベントの配信について

優先的イベントハンドラに関わる SophiaFramework UNIVERSE の BREW イベントの配信の詳細については、 SFCApplication クラスの解説にある『イベント処理−全体的な処理の流れ−』を参照してください。

[Note] 注意

BREW API ITextCtl インターフェースの場合は、 UI 表示終了時に呼び出されるコールバックを登録できません。 その代わりに UI 表示終了時に EVT_COMMAND イベントが発生するので、 このイベントを受信したときに優先的イベントハンドラの登録を解除し、再描画を行います。

詳細は、 「SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース」 を参照してください

内部実装

この関数の内部実装は以下の通りです。

/*public static*/SFCError SFXEventBypass::Register(SFCApplication::CallbackSPP spp, VoidPtr reference)
{
    SFCApplicationPtr application;
    SFCError          error;

    if ((application = SFCApplication::GetInstance()) != null) {
        error = application->RegisterBypass(spp, reference);
    }
    else {
        error = SFERR_INVALID_STATE;
    }
    return error;
}// SFXEventBypass::Register //

参照

SFXEventBypass::Unregister | SFCApplication::CallbackSPP | SFCApplication::RegisterBypass | SFCApplication::GetInstance | SFYApplication::Render | SFY レスポンダシステム | ルート | レスポンダツリー | UI を表示する BREW インターフェース | SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース


SFXEventBypass::Unregister
イベントを優先的に処理するためのハンドラ関数の登録を解除します。
[ public, static ]
Void Unregister(
    SFCApplication::CallbackSPP spp   // 優先的イベントハンドラ
    VoidPtr reference                 // 優先的イベントハンドラに渡すデータ
);

解説

この関数は、 優先的イベントハンドラの登録を解除します。

[Note] 注意

この関数は、内部で SFCApplication::UnregisterBypass 関数を呼び出します。

[Note] 優先的イベントハンドラについて

SFXEventBypass にある解説を参照してください。

内部実装

この関数の内部実装は以下の通りです。

/*public static*/Void SFXEventBypass::Unregister(SFCApplication::CallbackSPP spp, VoidPtr reference)
{
    SFCApplicationPtr application;

    if ((application = SFCApplication::GetInstance()) != null) {
        application->UnregisterBypass(spp, reference);
    }
    return;
}// SFXEventBypass::Unregister //

参照

SFXEventBypass::Register | SFCApplication::CallbackSPP | SFCApplication::UnregisterBypass | SFCApplication::GetInstance | UI を表示する BREW インターフェース | SophiaFramework UNIVERSE での実装例: ITextCtl / IMenuCtl インターフェース