#navi(../../../)
* GEF/EditPolicy : LayoutEditPolicy の実装 [#e8da291b]
フィギュアのレイアウトに関する変更は LayoutEditPolicy を実装した EditPolicy で処理しますが、
実際にどのように処理されるのでしょうか。~
(以下、GEF 3.3.2 のソースを元に調べた結果です)
** LayoutEditPolicy の実装 [#f570c2c9]
単純に XY 座標を指定してレイアウトするだけなら、
親フィギュアの LayoutManager に XYLayout を設定し、
EditPolicy として XYLayoutEditPolicy(を継承したクラス)を使えば事足ります。
しかし複雑なレイアウトを実装しようと思うと、
どうしても必要なメソッドをオーバーライドして
独自の EditPolicy を作成する必要があります。
LayoutEditPolicy を直接継承して独自の EditPolicy を作成する場合、
以下の抽象メソッドを実装する必要があります。
- createChildEditPolicy(EditPart child)
- getCreateCommand(CreateRequest request)
- getMoveChildrenCommand(Request request)
実際には、LayoutEditPolicy を継承した ConstrainedLayoutEditPolicy (XYLayoutEditPolicy)、
OrderedLayoutEditPolicy が上記メソッドを、
それぞれの対応するレイアウトに合った形でオーバーライドしてます。~
独自の EditPolicy を作成する際も、これらの継承クラスをさらに継承して実装する方がより簡便です。
以下、それぞれの EditPolicy がどのように必要なメソッドをオーバーライドし、
必要なレイアウト処理を行っているかを調べました。
** ConstrainedLayoutEditPolicy の実装 [#g05b2731]
(以下作成中)