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

継承図

SFOTableCellReactor クラスの継承図

協調図

SFOTableCellReactor クラスの協調図

解説

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

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

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

[Note] 注意

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

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

  • 階層プロパティ機能 (親クラスである SFOTableCellVisitor から継承される機能です)。
  • プロパティキーの種類に基づいた値取得機能。
  • テーブルセルを描画するインターフェイス。
  • テーブルセルが選択されたときの振る舞いに関するインターフェイス。
  • テーブルセルにフォーカスが当たったときや外れたときの振る舞いに関するインターフェイス。
[Note] テーブルセル

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

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

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

参照

SFXHierarchyProperty | SFOTableCellVisitor

メンバ

コンストラクタ/デストラクタ
SFOTableCellReactor( Void )
SFOTableCellReactor クラスのコンストラクタです。
~SFOTableCellReactor( Void )
SFOTableCellReactor クラスのデストラクタです。
パブリック関数
static
SFXRectangle
Align( SFXRectangleConstRef src , SFXRectangleConstRef ref , UInt32 alignment )
対象の矩形領域をアライメントと参考領域に基づいて整列した矩形領域を返します。
UInt32 GetAlignment( Void )
階層プロパティからアライメントを取得します。
AEEFont GetFont( Void )
階層プロパティからフォントを取得します。
SFXRGBColor GetForegroundColor( Void )
階層プロパティから前景色を取得します。
SFXMargin GetMargin( Void )
テーブルセルの領域とセルの描画領域とのマージンを取得します。
SFXRGBColor GetSelectedForegroundColor( Void )
階層プロパティから選択された状態の前景色を取得します。
Bool IsEditable( Void )
編集可能であるかどうかを判別します。
ValueRec GetProperty( UInt32 key , BoolPtr found = null , Bool recursive = true ) (SFOTableCellVisitor から継承)
属性キーに対応する属性値を取得します。
Bool HasProperty( UInt32 key , Bool recursive = true ) (SFOTableCellVisitor から継承)
指定された属性キーに対応する属性値が設定されているかどうかを判定します。
SFCError SetProperty( UInt32 key , ValueRec value ) (SFOTableCellVisitor から継承)
属性キーに対応する属性値を設定します。
プロテクト関数
Bool Handle( SFXAnyRef object , SInt32 row )
テーブルセルが選択されたときの振る舞いを行います。
Void InvokeResultCell( 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 から継承)
初期化を行います。
Void SetParent( SFXHierarchyPropertyConstPtr parent ) (SFOTableCellVisitor から継承)
親プロパティを設定します。

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

解説

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


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

解説

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


SFOTableCellReactor::Align
対象の矩形領域をアライメントと参考領域に基づいて整列した矩形領域を返します。
[ public, static ]
SFXRectangle Align(
    SFXRectangleConstRef src   // 整列対象の矩形領域
    SFXRectangleConstRef ref   // 整列の参考にする矩形領域
    UInt32 alignment           // アライメント
);

戻り値

整列後の矩形領域。

解説

この関数は、 対象の矩形領域をアライメントと参考領域に基づいて整列した矩形領域を返します。

[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 //

参照

SFOTableCellReactor::GetAlignment | SFOTableCellImageReactor


SFOTableCellReactor::GetAlignment
階層プロパティからアライメントを取得します。
[ public, const ]
UInt32 GetAlignment(Void);

戻り値

UInt32 型アライメント値

解説

この関数は、 階層プロパティからアライメントを取得します。

SFLPROP_ALIGNMENT 属性を検索して、 UInt32 型のアライメント値を取得します。

UInt32 型のアライメント値は BREW の水平アライメントと垂直アライメントの論理和です。

キーが見つからないときは、(IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE) が返却されます。

[Note] BREW の水平アライメント
  • IDF_ALIGN_LEFT: 左詰め。
  • IDF_ALIGN_CENTER: 中央揃え。
  • IDF_ALIGN_RIGHT: 右詰め。
[Note] BREW の垂直アライメント
  • IDF_ALIGN_TOP: 上詰め。
  • IDF_ALIGN_MIDDLE: 中央揃え。
  • IDF_ALIGN_BOTTOM: 下詰め。

SFOTableCellReactor::GetFont
階層プロパティからフォントを取得します。
[ public, const ]
AEEFont GetFont(Void);

戻り値

フォント(AEEFont)。

解説

この関数は、 階層プロパティからフォントを取得します。

SFLPROP_FONT 属性を検索して、 AEEFont 型のフォントを取得します。

SFLPROP_FONT 属性キーが見つからないときは、AEE_FONT_NORMAL が返却されます。

参照

AEEFont


SFOTableCellReactor::GetForegroundColor
階層プロパティから前景色を取得します。
[ public, const ]
SFXRGBColor GetForegroundColor(Void);

解説

この関数は、 階層プロパティから前景色を取得します。

SFLPROP_FOREGROUND_COLOR 属性を検索して、 SFXRGBColor 型の前景色を取得します。

SFLPROP_FOREGROUND_COLOR 属性キーが見つからないときは、 SFXRGBColor(0x00, 0x00, 0x00, 0x00) [黒色] が返却されます。

参照

SFXRGBColor


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

戻り値

マージン(SFXMargin)。

解説

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

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 | SFXMargin


SFOTableCellReactor::GetSelectedForegroundColor
階層プロパティから選択された状態の前景色を取得します。
[ public, const ]
SFXRGBColor GetSelectedForegroundColor(Void);

解説

この関数は、 階層プロパティから選択された状態の前景色を取得します。

[Note] 注意

フォーカスが当たっている場合も、前景色はこの色になります。

SFLPROP_SELECTED_FOREGROUND_COLOR 属性を検索して、 SFXRGBColor 型の前景色を取得します。

SFLPROP_SELECTED_FOREGROUND_COLOR 属性キーが見つからないときは、 SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) [白色] が返却されます。

参照

SFXRGBColor


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

戻り値

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

解説

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

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

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

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

参照

SFOTableCellReactor::InvokeResultCell


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

解説

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

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

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

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

参照

SFOTableCellReactor::Handle | SFOTableCellTextReactor


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

戻り値

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

解説

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

[Note] 注意

SFLPROP_EDITABLE 属性を検索して、 テーブルセルが編集可能であるかどうかを判別します。

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


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                   // セルのフォーカス状態
);

解説

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

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