前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFYDistributer
レスポンダツリーにイベントを配信するクラスです。
#include <SFYDistributer.h.hpp>
class SFYDistributer;
SFMTYPEDEFCLASS(SFYDistributer)

協調図

SFYDistributer クラスの協調図

解説

複数のレスポンダで構成されたレスポンダツリーにイベントを配信するクラスです。このクラスの一部の関数は SFYResponder クラスを通して利用され開発者が直接操作することはありません。

通常、SFYApplication クラスがこのクラスのインスタンスを保持し必要なすべての設定や呼び出しを自動的に行いますが、開発者が直接このクラスを利用し別のレスポンダツリー空間を構築することも可能です。

新しいレスポンダツリー空間にイベントを配信するには、このクラスのインスタンスにレスポンダツリーを関連付けておきます。

例 798. 新しいレスポンダツリー空間を構築する

SFYDistributer _distributer;
SFZRootSmp _root;
SFCError error;

// SFYDistributer クラスのインスタンスを初期化
if ((error = _distributer.Initialize()) == SFERR_NO_ERROR) {

    // レスポンダツリーのルートレスポンダを生成
    if ((_root = SFZRoot::NewInstance(&error)) != null) {

        // ルートレスポンダに SFYDistributer クラスのインスタンスを設定
        _root->SetDistributer(&_distributer);

        // その他の初期化処理
        _root->SetRealBound(_root->GetSuitableBound());
        _root->SetStateVisible(true);
        ...
    }
}

例 799. 新しいレスポンダツリー空間を破棄する

SFYDistributer _distributer;
SFZRootSmp _root;

...

// 破棄する順序を明示的に記述
_root.Release();
_distributer.Terminate();

例 800. 新しいレスポンダツリー空間にイベントを配信する

SFZRootSmp _root;
SFXEvent event;
SFCError error;

...

// レスポンダツリーにイベントを配信するにはルートレスポンダの Distribute 関数を呼び出す
error = _root->Distribute(event);

メンバ

コンストラクタ/デストラクタ
SFYDistributer( Void )
SFYDistributer クラスのコンストラクタです。
~SFYDistributer( Void )
SFYDistributer クラスのデストラクタです。
パブリック関数
Void ClearHandler( Void )
すべてのハンドラの登録を解除します。
Void ClearTracer( Void )
すべてのトレーサの登録を解除します。
SFCError Initialize( Void )
初期化処理を行います。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule )
RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length )
RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length )
RegisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference )
ハンドラを登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::RuleRecConstRef rule )
RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::OrderEnumConstPtr order , SFYTracer::StateEnumConstPtr state , BoolConstPtr overload , SInt32 length )
RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::RuleRecConstPtr rule , SInt32 length )
RegisterTracer( SFXEventRangeConstRef range , SFYTracer::OrderEnum order , SFYTracer::StateEnum state , Bool overload )
トレーサを登録します。
Void Terminate( Void )
終了処理を行います。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule )
UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length )
UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length )
UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference )
ハンドラの登録を解除します。
Void UnregisterTracer( SFXEventRangeConstRef range )
UnregisterTracer( SFXEventRangeConstPtr range , SInt32 length )
トレーサの登録を解除します。

SFYDistributer::SFYDistributer
SFYDistributer クラスのコンストラクタです。
[ public, explicit ]
SFYDistributer(Void);

SFYDistributer::~SFYDistributer
SFYDistributer クラスのデストラクタです。
[ public ]
~SFYDistributer(Void);

SFYDistributer::ClearHandler
すべてのハンドラの登録を解除します。
[ public ]
Void ClearHandler(Void);

SFYDistributer::ClearTracer
すべてのトレーサの登録を解除します。
[ public ]
Void ClearTracer(Void);

SFYDistributer::Initialize
初期化処理を行います。
[ public ]
SFCError Initialize(Void);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

イベントの配信に必要なすべてのリソースを初期化します。

このクラスをレスポンダツリーに関連付ける場合、先にこの関数を呼び出して初期化しておきます。


SFYDistributer::RegisterHandler
ハンドラを登録します。
[ public ]
SFCError RegisterHandler(
    SFXEventRangeConstRef range        // イベント範囲
    SFYHandler::RuleRecConstRef rule   // ハンドラ規則
);
[ public ]
SFCError RegisterHandler(
    SFXEventRangeConstRef range   // イベント範囲
    SFYHandler::HandlerSPP spp    // ハンドラ関数
    VoidPtr reference             // リファレンス値
);
[ public ]
SFCError RegisterHandler(
    SFXEventRangeConstPtr range        // イベント範囲の配列
    SFYHandler::RuleRecConstPtr rule   // ハンドラ規則の配列
    SInt32 length                      // 配列の要素数
);
[ public ]
SFCError RegisterHandler(
    SFXEventRangeConstPtr range          // イベント範囲の配列
    SFYHandler::HandlerSPPConstPtr spp   // ハンドラ関数の配列
    VoidPtrConstPtr reference            // リファレンス値の配列
    SInt32 length                        // 配列の要素数
);

引数

range

ハンドラ規則が適応されるイベントの範囲を表します。

rule

ハンドラ関数とリファレンス値のセットを表します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 不正な引数のとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

イベント範囲やハンドラ規則が同じ条件の要素を複数個登録することができます。この場合、最後に登録された要素が優先的に評価されます。

使用例

1つのハンドラを登録する方法

SFYDistributer _distributer;
SFCError error;

error = _distributer.RegisterHandler(SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END), XANDLER_INTERNAL(OnKey));

複数のハンドラをまとめて登録する方法

static SFXEventRange::AtomRecConst range[] = {
    {             SFEVT_KEY,              SFEVT_KEY,          SFP16_BEGIN,            SFP16_END},
    {       SFEVT_KEY_PRESS,        SFEVT_KEY_PRESS,          SFP16_BEGIN,            SFP16_END},
    {     SFEVT_KEY_RELEASE,      SFEVT_KEY_RELEASE,          SFP16_BEGIN,            SFP16_END}
};
SFYHandler::RuleRec rule[lengthof(range)];
SFYDistributer _distributer;
SFCError error;

rule[0].spp = XANDLER_FUNCTION(OnKey);
rule[0].reference = this;
rule[1].spp = XANDLER_FUNCTION(OnKeyPress);
rule[1].reference = this;
rule[2].spp = XANDLER_FUNCTION(OnKeyRelease);
rule[2].reference = this;

error = _distributer.RegisterHandler(atomic_cast(range), rule, lengthof(range));

SFYDistributer::RegisterTracer
トレーサを登録します。
[ public ]
SFCError RegisterTracer(
    SFXEventRangeConstRef range       // イベント範囲
    SFYTracer::RuleRecConstRef rule   // トレーサ規則
);
[ public ]
SFCError RegisterTracer(
    SFXEventRangeConstRef range   // イベント範囲
    SFYTracer::OrderEnum order    // 処理順序
    SFYTracer::StateEnum state    // 配信条件
    Bool overload                 // 重複条件
);
[ public ]
SFCError RegisterTracer(
    SFXEventRangeConstPtr range       // イベント範囲の配列
    SFYTracer::RuleRecConstPtr rule   // トレーサ規則の配列
    SInt32 length                     // 配列の要素数
);
[ public ]
SFCError RegisterTracer(
    SFXEventRangeConstPtr range          // イベント範囲の配列
    SFYTracer::OrderEnumConstPtr order   // 配信順序の配列
    SFYTracer::StateEnumConstPtr state   // 配信条件の配列
    BoolConstPtr overload                // 重複条件の配列
    SInt32 length                        // 配列の要素数
);

引数

range

トレーサ規則が適応されるイベントの範囲を表します。

rule

配信順序と配信条件と重複条件のセットを表します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 不正な引数のとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

イベント範囲やトレーサ規則が同じ条件の要素を複数個登録することができます。この場合、最後に登録された要素が優先的に評価されます。

使用例

1つのトレーサを登録する方法

SFYDistributer _distributer;
SFCError error;

error = _distributer.RegisterTracer(SFXEventRange(SFEVT_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END), SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true);

複数のトレーサをまとめて登録する方法

static SFXEventRange::AtomRecConst range[] = {
    {            SFEVT_APP_START,           SFEVT_APP_START, SFP16_BEGIN, SFP16_END},
    {             SFEVT_APP_STOP,            SFEVT_APP_STOP, SFP16_BEGIN, SFP16_END},
    {           SFEVT_APP_RESUME,          SFEVT_APP_RESUME, SFP16_BEGIN, SFP16_END},
    {          SFEVT_APP_SUSPEND,         SFEVT_APP_SUSPEND, SFP16_BEGIN, SFP16_END}
};
static SFYTracer::RuleRecConst rule[lengthof(range)] = {
    {  SFYTracer::ORDER_BACKWARD,      SFYTracer::STATE_ALL,        true},
    {   SFYTracer::ORDER_FORWARD,      SFYTracer::STATE_ALL,        true},
    {  SFYTracer::ORDER_BACKWARD,      SFYTracer::STATE_ALL,        true},
    {   SFYTracer::ORDER_FORWARD,      SFYTracer::STATE_ALL,        true}
};
SFYDistributer _distributer;
SFCError error;

error = _distributer.RegisterTracer(atomic_cast(range), rule, lengthof(range));

SFYDistributer::Terminate
終了処理を行います。
[ public ]
Void Terminate(Void);

解説

イベントの配信に必要なすべてのリソースを解放して終了します。

このクラスがレスポンダツリーに関連付けられている場合、この関数を呼び出す前に関係するすべてのレスポンダを破棄しておきます。


SFYDistributer::UnregisterHandler
ハンドラの登録を解除します。
[ public ]
Void UnregisterHandler(
    SFXEventRangeConstRef range        // イベント範囲
    SFYHandler::RuleRecConstRef rule   // ハンドラ規則
);
[ public ]
Void UnregisterHandler(
    SFXEventRangeConstRef range   // イベント範囲
    SFYHandler::HandlerSPP spp    // ハンドラ関数
    VoidPtr reference             // リファレンス値
);
[ public ]
Void UnregisterHandler(
    SFXEventRangeConstPtr range        // イベント範囲の配列
    SFYHandler::RuleRecConstPtr rule   // ハンドラ規則の配列
    SInt32 length                      // 配列の要素数
);
[ public ]
Void UnregisterHandler(
    SFXEventRangeConstPtr range          // イベント範囲の配列
    SFYHandler::HandlerSPPConstPtr spp   // ハンドラ関数の配列
    VoidPtrConstPtr reference            // リファレンス値の配列
    SInt32 length                        // 配列の要素数
);

引数

range

ハンドラ規則が適応されるイベントの範囲を表します。

rule

ハンドラ関数とリファレンス値のセットを表します。

解説

登録が解除されるハンドラは、イベント範囲とハンドラ規則が完全に一致するものに限ります。また、同じ条件の要素が複数個登録されている場合は、最後に登録された要素が解除されます。


SFYDistributer::UnregisterTracer
トレーサの登録を解除します。
[ public ]
Void UnregisterTracer(
    SFXEventRangeConstRef range   // イベント範囲
);
[ public ]
Void UnregisterTracer(
    SFXEventRangeConstPtr range   // イベント範囲の配列
    SInt32 length                 // 配列の要素数
);

引数

range

トレーサ規則が適応されるイベントの範囲を表します。

解説

登録が解除されるトレーサは、イベント範囲が完全に一致するものに限ります。また、同じ条件の要素が複数個登録されている場合は、最後に登録された要素が解除されます。