![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
#include <SFYApplication.h.hpp>
class SFYApplication : public SFCApplication;
SFMTYPEDEFCLASS(SFYApplication)


SFY アプレットでは、アプレットに付き SFYApplication クラスを継承したアプリケーションクラスを 1 つ用意します。 アプリケーションクラスは、SFY アプレットで最初に作成され、最後に破棄され、アプレット全体の制御の中核となります。
SFYApplication クラスを継承したアプリケーションクラスは、 ウィンドウやダイアログ、メニュー、コントロールなどを管理する起点となります。
レスポンダシステムではアプリケーションクラスがウィンドウやダイアログ、メニューを管理し、 ウィンドウやダイアログがコントロールを管理するという階層構造になっています。
![]() |
アプリケーションクラスが保持するルートレスポンダ |
|---|---|
|
SFYApplication クラスはルートレスポンダとしてデフォルトでルート(SFZRoot)を1つ保持します。 アプレットのグラフィカル ユーザーインターフェース(GUI)は、このルート(SFZRoot)を頂点とするレスポンダツリーを構成することにより実現されます。 アプリケーションクラスに関するレスポンダ操作はルート(SFZRoot)に委譲されて行われます。 ※明示的に新しいレスポンダツリーを構築することで複数のルートを含むこともできますが、 通常、デフォルトのルート(SFZRoot)を使用してアプレット開発します。詳しくは ルートを参照してください。 | |
アプリケーションクラス(基礎編) | レスポンダツリー | ルートレスポンダ | ルート | SFZRoot
| コンストラクタ/デストラクタ |
|---|
|
SFYApplication( Void ) SFYApplication クラスのコンストラクタです。
|
|
~SFYApplication( Void ) SFYApplication クラスのデストラクタです。
|
| パブリック関数 | |
|---|---|
| Void |
ClearHandler( Void ) すべてのハンドラの登録を解除します。
|
| Void |
ClearTracer( Void ) すべてのトレーサの登録を解除します。
|
| SFCError |
Distribute(
SFXEventConstRef event
, BoolPtr result = null
) 配信エンジンを起動してイベントを配信します。
|
| SFYResponderSmp |
GetChildBack( Void ) GetChildBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) GetChildBack( UInt32 id ) GetChildBack( Bool visible , Bool active , Bool enable , Bool focus ) 最背面に位置する子レスポンダを取得します。
|
| SFYResponderSmp |
GetChildBackward(
SInt32 index
) GetChildBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) GetChildBackward( SInt32 index , UInt32 id ) GetChildBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) 背面から数えて指定された順番に位置する子レスポンダを取得します。
|
| SInt32 |
GetChildCount( Void ) GetChildCount( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) GetChildCount( UInt32 id ) GetChildCount( Bool visible , Bool active , Bool enable , Bool focus ) 子レスポンダの数を取得します。
|
| SFYResponderSmp |
GetChildForward(
SInt32 index
) GetChildForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) GetChildForward( SInt32 index , UInt32 id ) GetChildForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) 前面から数えて指定された順番に位置する子レスポンダを取得します。
|
| SFYResponderSmp |
GetChildFront( Void ) GetChildFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) GetChildFront( UInt32 id ) GetChildFront( Bool visible , Bool active , Bool enable , Bool focus ) 最前面に位置する子レスポンダを取得します。
|
| static SFYDistributerPtr |
GetDistributer( Void ) 配信エンジンを取得します。
|
| SFXRectangle |
GetGlobalBound( Void ) グローバル領域を取得します。
|
| static SFYApplicationPtr |
GetInstance( Void ) アプリケーションクラスのインスタンスを取得します。
|
| SFXRectangle |
GetLocalBound( Void ) ローカル領域を取得します。
|
| SFXRectangleConstRef |
GetRealBound( Void ) 実領域を取得します。
|
| static SFYRendererPtr |
GetRenderer( Void ) 描画エンジンを取得します。
|
| static SFYResponderSmp |
GetRoot( Void ) ルートレスポンダを取得します。
|
| SFXRectangle |
GetSuitableBound( Void ) GetSuitableBound( SFXRectangleConstRef param ) 最適な大きさを取得します。
|
| SFXRectangleConstRef |
GetVirtualBound( Void ) 仮想領域を取得します。
|
| Void |
Invalidate( Void ) Invalidate( SFXRectangleConstRef param ) 再描画領域を登録します。
|
| Void |
InvokeBackward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
) レスポンダにイベントを送信します。ハンドラ関数はハンドラリストに登録された順序で呼び出されます。
|
| Void |
InvokeForward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
) レスポンダにイベントを送信します。ハンドラ関数はハンドラリストに登録された逆順で呼び出されます。
|
| 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 ) トレーサを登録します。
|
| SFCError |
Render(
Bool force = false
) 描画エンジンを起動して再描画します。
|
| Void |
SetRealBound(
SFXRectangleConstRef param
) 実領域を設定します。
|
| Void |
SetVirtualBound(
SFXRectangleConstRef param
) 仮想領域を設定します。
|
| 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 ) トレーサの登録を解除します。
|
| static AEECLSID |
GetClassID( Void )
(SFCApplication から継承)
アプレットの ClassID を取得します。
|
| Bool |
Invoke(
SFXEventConstRef event
)
(SFCApplication から継承)
[非推奨 API ( 廃止予定 API )]イベントを送信します。
|
| Bool |
IsRenderable( Void )
(SFCApplication から継承)
画面の描画が可能かどうかを判定します。
|
| SFCError |
RegisterBypass(
CallbackSPP spp
, VoidPtr reference
)
(SFCApplication から継承)
イベントを優先的に処理するためのコールバックを登録します。
|
| static SFCError |
Terminate(
Bool idle = false
)
(SFCApplication から継承)
アプレットを終了します。
|
| Void |
UnregisterBypass(
CallbackSPP spp
, VoidPtr reference
)
(SFCApplication から継承)
イベントを優先的に処理するためのコールバックの登録を解除します。
|
| プロテクト関数 | |
|---|---|
| SFYResponderSmp |
GetThis( Void ) アプリケーションクラスが保持しているルートを取得します。
|
| Bool |
HandleEvent(
SFXEventConstRef event
) イベントを処理し、アプレットの画面全体を再描画します。
|
| Bool |
HandleRender(
SFXEventConstRef event
) アプレットの画面全体を再描画します。
|
| Bool |
HandleError(
SFXEventConstRef event
, SFCError error
)
(SFCApplication から継承)
致命的なエラーが発生した場合に呼び出される仮想関数です。
|
[ protected, explicit ] SFYApplication(Void);
[ protected, pure-virtual ] virtual ~SFYApplication(Void);
[ public ] Void ClearHandler(Void);
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に登録されたハンドラをすべて解除します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
SFZRoot | レスポンダツリー | ルートレスポンダ | ハンドラ | SFYApplication::RegisterHandler | SFYApplication::UnregisterHandler | SFXEventRange
[ public ] Void ClearTracer(Void);
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)のトレーサに登録されている配信規則をすべて解除します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
SFZRoot | レスポンダツリー | ルートレスポンダ | トレーサ | SFYApplication::RegisterTracer | SFYApplication::UnregisterTracer | SFXEventRange
[ public ] SFCError Distribute( SFXEventConstRef event // イベント BoolPtr result = null // 処理結果 );
Distribute() 関数は、 配信エンジンを起動し、 トレーサに登録された規則に従ってBREW 定義イベントやユーザー定義イベントをレスポンダに配信します。
BREW 定義イベントを配信するとき、 イベントループの最初に Distribute() 関数が自動的に呼び出されるので、 明示的に Distribute() 関数を呼び出す必要はありません。
ユーザー定義イベントの場合は、明示的に Distribute() 関数を呼び出す必要があります。
![]() |
重要項目 |
|---|---|
| InvokeForward()/InvokeBackward() 関数と異なり、 Distribute() 関数を利用して送信されたイベントは、 トレーサに登録された規則によっては送信先レスポンダの子レスポンダに配信されることがあります。 | |
SFYApplication::InvokeForward | SFYApplication::InvokeBackward | SFYResponder::Distribute | SFYResponder::InvokeForward | SFYResponder::InvokeBackward | 配信エンジン | 配信型 | イベント | BREW 定義イベント | イベントループ | トレーサ | ハンドラ | ハンドラリスト | SFZRoot | ルートレスポンダ | イベント一覧 |
[ public, const ] SFYResponderSmp GetChildBack(Void);
[ public, const ] SFYResponderSmp GetChildBack( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildBack( UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildBack( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
最背面に位置するルートの子レスポンダ。
存在しない場合は null を返します。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)について、 最背面に位置する子レスポンダを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
検索に含める子レスポンダを ID、可視、活性、操作可能、フォーカスの状態に関する状態で制限することができます。
初期化されていない子レスポンダは検索に含まれません。
すべての子レスポンダの中で最背面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBack();
ID = 128 の子レスポンダの中で最背面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBack(128);
可視かつ活性な(操作可能状態とフォーカス状態の状態は問わない)子レスポンダの中で最背面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBack(true, true, false, false);
可視、活性かつ操作可能な(フォーカス状態の状態は問わない)子レスポンダの中で最背面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBack(true, true, true, false);
SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::GetChildFront | SFYApplication::GetChildBackward | SFYResponder::Initialize | 状態 | 子レスポンダ
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
背面から数えて指定された順番に位置するルートの子レスポンダ。
存在しない場合は null を返します。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)について、 背面から数えて指定された順番に位置する子レスポンダを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
検索に含める子レスポンダを ID、可視、活性、操作可能、フォーカスの状態に関する状態で制限することができます。
初期化されていない子レスポンダは検索に含まれません。
すべての子レスポンダの中で背面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBackward(2);
ID = 128 の子レスポンダの中で背面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBackward(2, 128);
可視かつ活性な(操作可能状態とフォーカス状態の状態は問わない)子レスポンダの中で背面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBackward(2, true, true, false, false);
可視、活性かつ操作可能な(フォーカス状態の状態は問わない)子レスポンダの中で背面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildBackward(2, true, true, true, false);
SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::GetChildForward | SFYApplication::GetChildBack | SFYResponder::Initialize | 状態 | 子レスポンダ
[ public, const ] SInt32 GetChildCount(Void);
[ public, const ] SInt32 GetChildCount( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SInt32 GetChildCount( UInt32 id // ID );
[ public, const ] SInt32 GetChildCount( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
ルートの子レスポンダの数。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)について、 子レスポンダの数を取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
検索に含める子レスポンダを ID、可視、活性、操作可能、フォーカスの状態に関する状態で制限することができます。
初期化されていない子レスポンダは検索に含まれません。
すべての子レスポンダの数を取得する方法
SInt32 count; count = GetChildCount();
ID = 128 の子レスポンダの数を取得する方法
SInt32 count; count = GetChildCount(128);
可視かつ活性な(操作可能状態とフォーカス状態の状態は問わない)子レスポンダの数を取得する方法
SInt32 count; count = GetChildCount(true, true, false, false);
可視、活性かつ操作可能な(フォーカス状態の状態は問わない)子レスポンダの数を取得する方法
SInt32 count; count = GetChildCount(true, true, true, false);
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
前面から数えて指定された順番に位置するルートの子レスポンダ。
存在しない場合は null を返します。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)について、 前面から数えて指定された順番に位置する子レスポンダを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
検索に含める子レスポンダを ID、可視、活性、操作可能、フォーカスの状態に関する状態で制限することができます。
初期化されていない子レスポンダは検索に含まれません。
すべての子レスポンダの中で前面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildForward(2);
ID = 128 の子レスポンダの中で前面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildForward(2, 128);
可視かつ活性な(操作可能状態とフォーカス状態の状態は問わない)子レスポンダの中で前面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildForward(2, true, true, false, false);
可視、活性かつ操作可能な(フォーカス状態の状態は問わない)子レスポンダの中で前面から 3 番目のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildForward(2, true, true, true, false);
SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::GetChildBackward | SFYResponder::Initialize | ID | 状態 | SFYResponder::Initialize | 子レスポンダ
[ public, const ] SFYResponderSmp GetChildFront(Void);
[ public, const ] SFYResponderSmp GetChildFront( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildFront( UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildFront( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
最前面に位置するルートの子レスポンダ。
存在しない場合は null を返します。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)について、 最前面に位置する子レスポンダを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
検索に含める子レスポンダを ID、 可視、活性、操作可能、フォーカスの状態に関する状態で制限することができます。
初期化されていない子レスポンダは検索に含まれません。
すべての子レスポンダの中で最前面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildFront();
ID = 128 の子レスポンダの中で最前面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildFront(128);
可視かつ活性な(操作可能状態とフォーカス状態の状態は問わない)子レスポンダの中で最前面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildFront(true, true, false, false);
可視、活性かつ操作可能な(フォーカス状態の状態は問わない)子レスポンダの中で最前面のレスポンダを取得する方法
SFYResponderSmp child; child = GetChildFront(true, true, true, false);
SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::GetChildBack | SFYApplication::GetChildForward| SFYResponder::Initialize | ID | 状態 | 子レスポンダ
[ public, static ] SFYDistributerPtr GetDistributer(Void);
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)にに設定されている配信エンジンを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
[ public, const ] SFXRectangle GetGlobalBound(Void);
アプリケーションがデフォルトで保持するルート(SFZRoot)のグローバル領域
画面内での座標を表す、アプリケーションがデフォルトで保持するルート(SFZRoot)のグローバル領域を取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
グローバル領域 | SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::GetLocalBound | SFYApplication::GetRealBound
[ public, static ] SFYApplicationPtr GetInstance(Void);
1つのアプレットにつき唯一のアプリケーションクラスのインスタンスを取得します。開発者はこの関数を利用して、アプレットでグローバルなデータや情報を保持することができます。
例 797. グローバルな変数の定義とアクセス
// // ExampleAppli アプリケーションクラス(AppWizard で自動生成) // SFMTYPEDEFCLASS(ExampleAppli) class ExampleAppli : public SFYApplication { SFMSEALCOPY(ExampleAppli) public: static SFCInvokerPtr Factory(Void); private: explicit ExampleAppli(Void) static_throws; virtual ~ExampleAppli(Void); // グローバル変数 global_something_val を定義する SInt32 global_something_val; public: // グローバル変数 global_something_val にアクセスするための GetGlobalSomethingVal() 関数を宣言する SInt32 GetGlobalSomethingVal(); }; // グローバル変数 global_something_val にアクセスするための GetGlobalSomethingVal() 関数を定義する ExampleAppli::GetGlobalSomethingVal(Void) { return global_something_val; } // GetGlobalSomethingVal() 関数経由でグローバル変数 global_something_val の値を取得する static_cast<ExampleAppli>(SFYApplication::GetInstance())->GetGlobalSomethingVal();
[ public, const ] SFXRectangle GetLocalBound(Void);
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)のローカル領域。
仮想領域内での座標を表す、 アプリケーションクラスがデフォルトで保持するルート(SFZRoot)のローカル領域を取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
ローカル領域 | 仮想領域 | SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::GetGlobalBound | SFYApplication::GetVirtualBound
[ public, const ] SFXRectangleConstRef GetRealBound(Void);
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)の実領域
可視領域を表す、 アプリケーションクラスがデフォルトで保持するルート(SFZRoot)の実領域を取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
SFZRoot | 実領域 | レスポンダツリー | ルートレスポンダ | SFYApplication::SetRealBound | SFYApplication::GetVirtualBound | SFYApplication::GetGlobalBound | レスポンダ空間
[ public, static ] SFYRendererPtr GetRenderer(Void);
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)に設定されている描画エンジンを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
[ public, static ] SFYResponderSmp GetRoot(Void);
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)。
ルートレスポンダとはレスポンダツリーの最上位に位置するレスポンダです。
親レスポンダを持たないレスポンダはルートレスポンダであるとみなされます。
アプリケーションクラスの場合、 アプリケーションクラスがデフォルトで保持するルート(SFZRoot)が返ります。
■レスポンダツリー
複数のレスポンダで構成されたレスポンダの木構造です。
レスポンダでイベント処理したり、レスポンダを画面上に描画するには、そのレスポンダはレスポンダツリーに所属している必要があります。
![]() |
注意 |
|---|---|
| レスポンダツリーに所属しないレスポンダは、イベント処理や描画ができません。 | |
■ルートレスポンダ
レスポンダツリーの最上部に位置する特別なレスポンダです。
通常 SFZRoot クラスをルートレスポンダとして利用します。
ルートレスポンダの他のレスポンダとの違いは、イベント配信エンジン (SFYDistributer クラス) や描画エンジン (SFYRenderer クラス) と結びつけてイベントの配信やレスポンダの描画の起点となるところです。
![]() |
注意 |
|---|---|
親レスポンダが存在しないレスポンダはすべてルートレスポンダとみなされるので、ウィンドウやボタンを生成した直後は一時的にルートレスポンダとなっています。 | |
SFZRoot | ルート | SFYResponder::GetRoot | レスポンダツリー | ルートレスポンダ
[ public ] SFXRectangle GetSuitableBound(Void);
[ public ] SFXRectangle GetSuitableBound( SFXRectangleConstRef param // 参考にする領域 );
可視領域を表す、 アプリケーションクラスがデフォルトで保持するルート(SFZRoot)の最適な大きさを取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
ラベルやボタンなどを利用するときに、テキストやイメージを設定したのちこの関数を利用すると、最適な大きさを取得することができます。
引数を設定しない場合は、アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)の実領域を元に最適な大きさを計算します。
SFYApplication::GetSuitableBound 関数は、引数を指定する場合は (SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE, *) イベント、 指定しない場合は (SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST, *) イベントをコールバック型でそれぞれ送信します。
![]() |
注意 |
|---|---|
|
SFYResponder::GetSuitableBound 関数はレスポンダの最適な大きさを取得するための関数です。 親レスポンダに配置するためにはレスポンダの実領域の原点の位置をレスポンダの大きさに合わせて調整する必要があります。 | |
SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::SetRealBound | SFYApplication::GetRealBound | SFYWidget::HandleBoundRequest | SFYWidget::HandleBoundOptimize | 実領域 | 領域イベント[SFEVT_RESPONDER_BOUND] | 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND] | コールバック型
[ protected ] SFYResponderSmp GetThis(Void);
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)。
SFYApplication クラスはルートレスポンダとしてデフォルトでルート(SFZRoot)を1つ保持しています。
SFYApplication::GetThis 関数は、ルート(SFZRoot)を取得するための関数です。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
[ public, const ] SFXRectangleConstRef GetVirtualBound(Void);
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)の仮想領域。
アプリケーションクラスがデフォルトで保持するルート(SFZRoot)の仮想領域を取得します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
仮想領域 | SFZRoot | レスポンダツリー | ルートレスポンダ | SFYApplication::SetVirtualBound | SFYApplication::GetRealBound | SFYApplication::GetLocalBound
[ protected, virtual ] Bool HandleEvent( SFXEventConstRef event // イベント );
BREW から送信されたイベントを処理する関数です。
イベントを処理し、アプレットの画面全体を再描画します。イベントを処理した場合は true を返し、そうでない場合は false を返します。
開発者はこの関数をオーバーライドすることで独自の処理を記述できます。
[ protected, virtual ] Bool HandleRender( SFXEventConstRef event // イベント );
HandleRender 関数は画面全体の再描画が必要なときに呼び出されます。この関数の内容はアプレットの画面全体の描画です。
開発者はこの関数をオーバーライドすることで独自の処理を記述できます。
[ public ] Void Invalidate(Void);
[ public ] Void Invalidate( SFXRectangleConstRef param // 再描画するルート内の矩形領域(何も指定しない場合はルートの実領域が設定される) );
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)について、 ルート内のテキストやイメージなど視覚的な要素が変更されたとき、 ルートの実領域(引数に何も指定しないとき)または引数で指定したルート内の矩形領域を再描画領域として登録します。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
再描画領域は SFYApplication::Render 関数が呼び出されたときに他に登録されている再描画領域との配置関係や レスポンダの可視・不可視状態から画面に描画が必要である場合だけ、レスポンダに登録されている描画ハンドラが呼び出されて描画が行われます。
SFYApplication::Render 関数はイベントループの最後に自動的に呼び出されるので、 イベントループ内の処理の途中で SFYApplication::Render 関数を呼び出す必要はありません。
タイマーやネットワークなどのコールバック処理はイベントループから外れるので、 SFYApplication::Render 関数は自動的に呼び出されません。 コールバック処理内で Invalidate() 関数を利用して登録された再描画領域を描画するには、 明示的に SFYApplication::Render 関数を呼び出す必要があります。
なお、Invalidate() 関数は再描画領域を登録するだけです。 テキストやイメージなどの実際の描画処理は、描画ハンドラ内で行われます。
![]() |
描画処理の最適化 |
|---|---|
|
Invalidate() 関数には矩形の引数を取るオーバーロード関数が存在します。 再描画領域をレスポンダの部分領域に限定することで、 他のレスポンダ領域の和集合に含まれる可能性が高まります。 この場合、描画ハンドラは呼び出されないので、描画処理のパフォーマンスは更に向上します。 | |
描画するテキストを変更する方法
SFXWideString _my_text;
...
Void USRWindow::SetText(SFXWideStringConstRef param)
{
if (param != _my_text) {
_my_text = param;
Invalidate();
}
return;
}
XANDLER_IMPLEMENT_VOIDRENDER(USRWindow, OnRender, invoker, reason, graphics)
{
graphics->DrawText(_my_text, GetLocalBound(), SFXRGBColor(0x00, 0x00, 0x00, 0x00));
return;
}
SFYApplication::Render | SFYResponder::Invalidate | 実領域 | SFZRoot | レスポンダツリー | ルートレスポンダ | 描画処理 | 描画ハンドラ | イベントループ
[ public ] Void InvokeBackward( SFXEventConstRef event // イベント Bool overload // 重複条件 BoolPtr result = null // 処理結果 );
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)にイベントを送信します。
ハンドラ関数は、 ハンドラリストに登録された順で呼び出されます。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
重複処理の条件パラメータである overload 引数に false が渡された場合、 ハンドラ関数がイベントを処理して true を返すと、そこで処理を終了します。
overload 引数に true が渡された場合、 ハンドラ関数がイベントを処理して true を返しても、無くなるまでハンドラ関数の呼び出しを継続します。
![]() |
レスポンダ定義イベント |
|---|---|
| レスポンダ定義イベントは、 InvokeBackward() または InvokeForward() 関数を利用して送信します。 | |
![]() |
利用シーン |
|---|---|
ボタンコントロールやダイアログなどのレスポンダ実装において、 レスポンダ内のテキストやイメージが変更されたときにスタイルイベント[SFEVT_RESPONDER_STYLE]を送信するために利用します。 | |
![]() |
SFYApplication::InvokeForward 関数 |
|---|---|
ハンドラリストへの登録の逆順でハンドラ関数を呼び出すには、SFYApplication::InvokeForward 関数を使います。 | |
![]() |
注意 |
|---|---|
| SFYApplication::Distribute 関数とは異なり、 InvokeBackward() 関数を利用して送信されたイベントは、 送信先レスポンダの子レスポンダに配信されません。 | |
テキストの変更時にスタイルイベントを送信する方法
SFXWideString _my_text;
...
USRApplication::SetText(SFXWideStringConstRef param)
{
if (param != _my_text) {
_my_text = param;
Invalidate();
InvokeBackward(SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_TEXT, 0), true);
}
return;
}
SFYApplication::InvokeForward | SFYApplication::Distribute | SFYResponder::InvokeForward | SFYResponder::Distribute | コールバック型 | レスポンダ定義イベント | ハンドラ | ハンドラリスト | SFZRoot | スタイルイベント[SFEVT_RESPONDER_STYLE] | レスポンダツリー | ルートレスポンダ | BREW 定義イベント | イベント一覧 | 配信エンジン | 配信型 | トレーサ
[ public ] Void InvokeForward( SFXEventConstRef event // イベント Bool overload // 重複条件 BoolPtr result = null // 処理結果 );
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)にイベントを送信します。
ハンドラ関数はハンドラリストに登録された逆順で呼び出されます。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
重複処理の条件パラメータである overload 引数に false が渡された場合、 ハンドラ関数がイベントを処理して true を返すと、そこで処理を終了します。
overload 引数に true が渡された場合、 ハンドラ関数がイベントを処理して true を返しても、無くなるまでハンドラ関数の呼び出しを継続します。
![]() |
レスポンダ定義イベント |
|---|---|
| レスポンダ定義イベントは、 InvokeBackward() または InvokeForward() 関数を利用して送信します。 | |
![]() |
利用シーン |
|---|---|
ボタンコントロールやダイアログなどのレスポンダ実装において、 それらに対する操作が行われた時に結果イベント[SFEVT_RESPONDER_RESULT]を送信するために利用します。 | |
![]() |
SFYApplication::InvokeBackward 関数 |
|---|---|
ハンドラリストへの登録順でハンドラ関数を呼び出すには、SFYApplication::InvokeBackward 関数を使います。 | |
![]() |
注意 |
|---|---|
| SFYResponder::Distribute 関数とは異なり、 InvokeForward() 関数を利用して送信されたイベントは、 送信先レスポンダの子レスポンダに配信されません。 | |
ボタンの操作時に結果イベントを送信する方法
Void USRControl::HandleOperateKeyRelease(Void)
{
InvokeForward(SFXEvent(SFEVT_RESPONDER_RESULT, SFP16_RESULT_OK, GetCurrentValue()), false);
return;
}
SFYApplication::InvokeBackward | SFYApplication::Distribute | SFYResponder::InvokeBackward | SFYResponder::Distribute | コールバック型 | レスポンダ定義イベント | ハンドラ | ハンドラリスト | 結果イベント[SFEVT_RESPONDER_RESULT] | SFZRoot | レスポンダツリー | ルートレスポンダ | BREW 定義イベント | イベント一覧 | 配信エンジン | 配信型 | トレーサ
[ 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 // 配列の要素数 );
ハンドラ規則が適応されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)にハンドラを登録します。
イベント範囲やハンドラ規則が同じ条件の要素を複数個登録することができます。この場合、最後に登録された要素が優先的に評価されます。
![]() |
注意 |
|---|---|
| この操作はアプリケーションクラスがデフォルトで保持しているルート(SFZRoot)に委譲されて処理されます。 | |
1つのハンドラを登録する方法
SFCError error; error = 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)];
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 = RegisterHandler(atomic_cast(range), rule, lengthof(range));
SFZRoot | レスポンダツリー | ルートレスポンダ | ハンドラ | SFYApplication::UnregisterHandler | SFYApplication::ClearHandler | SFXEventRange
[ 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 // 配列の要素数 );
トレーサ規則が適応されるイベントの範囲を表します。
配信順序と配信条件と重複条件のセットを表します。
アプリケーションクラスがデフォルトで保持しているルート(SFZRoot)のトレーサに配信規則を登録します。
イベント範囲やトレーサ規則が同じ条件の要素を複数個登録することができます。この場合、最後に登録された要素が優先的に評価されます。
1つのトレーサを登録する方法
SFCError error; error = 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}
};
SFCError error;
error = RegisterTracer(atomic_cast(range), rule, lengthof(range));