X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2Fparticipants%2FRoutingMode.java;h=daacb31296ac0fa7c64d82b1366cc13a7cf1fb2d;hb=refs%2Fchanges%2F16%2F2616%2F1;hp=4f023c880a2968d2a3d306fff7ed685551956c47;hpb=beab0411489f5730942d98d47dc3faf3107c6c02;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/RoutingMode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/RoutingMode.java index 4f023c88..daacb312 100644 --- a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/RoutingMode.java +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/participants/RoutingMode.java @@ -7,6 +7,7 @@ import java.util.Collection; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; @@ -15,7 +16,9 @@ import org.simantics.db.Resource; import org.simantics.diagram.ui.DiagramModelHints; import org.simantics.district.network.ui.internal.Activator; import org.simantics.district.route.Route; +import org.simantics.district.route.RouteEvent; import org.simantics.district.route.RouteService; +import org.simantics.district.route.RouteServiceListener; import org.simantics.district.route.Waypoint; import org.simantics.g2d.canvas.ICanvasContext; import org.simantics.g2d.canvas.IMouseCursorContext; @@ -83,6 +86,8 @@ public class RoutingMode extends AbstractMode { */ protected SingleElementNode node = null; + private RouteServiceListener routeServiceListener; + public RoutingMode(int mouseId) { super(mouseId); } @@ -94,9 +99,18 @@ public class RoutingMode extends AbstractMode { cursor = mcc == null ? null : mcc.setCursor(mouseId, new Cursor(Cursor.CROSSHAIR_CURSOR)); routeService = Activator.getInstance().getRouteService(); if (routeService != null) { + + routeServiceListener = e -> { + switch (e.type) { + case RouteEvent.TYPE_ROUTE_PERSISTED: + dispose(); + break; + } + }; + routeService.addListener(routeServiceListener); Resource diagramResource = getHint(DiagramModelHints.KEY_DIAGRAM_RESOURCE); LOGGER.info("Diagram resource: " + diagramResource); - route = routeService.createRoute("Current", diagramResource); + route = routeService.createRoute("[UNPERSISTED] Current", diagramResource); routeService.registerRoute(route); } } @@ -107,11 +121,13 @@ public class RoutingMode extends AbstractMode { cursor.remove(); cursor = null; } - // Discard route if it hasn't been persisted before this - if (route != null) { - routeService.discardRoute(route); - route = null; - routeService = null; + if (routeService != null) { + routeService.removeListener(routeServiceListener); + // Discard route if it hasn't been persisted before this + if (route != null && !route.persisted()) { + routeService.discardRoute(route); + route = null; + } } super.removedFromContext(ctx); } @@ -163,19 +179,22 @@ public class RoutingMode extends AbstractMode { Route committedRoute = route; route = null; SWTUtils.asyncExec(Display.getDefault(), () -> { - String newName = askRouteName("Confirm Route", committedRoute.getName()); - if (newName != null) { - committedRoute.setName(newName); - routeService.persistRoute(committedRoute); - } else { - routeService.discardRoute(committedRoute); - } + askRouteNameAndPersist(committedRoute); }); dispose(); } } else if (e instanceof CommandEvent) { Command cmd = ((CommandEvent) e).command; if (cmd.equals(Commands.CANCEL)) { + // let's ensure if user wants to dispose possibly unpersisted route + if (route != null && !route.persisted()) { + Route committedRoute = route; + SWTUtils.asyncExec(Display.getDefault(), () -> { + if (!askDiscardUnpersistedRoute()) { + askRouteNameAndPersist(committedRoute); + } + }); + } return dispose(); } else if (cmd.equals(Commands.RENAME)) { // TODO: still needs key binding contribution for the district diagram editor @@ -191,6 +210,28 @@ public class RoutingMode extends AbstractMode { return false; } + private void askRouteNameAndPersist(Route committedRoute) { + String newName = askRouteName("Confirm Route", committedRoute.getName()); + if (newName != null) { + committedRoute.setName(newName); + routeService.persistRoute(committedRoute); + } else { + routeService.discardRoute(committedRoute); + } + } + + private boolean askDiscardUnpersistedRoute() { + MessageDialog dialog = new MessageDialog( + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), + "Discard route", + null, + "Discard current unpersisted route?", + MessageDialog.INFORMATION, + 0, + new String[] { "OK", "Cancel" }); + return dialog.open() == Window.OK; + } + private String askRouteName(String dialogTitle, String initialValue) { InputDialog dialog = new InputDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),