From 4a8d946eb0afb6e773566aefaa7da09b3817c08b Mon Sep 17 00:00:00 2001 From: "shahzaib.ibrahim" Date: Wed, 24 Apr 2024 11:02:47 +0200 Subject: [PATCH] Adding functionality to change the delay time to expand the tree while searching. The api consumer can pass the delay time to expand the tree while searching, the change was made for the issue eclipse-jdt#1337 as this will be its first consumer eclipse-jdt/eclipse.jdt.ui#1337 --- .../META-INF/MANIFEST.MF | 2 +- .../ui/dialogs/filteredtree/FilteredTree.java | 39 +++++++++--- .../org/eclipse/ui/dialogs/FilteredTree.java | 60 +++++++++++++------ 3 files changed, 73 insertions(+), 28 deletions(-) diff --git a/bundles/org.eclipse.e4.ui.dialogs/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.dialogs/META-INF/MANIFEST.MF index 5dd6eb9e7d5..3be9ae16f8c 100644 --- a/bundles/org.eclipse.e4.ui.dialogs/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.ui.dialogs/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.e4.ui.dialogs -Bundle-Version: 1.4.300.qualifier +Bundle-Version: 1.5.0.qualifier Bundle-RequiredExecutionEnvironment: JavaSE-17 Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/bundles/org.eclipse.e4.ui.dialogs/src/org/eclipse/e4/ui/dialogs/filteredtree/FilteredTree.java b/bundles/org.eclipse.e4.ui.dialogs/src/org/eclipse/e4/ui/dialogs/filteredtree/FilteredTree.java index d0039a8b61b..383024c9c44 100644 --- a/bundles/org.eclipse.e4.ui.dialogs/src/org/eclipse/e4/ui/dialogs/filteredtree/FilteredTree.java +++ b/bundles/org.eclipse.e4.ui.dialogs/src/org/eclipse/e4/ui/dialogs/filteredtree/FilteredTree.java @@ -102,21 +102,41 @@ public class FilteredTree extends Composite { */ private static final long SOFT_MAX_EXPAND_TIME = 200; + /** + * Time delay after which the search is triggered, acting as a debounce + * mechanism. + */ + private final long refreshJobDelayInMillis; + + /** + * Default time for refresh job delay in ms + */ + private static final long DEFAULT_REFRESH_TIME = 200; + /** * Create a new instance of the receiver. * - * @param parent - * the parent Composite - * @param treeStyle - * the style bits for the Tree - * @param filter - * the filter to be used - */ - public FilteredTree(Composite parent, int treeStyle, PatternFilter filter) { + * @param parent the parent Composite + * @param treeStyle the style bits for the Tree + * @param filter the filter to be used + * @param refreshDelayTime refresh delay in ms, the time to expand the tree + * after debounce + * @since 1.5 + */ + public FilteredTree(Composite parent, int treeStyle, PatternFilter filter, long refreshDelayTime) { super(parent, SWT.NONE); + this.refreshJobDelayInMillis = refreshDelayTime; init(treeStyle, filter); } + /** + * Calls {@link #FilteredTree(Composite, int, PatternFilter, long)} with a + * default refresh time + */ + public FilteredTree(Composite parent, int treeStyle, PatternFilter filter) { + this(parent, treeStyle, filter, DEFAULT_REFRESH_TIME); + } + /** * Create a new instance of the receiver. Subclasses that wish to override * the default creation behavior may use this constructor, but must ensure @@ -129,6 +149,7 @@ public FilteredTree(Composite parent, int treeStyle, PatternFilter filter) { */ protected FilteredTree(Composite parent) { super(parent, SWT.NONE); + this.refreshJobDelayInMillis = DEFAULT_REFRESH_TIME; } /** @@ -540,7 +561,7 @@ protected void textChanged() { * @since 3.5 */ protected long getRefreshJobDelay() { - return 200; + return refreshJobDelayInMillis; } /** diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java index 370a9e9e175..24e2d884217 100644 --- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java +++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java @@ -147,6 +147,16 @@ public class FilteredTree extends Composite { */ private static final long SOFT_MAX_EXPAND_TIME = 200; + /** + * Time for refresh job delay in terms of expansion in long value + */ + private final long refreshJobDelayInMillis; + + /** + * Default time for refresh job delay in ms + */ + private static final long DEFAULT_REFRESH_TIME = 200; + /** * Create a new instance of the receiver. Subclasses that wish to override the * default creation behavior may use this constructor, but must ensure that the @@ -171,11 +181,24 @@ public class FilteredTree extends Composite { public FilteredTree(Composite parent, boolean useNewLook, boolean useFastHashLookup) { super(parent, SWT.NONE); this.parent = parent; + this.refreshJobDelayInMillis = DEFAULT_REFRESH_TIME; if (treeViewer != null) { treeViewer.setUseHashlookup(useFastHashLookup); } } + /** + * Calls + * {@link #FilteredTree(Composite, int, PatternFilter, boolean, boolean, long)} + * with a default refresh time + * + * @since 3.116 + */ + public FilteredTree(Composite parent, int treeStyle, PatternFilter filter, boolean useNewLook, + boolean useFastHashLookup) { + this(parent, treeStyle, filter, useNewLook, useFastHashLookup, DEFAULT_REFRESH_TIME); + } + /** * Create a new instance of the receiver. * @@ -187,20 +210,24 @@ public FilteredTree(Composite parent, boolean useNewLook, boolean useFastHashLoo * *

* - * @param parent the parent Composite - * @param treeStyle the style bits for the Tree - * @param filter the filter to be used - * @param useNewLook ignored, keep for API compliance - * @param useFastHashLookup true, if tree should use fast hash lookup, false, if - * the tree should be slow but working for data with - * mutable or broken hashcode implementation. Only used - * if treeViewer is already initialized - * @since 3.116 + * @param parent the parent Composite + * @param treeStyle the style bits for the Tree + * @param filter the filter to be used + * @param useNewLook ignored, keep for API compliance + * @param useFastHashLookup true, if tree should use fast hash lookup, + * false, if the tree should be slow but working + * for data with mutable or broken hashcode + * implementation. Only used if treeViewer is + * already initialized + * @param refreshJobDelayInMillis refresh delay in ms, the time to expand the + * tree after debounce + * @since 3.132 */ public FilteredTree(Composite parent, int treeStyle, PatternFilter filter, boolean useNewLook, - boolean useFastHashLookup) { + boolean useFastHashLookup, long refreshJobDelayInMillis) { super(parent, SWT.NONE); this.parent = parent; + this.refreshJobDelayInMillis = refreshJobDelayInMillis; init(treeStyle, filter); if (treeViewer != null) { treeViewer.setUseHashlookup(useFastHashLookup); @@ -231,6 +258,7 @@ public FilteredTree(Composite parent, int treeStyle, PatternFilter filter, boole @Deprecated protected FilteredTree(Composite parent) { super(parent, SWT.NONE); + this.refreshJobDelayInMillis = DEFAULT_REFRESH_TIME; this.parent = parent; } @@ -259,8 +287,7 @@ protected FilteredTree(Composite parent) { */ @Deprecated protected FilteredTree(Composite parent, boolean useNewLook) { - super(parent, SWT.NONE); - this.parent = parent; + this(parent); } /** @@ -282,8 +309,7 @@ protected FilteredTree(Composite parent, boolean useNewLook) { */ @Deprecated public FilteredTree(Composite parent, int treeStyle, PatternFilter filter) { - super(parent, SWT.NONE); - this.parent = parent; + this(parent); init(treeStyle, filter); } @@ -308,9 +334,7 @@ public FilteredTree(Composite parent, int treeStyle, PatternFilter filter) { */ @Deprecated public FilteredTree(Composite parent, int treeStyle, PatternFilter filter, boolean useNewLook) { - super(parent, SWT.NONE); - this.parent = parent; - init(treeStyle, filter); + this(parent, treeStyle, filter); } /** @@ -755,7 +779,7 @@ protected void textChanged() { * @since 3.5 */ protected long getRefreshJobDelay() { - return 200; + return refreshJobDelayInMillis; } /**