]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Allow PickSorter access to the PickRequest used for pick operation 15/3815/3
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Fri, 24 Jan 2020 13:05:52 +0000 (15:05 +0200)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Fri, 24 Jan 2020 13:10:39 +0000 (15:10 +0200)
New default-method on the PickSorter interface keeps the API/ABI
backwards compatible.

gitlab #454

Change-Id: I9455fb335aa3388790d1d580ebb4c5886e84562c
(cherry-picked from commit 9f479d68d86a8b5116be5a884c220f816e3cbb18)

bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/PickRequest.java
bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/impl/PickContextImpl.java

index 265caa805b604210e12612d49b22a2126ada9c35..f2d80a6c45fa5bd1280e028457ccdd6b70c24c91 100644 (file)
@@ -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<IElement> 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.
+         * 
+         * <p>
+         * 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
+         *                 <code>elements</code>
+         * @param elements the element list to sort
+         * 
+         * @author Tuukka Lehtonen
+         * @since 1.43.0, 1.35.3
+         */
+        default void sort(PickRequest request, List<IElement> elements) {
+            sort(elements);
+        }
+
         //
         public static final PickSorter CONNECTIONS_LAST = new PickSorter() {
             @Override
index 6a77af9b80e0cb0463abe78f5d8e0962f9b66c2a..5d42cebb8970273841cdac2488f2fdf200a9e357 100644 (file)
@@ -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<IElement> elems = new ArrayList<>(result);
-                               request.pickSorter.sort(elems);
+                               request.pickSorter.sort(request, elems);
                                finalResult.addAll(elems);
                        } else {
                                finalResult.addAll(result);