[UI-Viewer] Add display of hand pointer for single-click elements to
breadcrumb

Change-Id: Iab278b9373cdbda43900924386a9a88fab314d76
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
index 90668d5..a1f9985 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbItemDropDown.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.ecommons.ui.viewers.breadcrumb;
 
+import java.util.Objects;
+
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.action.Action;
@@ -327,7 +329,14 @@
 				@Override
 				public void mouseMove(final MouseEvent e) {
 					if (tree.equals(e.getSource())) {
-						final var currentItem= tree.getItem(new Point(e.x, e.y));
+						final TreeItem currentItem= tree.getItem(new Point(e.x, e.y));
+						if (!Objects.equals(currentItem, this.lastItem)) {
+							final boolean showHandPointer= (currentItem != null
+									&& BreadcrumbItemDropDown.this.parent.getViewer().canOpen(currentItem));
+							tree.setCursor((showHandPointer) ?
+									tree.getDisplay().getSystemCursor(SWT.CURSOR_HAND) :
+									null );
+						}
 						if (currentItem != null) {
 							final Rectangle clientArea= tree.getClientArea();
 							if (!currentItem.equals(this.lastItem)) {
diff --git a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java
index 22f0954..4f5011a 100644
--- a/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java
+++ b/ecommons/org.eclipse.statet.ecommons.uimisc/src/org/eclipse/statet/ecommons/ui/viewers/breadcrumb/BreadcrumbViewer.java
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Predicate;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jface.action.IMenuManager;
@@ -91,6 +92,8 @@
 	
 	private @Nullable ILabelProvider toolTipLabelProvider;
 	
+	private @Nullable Predicate<Object> canOpen;
+	
 	
 	/**
 	 * Create a new <code>BreadcrumbViewer</code>.
@@ -178,11 +181,17 @@
 		this.toolTipLabelProvider= toolTipLabelProvider;
 	}
 	
+	public void setCanOpen(final @Nullable Predicate<Object> predicate) {
+		this.canOpen= predicate;
+	}
+	
+	
 	@Override
 	public Control getControl() {
 		return this.container;
 	}
 	
+	
 	@Override
 	protected @Nullable Object getRoot() {
 		if (this.breadcrumbItems.isEmpty()) {
@@ -532,6 +541,11 @@
 		fireDoubleClick(new DoubleClickEvent(this, getSelection()));
 	}
 	
+	boolean canOpen(final Object element) {
+		final var predicate= this.canOpen;
+		return (predicate == null || predicate.test(element));
+	}
+	
 	/**
 	 * Notifies all open listeners.
 	 */