前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFYTabControl
タブコントロールを表す抽象クラスです。
#include <SFYTabControl.h.hpp>
class SFYTabControl : public SFYControl;
SFMTYPEDEFRESPONDER(SFYTabControl)

継承図

SFYTabControl クラスの継承図

協調図

SFYTabControl クラスの協調図

解説

■ 仕様と使い方

SFYTabControl は、SFZTabControl などの具象タブコントロールを実装するための起点となるクラスです。

タブコントロールは、 複数のタブページ(SFZTabPage)をタブ形式のユーザーインターフェースで管理する機能を提供します。

タブコントロールへのタブページの挿入は、 タブページの親レスポンダをタブコントロールに設定することにより行います。

タブページの表示切り替えは、タブコントロールのタブのフォーカス移動によって行います。

タブコントロールのレイアウト

タブページの追加

タブコントロールへのタブページの追加は、 タブページの SFYResponder::SetParent 関数を呼び出して親レスポンダにタブコントロールを設定することにより行います。

[Note] 注意

タブページは、タブコントロールに追加された順に並びます。 この順序を変更するには、タブページを削除して追加しなおす必要があります。

なお、タブページのインデックスは、タブページがタブコントロールに追加された順を表します。

[Note] 注意

コントロールは子レスポンダとしてコンテナ(SFYContainer クラスを継承するレスポンダ)を持ちませんが、 タブコントロールだけは例外的に子レスポンダとしてコンテナを持ちます。

領域の設定

SFYResponder::SetRealBound 関数を呼び出してタブコントロールの実領域を設定します。

[Note] 注意

内部処理により、 タブコントロールの仮想領域は、 常に実領域に一致します。

タブページの実領域は、 内部処理により自動的にタブコントロールのコンテント領域に設定されます。 開発者はタブページの実領域を設定する必要はありません。

[Note] タブコントロールのコンテント領域

タブコントロールのコンテント領域とは、 タブコントロールの領域からヒント領域、タブ領域、ボーダー領域、スクロールバー領域を除いた矩形領域のことです。 タブページの内容が表示される領域であるので、コンテント領域と呼びます。

タブページの仮想領域は、 タブコントロールにすべてのタブページを追加し終えてから一度だけ 明示的に SFYTabControl::AdjustPages 関数を呼び出すことにより行います。 このとき、仮想領域は自動的に計算されて、 タブコントロールのコンテント領域とタブページの子レスポンダを含む最小の矩形領域に設定されます (始点は (0, 0) で、タブページの実領域の始点と同じ)。

[Note] 注意

タブページのすべての子レスポンダがタブコントロールのコンテント領域内に配置される場合、 SFYTabControl::AdjustPages 関数の呼び出しは省略できます。

状態について

タブコントロールは、 以下のようにタブページの状態に応じて描画や、 フォーカス時の振る舞いが異なります。

  1. タブページが不可視状態の時、 ラベルはタブコントロール内に描画されません。 また、タブページの内容もコンテント領域に描画されません。
  2. タブページが可視状態かつ不活性状態の時、 ラベルはタブ領域に不活性状態で描画されますが、ラベルにフォーカスは移動しません。 そのため、タブページの内容はコンテント領域に描画されません。
  3. タブページが活性状態かつ操作不能状態の時、 ラベルはタブ領域に通常通りに描画されますが、ラベルにフォーカスは移動しません。 そのため、タブページの内容はコンテント領域に描画されません。
  4. タブページが操作可能状態の時、 ラベルはタブ領域に通常通りに描画されますが、ラベルにフォーカスは移動できます。 ラベルにフォーカスが移動したとき、タブページの内容はコンテント領域に描画されます。
[Note] 注意

上記のラベルとは、タブコントロールのタブに表示されるタブページのタイトルラベルのことです。

[Note] 状態に応じたタブコントロールの描画とフォーカスの振る舞いの実装

これらのタブページの状態に基づいたフォーカスの振る舞いは SFYTabControl クラスで実装されます。

タブ領域(タグラベル)の描画は、 SFYTabControl クラスを継承する具象クラスで実装する必要があります。

[Note] タブページの初期状態

インスタンス生成直後、タブページの状態は「可視+活性+操作可能+非フォーカス」に初期化されます。

大抵の場合は、この設定で十分なので、タブページの状態を設定する必要はありません。

タブコントロールのデザイン

タブ領域やヒント領域、ボーダー領域を表示するための関数が利用可能です。 詳しくは、SFZTabControl / SFZTabPage クラスのリファレンスを参照してください。

タブページの選択

タブコントロールには、SFYTabControl::SetFieldValue 関数で設定した数のタブが表示されます。

各タブには対応するタブページが存在し、タブには対応するタブページのタイトルテキストが表示されます (ヒント領域が設定されている場合はヒントテキストも表示されます)。 そのうちの 1 つのタブページだけがフォーカス状態になり、その内容がコンテント領域に表示されます。

SFZTabControl::SetFocusTabTopEdgeEnable 関数で上境界線を有効に設定している場合、 フォーカス状態のタブページに対応するタブの上境界線は SFZTabControl::SetFocusTabTopEdgeColor 関数で設定した色で描画されます。

特定のタブページにフォーカスを移動するには、 SFYTabControl::FocusPage 関数を呼び出します。 現在フォーカスを持つタブページのフォーカスを前後(左右)のタブページに移動するには、 SFYTabControl::FocusLeft / SFYTabControl::FocusRight 関数を呼び出します。

フォーカスの移動先であるタブページのタイトルテキストがタブコントロールのタブ領域に表示されていない場合は、 自動的にタブ領域が左右にスクロールして表示されます。

[Note] 注意

SFYTabControl::FocusLeft / SFYTabControl::FocusRight 関数は、 SFYTabControl::SetFocusLeftKey / SFYTabControl::SetFocusRightKey 関数で設定した左右のフォーカス移動キーを押下すると呼び出されます。

[Caution] 注意

選択されたタブページは、 フォーカス状態は "true"に設定され、 同じ姉妹タブページの中で最前面に配置されます。

タブコントロールの表示内容の整合性が崩れるので、 タブページに対して SFYResponder::ToFront / SFYResponder::SetStateFocus 関数を呼び出すことは禁止されています。 タブページの内容を表示する場合は、SFYTabControl::FocusPage 関数を使用してください。

タブページの削除

タブコントロールからタブページを削除する方法は以下の通りです。

タブコントロールからタブページを動的に削除するコードは以下の通りです。

// CASE 1. タブページを保持する場合 (親を空にする)
page->SetParent(SFYResponder::EmptyInstance());

// CASE 2. タブページを他のタブコントロールで利用する場合(親を他のタブコントロールに設定する)
SFYTabControlSmp othertab;
page->SetParent(othertab);

// CASE 3. タブページを破棄する場合
page->Terminate();

コントロール値の役割と制限について

最小値は、常に 0 です。

現在値は、選択されているタブページのインデックスを表します。 タブページが存在しない場合は -1 になります。 タブページの選択は、 SFYControl::SetCurrentValue 関数ではなく SFYTabControl::FocusPage 関数を使用します。

最大値は、タブコントロールのタブページ数を表します(※この機能は将来的に廃止される予定です)。 タブページ数の取得には、SFYTabControl::GetPageCount 関数を使用してください。

フィールド値は、タブの数を表します。 必ず 1 以上の値を設定する必要があります。

トップ値は、一番左側のタブに対応するタブページのインデックスを表します。

仕様上の制限

タブコントロールの子レスポンダに、 SFZTabPage クラスかそれを継承するクラス以外のレスポンダを登録した時の動作は未定義です。

SFYControl::SetMinimumValue, SFYControl::SetMaximumValue, SFYControl::SetCurrentValue で最小値、最大値、現在値を変更してはいけません。

参照

SFYContainer | SFYResponder::SetRealBound | SFYResponder::SetVirtualBound | SFYTabControl::AdjustPages | 実領域 | 仮想領域 | 状態

メンバ

コンストラクタ/デストラクタ
SFYTabControl( Void )
SFYTabControl クラスのコンストラクタです。
~SFYTabControl( Void )
SFYTabControl クラスのデストラクタです。
パブリック関数
SInt32 FirstIndexOf( Bool visible , Bool active , Bool enable )
指定された条件に一致する最初のタブページのインデックスを取得します。
Void FocusLeft( Void )
フォーカスを左のタブページに移動します。
SFCError FocusPage( SInt32 index )
指定されたインデックスのタブページにフォーカスを移動します。
Void FocusRight( Void )
フォーカスを右のタブページに移動します。
SInt32 GetBottomValue( Void )
現在最右端に表示されているタブに対応するタブページのインデックスを取得します。
SFXRectangleConstRef GetContentBound( Void )
タブコントロールに設定されるタブページの実領域を取得します。
SInt32 GetFieldValue( Void )
タブの数を取得します。
AVKType GetFocusLeftKey( Void )
左のタブにフォーカスを移動させるキーを取得します。
AVKType GetFocusRightKey( Void )
右のタブにフォーカスを移動させるキーを取得します。
SInt32 GetIndex( SFYContainerSmpConstRef tabpage )
指定されたタブページのインデックスを取得します。
SInt32 GetMaximumValue( Void )
[廃止予定] タブページの総数を取得します。
SFYContainerSmp GetPage( SInt32 index )
指定されたインデックスを持つタブページを取得します。
SInt32 GetPageCount( Void )
検索条件に一致するタブページの数を取得します。
SInt32 GetPageCount( Bool visible , Bool active , Bool enable )
検索条件に一致するタブページの数を取得します。
SFXRGBColorConstRef GetSafePageBackgroundColor( Void )
セーフページの背景色を取得します。
SFYScrollBarControlSmpConstRef GetScrollBarControl( Void )
タブコントロールで使用するスクロールバーコントロールを取得します。
SInt16 GetScrollBarWidth( Void )
タブコントロールで使用するスクロールバーコントロールの幅を取得します。[単位:ピクセル]
Bool GetTabLoop( Void )
タブのフォーカス移動ループフラグの値を取得します。
SInt32 GetTopValue( Void )
現在最左端に表示されているタブに対応するタブページのインデックスを取得します。
SInt32 LastIndexOf( Bool visible , Bool active , Bool enable )
指定された条件に一致する最後のタブページのインデックスを取得します。
SInt32 NextIndexOf( SInt32 index , Bool visible , Bool active , Bool enable )
指定された条件に一致する次のタブページのインデックスを取得します。
SInt32 PrevIndexOf( SInt32 index , Bool visible , Bool active , Bool enable )
指定された条件に一致する前のタブページのインデックスを取得します。
Void SetFieldValue( SInt32 param )
タブの数を設定します。
Void SetFocusLeftKey( AVKType param )
左のタブにフォーカスを移動させるキーを設定します。
Void SetFocusRightKey( AVKType param )
右のタブにフォーカスを移動させるキーを設定します。
Void SetSafePageBackgroundColor( SFXRGBColorConstRef param )
セーフページの背景色を設定します。
SFCError SetScrollBarControl( SFYScrollBarControlSmpConstRef param )
タブコントロールで使用するスクロールバーを設定します。
Void SetScrollBarWidth( SInt16 param )
タブコントロールで使用するスクロールバーコントロールの幅を設定します。[単位:ピクセル]
Void SetTabLoop( Bool param )
タブのフォーカス移動ループフラグを設定します。
Void ClearHandler( Void ) (SFYResponder から継承)
このレスポンダのハンドラの登録をすべて解除します。
Void ClearTracer( Void ) (SFYResponder から継承)
このレスポンダのトレーサの配信規則の登録をすべて解除します。
SFCError Distribute( SFXEventConstRef event , BoolPtr result = null ) (SFYResponder から継承)
指定された配信型イベントを SFYDistributer インスタンスと、このレスポンダ以下のレスポンダツリーに配信します。
SFXRGBColorConstRef GetBackgroundColor( Void ) (SFYWidget から継承)
背景の色を取得します。
SFYResponderSmp GetChildBack( Void ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( UInt32 id ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最背面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SInt32 GetChildCount( Void ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( UInt32 id ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SInt32 GetChildCount( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダの子レスポンダの数を取得します。
SFYResponderSmp GetChildForward( SInt32 index ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( Void ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( UInt32 id ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SFYResponderSmp GetChildFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
最前面に位置するこのレスポンダの子レスポンダを取得します。
SInt32 GetCurrentValue( Void ) (SFYControl から継承)
コントロールの現在値を取得します。
SFYDistributerPtr GetDistributer( Void ) (SFYResponder から継承)
このレスポンダに設定されている配信エンジンを取得します。
SFYResponderSmp GetFrame( Void ) (SFYResponder から継承)
このレスポンダに装着されたフレームを取得します。
SFXRectangle GetGlobalBound( Void ) (SFYResponder から継承)
このレスポンダのグローバル領域を取得します。
UInt32 GetID( Void ) (SFYResponder から継承)
このレスポンダの ID を取得します。
SFXRectangle GetLocalBound( Void ) (SFYResponder から継承)
このレスポンダのローカル領域を取得します。
SInt32 GetMinimumValue( Void ) (SFYControl から継承)
コントロールの最小値を取得します。
SInt32 GetNthBackward( Void ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( UInt32 id ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthBackward( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( Void ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( UInt32 id ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SInt32 GetNthForward( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて何番目に位置するかを取得します。
SFYResponderSmp GetParent( Void ) (SFYResponder から継承)
このレスポンダの親レスポンダを取得します。
Bool GetPropertyTransparent( Void ) (SFYResponder から継承)
このレスポンダの透過属性を取得します。
SFXRectangleConstRef GetRealBound( Void ) (SFYResponder から継承)
このレスポンダの実領域を取得します。
VoidPtr GetReference( Void ) (SFYResponder から継承)
このレスポンダのリファレンス値を取得します。
SFYRendererPtr GetRenderer( Void ) (SFYResponder から継承)
このレスポンダに設定されている描画エンジンを取得します。
SFYResponderSmp GetRoot( Void ) (SFYResponder から継承)
このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
Bool GetStateActive( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの活性状態を取得します。
Bool GetStateEnable( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの操作可能状態を取得します。
Bool GetStateFocus( Bool inherit = false ) (SFYResponder から継承)
このレスポンダのフォーカス状態を取得します。
Bool GetStateValid( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの有効状態を取得します。
Bool GetStateVisible( Bool inherit = false ) (SFYResponder から継承)
このレスポンダの可視状態を取得します。
SFXRectangle GetSuitableBound( Void ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXRectangle GetSuitableBound( SFXRectangleConstRef rectangle ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXRectangle GetSuitableBound( SFXRectangleConstRef param , HorizontalEnum horizontal , VerticalEnum vertical ) (SFYResponder から継承)
このレスポンダの最適な領域(サイズ)を取得します。
SFXMargin GetSuitableMargin( Void ) (SFYResponder から継承)
このレスポンダのフレーム余白領域を取得します。
SFCType GetType( Void ) (SFYResponder から継承)
このレスポンダのタイプを取得します。
SFXRectangleConstRef GetVirtualBound( Void ) (SFYResponder から継承)
このレスポンダの仮想領域を取得します。
Bool HasFrame( Void ) (SFYResponder から継承)
このレスポンダがコンテントレスポンダであるかどうかを判定します。
Void Initialize( Void ) (SFYResponder から継承)
このレスポンダを初期化します。
Void Invalidate( Void ) (SFYResponder から継承)
指定された領域を再描画領域に登録します。
Void Invalidate( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域を再描画領域に登録します。
Void InvokeBackward( SFXEventConstRef event , Bool overload , BoolPtr result = null ) (SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録順に起動されます)。
Void InvokeForward( SFXEventConstRef event , Bool overload , BoolPtr result = null ) (SFYResponder から継承)
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録の逆順に起動されます)。
Bool IsBack( Void ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( UInt32 id ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最背面に位置するかどうかを判定します。
Bool IsFrame( Void ) (SFYResponder から継承)
このレスポンダがアタッチメントフレームであるかどうかを判定します。
Bool IsFront( Void ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( UInt32 id ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが最前面に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsNthForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
Bool IsRoot( Void ) (SFYResponder から継承)
このレスポンダがルートレスポンダであるかどうかを判定します。
SFCError Recover( Void ) (SFYResponder から継承)
デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length ) (SFYResponder から継承)
指定されたハンドラをこのレスポンダに登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::RuleRecConstRef rule ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstRef range , SFYTracer::OrderEnum order , SFYTracer::StateEnum state , Bool overload ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError RegisterTracer( SFXEventRangeConstPtr range , SFYTracer::OrderEnumConstPtr order , SFYTracer::StateEnumConstPtr state , BoolConstPtr overload , SInt32 length ) (SFYResponder から継承)
指定された配信規則をこのレスポンダのトレーサに登録します。
SFCError Render( Bool force = false ) (SFYResponder から継承)
このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。
Void SetBackgroundColor( SFXRGBColorConstRef param ) (SFYWidget から継承)
背景の色を設定します。
Void SetCurrentValue( SInt32 param ) (SFYControl から継承)
コントロールの現在値を設定します。
Void SetDistributer( SFYDistributerPtr param ) (SFYResponder から継承)
指定された配信エンジンをこのレスポンダに設定します。
SFCError SetFrame( SFYResponderSmpConstRef param ) (SFYResponder から継承)
このレスポンダにフレームを装着します。
Void SetID( UInt32 param ) (SFYResponder から継承)
指定された ID をこのレスポンダに設定します。
Void SetMaximumValue( SInt32 param ) (SFYControl から継承)
コントロールの最大値を設定します。
Void SetMinimumValue( SInt32 param ) (SFYControl から継承)
コントロールの最小値を設定します。
SFCError SetParent( SFYResponderSmpConstRef param ) (SFYResponder から継承)
指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
Void SetProperty( Bool transparent ) (SFYResponder から継承)
指定された属性をこのレスポンダに設定します。
Void SetPropertyTransparent( Bool param ) (SFYResponder から継承)
指定された透過属性をこのレスポンダに設定します。
Void SetRealBound( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域をこのレスポンダの実領域に設定します。
Void SetReference( VoidPtr param ) (SFYResponder から継承)
指定された値をこのレスポンダのリファレンスに設定します。
Void SetRenderer( SFYRendererPtr param ) (SFYResponder から継承)
指定された描画エンジンをこのレスポンダに設定します。
Void SetState( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグに設定します。
Void SetStateActive( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの活性状態フラグに設定します。
Void SetStateEnable( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの操作可能状態フラグに設定します。
Void SetStateFocus( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダのフォーカス状態フラグに設定します。
Void SetStateVisible( Bool param ) (SFYResponder から継承)
指定された値をこのレスポンダの可視状態フラグに設定します。
Void SetVirtualBound( SFXRectangleConstRef param ) (SFYResponder から継承)
指定された領域をこのレスポンダの仮想領域に設定します。
SFCError Snapshot( SFBBitmapSmpConstRef bitmap ) (SFYResponder から継承)
デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域のスナップショットを取得します。
Void Terminate( Void ) (SFYResponder から継承)
このレスポンダの終了処理を行います。
Void ToBack( Void ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToBack( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToBack( UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToBack( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
Void ToFront( Void ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToFront( Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToFront( UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToFront( UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
Void ToNthBackward( SInt32 index ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthBackward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthBackward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthBackward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index , UInt32 id ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void ToNthForward( SInt32 index , UInt32 id , Bool visible , Bool active , Bool enable , Bool focus ) (SFYResponder から継承)
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::RuleRecConstRef rule ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstRef range , SFYHandler::HandlerSPP spp , VoidPtr reference ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::RuleRecConstPtr rule , SInt32 length ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterHandler( SFXEventRangeConstPtr range , SFYHandler::HandlerSPPConstPtr spp , VoidPtrConstPtr reference , SInt32 length ) (SFYResponder から継承)
このレスポンダから指定されたハンドラの登録を解除します。
Void UnregisterTracer( SFXEventRangeConstRef range ) (SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
Void UnregisterTracer( SFXEventRangeConstPtr range , SInt32 length ) (SFYResponder から継承)
このレスポンダのトレーサから指定された配信規則の登録を解除します。
プロテクト関数
Void AdjustPages( Void )
タブページの実領域と仮想領域を設定します。
SFYContainerSmpConstRef GetSafePage( Void )
セーフページを取得します。
Void SetContentBound( SFXRectangleConstRef rectangle )
タブコントロールのコンテント領域を設定します。
static
SFYResponderSmp
Factory( SFYResponderPtr responder , SFCErrorPtr exception = null ) (SFYResponder から継承)
NewInstance 関数の実装を補助します。
SFYResponderSmp GetThis( Void ) (SFYResponder から継承)
このレスポンダのスマートポインタを取得します。
Void HandleBoundGlobal( SFXRectangleConstRef rectangle ) (SFYWidget から継承)
[非推奨(廃止予定 API)] グローバル領域が変化したときに呼び出される関数です。
Void HandleBoundOptimize( SFXRectanglePtr rectangle ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベントを受信したときに呼び出される関数です(指定した矩形に収まる範囲内で最適な領域を計算します)。
Void HandleBoundReal( Void ) (SFYControl から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL) イベントを受信したときに呼び出される関数です (実領域が変化したときの処理を行います)。
Void HandleBoundRequest( SFXRectanglePtr rectangle ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベントを受信したときに呼び出される関数です(最適な領域を計算します)。
Void HandleBoundVirtual( Void ) (SFYWidget から継承)
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL) イベントを受信したときに呼び出される関数です (仮想領域が変化したときの処理を行います)。
Void HandleRenderRequest( SFXGraphicsPtr graphics ) (SFYWidget から継承)
描画イベントを受信したときに呼び出される関数です(レスポンダを描画します)。
Void SetType( SFCType param ) (SFYResponder から継承)
指定された値をこのレスポンダのタイプに設定します。
CodeEnum
SFYTabControl クラスを表す定数です。
HorizontalEnum (SFYResponder から継承)
水平方向のアライメントを表す定数です。
VerticalEnum (SFYResponder から継承)
垂直方向のアライメントを表す定数です。

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

解説

このコンストラクタは、以下の初期化処理を行います。

  1. タイプを ".tab" に設定します。
  2. タブコントロールで使用するスクロールバーコントロール(SFZScrollBarControl)を生成し、 子レスポンダに設定します。
  3. スクロールバーコントロールの状態を「可視+活性+操作不能+非フォーカス」に設定します。
  4. スクロールバーコントロールの向きを SFYScrollBarControl::VERTICAL に設定します。
  5. スクロールバーコントロールの幅を 5 ピクセルに設定します。
  6. 最大値を 1 に設定します。
  7. 現在値を -1 に設定します。
  8. 画面に表示するタブの数を 2 に設定します。
  9. タブの境界を超えて反対側にフォーカスを移動させるフラグを "true" に設定します。
  10. 左のタブページにフォーカスを移動させるキーを AVK_LEFT に設定します。
  11. 右のタブページにフォーカスを移動させるキーを AVK_RIGHT に設定します。
  12. 下表にあるハンドラをレスポンダに登録します。(※内部的なハンドラは省略)

表 249. イベントハンドラ

イベント ハンドラの内容
SFYTabControl::SetFocusLeftKey で設定された、左のタブページにフォーカスを移動させるキーの SFEVT_KEY イベント SFYTabControl::FocusLeft 関数を呼び出します。
SFYTabControl::SetFocusRightKey で設定された、右のタブページにフォーカスを移動させるキーの SFEVT_KEY イベント SFYTabControl::FocusRight 関数を呼び出します。
[Note] 注意
SFYTabControl クラスを継承するレスポンダでは、 上記イベントが発生すると、それに対応するハンドラが呼び出されます。

内部実装

このコンストラクタの内部実装は以下の通りです。

/*protected */SFYTabControl::SFYTabControl(Void) static_throws
{
    static SFXEventRange::AtomRecConst          range[] = {
        #if TARGET_VERSION_GE(3, 0, 0)
        {       SFEVT_KEY_PRESS,      SFEVT_KEY_RELEASE,          SFP16_BEGIN,            SFP16_END},
        #else
        {       SFEVT_KEY_PRESS,         SFEVT_KEY_HELD,          SFP16_BEGIN,            SFP16_END},
        #endif
        {             SFEVT_KEY,              SFEVT_KEY,             SFP16_BEGIN,               SFP16_END},
        { SFEVT_RESPONDER_OWNER,  SFEVT_RESPONDER_OWNER,    SFP16_OWNER_REGISTER,    SFP16_OWNER_REGISTER},
        { SFEVT_RESPONDER_OWNER,  SFEVT_RESPONDER_OWNER,  SFP16_OWNER_UNREGISTER,  SFP16_OWNER_UNREGISTER},
        { SFEVT_RESPONDER_OWNER,  SFEVT_RESPONDER_OWNER,     SFP16_OWNER_ARRANGE,     SFP16_OWNER_ARRANGE},
        { SFEVT_RESPONDER_STATE,  SFEVT_RESPONDER_STATE,       SFP16_STATE_FOCUS,       SFP16_STATE_FOCUS},
        { SFEVT_RESPONDER_VALUE,  SFEVT_RESPONDER_VALUE,       SFP16_VALUE_FIELD,       SFP16_VALUE_FIELD},
        { SFEVT_RESPONDER_VALUE,  SFEVT_RESPONDER_VALUE,     SFP16_VALUE_CURRENT,     SFP16_VALUE_CURRENT}
    };
    SFYHandler::RuleRec                         rule[lengthof(range)];

    if (static_try()) {
        SetType(CODE_TYPE);
        rule[0].spp = XANDLER_FUNCTION(OnShield);
        rule[0].reference = this;
        rule[1].spp = XANDLER_FUNCTION(OnKey);
        rule[1].reference = this;
        rule[2].spp = XANDLER_FUNCTION(OnChildInsert);
        rule[2].reference = this;
        rule[3].spp = XANDLER_FUNCTION(OnChildRemove);
        rule[3].reference = this;
        rule[4].spp = XANDLER_FUNCTION(OnChildArrange);
        rule[4].reference = this;
        rule[5].spp = XANDLER_FUNCTION(OnFocus);
        rule[5].reference = this;
        rule[6].spp = XANDLER_FUNCTION(OnField);
        rule[6].reference = this;
        rule[7].spp = XANDLER_FUNCTION(OnCurrentValue);
        rule[7].reference = this;
        static_throw(RegisterHandler(atomic_cast(range), rule, lengthof(range)));
        if (static_try()) {
            SFCError error;
            if ((_bar = SFZScrollBarControl::NewInstance(&error)) != null) {
                static_throw(_bar->SetParent(GetThis()));
                if (static_try()) {
                    _barWidth = DEFAULT_BAR_WIDTH;
                    _bar->SetOrientation(SFYScrollBarControl::VERTICAL);
                    _bar->SetState(true, true, false, false);
                    if ((_gatekeeper = SFZContainer::NewInstance(&error)) != null) {
                        static_throw(_gatekeeper->SetParent(GetThis()));
                        if (static_try()) {
                            _gatekeeper->SetState(true, false, false, false);
                            _key.left = AVK_LEFT;
                            _key.right = AVK_RIGHT;
                            SetMaximumValue(0);
                            SetCurrentValue(-1);
                            _field = DEFAULT_FIELD_VALUE;
                            _top = -1;
                            _bottom = -1;
                            _loop   = true;
                        }
                    }
                    else {
                        static_throw(error);
                    }
                }
            }
            else {
                static_throw(error);
            }
        }
    }
}// SFYTabControl::SFYTabControl //

/*private */XANDLER_IMPLEMENT_BOOLEVENT(SFYTabControl, OnShield, invoker, event)
{
    unused(invoker);
    return (event.GetP16() == _key.left || event.GetP16() == _key.right);
}// XANDLER_IMPLEMENT_BOOLEVENT(SFYTabControl, OnShield) //

/*private */XANDLER_IMPLEMENT_BOOLEVENT(SFYTabControl, OnKey, invoker, event)
{
    Bool                                        result(false);

    unused(invoker);
    if (event.GetP16() == _key.left) {
        FocusLeft();
        result = true;
    }
    else if (event.GetP16() == _key.right) {
        FocusRight();
        result = true;
    }
    return result;
}// XANDLER_IMPLEMENT_BOOLEVENT(SFYTabControl, OnKey) //

/*private */XANDLER_IMPLEMENT_VOIDOWNER(SFYTabControl, OnChildInsert, invoker, reason, responder)
{
    static SFXEventRange::AtomRecConst          range[] = {
        { SFEVT_RESPONDER_BOUND,  SFEVT_RESPONDER_BOUND,       SFP16_BOUND_REAL,        SFP16_BOUND_REAL },
        { SFEVT_RESPONDER_STATE,  SFEVT_RESPONDER_STATE,       SFP16_STATE_VISIBLE,     SFP16_STATE_FOCUS}
    };
    SFYHandler::RuleRec                         rule[lengthof(range)];
    SFYContainerSmp                             page;

    unused(reason); unused(invoker);
    if (static_pointer_cast<SFYResponder>(_bar) != responder &&
        static_pointer_cast<SFYResponder>(_gatekeeper) != responder)
    {
        page = static_pointer_cast<SFYContainer>(SFYResponderSmp(responder));
        page->SetRealBound(GetContentBound());
        static_throw(_child.InsertLast(page.Get()));
        if (static_try()) {
            SetMaximumValue(_child.GetSize());
            if (static_try()) {
                rule[0].spp = XANDLER_FUNCTION(OnPageBound);
                rule[0].reference = this;
                rule[1].spp = XANDLER_FUNCTION(OnPageState);
                rule[1].reference = this;
                static_throw(page->RegisterHandler(atomic_cast(range), rule, lengthof(range)));
                AdjustPageVirtual(page);
            }
        }
    }
    return;
}// XANDLER_IMPLEMENT_VOIDOWNER(SFYTabControl, OnChildInsert) //

/*private */XANDLER_IMPLEMENT_VOIDOWNER(SFYTabControl, OnChildRemove, invoker, reason, responder)
{
    static SFXEventRange::AtomRecConst          range[] = {
        { SFEVT_RESPONDER_BOUND,  SFEVT_RESPONDER_BOUND,       SFP16_BOUND_REAL,        SFP16_BOUND_REAL },
        { SFEVT_RESPONDER_STATE,  SFEVT_RESPONDER_STATE,       SFP16_STATE_VISIBLE,     SFP16_STATE_FOCUS}
    };
    SFYHandler::RuleRec                         rule[lengthof(range)];
    SFYContainerSmp                             page;
    SInt32                                      index;

    unused(invoker); unused(reason);
    if (static_pointer_cast<SFYResponder>(_bar) != responder &&
        static_pointer_cast<SFYResponder>(_gatekeeper) != responder)
    {
        page = static_pointer_cast<SFYContainer>(SFYResponderSmp(responder));
        rule[0].spp = XANDLER_FUNCTION(OnPageBound);
        rule[0].reference = this;
        rule[1].spp = XANDLER_FUNCTION(OnPageState);
        rule[1].reference = this;
        page->UnregisterHandler(atomic_cast(range), rule, lengthof(range));
        index = _child.FirstIndexOf(page.Get());
        if (index >= 0) {
            _child.Remove(index);
            SetMaximumValue(_child.GetSize());
            if (index < GetTopValue()) {
                SetTopValue(GetTopValue() - 1);
            }
            if (index < _bottom) {
                --_bottom;
            }
            if (index < GetCurrentValue()) {
                SetCurrentValue(GetCurrentValue() - 1);
            }
        }
    }
    return;
}// XANDLER_IMPLEMENT_VOIDOWNER(SFYTabControl, OnChildRemove) //

/*private */XANDLER_IMPLEMENT_VOIDOWNER(SFYTabControl, OnChildArrange, invoker, reason, responder)
{
    SFYContainerSmp                             page;
    SInt32                                      index;

    unused(invoker); unused(reason);
    if (responder->IsFront()) {
        if (static_pointer_cast<SFYResponder>(_bar) != responder &&
            static_pointer_cast<SFYResponder>(_gatekeeper) != responder)
        {
            page = static_pointer_cast<SFYContainer>(SFYResponderSmp(responder));
            index = _child.FirstIndexOf(page.Get());
            if (index != -1) {
                Bind(_focus = page);
            }
            else {
                UnBind();
            }
        }
    }
    Invalidate();
    return;
}// XANDLER_IMPLEMENT_VOIDOWNER(SFYTabControl, OnChildArrange) //

/*private */XANDLER_IMPLEMENT_VOIDBOUND(SFYTabControl, OnPageBound, invoker, reason, rectangle)
{
    unused(reason); unused(rectangle);
    invoker->SetRealBound(GetContentBound());
    return;
}// XANDLER_IMPLEMENT_VOIDBOUND(SFYTabControl, OnPageBound) //

/*private */XANDLER_IMPLEMENT_VOIDSTATE(SFYTabControl, OnPageState, invoker, reason, state)
{
    unused(invoker); unused(state);
    switch (reason) {
        case SFP16_STATE_VISIBLE:
            OnPageVisible(invoker);
            break;
        case SFP16_STATE_ACTIVE:
            OnPageActive(invoker);
            break;
        case SFP16_STATE_ENABLE:
            OnPageEnable(invoker);
            break;
        case SFP16_STATE_FOCUS:
            OnPageFocus(invoker);
            break;
        default:
            break;
    }
    return;
}// XANDLER_IMPLEMENT_VOIDBOUND(SFYTabControl, OnPageState) //

/*private */XANDLER_IMPLEMENT_VOIDSTATE(SFYTabControl, OnFocus, invoker, reason, state)
{
    SFYContainerSmp                               page;

    unused(invoker); unused(reason);
    if (state) {
        if (GetCurrentValue() != -1) {
            if ((page = GetPage(GetCurrentValue())) != null) {
                page->SetStateFocus(true);
                page->ToFront();
            }
        }
    }
    return;
}// XANDLER_IMPLEMENT_VOIDSTATE(SFYTabControl, OnFocus) //

/*private */XANDLER_IMPLEMENT_VOIDVALUE(SFYTabControl, OnField, invoker, reason, value)
{
    unused(invoker); unused(reason);
    if (value > 0) {
        if (GetTopValue() != -1 && _bottom != -1) {
            _bottom = CalculateBottom(GetTopValue());
            if (_bottom < GetCurrentValue()) {
                _bottom = GetCurrentValue();
                SetTopValue(CalculateTop(_bottom));
            }
            if (_bottom == LastIndexOf(true, false, false)) {
                SetTopValue(CalculateTop(_bottom));
            }
        }
        Invalidate();
    }
    else {
        SetFieldValue(1);
    }
    return;
}// XANDLER_IMPLEMENT_VOIDVALUE(SFYTabControl, OnField, invoker, reason, value)

/*private */XANDLER_IMPLEMENT_VOIDVALUE(SFYTabControl, OnCurrentValue, invoker, reason, value)
{
    SFYContainerSmp                               prev;
    SFYContainerSmp                               page;
    SInt32                                        top;

    unused(invoker); unused(reason);
    if (value >= 0 && value < _child.GetSize()) {
        if (GetTopValue() != -1 && _bottom != -1 && GetTopValue() <= _bottom) {
            if (value < GetTopValue()) {
                top = value;
                _bottom = CalculateBottom(top);
                SetTopValue(CalculateTop(_bottom));
            }
            else if (_bottom < value) {
                _bottom = value;
                SetTopValue(CalculateTop(_bottom));
                _bottom = CalculateBottom(GetTopValue());
            }
            if ((page = GetPage(value)) != null) {
                if ((prev = GetPageFocus()) != null && prev != page) {
                    prev->SetStateFocus(false);
                }
                page->ToFront();
                page->SetStateFocus(true);
            }
        }
    }
    else {
        if ((prev = GetPageFocus()) != null) {
            prev->SetStateFocus(false);
        }
        _gatekeeper->ToFront();
        UnBind();
    }
    Invalidate();
    return;
}// XANDLER_IMPLEMENT_VOIDVALUE(SFYTabControl, OnCurrentValue, invoker, reason, value)

XANDLER_IMPLEMENT_VOIDSTATE(SFYTabControl, OnBindValid, invoker, reason, state)
{
    unused(invoker); unused(reason);
    if (!state) {
        UnBind();
    }
    return;
}// XANDLER_IMPLEMENT_VOIDBOUND(SFYTabControl, OnBindValid)

XANDLER_IMPLEMENT_VOIDBOUND(SFYTabControl, OnBindBound, invoker, reason, bound)
{
    unused(invoker); unused(reason); unused(bound);
    Listen();
    return;
}// XANDLER_IMPLEMENT_VOIDBOUND(SFYTabControl, OnBindBound)

参照

SFYResponder::SetType | SFYTabControl::CodeEnum | SFYResponder::SetParent | SFYResponder::SetState | SFZScrollBarControl::NewInstance | SFYTabControl::GetScrollBarControl | SFYScrollBarControl::SetOrientation | SFYScrollBarControl::SetOrientation | SFYTabControl::SetScrollBarWidth | SFYScrollBarControl::OrientationEnum | SFYControl::SetMaximumValue | SFYControl::SetCurrentValue | SFYTabControl::SetFieldValue | SFYTabControl::GetTabLoop | SFYTabControl::SetFocusLeftKey | SFYTabControl::SetFocusRightKey | SFZScrollBarControl | SFXEvent | SFXRGBColor | タイプ | 状態 | イベント | キーイベント[SFEVT_KEY]


SFYTabControl::~SFYTabControl
SFYTabControl クラスのデストラクタです。
[ protected, virtual ]
virtual ~SFYTabControl(Void);

解説

このデストラクタは、何も行いません。

内部実装

このデストラクタの内部実装は以下の通りです。

/*protected virtual */SFYTabControl::~SFYTabControl(Void)
{
}// SFYTabControl::~SFYTabControl //

SFYTabControl::AdjustPages
タブページの実領域と仮想領域を設定します。
[ protected, const ]
Void AdjustPages(Void);

解説

この関数は、 タブページの実領域仮想領域を設定します。

この関数は、 現在タブコントロールに挿入されているすべてのタブページの実領域と仮想領域を以下のように設定します。

タブページの実領域をタブコントロールのコンテント領域に設定します。

タブページの仮想領域をタブコントロールのコンテント領域とタブページの子レスポンダを含む最小の矩形領域に設定します。 このとき、仮想領域の始点は (0, 0) に設定します(実領域の始点と一致します)。

[Note] タブコントロールのコンテント領域

タブコントロールのコンテント領域とは、 タブコントロールの領域からヒント領域、タブ領域、ボーダー領域、スクロールバー領域を除いた矩形領域のことです。 ページの内容が表示される領域なので、コンテント領域と呼びます。

タブコントロールの具象クラスの実装では、 コンテント領域は SFYTabControl::SetContentBound 関数を使用して設定しますが、 SFYTabControl::SetContentBound 関数内では現在のコンテント領域と引数に指定された新しいコンテント領域が異なる場合は SFYTabControl::AdjustPages 関数を呼び出して各ページの実領域と仮想領域を新しいコンテント領域に合わせて再設定します。

図 322. タブコントロールのレイアウト

タブコントロールのレイアウト
[Tip] 使用方法

タブコントロールの具象クラスを実装する場合: タブコントロールのコンテント領域が変化した際には、必ずこの関数を呼び出します。 この処理により、タブページの実領域をタブコントロールのコンテント領域に一致させます(同時にタブページの仮想領域も自動的に設定されます)。 以下の使用例のコードにあるように、 SFYTabControl::AdjustPages 関数は、 タブコントロールのコンテント領域を設定する SFYTabControl::SetContentBound 関数内で呼び出されます。

タブコントロールの具象クラスを利用する場合: タブページの子レスポンダをコンテント領域外の設定した際には、必ずこの関数を呼び出します。 この呼び出しにより、"仮想領域>実領域" となるタブページの仮想領域が自動的に計算されて設定されます。

使用例

以下は、ヒント領域の高さの変更に伴いタブコントロールのコンテント領域を変更するときに、 SFYTabControl::SetContentBound 関数の中から SFYTabControl::AdjustPages 関数を呼び出して タブコントロールに挿入されているタブページの実領域と仮想領域を調整するコードです。

/*public */Void SFZTabControl::SetHintHeight(SInt16 param)
{
    if (param != _hintHeight) {
        _hintHeight = param;
        Invalidate();
        Relocate();
    }
    return;
}// SFZTabControl::SetHintHeight //

/*private */Void SFZTabControl::Relocate()
{
    SFXRectangle                                lx;
    SFXRectangle                                content;
    SFYScrollBarControlSmp                      bar;

    lx.Set(GetLocalBound());
    _rcHint.Set(SFXGrid::ZeroInstance(), SFXSize(lx.GetWidth(), _hintHeight));
    _rcTabs.Set(_rcHint.GetLeftBottom(), SFXSize(lx.GetWidth(), _tabHeight));
    _rcBody.Set(lx).SetTop(_rcTabs.GetBottom());
    content.Set(_rcBody);
    if (_border) {
        content.Deflate(TAB_BORDER_WIDTH, 0, TAB_BORDER_WIDTH, TAB_BORDER_WIDTH);
    }
    if ((bar = GetScrollBarControl()) != null) {
        if (bar->GetStateVisible()) {
            content.SubWidth(GetScrollBarWidth());
            bar->SetRealBound(SFXRectangle(content.GetRight(), content.GetY(), GetScrollBarWidth(), content.GetHeight()));
        }
    }
    SetContentBound(content);
    return;
}// SFZTabControl::Relocate //

/*protected */Void SFYTabControl::SetContentBound(SFXRectangleConstRef param)
{
    if (!param.Equals(_rcContent)) {
        _rcContent.Set(param);
        AdjustPages();
    }
    return;
}// SFYTabControl::SetContentBound //

内部実装

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

/*public */Void SFYTabControl::AdjustPages(Void) const
{
    SFYContainerSmp                             page;
    SInt32                                      count;

    if ((count = _child.GetSize()) > 0) {
        for (SInt32 i = 0; i < count; ++i) {
            if ((page = GetPage(i)) != null) {
                page->SetRealBound(GetContentBound());
                AdjustPageVirtual(page);
            }
        }
    }
    _gatekeeper->SetRealBound(GetContentBound());
    AdjustPageVirtual(_gatekeeper);
    return;
}// SFYTabControl::AdjustPages //

/*private */Void SFYTabControl::AdjustPageVirtual(SFYContainerSmp page) const
{
    SFYResponderSmp                             child;
    SInt32                                      count;
    SInt16                                      w;
    SInt16                                      h;

    if (page != null) {
        w = page->GetRealBound().GetWidth();
        h = page->GetRealBound().GetHeight();
        count = page->GetChildCount();
        for (SInt32 i = 0; i < count; ++i) {
            if ((child = page->GetChildBackward(i, false, false, false, false)) != null) {
                SFXRectangle                    rect(child->GetRealBound());
                SInt16                          v;

                w = (w < (v = rect.GetX() + rect.GetWidth())) ? v : w;
                h = (h < (v = rect.GetY() + rect.GetHeight())) ? v : h;
            }
        }
        page->SetVirtualBound(SFXRectangle(0, 0, w, h));
    }
    return;
}// SFYTabControl::AdjustPageVirtual //

参照

実領域 | 仮想領域


SFYTabControl::FirstIndexOf
指定された条件に一致する最初のタブページのインデックスを取得します。
[ public, const ]
SInt32 FirstIndexOf(
    Bool visible   // 可視状態
    Bool active    // 活性状態
    Bool enable    // 操作可能状態
);

引数

visible

可視状態のタブページを検索する場合は、この引数に true を指定します。

active

活性状態のタブページを検索する場合は、この引数と visible 引数に true を指定します。

enable

操作可能状態のタブページを検索する場合は、この引数と visible 引数と active 引数に true を指定します。

戻り値

指定された条件に一致する最初のタブページのインデックス。

解説

この関数は、 指定された条件に一致する最初のタブページのインデックスを取得します。

条件に一致するタブページが存在しない場合、-1 を返します。

visible / active / enable 引数に true または false を指定することにより、 検索対象のタブページを「可視」、「活性」、「操作可能」の状態で制限できます。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

使用例

以下の 4 通りの指定方法があります。

// SFZTabControl クラスは SFYTabControl を継承する具象クラス
SFZTabControlSmp tab;
SFZTabControlSmp a, b, c, d;
SInt32 index;

// タブページの状態を設定する
a->SetState(false, false, false, false);
b->SetState(true, false, false, false);
c->SetState(true, true, false, false);
d->SetState(true, true, true, false);

// タブページをタブコントロールに設定(挿入)する
a->SetParent(tab);  // インデックス 0 のタブページ
b->SetParent(tab);  // インデックス 1 のタブページ
c->SetParent(tab);  // インデックス 2 のタブページ
d->SetParent(tab);  // インデックス 3 のタブページ

// すべてのタブページ中で最初のインデックスを取得する
index = tab->FirstIndexOf(false, false, false);  // index = 0

// 可視状態のタブページ中で最初のインデックスを取得する
index = tab->FirstIndexOf(true, false, false);   // index = 1

// 活性状態のタブページ中で最初のインデックスを取得する
index = tab->FirstIndexOf(true, true, false);    // index = 2

// 操作可能状態のタブページ中で最初のインデックスを取得する
index = tab->FirstIndexOf(true, true, true);     // index = 3

参照

SFYTabControl::LastIndexOf | SFYTabControl::NextIndexOf | SFYTabControl::PrevIndexOf


SFYTabControl::FocusLeft
フォーカスを左のタブページに移動します。
[ public ]
Void FocusLeft(Void);

解説

この関数は、フォーカスを左のタブページに移動します。

現在フォーカスを持つタブページが最初のタブページの場合、 SFYTabControl::GetTabLoop() の値より動作が異なります。

値が true なら、フォーカスは最後のタブページに移動します。

値が false なら、フォーカスは最初のページのままです。

[Note] 注意

フォーカスは、操作可能状態にあるタブページにしか移動しません。

[Note] 注意

この関数は、 SFYTabControl::SetFocusLeftKey 関数で設定した左フォーカス移動キーの SFEVT_KEY イベント (キーイベント[SFEVT_KEY])を受信したときに呼び出されます。

参照

SFYTabControl::FocusRight | SFYTabControl::SetFocusLeftKey | SFYTabControl::SetTabLoop


SFYTabControl::FocusPage
指定されたインデックスのタブページにフォーカスを移動します。
[ public ]
SFCError FocusPage(
    SInt32 index   // ページのインデックス
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 指定されたページが存在しないとき: SFERR_INVALID_PARAM
  • 指定されたページが不活性状態のとき: SFERR_INVALID_STATE

解説

この関数は、指定されたインデックスのタブページにフォーカスを移動します。

[Note] 注意

タブコントロールのフォーカス状態が ON である時に呼び出す必要があります。

参照

SFYControl::GetCurrentValue


SFYTabControl::FocusRight
フォーカスを右のタブページに移動します。
[ public ]
Void FocusRight(Void);

解説

この関数は、フォーカスを右のタブページに移動します。

現在フォーカスを持つページが最後のページの場合、 SFYTabControl::GetTabLoop() の値により動作が異なります。

値が true なら、フォーカスは最初のタブページに移動します。

値が false なら、フォーカスは最後のページのままです。

[Note] 注意

フォーカスは、操作可能状態にあるタブページにしか移動しません。

[Note] 注意

この関数は、 SFYTabControl::SetFocusRightKey 関数で設定した右フォーカス移動キーの SFEVT_KEY イベント (キーイベント[SFEVT_KEY])を受信したときに呼び出されます。

参照

SFYTabControl::FocusLeft | SFYTabControl::SetFocusRightKey | SFYTabControl::SetTabLoop


SFYTabControl::GetBottomValue
現在最右端に表示されているタブに対応するタブページのインデックスを取得します。
[ public, const ]
SInt32 GetBottomValue(Void);

戻り値

現在最右端に表示されているタブに対応するタブページのインデックス。

解説

この関数は、現在最右端に表示されているタブに対応するタブページのインデックスを取得します。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

参照

SFYTabControl::GetTopValue


SFYTabControl::GetContentBound
タブコントロールに設定されるタブページの実領域を取得します。
[ public, const ]
SFXRectangleConstRef GetContentBound(Void);

戻り値

タブコントロールに設定されるタブページの実領域。

解説

この関数は、タブコントロールに設定されるタブページの実領域を取得します。

[Note] 注意

SFYTabControl::AdjustPages 関数を呼び出したときに、設定されるページの実領域です。

参照

SFYTabControl::SetContentBound | SFYTabControl::AdjustPages


SFYTabControl::GetFieldValue
タブの数を取得します。
[ public ]
SInt32 GetFieldValue(Void);

戻り値

タブの数。

解説

この関数は、 タブの数を取得します。

参照

SFYTabControl::SetFieldValue


SFYTabControl::GetFocusLeftKey
左のタブにフォーカスを移動させるキーを取得します。
[ public, const ]
AVKType GetFocusLeftKey(Void);

戻り値

左のタブにフォーカスを移動させるキー(AVKType)。

解説

この関数は、左のタブにフォーカスを移動させるキーを取得します。

参照

SFYTabControl::SetFocusLeftKey | SFYTabControl::FocusLeft | AVKType


SFYTabControl::GetFocusRightKey
右のタブにフォーカスを移動させるキーを取得します。
[ public, const ]
AVKType GetFocusRightKey(Void);

戻り値

右のタブにフォーカスを移動させるキー(AVKType)。

解説

この関数は、右のタブにフォーカスを移動させるキーを取得します。

参照

SFYTabControl::SetFocusRightKey | SFYTabControl::FocusRight | AVKType


SFYTabControl::GetIndex
指定されたタブページのインデックスを取得します。
[ public, const ]
SInt32 GetIndex(
    SFYContainerSmpConstRef tabpage   // タブページ
);

戻り値

指定されたタブページのインデックス。

解説

この関数は、指定されたタブページのインデックスを取得します。

指定されたタブページが存在しない場合は -1 を返します。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

参照

SFYTabControl::GetPage


SFYTabControl::GetMaximumValue
[廃止予定] タブページの総数を取得します。
[ public, const ]
SInt32 GetMaximumValue(Void);

解説

この関数は、タブページの総数を取得します。

[Note] 廃止予定

この API は、SophiaFramework UNIVERSE 6.0 で廃止される予定です。

この関数の代わりに SFYTabControl::GetPageCount 関数を使用してください。

参照

SFYTabControl::GetPageCount


SFYTabControl::GetPage
指定されたインデックスを持つタブページを取得します。
[ public, const ]
SFYContainerSmp GetPage(
    SInt32 index   // インデックス
);

戻り値

指定されたインデックスを持つタブページ。

解説

この関数は、指定されたインデックスを持つタブページを取得します。

指定されたインデックスを持つタブページが存在しない場合は、 SFYContainerSmp::EmptyInstance() を返します。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

参照

SFYTabControl::GetIndex | SFXResponderPointer::EmptyInstance | SFYContainer


SFYTabControl::GetPageCount
検索条件に一致するタブページの数を取得します。
[ public, const ]
SInt32 GetPageCount(Void);
[ public, const ]
SInt32 GetPageCount(
    Bool visible   // 可視状態
    Bool active    // 活性化状態
    Bool enable    // 操作可能状態
);

引数

visible

可視状態のタブページを検索する場合は、この引数に true を指定します。

active

活性状態のタブページを検索する場合は、この引数と visible 引数に true を指定します。

enable

操作可能状態のタブページを検索する場合は、この引数と visible 引数と active 引数に true を指定します。

戻り値

*** 戻り値の説明 ***

解説

この関数は、指定された条件に一致するタブページの数を取得します。

検索に含めるタブページを可視、活性、操作可能状態で制限できます。 条件を指定しない場合はすべてのタブページ数を取得します。

使用例

以下の 4 通りの指定方法があります。

// SFZTabControl クラスは SFYTabControl を継承する具象クラス
SFZTabControlSmp tab;
SFZTabControlSmp a, b, c, d;
SInt32 index;

// タブページの状態を設定する
a->SetState(false, false, false, false);
b->SetState(true, false, false, false);
c->SetState(true, true, false, false);
d->SetState(true, true, true, false);

// タブページをタブコントロールに設定(挿入)する
a->SetParent(tab);  // インデックス 0 のタブページ
b->SetParent(tab);  // インデックス 1 のタブページ
c->SetParent(tab);  // インデックス 2 のタブページ
d->SetParent(tab);  // インデックス 3 のタブページ

// タブページの総数を取得する
num = tab->GetPageCount();                       // num = 4

// タブページの総数を取得する(引数を指定しない方が高速)
num = tab->GetPageCount(false, false, false);    // num = 4

// 可視状態のタブページの総数を取得する
num = tab->GetPageCount(true, false, false);     // num = 3

// 活性状態のタブページの総数を取得する
num = tab->GetPageCount(true, true, false);      // num = 2

// 操作可能状態のタブページの総数を取得する
num = tab->GetPageCount(true, true, true);       // num = 1

SFYTabControl::GetSafePage
セーフページを取得します。
[ protected, const ]
SFYContainerSmpConstRef GetSafePage(Void);

戻り値

セーフページ。

解説

この関数は、セーフページを取得します。

[Note] 注意

セーフページとは、 タブページが存在しない場合や現在値が不正な場合に表示されるタブページのことです。

参照

SFYTabControl::SetSafePageBackgroundColor


SFYTabControl::GetSafePageBackgroundColor
セーフページの背景色を取得します。
[ public, const ]
SFXRGBColorConstRef GetSafePageBackgroundColor(Void);

戻り値

セーフページの背景色。

解説

この関数は、セーフページの背景色を取得します。

[Note] 注意

セーフページとは、 タブページが存在しない場合や現在値が不正な場合に表示されるタブページのことです。

参照

SFYTabControl::SetSafePageBackgroundColor | SFYTabControl::GetSafePage


SFYTabControl::GetScrollBarControl
タブコントロールで使用するスクロールバーコントロールを取得します。
[ public, const ]
SFYScrollBarControlSmpConstRef GetScrollBarControl(Void);

戻り値

タブコントロールで使用するスクロールバーコントロール。

解説

この関数は、タブコントロールで使用するスクロールバーコントロールを取得します。

参照

SFYTabControl::SetScrollBarControl


SFYTabControl::GetScrollBarWidth
タブコントロールで使用するスクロールバーコントロールの幅を取得します。[単位:ピクセル]
[ public, const ]
SInt16 GetScrollBarWidth(Void);

戻り値

タブコントロールで使用するスクロールバーコントロールの幅。[単位:ピクセル]

解説

この関数は、タブコントロールで使用するスクロールバーコントロールの幅を取得します。[単位:ピクセル]

参照

SFYTabControl::SetScrollBarWidth


SFYTabControl::GetTabLoop
タブのフォーカス移動ループフラグの値を取得します。
[ public, const ]
Bool GetTabLoop(Void);

戻り値

  • タブのフォーカス移動がループするとき: true
  • そうでないとき: false

解説

この関数は、タブのフォーカス移動ループフラグの値を取得します。

[Note] タブのフォーカス移動ループフラグについて

タブのフォーカス移動ループフラグの値に応じて以下のように振る舞います。

  • true のとき: フォーカス移動可能な最小インデックスのタブのフォーカスを左に移動できます。 この場合、フォーカスはフォーカス移動可能な最大インデックスのタブに移動し、 そのタブは最右端にしてタブ領域が表示されます。 また、フォーカス移動可能な最大インデックスのタブのフォーカスを右に移動できます。 この場合、フォーカスはフォーカス移動可能な最小インデックスのタブに移動し、 そのタブを最左端にしてタブ領域が表示されます。
  • false のとき: フォーカス移動可能な最小インデックスのタブのフォーカスを左に移動できません。 また、フォーカス移動可能な最大インデックスのタブのフォーカスを右に移動できません。

※1. フォーカス移動可能なタブとは、対応するタブページが操作可能状態であることを表します。

※2. 最小インデックスのタブは最小のインデックス値を持つタブページに対応するタブ、 最大インデックスのタブは最大のインデックス値を持つタブページに対応するタブをそれぞれ表します。

参照

SFYTabControl::SetTabLoop


SFYTabControl::GetTopValue
現在最左端に表示されているタブに対応するタブページのインデックスを取得します。
[ public, const ]
SInt32 GetTopValue(Void);

戻り値

現在最左端に表示されているタブに対応するタブページのインデックス。

解説

この関数は、現在最左端に表示されているタブに対応するタブページのインデックスを取得します。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

参照

SFYTabControl::GetBottomValue


SFYTabControl::LastIndexOf
指定された条件に一致する最後のタブページのインデックスを取得します。
[ public, const ]
SInt32 LastIndexOf(
    Bool visible   // 可視状態
    Bool active    // 活性状態
    Bool enable    // 操作可能状態
);

戻り値

指定された条件に一致する最後のタブページのインデックス。

解説

この関数は、 指定された条件に一致する最後のタブページのインデックスを取得します。

条件に一致するタブページが存在しない場合、-1 を返します。

visible / active / enable 引数に true または false を指定することにより、 検索対象のタブページを「可視」、「活性」、「操作可能」の状態で制限できます。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

使用例

以下の 4 通りの指定方法があります。

// SFZTabControl クラスは SFYTabControl を継承する具象クラス
SFZTabControlSmp tab;
SFZTabControlSmp a, b, c, d;
SInt32 index;

// タブページの状態を設定する
a->SetState(false, false, false, false);
b->SetState(true, false, false, false);
c->SetState(true, true, false, false);
d->SetState(true, true, true, false);

// タブページをタブコントロールに設定(挿入)する
a->SetParent(tab);  // インデックス 0 のタブページ
b->SetParent(tab);  // インデックス 1 のタブページ
c->SetParent(tab);  // インデックス 2 のタブページ
d->SetParent(tab);  // インデックス 3 のタブページ

// すべてのタブページ中で最後のインデックスを取得する
index = tab->LastIndexOf(false, false, false);   // index = 3

// 可視状態のタブページ中で最後のインデックスを取得する
index = tab->LastIndexOf(true, false, false);    // index = 3

// 活性状態のタブページ中で最後のインデックスを取得する
index = tab->LastIndexOf(true, true, false);     // index = 3

// 操作可能状態のタブページ中で最後のインデックスを取得する
index = tab->LastIndexOf(true, true, true);      // index = 3

参照

SFYTabControl::FirstIndexOf | SFYTabControl::NextIndexOf | SFYTabControl::PrevIndexOf


SFYTabControl::NextIndexOf
指定された条件に一致する次のタブページのインデックスを取得します。
[ public, const ]
SInt32 NextIndexOf(
    SInt32 index   // 検索の起点となるインデックス
    Bool visible   // 可視状態
    Bool active    // 活性化状態
    Bool enable    // 操作可能状態
);

引数

index

検索の起点となるインデックスを指定します。 このタブページ以降(このタブページは含まれない)が検索対象となります。

visible

可視状態のタブページを検索する場合は、この引数に true を指定します。

active

活性状態のタブページを検索する場合は、この引数と visible 引数に true を指定します。

enable

操作可能状態のタブページを検索する場合は、この引数と visible 引数と active 引数に true を指定します。

戻り値

指定された条件に一致する次のタブページのインデックス。

解説

この関数は、 指定された条件に一致する次のタブページのインデックスを取得します。

条件に一致するタブページが存在しない場合、-1 を返します。

index 引数には、検索を開始する最初のタブページを指定します。 このタブページ以降(このタブページは含まれない)が検索対象となります。

visible / active / enable 引数に true または false を指定することにより、 検索対象のタブページを「可視」、「活性」、「操作可能」の状態で制限できます。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

使用例

以下の 4 通りの指定方法があります。

// SFZTabControl クラスは SFYTabControl を継承する具象クラス
SFZTabControlSmp tab;
SFZTabControlSmp a, b, c, d;
SInt32 index;

// タブページの状態を設定する
a->SetState(true, true, true, false);
b->SetState(false, false, false, false);
c->SetState(true, false, false, false);
d->SetState(true, true, false, false);
e->SetState(true, true, true, false);

// タブページをタブコントロールに設定(挿入)する
a->SetParent(tab);  // インデックス 0 のタブページ
b->SetParent(tab);  // インデックス 1 のタブページ
c->SetParent(tab);  // インデックス 2 のタブページ
d->SetParent(tab);  // インデックス 3 のタブページ
e->SetParent(tab);  // インデックス 4 のタブページ

// インデックス 0 のタブページの次にあるタブページのインデックスを取得する
index = tab->NextIndexOf(0, false, false, false);  // index = 1

// インデックス 0 のタブページの次にある可視状態のタブページのインデックスを取得する
index = tab->NextIndexOf(0, true, false, false);   // index = 2

// インデックス 0 のタブページの次にある活性状態のタブページのインデックスを取得する
index = tab->NextIndexOf(0, true, true, false);    // index = 3

// インデックス 0 のタブページの次にある操作可能状態のタブページのインデックスを取得する
index = tab->NextIndexOf(0, true, true, true);     // index = 4

参照

SFYTabControl::FirstIndexOf | SFYTabControl::LastIndexOf | SFYTabControl::PrevIndexOf


SFYTabControl::PrevIndexOf
指定された条件に一致する前のタブページのインデックスを取得します。
[ public, const ]
SInt32 PrevIndexOf(
    SInt32 index   // 検索の起点となるインデックス
    Bool visible   // 可視状態
    Bool active    // 活性化状態
    Bool enable    // 操作可能状態
);

引数

index

検索の起点となるインデックスを指定します。 このタブページ以前(このタブページは含まれない)が検索対象となります。

visible

可視状態のタブページを検索する場合は、この引数に true を指定します。

active

活性状態のタブページを検索する場合は、この引数と visible 引数に true を指定します。

enable

操作可能状態のタブページを検索する場合は、この引数と visible 引数と active 引数に true を指定します。

戻り値

指定された条件に一致する次のタブページのインデックス。

解説

この関数は、 指定された条件に一致する前のタブページのインデックスを取得します。

条件に一致するタブページが存在しない場合、-1 を返します。

index 引数には、検索を開始する最初のタブページを指定します。 このタブページ以前(このタブページは含まれない)が検索対象となります。

visible / active / enable 引数に true または false を指定することにより、 検索対象のタブページを「可視」、「活性」、「操作可能」の状態で制限できます。

[Note] 注意

タブページのインデックスは、タブページがタブコントロールに設定(挿入)された順序を表し、 0 から始まります。

使用例

以下の 4 通りの指定方法があります。

// SFZTabControl クラスは SFYTabControl を継承する具象クラス
SFZTabControlSmp tab;
SFZTabControlSmp a, b, c, d;
SInt32 index;

// タブページの状態を設定する
a->SetState(true, true, true, false);
b->SetState(false, false, false, false);
c->SetState(true, false, false, false);
d->SetState(true, true, false, false);
e->SetState(true, true, true, false);

// タブページをタブコントロールに設定(挿入)する
a->SetParent(tab);  // インデックス 0 のタブページ
b->SetParent(tab);  // インデックス 1 のタブページ
c->SetParent(tab);  // インデックス 2 のタブページ
d->SetParent(tab);  // インデックス 3 のタブページ
e->SetParent(tab);  // インデックス 4 のタブページ

// インデックス 3 のタブページの前にあるタブページのインデックスを取得する
index = tab->PrevIndexOf(3, false, false, false);  // index = 2

// インデックス 3 のタブページの前にある可視状態のタブページのインデックスを取得する
index = tab->PrevIndexOf(3, true, false, false);   // index = 2

// インデックス 3 のタブページの前にある活性状態ページのインデックスを取得する
index = tab->PrevIndexOf(3, true, true, false);    // index = 0

// インデックス 3 のタブページの前にある操作可能状態ページのインデックスを取得する
index = tab->PrevIndexOf(3, true, true, true);     // index = 0

参照

SFYTabControl::FirstIndexOf | SFYTabControl::LastIndexOf | SFYTabControl::NextIndexOf


SFYTabControl::SetContentBound
タブコントロールのコンテント領域を設定します。
[ protected ]
Void SetContentBound(
    SFXRectangleConstRef rectangle   // 設定する領域
);

解説

この関数は、タブコントロールのコンテント領域を設定します。

[Note] タブコントロールのコンテント領域

タブコントロールのコンテント領域とは、 タブコントロールの領域からヒント領域、タブ領域、ボーダー領域、スクロールバー領域を除いた矩形領域のことです。 タブページの内容が表示される領域であるので、コンテント領域と呼びます。

この関数は、 内部で SFYTabControl::AdjustPages 関数を呼び出してタブコントロールに挿入されている各タブページの実領域と仮想領域を新しいコンテント領域に合わせて再設定します。

図 323. タブコントロールのレイアウト

タブコントロールのレイアウト

参照

SFYTabControl::GetContentBound | SFYTabControl::AdjustPages


SFYTabControl::SetFieldValue
タブの数を設定します。
[ public ]
Void SetFieldValue(
    SInt32 param   // 設定する値
);

解説

この関数は、 タブの数を設定します。

デフォルト値: 2

[Note] 注意

この関数で設定した数のタブが、 タブコントロールのタブ領域に表示されます。

参照

SFYTabControl::GetFieldValue


SFYTabControl::SetFocusLeftKey
左のタブにフォーカスを移動させるキーを設定します。
[ public ]
Void SetFocusLeftKey(
    AVKType param   // 設定するキー
);

解説

この関数は、 左のタブにフォーカスを移動させるキーを設定します。

デフォルト値: AVK_LEFT

[Note] 注意

この関数で設定した左フォーカス移動キーの SFEVT_KEY イベント (キーイベント[SFEVT_KEY])を受信すると、 SFYTabControl::FocusLeft 関数が呼び出されます。

参照

SFYTabControl::GetFocusLeftKey | SFYTabControl::FocusLeft | AVKType


SFYTabControl::SetFocusRightKey
右のタブにフォーカスを移動させるキーを設定します。
[ public ]
Void SetFocusRightKey(
    AVKType param   // value to set
);

解説

この関数は、 右のタブにフォーカスを移動させるキーを設定します。

デフォルト値: AVK_RIGHT

[Note] 注意

この関数で設定した右フォーカス移動キーの SFEVT_KEY イベント (キーイベント[SFEVT_KEY])を受信すると、 SFYTabControl::FocusRight 関数が呼び出されます。

参照

SFYTabControl::GetFocusRightKey | SFYTabControl::FocusRight | AVKType


SFYTabControl::SetSafePageBackgroundColor
セーフページの背景色を設定します。
[ public ]
Void SetSafePageBackgroundColor(
    SFXRGBColorConstRef param   // 設定する色
);

解説

この関数は、 セーフページの背景色を設定します。

デフォルト値: SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00)

[Note] 注意

セーフページとは、 タブページが存在しない場合や現在値が不正な場合に表示されるタブページのことです。

参照

SFYTabControl::GetSafePageBackgroundColor | SFYTabControl::GetSafePage


SFYTabControl::SetScrollBarControl
タブコントロールで使用するスクロールバーを設定します。
[ public ]
SFCError SetScrollBarControl(
    SFYScrollBarControlSmpConstRef param   // 設定するスクロールバーコントロール
);

戻り値

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

解説

この関数は、 タブコントロールで使用するスクロールバーコントロールを設定します。

デフォルト値: SFZScrollBarControl

使用例

以下は、標準のスクロールバーコントロールからカスタムスクロールバーコントロールに変更するためのコードです。

// スクロールバーコントロールのインスタンスを作成する
USRScrollBar bar = USRScrollBar::NewInstance();

// 可視/活性状態にする
bar->SetState(true, true, false, false);

// カスタムスクロールバーコントロールを設定する
_tab->SetScrollBarControl(bar);

参照

SFYTabControl::GetScrollBarControl | SFZScrollBarControl


SFYTabControl::SetScrollBarWidth
タブコントロールで使用するスクロールバーコントロールの幅を設定します。[単位:ピクセル]
[ public ]
Void SetScrollBarWidth(
    SInt16 param   // 設定する幅
);

解説

この関数は、 タブコントロールで使用するスクロールバーコントロールの幅を取得します。[単位:ピクセル]

デフォルト値: 5 ピクセル

[Note] 注意

スクロールバーコントロールの幅を変更することにより、タブコントロールのコンテント領域が変化します。 このため、タブコントロールに挿入されているタブページの実領域と仮想領域の変更を行う必要がありますが、 この処理は内部で呼び出される SFYTabControl::SetContentBound 関数により自動的に行われますので、 開発者は考慮する必要はありません。

参照

SFYTabControl::GetScrollBarWidth | SFYTabControl::SetContentBound


SFYTabControl::SetTabLoop
タブのフォーカス移動ループフラグを設定します。
[ public ]
Void SetTabLoop(
    Bool param   // 設定する値
);

解説

この関数は、タブのフォーカス移動ループフラグを設定します。

デフォルト値: true

[Note] タブのフォーカス移動ループフラグについて

タブのフォーカス移動ループフラグの値に応じて以下のように振る舞います。

  • true のとき: フォーカス移動可能な最小インデックスのタブのフォーカスを左に移動できます。 この場合、フォーカスはフォーカス移動可能な最大インデックスのタブに移動し、 そのタブは最右端にしてタブ領域が表示されます。 また、フォーカス移動可能な最大インデックスのタブのフォーカスを右に移動できます。 この場合、フォーカスはフォーカス移動可能な最小インデックスのタブに移動し、 そのタブを最左端にしてタブ領域が表示されます。
  • false のとき: フォーカス移動可能な最小インデックスのタブのフォーカスを左に移動できません。 また、フォーカス移動可能な最大インデックスのタブのフォーカスを右に移動できません。

※1. フォーカス移動可能なタブとは、対応するタブページが操作可能状態であることを表します。

※2. 最小インデックスのタブは最小のインデックス値を持つタブページに対応するタブ、 最大インデックスのタブは最大のインデックス値を持つタブページに対応するタブをそれぞれ表します。

参照

SFYTabControl::GetTabLoop


SFYTabControl::CodeEnum
SFYTabControl クラスを表す定数です。
enum CodeEnum {
     CODE_TYPE = four_char_code('.', 't', 'a', 'b')
};
SFMTYPEDEFTYPE(CodeEnum)

参照

SFYResponder::GetType | SFYResponder::SetType