Curl Global Community

Full Version: RecordGrid での右詰め
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
    }
  }