/*******************************************************************************
- * 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
*
* Contributors:
* VTT Technical Research Centre of Finland - initial API and implementation
+ * Semantum Oy - gitlab #454
*******************************************************************************/
package org.simantics.g2d.diagram.handler;
}
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
}
return minDistanceSq;
}
-
- @Override
- public void sort(List<IElement> elements) {
- if (sorter != null)
- sorter.sort(elements);
+ private void sortConnections(List<IElement> elements) {
List<Pair<Double, IElement>> connections = new ArrayList<>(elements.size());
int tail = 0;
for (int i = 0; i < elements.size(); i++) {
RouteGraphNode rgn = element.getHint(RouteGraphConnectionClass.KEY_RG_NODE);
if (rgn != null) {
double distanceSq = getDistanceSqToRouteGraphConnection(rgn, x, y);
- connections.add(new Pair<Double, IElement>(distanceSq, element));
+ connections.add(Pair.make(distanceSq, element));
}
if (rgn == null || i == elements.size() - 1) {
}
}
}
+
+ @Override
+ public void sort(PickRequest request, List<IElement> elements) {
+ if (sorter != null)
+ sorter.sort(request, elements);
+ sortConnections(elements);
+ }
+
+ @Override
+ public void sort(List<IElement> elements) {
+ if (sorter != null)
+ sorter.sort(elements);
+ sortConnections(elements);
+ }
};
}
}
/*******************************************************************************
- * 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
*
* 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;
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);