SophiaFramework UNIVERSE 5.3 |
#include <SFOTableCellTextReactor.h.hpp>
class SFOTableCellTextReactor : public SFOTableCellReactor;
SFMTYPEDEFREFOBJECT(SFOTableCellTextReactor)
SFOTableCellTextReactor クラスは、 SFXAnsiString 型、または SFXWideString 型のセルオブジェクトに対して、 テキストの描画や編集の機能を提供するテーブルセルリアクターです。
テキストの編集は、 SFOTableCellTextReactor::NewInstance 関数、または SFOTableCellTextReactor::SetEditor 関数で設定する ネイティブテキスト入力コントロールエディタによって行われます。
テーブルセルを選択(フォーカス)したときに、 テキストの長さがテーブルセルの幅よりも大きければ、 テキストは SFYSingleTextWidget クラスの機能を利用してスクロールします。
テキストの編集 | |
---|---|
テキストを編集するには、SFLPROP_EDITABLE 属性を true に設定する必要があります。 この属性が設定されていない場合は、false として扱われ、テキストは編集できません。 |
スクロールの抑制 | |
---|---|
テキストのスクロールを抑制するには、 SFLPROP_TEXT_SCROLLABLE 属性を false に設定する必要があります。 この属性が設定されていない場合は、true として扱われ、テキストはスクロールできます。 |
コンストラクタ/デストラクタ |
---|
SFOTableCellTextReactor( Void ) SFOTableCellTextReactor クラスのコンストラクタです。
|
SFOTableCellTextReactor(
SFXBaseEditorPtr editor
) SFOTableCellTextReactor クラスのコンストラクタです。
|
~SFOTableCellTextReactor SFOTableCellTextReactor クラスのデストラクタです。
|
パブリック関数 | |
---|---|
SFXBaseEditorPtr |
GetEditor( Void ) ネイティブテキスト入力コントロールエディタを取得します。
|
AEETextInputMode |
GetInputMode( Void ) ネイティブテキスト入力コントロールの入力モードを取得します。
|
UInt16 |
GetMaximumLength( Void ) ネイティブテキスト入力コントロールがサポートするテキストサイズの最大値を取得します。
|
Bool |
GetPasswordMode( Void ) ネイティブテキスト入力コントロールのパスワードモードを取得します。
|
static SFOTableCellTextReactorSmp |
NewInstance(
SFCErrorPtr exception = null
) 新しいインスタンスを作成します。
|
static SFOTableCellTextReactorSmp |
NewInstance(
SFXBaseEditorPtr editor
, SFCErrorPtr exception = null
) 新しいインスタンスを作成します。
|
Void |
SetEditor(
SFXBaseEditorPtr param
) ネイティブテキスト入力コントロールエディタを設定します。
|
Void |
SetInputMode(
AEETextInputMode param
) ネイティブテキスト入力の入力モードを設定します。
|
SFCError |
SetMaximumLength(
UInt16 param
) ネイティブテキスト入力コントロールがサポートするテキストサイズの最大値を設定します。
|
Void |
SetPasswordMode(
Bool param
) パスワードモードを設定します。
|
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 から継承)
属性キーに対応する属性値を設定します。
|
プロテクト関数 | |
---|---|
static SFCError |
Convert(
SFXAnyConstRef object
, SFXWideStringPtr result
) 指定された SFXAny オブジェクトを SFXWideString 文字列に変換します。
|
Bool |
Handle(
SFXAnyRef object
, SInt32 row object
) テーブルセルが選択されたときにテキストを編集します。
|
SFCError |
Initialize( Void ) 初期化を行います。
|
Bool |
IsWidgetAttachable( Void ) ウィジェットを取り付け可能かどうかを判定します。
|
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 SFCError |
SetString(
SFXWideStringConstRef text
, SFXAnyPtr result
) 指定された SFXWideString 文字列を SFXAny オブジェクトに変換します。
|
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 から継承)
編集可能であるかどうかを判別します。
|
Void |
OffFocus(
SInt32 row
, SFYWidgetSmpPtr widget
)
(SFOTableCellReactor から継承)
テーブルセルのフォーカスが外れたときの振る舞いを行います。
|
[ protected, explicit ] SFOTableCellTextReactor(Void);
[ protected, explicit ] SFOTableCellTextReactor( SFXBaseEditorPtr editor // ネイティブテキスト入力コントロールエディタ );
このコンストラクタでは、 editor 引数を指定することにより、 このテーブルセルリアクターのネイティブテキスト入力コントロールエディタを設定することが可能です。
editor 引数を指定しない場合、 エディタには SFYApplication::GetEditor 関数で得られる値が設定されます。
エディタはテキストの編集に使用されます。
注意 | |
---|---|
このコンストラクタは SFOTableCellTextReactor::NewInstance 関数から間接的に呼び出されます。 |
SFOTableCellTextReactor::NewInstance | SFOTableCellTextReactor::SetEditor | SFYApplication::GetEditor | SFXBaseEditor | SFYResponder
このデストラクタは、 何も行いません。
[ protected, static ] SFCError Convert( SFXAnyConstRef object // 変換元セルオブジェクト SFXWideStringPtr result // 変換先文字列 );
この関数は、 指定された SFXAny オブジェクトを SFXWideString 文字列に変換します。
変換元の SFXAny オブジェクトは、 SFXAnsiString 型または SFXWideString 型の値を保持している必要があります。
SFXWideString 文字列は、result 引数に指定された場所にコピーされます。
注意 | |
---|---|
この操作は、 SFOTableCellTextReactor::SetString 関数と逆の操作になります。 |
この関数の内部実装は以下の通りです。
/*protected static */SFCError SFOTableCellTextReactor::Convert(SFXAnyConstRef object, SFXWideStringPtr result) { SFCError error(SFERR_INVALID_PARAM); if (result != null) { if (SFXAny::Contains(object, (SFXAnsiStringPtr)(null))) { error = result->Set(any_cast<SFXAnsiString>(object)); } else if (SFXAny::Contains(object, (SFXWideStringPtr)(null))) { error = result->Set(any_cast<SFXWideString>(object)); } } return error; }// SFOTableCellTextReactor::Convert //
[ public, const ] SFXBaseEditorPtr GetEditor(Void);
ネイティブテキスト入力コントロールエディタ(SFXBaseEditor)。
この関数は、 ネイティブテキスト入力コントロールエディタを取得します。
[ public, const ] AEETextInputMode GetInputMode(Void);
ネイティブテキスト入力コントロールの入力モード(AEETextInputMode)。
この関数は、 ネイティブテキスト入力コントロールに使用できるテキスト入力モードを取得します。
詳細は、BREW リファレンスの ITEXTCTL_GetInputMode() および AEETextInputMode の説明を参照してください。
[ public, const ] UInt16 GetMaximumLength(Void);
ネイティブテキスト入力コントロールがサポートするテキストサイズの最大値。
この関数は、 ネイティブテキスト入力コントロールがサポートするテキストサイズの最大値を取得します。
詳細は、BREW リファレンスの ITEXTCTL_SetMaxSize() の説明を参照してください。
[ public, const ] Bool GetPasswordMode(Void);
この関数は、 ネイティブテキスト入力コントロールのパスワードモードを取得します。
詳細は、BREW リファレンスの ITEXTCTL_SetProperties() および AEE ITextCtl のプロパティを参照してください。
SFOTableCellTextReactor::SetPasswordMode | BREW API ITEXTCTL_SetProperties | BREW API AEE ITextCtl のプロパティ
[ protected, virtual ] Bool Handle( SFXAnyRef object // セルオブジェクト SInt32 row object // 選択されたセルの行番号 );
この関数は、 テーブルセルが選択されたときにテキストを編集します。
テキストが編集可であれば、ネイティブテキスト入力コントロールを起動してテキストの編集を行います。
関数の最後で SFOTableCellReactor::InvokeResultCell 関数を呼び出します。 ただし、ネイティブテキスト入力コントロールが起動された場合は、入力が終了するまで呼び出しは遅延されます。
この関数の内部実装は以下の通りです。
/*protected virtual */Bool SFOTableCellTextReactor::Handle(SFXAnyRef object, SInt32 row) { SFXWideString text; Bool result(false); unused(row); if (_editor != null) { if (IsEditable()) { if (Convert(object, &text) == SFERR_NO_ERROR) { if (_editProperty.SetText(text) == SFERR_NO_ERROR) { if (_editor->Open(&_editProperty, XALLBACK_INTERNAL(OnEditor)) == SFERR_NO_ERROR) { _text = &object; result = true; } } } } } if (!result) { InvokeResultCell(); } return result; }// SFOTableCellTextReactor::Handle //
[ protected, virtual ] SFCError Initialize(Void);
この関数は、 (エラーが発生する可能性のある)初期化を行います。
デフォルトの実装では、 SFLPROP_LEFTTOP_MARGIN_SIZE 属性(セルの左上マージン)と SFLPROP_RIGHTBOTTOM_MARGIN_SIZE 属性(セルの右上マージン)を共に (2, 1) に設定します。
注意 | |
---|---|
この関数は SFORefObject::Factory 関数内で呼ばれます。 具象クラス固有の初期化コードがあり、エラーが発生する可能性がある場合、 オーバーライドする必要があります。 以下の内部実装にあるように、 この関数は、親クラスの Initialize() 関数を先に呼び出して実装します。 |
この関数の内部実装は以下の通りです。
/*protected */SFCError SFOTableCellTextReactor::Initialize(Void) { static SFXSize::AtomRecConst MARGINSIZE = { 2, 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; }// SFOTableCellTextReactor::Initialize //
[ protected, virtual, const ] Bool IsWidgetAttachable(Void);
この関数は、 ウィジェットを取り付け可能かどうかを判定します。
SFLPROP_TEXT_SCROLLABLE 属性が true のとき、 または属性が設定されていないとき、 テキストのスクロール機能に SFYSingleTextWidget ウィジェットを使用するため、 true を返却します。その他のときは、false を返却します。
[ public, static ] SFOTableCellTextReactorSmp NewInstance( SFCErrorPtr exception = null // エラー値 );
[ public, static ] SFOTableCellTextReactorSmp NewInstance( SFXBaseEditorPtr editor // ネイティブテキスト入力コントロールエディタ SFCErrorPtr exception = null // エラー値 );
関数内部で発生したエラー値を返します。
この関数は、SFOTableCellTextReactor インスタンスを作成します。
インスタンスの作成に成功した場合は null 以外のポインタを返します。 失敗した場合は、null ポインタを返します。
exception 引数を指定した場合、 この引数にはエラー値が返ります。
editor 引数を指定することにより、 このテーブルセルリアクターのネイティブテキスト入力コントロールエディタを設定することが可能です。
editor 引数を指定しない場合、 エディタには SFYApplication::GetEditor 関数で得られる値が設定されます。
以下は、SFOTableCellTextReactor インスタンスを生成するためのコードです。
SFOTableCellReactorSmp rtor; SFCError error; if ((rtor = SFOTableCellTextReactor::NewInstance(&error)) != null) { // 編集可に設定する rtor->SetProperty(SFLPROP_EDITABLE, true); // スクロール不可に設定する rtor->SetProperty(SFLPROP_TEXT_SCROLLABLE, false); // .. (省略) .. }
SFOTableCellTextReactor::SFOTableCellTextReactor | SFOTableCellTextReactor::SetEditor | SFYApplication::GetEditor | SFOTableCellTextReactor | SFXBaseEditor | SFYResponder
[ protected, virtual ] Void OnFocus( SFXRectangleConstRef bound // セル領域 SFXAnyConstRef object // セルオブジェクト SInt32 row // フォーカスが当たったセルの行番号 SFYWidgetSmpPtr widget // フォーカス中に処理を委譲するウィジェット );
この関数は、 テーブルセルにフォーカスが当たったときの振る舞いを行います。
ウィジェットに振る舞いを委譲する場合は、 widget 引数に生成したウィジェットのインスタンスを指定します。
テキストスクロール可 (SFLPROP_TEXT_SCROLLABLE 属性が true、または設定されていない) のとき、 SFYSingleTextWidget クラスにスクロールの処理を委譲します。
この関数の内部実装は以下の通りです。
/*protected virtual */Void SFOTableCellTextReactor::OnFocus(SFXRectangleConstRef bound, SFXAnyConstRef object, SInt32 row, SFYWidgetSmpPtr widget) { UInt32 alignment; SFXWideString text; SFYSingleTextWidgetSmp txwidget; SFCError error(SFERR_NO_ERROR); unused(row); if (widget != null) { if (IsWidgetAttachable()) { if (Convert(object, &text) == SFERR_NO_ERROR) { alignment = GetAlignment(); txwidget = SFYSingleTextWidget::NewInstance(&error); if (txwidget != null) { if ((error = txwidget->SetText(text)) == SFERR_NO_ERROR) { txwidget->SetPropertyTransparent(true); txwidget->SetFont(GetFont()); txwidget->SetTextColor(GetSelectedForegroundColor()); txwidget->SetHorizontalAlign(ConvertHorizontalAlign(alignment)); txwidget->SetVerticalAlign(ConvertVerticalAlign(alignment)); txwidget->SetScrollDirection(GetScrollDirection()); txwidget->SetScrollInterval(GetScrollInterval()); txwidget->SetScrollStep(GetScrollStep()); txwidget->SetWaitInterval(GetWaitInterval()); txwidget->SetRealBound(SFXRectangle(bound).Deflate(GetMargin())); txwidget->SetState(true, true, true, true); txwidget->StartScroll(); } } if (error == SFERR_NO_ERROR) { *widget = txwidget; } else { widget->Release(); } } } } else { error = SFERR_INVALID_PARAM; } return; }// SFOTableCellTextReactor::OnFocus //
[ protected, virtual, const ] Void Render( SFXGraphicsPtr graphics // グラフィックスオブジェクト SFXRectangleConstRef bound // テーブルセル領域 SFXAnyConstRef object // セルオブジェクト SInt32 row // 描画するセルの行番号 Bool active // セルの活性状態 Bool focus // セルのフォーカス状態 );
この関数は、 セルの領域内にテキストを描画します。
テーブルセルの活性状態、フォーカス状態にもとづいて描画するテキストの色を変化させます。
この関数の内部実装は以下の通りです。
/*protected virtual */Void SFOTableCellTextReactor::Render(SFXGraphicsPtr graphics, SFXRectangleConstRef bound, SFXAnyConstRef object, SInt32 row, Bool active, Bool focus) const { SFXRGBColor foreColor; SFXWideString text; unused(row); if (Convert(object, &text) == SFERR_NO_ERROR) { foreColor.Set(focus ? GetSelectedForegroundColor() : GetForegroundColor()); if (!active) { if (foreColor.GetBrightness() > 0x7F) { foreColor.SubRGB(0x44); } else { foreColor.AddRGB(0x44); } } graphics->SetFont(GetFont()); graphics->DrawSingleText(text, SFXRectangle(bound).Deflate(GetMargin()), foreColor, GetAlignment()); } return; }// SFOTableCellTextReactor::Render // /*private */SFXRGBColor SFOTableCellTextReactor::GetForegroundColor(Void) const { static SFXRGBColor::AtomRecConst BLACK = { {{0x00, 0x00, 0x00, 0x00}} }; Bool found; SFXRGBColor result; result = GetProperty(SFLPROP_FOREGROUND_COLOR, &found).color; if (!found) { result.Set(BLACK); } return result; }// SFOTableCellTextReactor::GetForegroundColor // /*private */SFXRGBColor SFOTableCellTextReactor::GetSelectedForegroundColor(Void) const { static SFXRGBColor::AtomRecConst WHITE = { {{0x00, 0xFF, 0xFF, 0xFF}} }; Bool found; SFXRGBColor result; result = GetProperty(SFLPROP_SELECTED_FOREGROUND_COLOR, &found).color; if (!found) { result.Set(WHITE); } return result; }// SFOTableCellTextReactor::GetSelectedForegroundColor //
[ public ] Void SetEditor( SFXBaseEditorPtr param // ネイティブテキスト入力コントロールエディタ );
この関数は、 ネイティブテキスト入力コントロールエディタを設定します。
デフォルト: SFYApplication::GetEditor 関数で取得できるアプリケーションクラスに設定されたテキスト入力コントロール処理用エディタ (SFXEditor インスタンス)。
注意 | |
---|---|
テーブルセルが編集可能である場合に限り有効です。 |
SFOTableCellTextReactor::GetEditor | SFOTableCellTextReactor::NewInstance | SFOTableCellTextReactor::SFOTableCellTextReactor | SFYApplication::GetEditor | SFOTableCellReactor::IsEditable | SFXBaseEditor | SFXEditor
[ public ] Void SetInputMode( AEETextInputMode param // 設定する入力モード );
この関数は、 ネイティブテキスト入力コントロールに使用できるテキスト入力モードを設定します。
詳細は、BREW リファレンスの ITEXTCTL_SetInputMode() および AEETextInputMode の説明を参照してください。
デフォルト値: AEE_TM_CURRENT(現在アクティブな入力モードを指定する)。
注意 | |
---|---|
テーブルセルが編集可能である場合に限り有効です。 |
この関数は、 ネイティブテキスト入力コントロールがサポートするテキストサイズの最大値を設定します。
詳細は、BREW リファレンスの ITEXTCTL_SetMaxSize() の説明を参照してください。
デフォルト値: SINT16_MAXIMUM - 1。
注意 | |
---|---|
テーブルセルが編集可能である場合に限り有効です。 |
この関数は、 引数が true の場合、ネイティブテキスト入力コントロールのプロパティ値に TP_PASSWORD を設定します。
このとき、入力した文字はすべて'*'(アスタリスク)で表示されます。また、実際の文字列はバッファして管理されます。
詳細は、BREW リファレンスの ITEXTCTL_SetProperties() および AEE ITextCtl のプロパティを参照してください。
デフォルト値: false
注意 | |
---|---|
テーブルセルが編集可能である場合に限り有効です。 |
SFXEditProperty::GetPasswordMode | BREW API ITEXTCTL_SetProperties | BREW API AEE ITextCtl のプロパティ
[ protected, static ] SFCError SetString( SFXWideStringConstRef text // コピー元文字列 SFXAnyPtr result // コピー先セルオブジェクト );
この関数は、 指定された SFXWideString 文字列を SFXAny オブジェクトに変換します。
SFXAny オブジェクトは、result 引数に指定された場所にコピーされます。
注意 | |
---|---|
この操作は、 SFOTableCellTextReactor::Convert 関数と逆の操作になります。 |
この関数の内部実装は以下の通りです。
/*protected static */SFCError SFOTableCellTextReactor::SetString(SFXWideStringConstRef text, SFXAnyPtr result) { SFCError error(SFERR_INVALID_PARAM); if (result != null) { if (SFXAny::Contains(*result, (SFXAnsiStringPtr)(null))) { error = any_cast<SFXAnsiString>(result)->Set(text); } else if (SFXAny::Contains(*result, (SFXWideStringPtr)(null))) { error = any_cast<SFXWideString>(result)->Set(text); } } return error; }// SFOTableCellTextReactor::SetString //
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |