aqubi+shin1

Recent site activity

ToolbarLayoutPolicyを作成する

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!