blob: e45fc5626e367fd43b2f208bc214b7f23daeec0f [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2014 CEA LIST, Montages AG and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Michael Golubev (Montages) - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.gmf.tooling.runtime.providers.router;
import org.eclipse.draw2d.ConnectionRouter;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gmf.runtime.draw2d.ui.internal.figures.ConnectionLayerEx;
import org.eclipse.gmf.runtime.draw2d.ui.internal.routers.RectilinearRouter;
/**
* Allows to redefine default GMF Runtime {@link RectilinearRouter} for given
* diagram.
*
* @since 3.3
*/
public class CustomRoutersConnectionLayer extends ConnectionLayerEx {
private ConnectionRouter myCustomRectilinearRouter;
private EditPartViewer myViewer;
protected EditPartViewer getViewer() {
return myViewer;
}
public void setEditPartViewer(EditPartViewer viewer) {
myViewer = viewer;
setupSnapToGrid(myCustomRectilinearRouter);
}
@Override
public ConnectionRouter getRectilinearRouter() {
if (myCustomRectilinearRouter == null) {
myCustomRectilinearRouter = createRectilinearRouter();
setupSnapToGrid(myCustomRectilinearRouter);
}
return myCustomRectilinearRouter;
}
protected void setupSnapToGrid(ConnectionRouter router) {
if (router instanceof SnapToGridRouter) {
((SnapToGridRouter) router).setEditPartViewer(myViewer);
}
}
/**
* Creates rectilinear router for this layer. This implementation returns
* standard GMF Runtime {@link RectilinearRouter}, subclasses may override
* to produce custom rectilinear routing.
*/
protected ConnectionRouter createRectilinearRouter() {
return new RectilinearRouter();
}
}