SophiaFramework UNIVERSE 5.3 |
#include <SFOTableCellReactor.h.hpp>
class SFOTableCellReactor : public SFORefObject;
SFMTYPEDEFREFOBJECT(SFOTableCellReactor)
SFOTableCellReactor クラスは、 テーブルセルの描画や、テーブルセル選択時の振る舞いに関するインターフェイスを提供する抽象クラスです。
デフォルトの具象テーブルセルリアクタークラスとして SFOTableCellTextReactor / SFOTableCellToggleReactor / SFOTableCellImageReactor クラスが提供されます。 これらの具象テーブルセルリアクタークラスを利用して、 テーブルビューのセルには列単位でテキスト、チェックボックス、画像を表示できます。 テキストとチェックボックスのセルは編集することも可能です。
テーブルビューカラム(SFOTableViewColumn)に付き 1 つのテーブルセルリアクター(SFOTableCellReactor)を関連付ける必要があります。
注意 | |
---|---|
テーブルビューカラムとテーブルセルリアクターの関連付けは、 SFOTableViewColumn::NewInstance 関数、または SFOTableViewColumn::SetCellReactor 関数を利用して行います。 |
SFOTableCellReactor クラスは、 主に以下の 4 つの機能(インターフェイス)を提供します。
テーブルセル | |
---|---|
SFZTableView クラスの行と列で指定される 1 つの要素をテーブルセル、または単にセルと呼びます。 |
テーブルセルリアクター | |
---|---|
SFOTableCellReactor クラスまたはその継承クラスをテーブルセルリアクター、 または単にセルリアクターと呼びます。 |
コンストラクタ/デストラクタ |
---|
SFOTableCellReactor( Void ) SFOTableCellReactor クラスのコンストラクタです。
|
~SFOTableCellReactor( Void ) SFOTableCellReactor クラスのデストラクタです。
|
パブリック関数 | |
---|---|
ValueRec |
GetProperty(
UInt32 key
, BoolPtr found = null
, Bool recursive = true
) 属性キーに対応する属性値を取得します。
|
Bool |
HasProperty(
UInt32 key
, Bool recursive = true
) 指定された属性キーに対応する属性値が設定されているかどうかを判定します。
|
SFCError |
SetProperty(
UInt32 key
, ValueRec value
) 属性キーに対応する属性値を設定します。
|
プロテクト関数 | |
---|---|
static SFXRectangle |
Align(
SFXRectangleConstRef src
, SFXRectangleConstRef ref
, UInt32 alignment
) 指定された矩形領域を基準となる矩形領域に基づいて整列した矩形領域を返します。
|
UInt32 |
GetAlignment( Void ) アライメントを取得します。
|
SFXMargin |
GetMargin( Void ) テーブルセルの領域とセルの描画領域のマージンを取得します。
|
Bool |
Handle(
SFXAnyRef object
, SInt32 row
) テーブルセルが選択されたときの振る舞いを行います。
|
Void |
InvokeResultCell( Void ) テーブルセルの選択完了を知らせます。
|
Bool |
IsEditable( Void ) 編集可能であるかどうかを判別します。
|
Bool |
IsWidgetAttachable( Void ) ウィジェットを取り付け可能かどうかを判定します。
|
Void |
OffFocus(
SInt32 row
, SFYWidgetSmpPtr widget
) テーブルセルのフォーカスが外れたときの振る舞いを行います。
|
Void |
OnFocus(
SFXRectangleConstRef bound
, SFXAnyConstRef object
, SInt32 row
, SFYWidgetSmpPtr widget
) テーブルセルにフォーカスが当たったときの振る舞いを行います。
|
Void |
Render(
SFXGraphicsPtr graphics
, SFXRectangleConstRef bound
, SFXAnyConstRef object
, SInt32 row
, Bool active
, Bool focus
) テーブルセルを描画します。
|
static SFORefObjectSmp |
Factory(
SFORefObjectPtr object
, SFCErrorPtr exception
)
(SFORefObject から継承)
NewInstance 関数の実装を補助します。
|
SFCError |
Initialize( Void )
(SFORefObject から継承)
初期化を行います。
|
[ protected, explicit ] SFOTableCellReactor(Void);
このコンストラクタは、 何も行いません。
[ protected, virtual ] ~SFOTableCellReactor(Void);
このデストラクタは、 何も行いません。
[ protected, static ] SFXRectangle Align( SFXRectangleConstRef src // 整列の対象となる矩形領域 SFXRectangleConstRef ref // 整列の基準となる矩形領域 UInt32 alignment // アライメントの値 );
整列後の矩形領域。
この関数は、 指定された矩形領域を基準となる矩形領域に基づいて整列した矩形領域を返します。
src 引数には、整列の対象となる矩形領域を指定します。
ref 引数には、整列の基準となる矩形領域を指定します。
alignment 引数には、 BREW の IDISPLAY フラグ の IDF_ALIGN_*** フラグ(水平方向と垂直方向のアラインメント)の論理和で指定します。
水平方向について IDF_ALIGN_LEFT / IDF_ALIGN_RIGHT 以外のフラグ、 垂直方向について IDF_ALIGN_TOP / IDF_ALIGN_BOTTOM 以外のフラグを ON にした場合は中央揃えになります。
例えば、『左詰め / 上詰めのアラインメント』の場合は、(IDF_ALIGN_LEFT | IDF_ALIGN_TOP) を指定します。
BREW の水平アライメント | |
---|---|
|
BREW の垂直アライメント | |
---|---|
|
注意 | |
---|---|
この関数は、整列の基準となる矩形領域には影響を与えません。 |
以下は、SFOTableCellImageReactor::Render 関数の内部実装コードにおける使用例です。
/*public virtual */Void SFOTableCellImageReactor::Render(SFXGraphicsPtr graphics, SFXRectangleConstRef bound, SFXAnyConstRef object, SInt32 row, Bool active, Bool focus) const { AEEImageInfo info; SFXRectangle rx; SFXRectangle content; SFXRectangle clip; SFBImageSmpPtr ptr; SFBImageSmp image; unused(row); unused(active); unused(focus); if ((ptr = any_cast<SFBImageSmp>(const_cast<SFXAnyPtr>(&object))) != null) { if ((image = *ptr) != null) { image->GetInfo(&info); if (info.cx > 0 && info.cy > 0) { clip.Set(graphics->GetClip()); content.Set(SFXRectangle(bound).Deflate(GetMargin())); graphics->SetClip(SFXRectangle(content).Intersection(clip)); rx.SetSize(info.cx, info.cy); rx.Set(Align(rx, content, GetAlignment())); graphics->DrawImage(image, rx.GetOrigin()); graphics->SetClip(clip); } } } return; }// SFOTableCellImageReactor::Render //
この関数の内部実装は以下の通りです。
/*public static */SFXRectangle SFOTableCellReactor::Align(SFXRectangleConstRef src, SFXRectangleConstRef ref, UInt32 alignment) { SFXRectangle result; result.Set(src); if (alignment & IDF_ALIGN_LEFT) { result.SnapLeft(ref.GetLeft()); } else if (alignment & IDF_ALIGN_RIGHT) { result.SnapRight(ref.GetRight()); } else { result.SnapCenter(ref.GetCenter()); } if (alignment & IDF_ALIGN_TOP) { result.SnapTop(ref.GetTop()); } else if (alignment & IDF_ALIGN_BOTTOM) { result.SnapBottom(ref.GetBottom()); } else { result.SnapMiddle(ref.GetMiddle()); } return result; }// SFOTableCellReactor::Align //
BREW API IDISPLAY フラグ | SFOTableCellReactor::GetAlignment | SFOTableCellImageReactor::Render | SFOTableCellImageReactor
[ protected, const ] UInt32 GetAlignment(Void);
UInt32 型アライメント値
この関数は、 アライメントを取得します。
内部に保持する階層プロパティ(SFXHierarchyProperty)を SFLPROP_ALIGNMENT 属性キーで検索し、 アライメント値(UInt32 型)を取得します。
アライメント値は BREW の水平アライメントと垂直アライメントの論理和で表されます。
属性キーが見つからないときは、(IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE) が返ります。
BREW の水平アライメント | |
---|---|
|
BREW の垂直アライメント | |
---|---|
|
[ protected, const ] SFXMargin GetMargin(Void);
マージン(SFXMargin)。
この関数は、 テーブルセルの領域とセルの描画領域のマージンを取得します。
内部に保持する階層プロパティ(SFXHierarchyProperty)を SFLPROP_LEFTTOP_MARGIN_SIZE 属性キー [左上マージンサイズ] と SFLPROP_RIGHTBOTTOM_MARGIN_SIZE 属性キー [右下マージンサイズ] で検索し、 テーブルセルの領域とセルの描画領域のマージン(SFXMargin 型)を取得します。
どちらかの属性キーが見つからなかったときは、 見つからなかった方のサイズは (0, 0) になります。
どちらのの属性キーも見つからないときは、 SFXMargin(0, 0, 0, 0) が返ります。
注意 | |
---|---|
SFOTableCellToggleReactor クラスでは、 SFLPROP_LEFTTOP_MARGIN_SIZE 属性と SFLPROP_RIGHTBOTTOM_MARGIN_SIZE 属性は共に (1, 1) に初期化されます。 SFOTableCellTextReactor クラスでは、 SFLPROP_LEFTTOP_MARGIN_SIZE 属性と SFLPROP_RIGHTBOTTOM_MARGIN_SIZE 属性は共に (2, 1) に初期化されます。 |
SFOTableCellToggleReactor::Initialize | SFOTableCellTextReactor::Initialize | SFOTableCellReactor::GetProperty | SFXHierarchyProperty | SFXMargin
[ public, const ] ValueRec GetProperty( UInt32 key // 検索する属性キー BoolPtr found = null // null 以外の BoolPtr 値を指定すると、属性キーの有無が返る Bool recursive = true // 親プロパティを再帰的に検索するかどうか );
指定された属性キーに対応する属性値(SFXHierarchyProperty::ValueRec)。
この関数は、指定された属性キーに対応する属性値を取得します。
属性キーが見つからなかった場合、null 値が返ります。
SFXHierarchyProperty::ValueRec の null 値 | |
---|---|
SFXHierarchyProperty::ValueRec は最大 4 バイトの共用体で、null 値はその全てのビットが 0 になります。 従って、型が SFXRGBColor の場合は SFXRGBColor(0x00, 0x00, 0x00, 0x00) で黒色、Bool の場合は false となります。 |
found 引数を null 以外の BoolPtr 値を指定すると、 属性キーの有無が返ります。 属性キーの有無を判定するだけなら SFOTableCellReactor::HasProperty 関数も利用可能です。
recursive 引数に true を指定すると、 このクラスのプロパティに属性キーが存在しない場合は、 親プロパティが検索対象になり、。 最初にヒットした最下層クラスのプロパティの属性値が返ります。
親プロパティ | |
---|---|
このクラスのプロパティの親プロパティは、 SFOTableViewColumn クラスのプロパティです。 SFOTableViewColumn クラスのプロパティの親プロパティは、 SFZTableView クラスのプロパティです。 このクラスのプロパティに属性キーが存在しない場合は、 SFOTableViewColumn クラスのプロパティが検索対象となり、 SFOTableViewColumn クラスのプロパティにも属性キーが存在しない場合は、 SFZTableView クラスのプロパティが検索対象となります。 属性キーが見つかった場合、検索はその時点で終了します。 |
注意 | |
---|---|
属性についての詳細は、 SFXHierarchyProperty クラスの解説を参照してください。 |
SFOTableCellReactor::SetProperty | SFOTableCellReactor::HasProperty | SFXHierarchyProperty::ValueRec | SFXHierarchyProperty | SFOTableViewColumn
この関数は、 テーブルセルが選択されたときの振る舞いを行います。
テーブルセルの値を変更するなど何らかの処理を行ったときは、true を返却します。
SFOTableCellReactor::InvokeResultCell 関数を呼び出す以外に何も処理を行わない場合は、 false を返却します。
デフォルトの実装では、 SFOTableCellReactor::InvokeResultCell 関数を呼び出して、 常に false を返却します。
[ public, const ] Bool HasProperty( UInt32 key // 検索する属性キー Bool recursive = true // 親プロパティを再帰的に検索するかどうか );
この関数は、 指定された属性キーに対応する属性値が設定されているかどうかを判定します。
recursive 引数に true を指定すると、 このクラスのプロパティに属性キーが存在しない場合は、 親プロパティが検索対象になり、。 最初にヒットした最下層クラスのプロパティの属性値が返ります。
親プロパティ | |
---|---|
このクラスのプロパティの親プロパティは、 SFOTableViewColumn クラスのプロパティです。 SFOTableViewColumn クラスのプロパティの親プロパティは、 SFZTableView クラスのプロパティです。 このクラスのプロパティに属性キーが存在しない場合は、 SFOTableViewColumn クラスのプロパティが検索対象となり、 SFOTableViewColumn クラスのプロパティにも属性キーが存在しない場合は、 SFZTableView クラスのプロパティが検索対象となります。 属性キーが見つかった場合、検索はその時点で終了します。 |
注意 | |
---|---|
属性キーの有無の判定と属性値の取得を同時に行う場合は、 SFOTableCellReactor::GetProperty 関数を使用することを推奨します。 この場合、検索の回数が半分になり、パフォーマンスは向上します。 |
SFOTableCellReactor::GetProperty | SFOTableCellReactor::SetProperty | SFXHierarchyProperty | SFOTableViewColumn
[ protected ] Void InvokeResultCell(Void);
この関数は、 テーブルセルが選択されたときの振る舞いが完了したときに呼び出します。
通常、SFOTableCellReactor::Handle 関数の最後の処理で呼び出します。
SFOTableCellReactor::InvokeResult 関数の呼び出し場所 | |
---|---|
SFOTableCellTextReactor クラスの編集モードでは、 SFOTableCellReactor::Handle 関数呼び出し終了後、 ネイティブテキスト入力画面に遷移するため、選択されたときの振る舞いが即座に完了しません。 この場合、SFOTableCellReactor::Handle 関数内で呼び出さずに、 テキストの編集が終わった時点でこの関数を呼び出すように実装されています。 |
[ protected, const ] Bool IsEditable(Void);
この関数は、 編集可能であるかどうかを判別します。
注意 | |
---|---|
内部に保持する階層プロパティ(SFXHierarchyProperty)を SFLPROP_EDITABLE 属性キーで検索し、 テーブルセルリアクターが編集可能であるかどうかを判別します。 SFLPROP_EDITABLE 属性キーが見つからない場合は、false が返却されます。 |
[ protected, virtual, const ] Bool IsWidgetAttachable(Void);
この関数は、 ウィジェットを取り付け可能かどうかを判定します。
デフォルトの実装では、常に false を返却します。
true を返す場合 | |
---|---|
例えば、SFOTableCellTextReactor クラスでは、 SFLPROP_TEXT_SCROLLABLE 属性が true であるとき、 SFYSingleTextWidget ウィジェットのテキストスクロール機能を使用するので true を返却します。 |
[ protected, virtual ] Void OffFocus( SInt32 row // フォーカスが外れたセルの行番号 SFYWidgetSmpPtr widget // フォーカス中に処理を委譲したウィジェット );
この関数は、 テーブルセルのフォーカスが外れたときの振る舞いを行います。
widget 引数にウィジェットのインスタンスを指定した場合は、 SFYResponder::Terminate 関数を呼び出し参照をはずします。
この関数の内部実装は以下の通りです。
/*protected virtual */Void SFOTableCellReactor::OffFocus(SInt32 row, SFYWidgetSmpPtr widget) { unused(row); if (widget != null) { if (*widget != null) { (*widget)->Terminate(); } widget->Release(); } return; }// SFOTableCellReactor::OffFocus //
[ protected, virtual ] Void OnFocus( SFXRectangleConstRef bound // セル領域 SFXAnyConstRef object // セルオブジェクト SInt32 row // フォーカスが当たったセルの行番号 SFYWidgetSmpPtr widget // フォーカス中に処理を委譲するウィジェット );
この関数は、 テーブルセルにフォーカスが当たったときの振る舞いを行います。
ウィジェットに振る舞いを委譲する場合は、 widget 引数に生成したウィジェットのインスタンスを指定します。
デフォルトの実装では何も行いません。
この関数の内部実装は以下の通りです。
/*protected virtual */Void SFOTableCellReactor::OnFocus(SFXRectangleConstRef bound, SFXAnyConstRef object, SInt32 row, SFYWidgetSmpPtr widget) { unused(bound); unused(object); unused(row); unused(widget); return; }// SFOTableCellReactor::OnFocus //
[ protected, virtual, const ] Void Render( SFXGraphicsPtr graphics // グラフィックスオブジェクト SFXRectangleConstRef bound // テーブルセル領域 SFXAnyConstRef object // セルオブジェクト SInt32 row // 描画するセルの行番号 Bool active // セルの活性状態 Bool focus // セルのフォーカス状態 );
この関数は、 セルの領域内にセルオブジェクトの内容を活性状態、フォーカス状態にもとづいて描画します。
デフォルトの実装では何も行いません。
この関数は、 指定された属性キーに対応する属性値を設定します。
以下は、セルのテキストを編集可能にするコードです。
SFOTableCellReactorSmp rtor; rtor = SFOTableCellTextReactor::NewInstance(); rtor->SetProperty(SFLPROP_EDITABLE, true);
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |