TextField の右詰めは TextField.halign で実装できますが、
RecordGrid のセルには同実装すればいいのでしょうか。
RecordSet のDomain が int や bool の場合などに、自動的に右詰め、左詰め、センタリングなどが判断されているようですが、
カスタムセルを適用したときに、右詰め、左詰めを制御したいです。
カスタムセルのhaling に設定すれば実現できました。
Curl Corporation\Surge\8\ide\gui\controls\logical-controls\record-grid.scurl を参考にしました。
Code:
let type:Type = self.field.domain.type
{if type isa NumericType and
type != bool and
type != char and
not {set? self.halign}
then
set self.halign = 1.0
elseif type == bool then
set self.halign = 0.5
}
ただ、コンストラクタに記述しても反映されないので、{create-editor} メソッドをオーバーライドして記述しました。
なぜコンストラクタではダメなのかわ分かりません。
※halign って"right" とかじゃなくて、int でも良いんですね。
スンマセン。このコードじゃないと、1行目しかhaling が適用されないです。
Code:
{if type isa NumericType and
type != bool and
type != char
then
set self.column.halign = 1.0
elseif type == bool then
set self.column.halign = 0.5
}
理由は、どうやらcreate-editor のなかで作られるフィールドはキャッシュされて利用されるため、
2回目以降セルにフォーカスインしても、create-editor は呼ばれず、
その結果、そのセルのhalign の設定のコードが通らない、ということのようです。
カラムのhalign ならすべてのセルに適用されるので、1回だけcreate-editor が呼ばれればよい、
その意味では、「1行目しか右詰にならない」ではなく、
「最初にフォーカスがあたったセルしか右詰にならない」が正しいですね。
ちなみに、RecordGridColumnのhaling にハードコーディングで指定しても良かったのは知りませんでした。
Code:
{RecordGridColumn
"カラム",
halign = "right"
}
恥ずかしい、ホアタ!
(07-29-2011, 11:58 AM)umemura Wrote: [ -> ]ただ、コンストラクタに記述しても反映されないので、{create-editor} メソッドをオーバーライドして記述しました。
なぜコンストラクタではダメなのかわ分かりません。
StandardStringCellは、列中のセル、みんな同じhalignだという前提です。
note-grid-focus-inをオーバーライドすれば、ちゃんと設定出来ると思います。
Code:
{method public open {note-grid-focus-in}:void
{super.note-grid-focus-in}
{if-non-null editor = self.current-editor then
set editor.halign = self.halign
}
}