X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.g2d%2Fsrc%2Forg%2Fsimantics%2Fg2d%2Fdiagram%2Fhandler%2FPickRequest.java;h=8d9d814d8eeb3c5599a08a4113e380752a1863b6;hp=912e79cd9ce3e8caec89606ba61c495e797c0923;hb=9f479d68d86a8b5116be5a884c220f816e3cbb18;hpb=72542227673047d71c3c3f281e478c1bea82eb81 diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/PickRequest.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/PickRequest.java index 912e79cd9..8d9d814d8 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/PickRequest.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/PickRequest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * Copyright (c) 2007, 2020 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -8,6 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation + * Semantum Oy - gitlab #454 *******************************************************************************/ package org.simantics.g2d.diagram.handler; @@ -143,8 +144,33 @@ public class PickRequest { } public static interface PickSorter { + /** + * Sorts the specified element list. + * + * @param elements the element list to sort + */ void sort(List elements); + /** + * Extended interface-method that receives the pick request in addition to the + * picked elements to be sorted. Allows e.g. looking at the pick area in the + * sorter. + * + *

+ * The default implementation just invokes {@link #sort(List)} ignoring the pick + * request. The default implementation also keeps PickSorter API/ABI-compatible. + * + * @param request the original pick request that produced the hits listed in + * elements + * @param elements the element list to sort + * + * @author Tuukka Lehtonen + * @since 1.43.0, 1.35.3 + */ + default void sort(PickRequest request, List elements) { + sort(elements); + } + // public static final PickSorter CONNECTIONS_LAST = new PickSorter() { @Override @@ -204,12 +230,8 @@ public class PickRequest { } return minDistanceSq; } - - @Override - public void sort(List elements) { - if (sorter != null) - sorter.sort(elements); + private void sortConnections(List elements) { List> connections = new ArrayList<>(elements.size()); int tail = 0; for (int i = 0; i < elements.size(); i++) { @@ -217,7 +239,7 @@ public class PickRequest { RouteGraphNode rgn = element.getHint(RouteGraphConnectionClass.KEY_RG_NODE); if (rgn != null) { double distanceSq = getDistanceSqToRouteGraphConnection(rgn, x, y); - connections.add(new Pair(distanceSq, element)); + connections.add(Pair.make(distanceSq, element)); } if (rgn == null || i == elements.size() - 1) { @@ -236,6 +258,20 @@ public class PickRequest { } } } + + @Override + public void sort(PickRequest request, List elements) { + if (sorter != null) + sorter.sort(request, elements); + sortConnections(elements); + } + + @Override + public void sort(List elements) { + if (sorter != null) + sorter.sort(elements); + sortConnections(elements); + } }; } }