前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFOTableCellReactor
テーブルセルの描画や、テーブルセル選択時の振る舞いに関するインターフェイスを提供する抽象クラスです。
#include <SFOTableCellReactor.h.hpp>
class SFOTableCellReactor : public SFORefObject;
SFMTYPEDEFREFOBJECT(SFOTableCellReactor)
        

継承図

SFOTableCellReactor クラスの継承図

協調図

SFOTableCellReactor クラスの協調図

解説

SFOTableCellReactor クラスは、 テーブルセルの描画や、テーブルセル選択時の振る舞いに関するインターフェイスを提供する抽象クラスです。

デフォルトの具象テーブルセルリアクタークラスとして SFOTableCellTextReactor / SFOTableCellToggleReactor / SFOTableCellImageReactor クラスが提供されます。 これらの具象テーブルセルリアクタークラスを利用して、 テーブルビューのセルには列単位でテキスト、チェックボックス、画像を表示できます。 テキストとチェックボックスのセルは編集することも可能です。

テーブルビューカラム(SFOTableViewColumn)に付き 1 つのテーブルセルリアクター(SFOTableCellReactor)を関連付ける必要があります。

[Note] 注意

テーブルビューカラムとテーブルセルリアクターの関連付けは、 SFOTableViewColumn::NewInstance 関数、または SFOTableViewColumn::SetCellReactor 関数を利用して行います。

SFOTableCellReactor クラスは、 主に以下の 4 つの機能(インターフェイス)を提供します。

  • 階層プロパティ機能
  • テーブルセルを描画するインターフェイス。
  • テーブルセルが選択されたときの振る舞いに関するインターフェイス。
  • テーブルセルにフォーカスが当たったときや外れたときの振る舞いに関するインターフェイス。
[Note] テーブルセル

SFZTableView クラスの行と列で指定される 1 つの要素をテーブルセル、または単にセルと呼びます。

[Note] テーブルセルリアクター

SFOTableCellReactor クラスまたはその継承クラスをテーブルセルリアクター、 または単にセルリアクターと呼びます。

参照

SFXHierarchyProperty

メンバ

コンストラクタ/デストラクタ
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 から継承)
初期化を行います。

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

解説

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


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

解説

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


SFOTableCellReactor::Align
指定された矩形領域を基準となる矩形領域に基づいて整列した矩形領域を返します。
[ 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) を指定します。

[Note] BREW の水平アライメント

  • IDF_ALIGN_LEFT: 左詰め。
  • IDF_ALIGN_RIGHT: 右詰め。
  • IDF_ALIGN_CENTER など IDF_ALIGN_LEFT / IDF_ALIGN_RIGHT 以外: 中央揃え。

[Note] BREW の垂直アライメント

  • IDF_ALIGN_TOP: 上詰め。
  • IDF_ALIGN_BOTTOM: 下詰め。
  • IDF_ALIGN_MIDDLE など IDF_ALIGN_TOP / IDF_ALIGN_BOTTOM 以外: 中央揃え。

[Note] 注意

この関数は、整列の基準となる矩形領域には影響を与えません。

使用例

以下は、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


SFOTableCellReactor::GetAlignment
アライメントを取得します。
[ protected, const ]
UInt32 GetAlignment(Void);

戻り値

UInt32 型アライメント値

解説

この関数は、 アライメントを取得します。

内部に保持する階層プロパティ(SFXHierarchyProperty)を SFLPROP_ALIGNMENT 属性キーで検索し、 アライメント値(UInt32 型)を取得します。

アライメント値は BREW の水平アライメントと垂直アライメントの論理和で表されます。

属性キーが見つからないときは、(IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE) が返ります。

[Note] BREW の水平アライメント

  • IDF_ALIGN_NONE: 位置揃えが指定されていない。
  • IDF_ALIGN_LEFT: 左詰め。
  • IDF_ALIGN_CENTER: 中央揃え。
  • IDF_ALIGN_RIGHT: 右詰め。

[Note] BREW の垂直アライメント

  • IDF_ALIGN_NONE: 位置揃えが指定されていない。
  • IDF_ALIGN_TOP: 上詰め。
  • IDF_ALIGN_MIDDLE: 中央揃え。
  • IDF_ALIGN_BOTTOM: 下詰め。

参照

BREW API IDISPLAY フラグ | SFOTableCellReactor::GetProperty | SFXHierarchyProperty


SFOTableCellReactor::GetMargin
テーブルセルの領域とセルの描画領域のマージンを取得します。
[ protected, const ]
SFXMargin GetMargin(Void);

戻り値

マージン(SFXMargin)。

解説

この関数は、 テーブルセルの領域とセルの描画領域のマージンを取得します。

内部に保持する階層プロパティ(SFXHierarchyProperty)を SFLPROP_LEFTTOP_MARGIN_SIZE 属性キー [左上マージンサイズ] と SFLPROP_RIGHTBOTTOM_MARGIN_SIZE 属性キー [右下マージンサイズ] で検索し、 テーブルセルの領域とセルの描画領域のマージン(SFXMargin 型)を取得します。

どちらかの属性キーが見つからなかったときは、 見つからなかった方のサイズは (0, 0) になります。

どちらのの属性キーも見つからないときは、 SFXMargin(0, 0, 0, 0) が返ります。

[Note] 注意

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


SFOTableCellReactor::GetProperty
属性キーに対応する属性値を取得します。
[ public, const ]
ValueRec GetProperty(
    UInt32 key              // 検索する属性キー
    BoolPtr found = null    // null 以外の BoolPtr 値を指定すると、属性キーの有無が返る
    Bool recursive = true   // 親プロパティを再帰的に検索するかどうか
);

戻り値

指定された属性キーに対応する属性値(SFXHierarchyProperty::ValueRec)。

解説

この関数は、指定された属性キーに対応する属性値を取得します。

属性キーが見つからなかった場合、null 値が返ります。

[Note] SFXHierarchyProperty::ValueRec の null 値

SFXHierarchyProperty::ValueRec は最大 4 バイトの共用体で、null 値はその全てのビットが 0 になります。 従って、型が SFXRGBColor の場合は SFXRGBColor(0x00, 0x00, 0x00, 0x00) で黒色、Bool の場合は false となります。

found 引数を null 以外の BoolPtr 値を指定すると、 属性キーの有無が返ります。 属性キーの有無を判定するだけなら SFOTableCellReactor::HasProperty 関数も利用可能です。

recursive 引数に true を指定すると、 このクラスのプロパティに属性キーが存在しない場合は、 親プロパティが検索対象になり、。 最初にヒットした最下層クラスのプロパティの属性値が返ります。

[Note] 親プロパティ

このクラスのプロパティの親プロパティは、 SFOTableViewColumn クラスのプロパティです。 SFOTableViewColumn クラスのプロパティの親プロパティは、 SFZTableView クラスのプロパティです。

このクラスのプロパティに属性キーが存在しない場合は、 SFOTableViewColumn クラスのプロパティが検索対象となり、 SFOTableViewColumn クラスのプロパティにも属性キーが存在しない場合は、 SFZTableView クラスのプロパティが検索対象となります。

属性キーが見つかった場合、検索はその時点で終了します。

[Note] 注意

属性についての詳細は、 SFXHierarchyProperty クラスの解説を参照してください。

参照

SFOTableCellReactor::SetProperty | SFOTableCellReactor::HasProperty | SFXHierarchyProperty::ValueRec | SFXHierarchyProperty | SFOTableViewColumn


SFOTableCellReactor::Handle
テーブルセルが選択されたときの振る舞いを行います。
[ protected, virtual ]
Bool Handle(
    SFXAnyRef object   // セルオブジェクト
    SInt32 row         // 選択されたセルの行番号
);

戻り値

  • テーブルセルの値を変更した、または変更する予定であるとき: true
  • そうでないとき: false

解説

この関数は、 テーブルセルが選択されたときの振る舞いを行います。

テーブルセルの値を変更するなど何らかの処理を行ったときは、true を返却します。

SFOTableCellReactor::InvokeResultCell 関数を呼び出す以外に何も処理を行わない場合は、 false を返却します。

デフォルトの実装では、 SFOTableCellReactor::InvokeResultCell 関数を呼び出して、 常に false を返却します。

参照

SFOTableCellReactor::InvokeResultCell


SFOTableCellReactor::HasProperty
指定された属性キーに対応する属性値が設定されているかどうかを判定します。
[ public, const ]
Bool HasProperty(
    UInt32 key              // 検索する属性キー
    Bool recursive = true   // 親プロパティを再帰的に検索するかどうか
);

戻り値

  • キーが見つかったとき: true
  • そうでないとき: false

解説

この関数は、 指定された属性キーに対応する属性値が設定されているかどうかを判定します。

recursive 引数に true を指定すると、 このクラスのプロパティに属性キーが存在しない場合は、 親プロパティが検索対象になり、。 最初にヒットした最下層クラスのプロパティの属性値が返ります。

[Note] 親プロパティ

このクラスのプロパティの親プロパティは、 SFOTableViewColumn クラスのプロパティです。 SFOTableViewColumn クラスのプロパティの親プロパティは、 SFZTableView クラスのプロパティです。

このクラスのプロパティに属性キーが存在しない場合は、 SFOTableViewColumn クラスのプロパティが検索対象となり、 SFOTableViewColumn クラスのプロパティにも属性キーが存在しない場合は、 SFZTableView クラスのプロパティが検索対象となります。

属性キーが見つかった場合、検索はその時点で終了します。

[Note] 注意

属性キーの有無の判定と属性値の取得を同時に行う場合は、 SFOTableCellReactor::GetProperty 関数を使用することを推奨します。 この場合、検索の回数が半分になり、パフォーマンスは向上します。

参照

SFOTableCellReactor::GetProperty | SFOTableCellReactor::SetProperty | SFXHierarchyProperty | SFOTableViewColumn


SFOTableCellReactor::InvokeResultCell
テーブルセルの選択完了を知らせます。
[ protected ]
Void InvokeResultCell(Void);

解説

この関数は、 テーブルセルが選択されたときの振る舞いが完了したときに呼び出します。

通常、SFOTableCellReactor::Handle 関数の最後の処理で呼び出します。

[Caution] SFOTableCellReactor::InvokeResult 関数の呼び出し場所

SFOTableCellTextReactor クラスの編集モードでは、 SFOTableCellReactor::Handle 関数呼び出し終了後、 ネイティブテキスト入力画面に遷移するため、選択されたときの振る舞いが即座に完了しません。 この場合、SFOTableCellReactor::Handle 関数内で呼び出さずに、 テキストの編集が終わった時点でこの関数を呼び出すように実装されています。

参照

SFOTableCellReactor::Handle | SFOTableCellTextReactor


SFOTableCellReactor::IsEditable
編集可能であるかどうかを判別します。
[ protected, const ]
Bool IsEditable(Void);

戻り値

  • 編集可能であるとき: true
  • そうでないとき: false

解説

この関数は、 編集可能であるかどうかを判別します。

[Note] 注意

内部に保持する階層プロパティ(SFXHierarchyProperty)を SFLPROP_EDITABLE 属性キーで検索し、 テーブルセルリアクターが編集可能であるかどうかを判別します。

SFLPROP_EDITABLE 属性キーが見つからない場合は、false が返却されます。

参照

SFOTableCellReactor::GetProperty | SFXHierarchyProperty


SFOTableCellReactor::IsWidgetAttachable
ウィジェットを取り付け可能かどうかを判定します。
[ protected, virtual, const ]
Bool IsWidgetAttachable(Void);

戻り値

  • 取り付け可能のとき: true
  • そうでないとき: false

解説

この関数は、 ウィジェットを取り付け可能かどうかを判定します。

デフォルトの実装では、常に false を返却します。

[Note] true を返す場合

例えば、SFOTableCellTextReactor クラスでは、 SFLPROP_TEXT_SCROLLABLE 属性が true であるとき、 SFYSingleTextWidget ウィジェットのテキストスクロール機能を使用するので true を返却します。

参照

SFOTableCellTextReactor | SFYSingleTextWidget


SFOTableCellReactor::OffFocus
テーブルセルのフォーカスが外れたときの振る舞いを行います。
[ 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 //

参照

SFYWidget | SFOTableCellReactor::OnFocus


SFOTableCellReactor::OnFocus
テーブルセルにフォーカスが当たったときの振る舞いを行います。
[ 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 //

参照

SFYWidget | SFOTableCellReactor::OffFocus


SFOTableCellReactor::Render
テーブルセルを描画します。
[ protected, virtual, const ]
Void Render(
    SFXGraphicsPtr graphics      // グラフィックスオブジェクト
    SFXRectangleConstRef bound   // テーブルセル領域
    SFXAnyConstRef object        // セルオブジェクト
    SInt32 row                   // 描画するセルの行番号
    Bool active                  // セルの活性状態
    Bool focus                   // セルのフォーカス状態
);

解説

この関数は、 セルの領域内にセルオブジェクトの内容を活性状態、フォーカス状態にもとづいて描画します。

デフォルトの実装では何も行いません。


SFOTableCellReactor::SetProperty
属性キーに対応する属性値を設定します。
[ public ]
SFCError SetProperty(
    UInt32 key       // 設定する属性キー
    ValueRec value   // 設定する属性値
);

戻り値

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

解説

この関数は、 指定された属性キーに対応する属性値を設定します。

使用例

以下は、セルのテキストを編集可能にするコードです。

SFOTableCellReactorSmp rtor;

rtor = SFOTableCellTextReactor::NewInstance();
rtor->SetProperty(SFLPROP_EDITABLE, true);

参照

SFOTableCellReactor::GetProperty | SFOTableCellReactor::HasProperty | SFXHierarchyProperty::ValueRec | SFXHierarchyProperty | SFOTableCellTextReactor