SophiaFramework UNIVERSE 5.3 |
#include <SFOTableCellToggleReactor.h.hpp>
class SFOTableCellToggleReactor : public SFOTableCellReactor;
SFMTYPEDEFREFOBJECT(SFOTableCellToggleReactor)
SFOTableCellToggleReactor クラスは、 Bool 型のセルオブジェクトに対して、 チェックボックス機能を提供するテーブルセルリアクターです。
テーブルセルをセレクトしたときにチェックマークの状態を反転させたい場合は、 SFLPROP_EDITABLE 属性を true に設定します。
コンストラクタ/デストラクタ |
---|
SFOTableCellToggleReactor( Void ) SFOTableCellToggleReactor クラスのコンストラクタです。
|
~SFOTableCellToggleReactor( Void ) SFOTableCellToggleReactor クラスのデストラクタです。
|
パブリック関数 | |
---|---|
static SFOTableCellToggleReactorSmp |
NewInstance(
SFCErrorPtr exception = null
) 新しいインスタンスを作成します。
|
ValueRec |
GetProperty(
UInt32 key
, BoolPtr found = null
, Bool recursive = true
)
(SFOTableCellReactor から継承)
属性キーに対応する属性値を取得します。
|
Bool |
HasProperty(
UInt32 key
, Bool recursive = true
)
(SFOTableCellReactor から継承)
指定された属性キーに対応する属性値が設定されているかどうかを判定します。
|
SFCError |
SetProperty(
UInt32 key
, ValueRec value
)
(SFOTableCellReactor から継承)
属性キーに対応する属性値を設定します。
|
プロテクト関数 | |
---|---|
Bool |
Handle(
SFXAnyRef object
, SInt32 row
) テーブルセルが選択されたときにチェックマークの状態を反転させます。
|
SFCError |
Initialize( Void ) 初期化を行います。
|
Void |
Render(
SFXGraphicsPtr graphics
, SFXRectangleConstRef bound
, SFXAnyConstRef object
, SInt32 row
, Bool active
, Bool focus
) テーブルセルにチェックボックスを描画します。
|
static SFXRectangle |
Align(
SFXRectangleConstRef src
, SFXRectangleConstRef ref
, UInt32 alignment
)
(SFOTableCellReactor から継承)
指定された矩形領域を基準となる矩形領域に基づいて整列した矩形領域を返します。
|
static SFORefObjectSmp |
Factory(
SFORefObjectPtr object
, SFCErrorPtr exception
)
(SFORefObject から継承)
NewInstance 関数の実装を補助します。
|
UInt32 |
GetAlignment( Void )
(SFOTableCellReactor から継承)
アライメントを取得します。
|
SFXMargin |
GetMargin( Void )
(SFOTableCellReactor から継承)
テーブルセルの領域とセルの描画領域のマージンを取得します。
|
Void |
InvokeResultCell( Void )
(SFOTableCellReactor から継承)
テーブルセルの選択完了を知らせます。
|
Bool |
IsEditable( Void )
(SFOTableCellReactor から継承)
編集可能であるかどうかを判別します。
|
Bool |
IsWidgetAttachable( Void )
(SFOTableCellReactor から継承)
ウィジェットを取り付け可能かどうかを判定します。
|
Void |
OffFocus(
SInt32 row
, SFYWidgetSmpPtr widget
)
(SFOTableCellReactor から継承)
テーブルセルのフォーカスが外れたときの振る舞いを行います。
|
Void |
OnFocus(
SFXRectangleConstRef bound
, SFXAnyConstRef object
, SInt32 row
, SFYWidgetSmpPtr widget
)
(SFOTableCellReactor から継承)
テーブルセルにフォーカスが当たったときの振る舞いを行います。
|
[ protected, explicit ] SFOTableCellToggleReactor(Void);
このコンストラクタは、 何も行いません。
[ protected, virtual ] ~SFOTableCellToggleReactor(Void);
このデストラクタは、 何も行いません。
この関数は、 テーブルセルが選択されたときにチェックマークの状態を反転させます。
編集モードであれば、選択されたテーブルセルの Bool 型セルオブジェクトに対して、真偽値を反転させます。
関数の最後で SFOTableCellReactor::InvokeResultCell 関数を呼び出します。
この関数の内部実装は以下の通りです。
/*protected virtual */Bool SFOTableCellToggleReactor::Handle(SFXAnyRef object, SInt32 row) { BoolRef toggle(*any_cast<Bool>(&object)); Bool editable; unused(row); editable = IsEditable(); if (editable) { toggle = !toggle; } InvokeResultCell(); return editable; }// SFOTableCellToggleReactor::Handle //
[ protected, virtual ] SFCError Initialize(Void);
この関数は、 (エラーが発生する可能性のある)初期化を行います。
デフォルトの実装では、 SFLPROP_LEFTTOP_MARGIN_SIZE 属性(セルの左上マージン)と SFLPROP_RIGHTBOTTOM_MARGIN_SIZE 属性(セルの右上マージン)を共に (1, 1) に設定します。
注意 | |
---|---|
この関数は SFORefObject::Factory 関数内で呼ばれます。 具象クラス固有の初期化コードがあり、エラーが発生する可能性がある場合、 オーバーライドする必要があります。 以下の内部実装にあるように、 この関数は、親クラスの Initialize() 関数を先に呼び出して実装します。 |
この関数の内部実装は以下の通りです。
/*protected */SFCError SFOTableCellToggleReactor::Initialize(Void) { static SFXSize::AtomRecConst MARGINSIZE = { 1, 1 }; SFCError error; if ((error = SFOTableCellReactor::Initialize()) == SFERR_NO_ERROR) { if ((error = SetProperty(SFLPROP_LEFTTOP_MARGIN_SIZE, MARGINSIZE)) == SFERR_NO_ERROR) { error = SetProperty(SFLPROP_RIGHTBOTTOM_MARGIN_SIZE, MARGINSIZE); } } return error; }// SFOTableCellToggleReactor::Initialize //
[ public, static ] SFOTableCellToggleReactorSmp NewInstance( SFCErrorPtr exception = null // エラー値 );
関数内部で発生したエラー値を返します。
この関数は、SFOTableCellToggleReactor インスタンスを作成します。
インスタンスの作成に成功した場合は null 以外のポインタを返します。 失敗した場合は、null ポインタを返します。
exception 引数を指定した場合、 この引数にはエラー値が返ります。
以下は、SFOTableCellToggleReactor インスタンスを生成するためのコードです。
SFOTableCellReactorSmp rtor; SFCError error; if ((rtor = SFOTableCellToggleReactor::NewInstance(&error)) != null) { // 編集可に設定する rtor->SetProperty(SFLPROP_EDITABLE, true); // .. (省略) .. }
[ protected, virtual, const ] Void Render( SFXGraphicsPtr graphics // グラフィックスオブジェクト SFXRectangleConstRef bound // テーブルセル領域 SFXAnyConstRef object // セルオブジェクト SInt32 row // 描画するセルの行番号 Bool active // セルの活性状態 Bool focus // セルのフォーカス状態 );
この関数の内部実装は以下の通りです。
/*protected virtual */Void SFOTableCellToggleReactor::Render(SFXGraphicsPtr graphics, SFXRectangleConstRef bound, SFXAnyConstRef object, SInt32 row, Bool active, Bool focus) const { SFXRectangle rxCB; SFXRectangle content; SFXRectangle clip; SFXGrid grid; Bool press(false); Bool checked(any_cast<Bool>(object)); unused(row); clip.Set(graphics->GetClip()); content.Set(SFXRectangle(bound).Deflate(GetMargin())); graphics->SetClip(SFXRectangle(content).Intersection(clip)); if (content.GetHeight() >= 28) { rxCB.SetWidth(28).SetHeight(28); rxCB.Set(Align(rxCB, content, GetAlignment())); grid.Set(DrawShadow28(graphics, rxCB.GetOrigin(), active, press)); DrawButton27(graphics, grid, active, focus, press); grid.Add(3, 3); DrawCheckmark21(graphics, grid, checked, active); } else if (content.GetHeight() >= 14) { rxCB.SetWidth(14).SetHeight(14); rxCB.Set(Align(rxCB, content, GetAlignment())); grid.Set(DrawShadow14(graphics, rxCB.GetOrigin(), active, press)); DrawButton13(graphics, grid, active, focus, press); grid.Add(2, 2); DrawCheckmark09(graphics, grid, checked, active); } graphics->SetClip(clip); return; }// SFOTableCellToggleReactor::Render // /*protected */Void SFOTableCellToggleReactor::DrawCheckmark09(SFXGraphicsPtr graphics, SFXGridConstRef grid, Bool checked, Bool active) const { static SFXLine::AtomRecConst line[] = { {{ 0, 5}, { 2, 7}}, {{ 3, 6}, { 8, 1}}, {{ 0, 6}, { 2, 8}}, {{ 3, 7}, { 8, 2}} }; RenderCheckmark(graphics, grid, atomic_cast(line), checked, active); return; }// SFOTableCellToggleReactor::DrawCheckmark09 // /*protected */Void SFOTableCellToggleReactor::DrawCheckmark21(SFXGraphicsPtr graphics, SFXGridConstRef grid, Bool checked, Bool active) const { static SFXLine::AtomRecConst line[] = { {{ 0, 15}, { 4, 19}}, {{ 5, 18}, {20, 3}}, {{ 0, 16}, { 4, 20}}, {{ 5, 19}, {20, 4}} }; RenderCheckmark(graphics, grid, atomic_cast(line), checked, active); return; }// SFOTableCellToggleReactor::DrawCheckmark21 // /*protected */Void SFOTableCellToggleReactor::DrawButton13(SFXGraphicsPtr graphics, SFXGridConstRef grid, Bool active, Bool focus, Bool press) const { static SFXRectangle::AtomRecConst rectangle[] = { {{ 0, 0}, {13, 13}}, {{ 2, 2}, { 9, 9}} }; RenderButton(graphics, grid, atomic_cast(rectangle), active, focus, press); return; }// SFOTableCellToggleReactor::DrawButton13 // /*protected */Void SFOTableCellToggleReactor::DrawButton27(SFXGraphicsPtr graphics, SFXGridConstRef grid, Bool active, Bool focus, Bool press) const { static SFXRectangle::AtomRecConst rectangle[] = { {{ 0, 0}, {27, 27}}, {{ 2, 2}, {23, 23}} }; RenderButton(graphics, grid, atomic_cast(rectangle), active, focus, press); return; }// SFOTableCellToggleReactor::DrawButton27 // /*protected */SFXGrid SFOTableCellToggleReactor::DrawShadow14(SFXGraphicsPtr graphics, SFXGridConstRef grid, Bool active, Bool press) const { static SFXLine::AtomRecConst line[][2] = { {{{13, 0}, {13, 13}}, {{ 0, 13}, {13, 13}}}, {{{ 0, 0}, {13, 0}}, {{ 0, 0}, { 0, 13}}} }; SFXGrid result(grid); if (press) { RenderShadow(graphics, grid, atomic_cast(line[1]), active); result.Add(1, 1); } else { RenderShadow(graphics, grid, atomic_cast(line[0]), active); result.Add(0, 0); } return result; }// SFOTableCellToggleReactor::DrawShadow14 // /*protected */SFXGrid SFOTableCellToggleReactor::DrawShadow28(SFXGraphicsPtr graphics, SFXGridConstRef grid, Bool active, Bool press) const { static SFXLine::AtomRecConst line[][2] = { {{{27, 0}, {27, 27}}, {{ 0, 27}, {27, 27}}}, {{{ 0, 0}, {27, 0}}, {{ 0, 0}, { 0, 27}}} }; SFXGrid result(grid); if (press) { RenderShadow(graphics, grid, atomic_cast(line[1]), active); result.Add(1, 1); } else { RenderShadow(graphics, grid, atomic_cast(line[0]), active); result.Add(0, 0); } return result; }// SFOTableCellToggleReactor::DrawShadow28 // /*private */Void SFOTableCellToggleReactor::RenderCheckmark(SFXGraphicsPtr graphics, SFXGridConstRef grid, SFXLineConst line[4], Bool checked, Bool active) const { SFXRGBColor rgb; SFXRGBColor checkmark(0x00, 0x00, 0x00, 0x00); Bool checkmarkBright; if (checked) { graphics->SetTranslate(-grid); rgb.Set(checkmark); checkmarkBright = checkmark.GetBrightness() > 0x7F; if (!active) { (checkmarkBright) ? rgb.SubRGB(0x44) : rgb.AddRGB(0x44); } graphics->SetForeColor(rgb); graphics->DrawLine(line[0]); graphics->DrawLine(line[1]); (checkmarkBright) ? rgb.SubRGB(0x44) : rgb.AddRGB(0x44); graphics->SetForeColor(rgb); graphics->DrawLine(line[2]); graphics->DrawLine(line[3]); graphics->SetTranslate(grid); } return; }// SFOTableCellToggleReactor::RenderCheckmark // /*private */Void SFOTableCellToggleReactor::RenderButton(SFXGraphicsPtr graphics, SFXGridConstRef grid, SFXRectangleConst rectangle[2], Bool active, Bool focus, Bool press) const { SFXBevelColor bevel; SFXRGBColorConstRef base(GetButtonColor().GetBase()); SFXRGBColor rgb; graphics->SetTranslate(-grid); bevel.Set(focus ? (GetFocusColor()) : (GetButtonColor())); rgb.Set(base); if (!active) { bevel.SetLight(bevel.GetBase()); bevel.SetDark(bevel.GetBase()); } if (press) { if (base.GetBrightness() > 0x7F) { bevel.SubRGB(0x11); rgb.SubRGB(0x11); } else { bevel.AddRGB(0x11); rgb.AddRGB(0x11); } } graphics->FillBevelRectangle(rectangle[0], bevel); graphics->FillRectangle(rectangle[1], rgb); graphics->SetTranslate(grid); return; }// SFOTableCellToggleReactor::RenderButton // /*private */Void SFOTableCellToggleReactor::RenderShadow(SFXGraphicsPtr graphics, SFXGridConstRef grid, SFXLineConst line[2], Bool active) const { SFXRGBColor rgb; graphics->SetTranslate(-grid); rgb.Set(GetShadowColor()); if (!active) { (rgb.GetBrightness() > 0x7F) ? rgb.SubRGB(0x44) : rgb.AddRGB(0x44); } graphics->SetForeColor(rgb); graphics->DrawLine(line[0]); graphics->DrawLine(line[1]); graphics->SetTranslate(grid); return; }// SFOTableCellToggleReactor::RenderShadow // /*private static */SFXBevelColorConstRef SFOTableCellToggleReactor::GetFocusColor(Void) { static SFXBevelColor::AtomRecConst bevel = { {{{0x00, 0xCC, 0xCC, 0xCC}}}, {{{0x00, 0xAA, 0xAA, 0xAA}}}, {{{0x00, 0x55, 0x55, 0x55}}} }; return bevel; }// SFOTableCellToggleReactor::GetFocusColor // /*private static */SFXBevelColorConstRef SFOTableCellToggleReactor::GetButtonColor(Void) { static SFXBevelColor::AtomRecConst bevel = { {{{0x00, 0xFF, 0xFF, 0xFF}}}, {{{0x00, 0xDD, 0xDD, 0xDD}}}, {{{0x00, 0x88, 0x88, 0x88}}} }; return bevel; }// SFOTableCellToggleReactor::GetButtonColor // /*private static */SFXRGBColorConstRef SFOTableCellToggleReactor::GetShadowColor(Void) { static SFXRGBColor::AtomRecConst rgb = { {{0x00, 0x00, 0x00, 0x00}} }; return rgb; }// SFOTableCellToggleReactor::GetShadowColor //
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |