マンハッタンルーター的な動作をするGMFのルーター
コネクションのEditPartにインストールされるポリシーはルータによる。
ルーターが OrthogonalRouter であれば、ConnectionLineSegEditPolicy がインストールされる。
マンハッタンルーター的な動きをするルーターは OrthogonalRouter のサブクラス。
org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart
private void installBendpointEditPolicy() {
if (getConnectionFigure().getConnectionRouter() instanceof ForestRouter) {
installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE,
new TreeConnectionBendpointEditPolicy());
} else if (getConnectionFigure().getConnectionRouter() instanceof OrthogonalRouter) {
installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE,
new ConnectionLineSegEditPolicy());
} else {
installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE,
new ConnectionBendpointEditPolicy());
}
EditPartUtil.synchronizeRunnableToMainThread(this, new Runnable() {
public void run() {
if (getConnectionFigure().getConnectionRouter() instanceof ForestRouter) {
getConnectionFigure().setCursor(Cursors.CURSOR_SEG_MOVE);
} else if (getConnectionFigure().getConnectionRouter() instanceof OrthogonalRouter) {
getConnectionFigure().setCursor(Cursors.CURSOR_SEG_MOVE);
} else {
getConnectionFigure().setCursor(Cursors.CURSOR_SEG_ADD);
}
};
});
ConnectionLineSegEditPolicy は LineMode が LineMode.ORTHOGONAL_FREE なので
showSourceFeedback は、結局
showMoveLineSegFeedback((BendpointRequest) request);
か
showMoveOrthogonalBenspointFeedback((BendpointRequest) request);
のどちらかが呼ばれる。
ラインをドラッグすると showMoveLineSegFeedback 、ベンドポイントをドラッグすると
showMoveOrthogonalBenspointFeedback となる。
org.eclipse.gmf.runtime.gef.ui.internal.editpolicies.ConnectionBendpointEditPolicy
public void showSourceFeedback(Request request) {
if (getLineSegMode() != LineMode.OBLIQUE) {
if (REQ_CREATE_BENDPOINT.equals(request.getType())) {
showMoveLineSegFeedback((BendpointRequest) request);
} else if (REQ_MOVE_BENDPOINT.equals(request.getType())) {
showMoveOrthogonalBenspointFeedback((BendpointRequest) request);
}
} else {
if (REQ_MOVE_BENDPOINT.equals(request.getType()))
showMoveBendpointFeedback((BendpointRequest) request);
else if (REQ_CREATE_BENDPOINT.equals(request.getType()))
showCreateBendpointFeedback((BendpointRequest) request);
}
super.showSourceFeedback(request);
}
最終更新:2008年12月17日 17:12