@node VLayout, VSemaphore, StructUtility, Top
@comment  node-name,  next,  previous,  up
@chapter VLayout

@code{VLayout}は機種非依存なモジュールで，オブジェクトの自動レイアウト機能を持たないツールキットのために，レイアウト機能を提供するために必要なものを一つのクラスにまとめたものである。使用するためには，ヘッダファイル@code{v/v_m.h} の中で

@example
#define USE_V_LAYOUT
@end example

と表記しておく必要がある。なお，@code{VLayout}は主に@code{VObject}クラス群のメソッド内から呼び出され，ユーザが直接呼ぶことはない。

@code{VLayout}の動作の概略については，別ドキュメント“@code{VObject}クラス群の概略”を参照。

各メソッドの内容は以下の通り。

@deftypemethod VLayout void layout_in_frame (VObject* obj, bool onlyMinSize)
与えられたオブジェクトの中に，その子オブジェクト（1つのみ）を配置する。
@var{onlyMinSize}に@var{true}が指定されると，@var{minSize}を計算するだけで実際の配置は行われない。
@end deftypemethod

@deftypemethod VLayout void layout_in_align_view (VObject* obj, bool vert, bool onlyMinSize)
与えられたオブジェクトの中に，その子オブジェクトを並べて配置する。
@var{vert}に@var{true}が指定されると縦に並べる。そうでなければ横。それぞれ幅，高さが揃う。
@var{onlyMinSize}に@var{true}が指定されると，@var{minSize}を計算するだけで実際の配置は行われない。
@code{VHAlignView}，@code{VVAlignView}用。
@end deftypemethod

@deftypemethod VLayout void do_layout (VObject* obj, VObjectList* children)
計算した座標をオブジェクトに適用する。
@var{obj}，及び@var{children}リストにはいったオブジェクトにset_statusが発行される。
@end deftypemethod

@deftypemethod VLayout {const VObject*} get_ancestor_window (const VObject* obj)
オブジェクトの属するウィンドウを取得する。
オブジェクトのロック内で状態で呼び出すとデッドロックの原因となるので注意すること。
@end deftypemethod

@deftypemethod VLayout void mark (const VObject* obj)
再レイアウトが必要なオブジェクトの所属するウィンドウをVLayout::markedリストに登録する。
@end deftypemethod

@deftypemethod VLayout void unmark (const VObject* obj)
オブジェクトの所属するウィンドウを@code{VLayout::marked}リストから外す。
@end deftypemethod

@deftypemethod VLayout bool layout_marked_window ()
@code{VLayout::marked}リストに登録されたウィンドウを再レイアウトする
各ウィンドウに@code{set_status(*,VSF_CALC_MIN)}, @code{set_status(*,VSF_LAYOUT)} が発行される
@end deftypemethod

@deftypemethod VLayout {counst VSize&} parent_min_size () { return parentMinSize; }
@code{VLayout}の計算した親オブジェクトの最小サイズを取得する。
@end deftypemethod

@deftypemethod VLayout {const VSize&} parent_size () { return parentSize; }
@code{VLayout}の計算した親オブジェクトの最小サイズを取得する。
@end deftypemethod

@deftypemethod VLayout int nos_children () { return nosChildren; }
@code{VLayout}の計算した親オブジェクトに属する子供の数を取得する。
@end deftypemethod

@deftypemethod VLayout VRect* children_rect () { return childrenRect; }
@code{VLayout}の計算した親オブジェクトに属する子供の座標のリストを取得する。
@end deftypemethod
