| EditPolicy は マウスでのドラッグや、サイズ変更などの操作のPolicyを指定するものです。 EditPolicyは XYLayoutEditPolicy、FlowLayoutEditPolicy など用意されているけれども、満たされないものは作成する必要があります。 今回はToolbarLayout用のPolicyを作成します。 ToolbarLayoutはFlowLayoutに似ているので、FlowLayoutを拡張して作成します。 FlowLayoutEditPolicyベースで、FlowLayoutEditPolicy#isHorizontal() のメソッドの中を以下のように修正します。 public boolean isHorizontal() { IFigure figure = ((GraphicalEditPart) getHost()).getContentPane(); LayoutManager layout = figure.getLayoutManager(); if (layout instanceof FlowLayout) return ((FlowLayout) figure.getLayoutManager()).isHorizontal(); if (layout instanceof ToolbarLayout) return ((ToolbarLayout) figure.getLayoutManager()).isHorizontal(); return false; } さらに、FlowLayoutでレイアウトするけど、コンポーネントの width,height をマウスで触るようにするためには、 FlowLayoutEditPolicy#createChildEditPolicyのメソッドを以下に修正します。 protected EditPolicy createChildEditPolicy(EditPart child) { return new ResizableEditPolicy(); } すると、RequestConstants.REQ_RESIZE_CHILDREN のコマンドが渡ってくるようになるので、XYLayoutEditPolicyと同様に、 protected Command getResizeChildrenCommand(ChangeBoundsRequest request) のようなメソッドを作成して処理を行うようにすればOK! |