[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. */