X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.swt%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fswt%2FFilterArea.java;h=27c32abc03190dc6e43ad1bef26737d95ed5140a;hp=0e8ddd63d2b86c86c31459d8d38810bb45afd484;hb=ad09d0837dcd03c6925ca1154d70c930aa622c9c;hpb=aa5e7bb5d56b050cfbd2e4a5ab2cc4fdfe40850b diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/FilterArea.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/FilterArea.java index 0e8ddd63d..27c32abc0 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/FilterArea.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/FilterArea.java @@ -236,52 +236,70 @@ public class FilterArea extends Composite implements IFocusable, IFilterArea, IF explorer.select(null); //textChanged(); } - + protected void addTextModifyListener() { filterText.addModifyListener(new ModifyListener() { - Map modCount = new HashMap(); - + @Override public void modifyText(ModifyEvent e) { - - final NodeContext context = getFilteredNode(); - if (context == null) - return; - final String filter = filterText.getText(); //System.out.println("Scheduling setFilter(" + context + ", " + filter + ")"); - - AtomicInteger i = modCount.get(context); - if (i == null) - modCount.put(context, new AtomicInteger()); - final AtomicInteger counter = modCount.get(context); - final int count = counter.incrementAndGet(); - - ThreadUtils.getNonBlockingWorkExecutor().schedule(new Runnable() { - @Override - public void run() { - int newCount = counter.get(); - if (newCount != count) - return; - //System.out.println("schedule setFilter(" + context + ", " + filter + ")"); - modCount.remove(context); - if (isDisposed()) - return; - ThreadUtils.asyncExec(SWTThread.getThreadAccess(getDisplay()), new Runnable() { - @Override - public void run() { - if (isDisposed()) - return; - //System.out.println("queryProcessor.setFilter(" + context + ", " + filter + ")"); - queryProcessor.setFilter(context, filter.isEmpty() ? null : filter); - } - }); - } - }, FILTER_DELAY, TimeUnit.MILLISECONDS); + setFilter(filter, false); } }); } + + private Map modCount = new HashMap(); + + + public void setFilter(String filter) { + setFilter(filter, true); + } + + protected void setFilter(String filter, boolean updateUI) { + final NodeContext context = getFilteredNode(); + if (context == null) + return; + + AtomicInteger i = modCount.get(context); + if (i == null) + modCount.put(context, new AtomicInteger()); + final AtomicInteger counter = modCount.get(context); + final int count = counter.incrementAndGet(); + + ThreadUtils.getNonBlockingWorkExecutor().schedule(new Runnable() { + @Override + public void run() { + int newCount = counter.get(); + if (newCount != count) + return; + //System.out.println("schedule setFilter(" + context + ", " + filter + ")"); + modCount.remove(context); + if (isDisposed()) + return; + ThreadUtils.asyncExec(SWTThread.getThreadAccess(getDisplay()), new Runnable() { + @Override + public void run() { + if (isDisposed()) + return; + applyFilter(context, filter, updateUI); + } + }); + } + }, FILTER_DELAY, TimeUnit.MILLISECONDS); + + } + + protected void applyFilter(NodeContext context, String filter, boolean updateUI) { + if (updateUI) { + String current = filterText.getText(); + if (!current.equals(filter)) + filterText.setText(filter); + } + //System.out.println("queryProcessor.setFilter(" + context + ", " + filter + ")"); + queryProcessor.setFilter(context, filter.isEmpty() ? null : filter); + } protected void addExplorerSelectionListener() { IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);