マンハッタンルーター的な動作をするGMFのルーター

マンハッタンルーター的な動作をする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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。