From: Tuukka Lehtonen Date: Fri, 24 Jan 2020 13:05:52 +0000 (+0200) Subject: Allow PickSorter access to the PickRequest used for pick operation X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F15%2F3815%2F3;p=simantics%2Fplatform.git Allow PickSorter access to the PickRequest used for pick operation New default-method on the PickSorter interface keeps the API/ABI backwards compatible. gitlab #454 Change-Id: I9455fb335aa3388790d1d580ebb4c5886e84562c (cherry-picked from commit 9f479d68d86a8b5116be5a884c220f816e3cbb18) --- 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 265caa805..f2d80a6c4 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; @@ -135,8 +136,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 diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/impl/PickContextImpl.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/impl/PickContextImpl.java index 6a77af9b8..5d42cebb8 100644 --- a/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/impl/PickContextImpl.java +++ b/bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/impl/PickContextImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2018 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,7 +8,7 @@ * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation - * Semantum Oy - gitlab #66 - parallel/spatial optimization + * Semantum Oy - gitlab #60, #454 - parallel/spatial optimization *******************************************************************************/ package org.simantics.g2d.diagram.handler.impl; @@ -97,7 +97,7 @@ public class PickContextImpl implements PickContext { if (!result.isEmpty()) { if (request.pickSorter != null) { List elems = new ArrayList<>(result); - request.pickSorter.sort(elems); + request.pickSorter.sort(request, elems); finalResult.addAll(elems); } else { finalResult.addAll(result);