package org.simantics.district.route.ui.handlers; import javax.inject.Named; import org.eclipse.e4.core.di.annotations.CanExecute; import org.eclipse.e4.core.di.annotations.Execute; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.services.IServiceConstants; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorPart; import org.simantics.district.network.ui.DistrictDiagramEditor; import org.simantics.district.network.ui.participants.RoutingMode; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.modeling.ui.diagramEditor.DiagramViewer; import org.simantics.utils.ui.workbench.WorkbenchUtils; /** * @author Jani Simomaa */ public class ActivateCreateRoute { @CanExecute public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection) { IEditorPart activeEditor = WorkbenchUtils.getActiveEditor(); if (activeEditor != null && activeEditor instanceof DistrictDiagramEditor) { DistrictDiagramEditor editor = (DistrictDiagramEditor) activeEditor; DiagramViewer viewer = editor.getAdapter(DiagramViewer.class); ICanvasContext context = viewer.getAdapter(ICanvasContext.class); RoutingMode routingMode = context.getAtMostOneItemOfClass(RoutingMode.class); return routingMode == null; } return false; } @Execute public void execute(@Named(IServiceConstants.ACTIVE_SHELL) Shell activeShell, @Named(IServiceConstants.ACTIVE_PART) MPart part, @Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection) { IEditorPart activeEditor = WorkbenchUtils.getActiveEditor(); if (activeEditor != null && activeEditor instanceof DistrictDiagramEditor) { DistrictDiagramEditor editor = (DistrictDiagramEditor) activeEditor; DiagramViewer viewer = editor.getAdapter(DiagramViewer.class); ICanvasContext context = viewer.getAdapter(ICanvasContext.class); RoutingMode routingMode = context.getAtMostOneItemOfClass(RoutingMode.class); if (routingMode == null || routingMode.isRemoved()) { routingMode = new RoutingMode(0); context.add(routingMode); } } } }