Curl Global Community
RecordGrid での右詰め - Printable Version

+- Curl Global Community (http://communities.curl.com)
+-- Forum: Discussions (http://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (http://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: RecordGrid での右詰め (/showthread.php?tid=169)



RecordGrid での右詰め - umemura - 07-29-2011

TextField の右詰めは TextField.halign で実装できますが、
RecordGrid のセルには同実装すればいいのでしょうか。

RecordSet のDomain が int や bool の場合などに、自動的に右詰め、左詰め、センタリングなどが判断されているようですが、
カスタムセルを適用したときに、右詰め、左詰めを制御したいです。



RE: RecordGrid での右詰め - umemura - 07-29-2011

カスタムセルの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 でも良いんですね。


RE: RecordGrid での右詰め - umemura - 07-29-2011

スンマセン。このコードじゃないと、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"
}

恥ずかしい、ホアタ!



RE: RecordGrid での右詰め - c-s - 07-29-2011

(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
    }
  }