X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fui%2FWorkbenchSelectionProvider.java;h=a93a0ab4106f8b563f780aa4a8474059742acf3a;hb=48135dcd03588783f9c1b688aaa53cdaacba6ef2;hp=5f46a373b2ecefbf85192cbb5be8380c4bee79a9;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/ui/WorkbenchSelectionProvider.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/ui/WorkbenchSelectionProvider.java index 5f46a373b..a93a0ab41 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/ui/WorkbenchSelectionProvider.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/ui/WorkbenchSelectionProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * Copyright (c) 2007, 2017 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 - #7586 *******************************************************************************/ package org.simantics.diagram.ui; @@ -75,57 +76,40 @@ public class WorkbenchSelectionProvider extends AbstractCanvasParticipant implem @Override public void addedToContext(ICanvasContext ctx) { super.addedToContext(ctx); - if (site != null && site.getSelectionProvider() != this) { - swt.asyncExec(new Runnable() { - @Override - public void run() { - if (site.getSelectionProvider() != WorkbenchSelectionProvider.this) - site.setSelectionProvider(WorkbenchSelectionProvider.this); - } - }); - } + swt.asyncExec(() -> { + if (site != null && site.getSelectionProvider() != WorkbenchSelectionProvider.this) + site.setSelectionProvider(WorkbenchSelectionProvider.this); + }); } @Override public void removedFromContext(ICanvasContext ctx) { - if (site != null && site.getSelectionProvider() == this) { - swt.asyncExec(new Runnable() { - @Override - public void run() { - if (site.getSelectionProvider() == WorkbenchSelectionProvider.this) - site.setSelectionProvider(null); - } - }); - } + swt.asyncExec(() -> { + if (site != null && site.getSelectionProvider() == WorkbenchSelectionProvider.this) + site.setSelectionProvider(null); + }); super.removedFromContext(ctx); } + public void fireSelection(Iterable selection) { + final ISelection s = constructAdaptableSelection(selection); + swt.asyncExec(() -> { + currentSelection = s; + fireSelectionChanged(s); + schedulePostSelectionChanged(s); + }); + } + @HintListener(Class = Selection.class, Field = "SELECTION0") public void hintChanged(IHintObservable sender, Key key, Object oldValue, Object newValue) { Iterable selection = (Iterable) newValue; - final ISelection s = constructAdaptableSelection(selection); - swt.asyncExec(new Runnable() { - @Override - public void run() { - currentSelection = s; - fireSelectionChanged(s); - schedulePostSelectionChanged(s); - } - }); + fireSelection(selection); } @HintListener(Class = Selection.class, Field = "SELECTION0") public void hintRemoved(IHintObservable sender, Key key, Object oldValue) { //System.out.println("selection removed: " + oldValue); - final ISelection s = constructAdaptableSelection(Collections.emptyList()); - swt.asyncExec(new Runnable() { - @Override - public void run() { - currentSelection = s; - fireSelectionChanged(s); - schedulePostSelectionChanged(s); - } - }); + fireSelection(Collections.emptyList()); } // Post selection changed scheduling helper. @@ -133,23 +117,16 @@ public class WorkbenchSelectionProvider extends AbstractCanvasParticipant implem protected void schedulePostSelectionChanged(final ISelection s) { final int count = ++modCount; - ThreadUtils.getNonBlockingWorkExecutor().schedule(new Runnable() { - @Override - public void run() { - int newCount = modCount; - if (count != newCount) - return; - if (isRemoved()) - return; - swt.asyncExec(new Runnable() { - @Override - public void run() { - if (isRemoved()) - return; - firePostSelectionChanged(s); - } - }); - } + ThreadUtils.getNonBlockingWorkExecutor().schedule(() -> { + int newCount = modCount; + if (count != newCount) + return; + if (isRemoved()) + return; + swt.asyncExec(() -> { + if (!isRemoved()) + firePostSelectionChanged(s); + }); }, POST_SELECTION_DELAY, TimeUnit.MILLISECONDS); }