From e95e8b785e90b838bef39f90b3898ecc71ad69f1 Mon Sep 17 00:00:00 2001 From: jmillman Date: Fri, 16 Oct 2015 15:35:47 -0400 Subject: [PATCH] more fixes to tooltips --- .../ui/AbstractVisualizationPane.java | 10 ++++--- .../timeline/ui/VisualizationPanel.java | 15 +++++------ .../ui/countsview/CountsViewPane.java | 3 ++- .../ui/detailview/DetailViewPane.java | 2 +- .../ui/detailview/EventBundleNodeBase.java | 27 +++++++++++++------ .../ui/detailview/EventDetailChart.java | 6 ++++- 6 files changed, 40 insertions(+), 23 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/AbstractVisualizationPane.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/AbstractVisualizationPane.java index 4fe6075686..20d03b6dc4 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/AbstractVisualizationPane.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/AbstractVisualizationPane.java @@ -77,8 +77,12 @@ import org.sleuthkit.autopsy.timeline.events.RefreshRequestedEvent; */ public abstract class AbstractVisualizationPane & TimeLineChart> extends BorderPane implements TimeLineView { - @NbBundle.Messages("AbstractVisualizationPane.Drag_Tooltip.text=Drag the mouse to select a time interval to zoom into.") - protected static final Tooltip DRAG_TOOLTIP = new Tooltip(Bundle.AbstractVisualizationPane_Drag_Tooltip_text()); + @NbBundle.Messages("AbstractVisualization.Drag_Tooltip.text=Drag the mouse to select a time interval to zoom into.") + private static final Tooltip DRAG_TOOLTIP = new Tooltip(Bundle.AbstractVisualization_Drag_Tooltip_text()); + + public static Tooltip getDragTooltip() { + return DRAG_TOOLTIP; + } protected final SimpleBooleanProperty hasEvents = new SimpleBooleanProperty(true); @@ -243,7 +247,7 @@ public abstract class AbstractVisualizationPane update(); }); - hoverProperty().addListener((observable, oldActivated, newActivated) -> { + hoverProperty().addListener((observable, oldActivated, newActivated) -> { if (newActivated) { controller.setStatus(DRAG_TOOLTIP.getText()); } else { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/VisualizationPanel.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/VisualizationPanel.java index 4195931c08..7ec59f61c1 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/VisualizationPanel.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/VisualizationPanel.java @@ -91,11 +91,8 @@ import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo; /** * A Container for an {@link AbstractVisualizationPane}, has a toolbar on top to - * hold settings widgets supplied by contained {@link AbstractVisualizationPane}, - * and the histogram / timeselection on bottom. Also supplies containers for - * replacement axis to contained {@link AbstractVisualizationPane} - * - * TODO: refactor common code out of histogram and CountsView? -jm + * hold settings widgets supplied by contained {@link AbstAbstractVisualization* and the histogram / timeselection on bottom. Also supplies containers for + * replacement axis to contained {@link AbstractAbstractVisualizationTODO: refactor common code out of histogram and CountsView? -jm */ public class VisualizationPanel extends BorderPane implements TimeLineView { @@ -109,7 +106,7 @@ public class VisualizationPanel extends BorderPane implements TimeLineView { private final NavPanel navPanel; - private AbstractVisualizationPane visualization; + private AbstractVisualizationPane visualization; //// range slider and histogram componenets @FXML @@ -178,8 +175,8 @@ public class VisualizationPanel extends BorderPane implements TimeLineView { private FilteredEventsModel filteredEvents; - private final ChangeListener rangeSliderListener - = (observable1, oldValue, newValue) -> { + private final ChangeListener rangeSliderListener = + (observable1, oldValue, newValue) -> { if (rangeSlider.isHighValueChanging() == false && rangeSlider.isLowValueChanging() == false) { Long minTime = filteredEvents.getMinTime() * 1000; controller.pushTimeRange(new Interval( @@ -377,7 +374,7 @@ public class VisualizationPanel extends BorderPane implements TimeLineView { if (visualization instanceof DetailViewPane) { navPanel.setDetailViewPane((DetailViewPane) visualization); } - visualization.hasEvents.addListener((ObservableValue observable, Boolean oldValue, Boolean newValue) -> { + visualization.hasEvents.addListener((observable, oldValue, newValue) -> { if (newValue == false) { notificationPane.setContent(new StackPane(visualization, new Region() { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/countsview/CountsViewPane.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/countsview/CountsViewPane.java index 546a9e8da1..2e059943b6 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/countsview/CountsViewPane.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/countsview/CountsViewPane.java @@ -285,7 +285,8 @@ public class CountsViewPane extends AbstractVisualizationPane(new CountsViewSettingsPane().getChildrenUnmodifiable()); diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java index fe9d776e2f..fdac14827c 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java @@ -120,7 +120,7 @@ public class DetailViewPane extends AbstractVisualizationPane(new DetailViewSettingsPane().getChildrenUnmodifiable()); diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventBundleNodeBase.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventBundleNodeBase.java index 292d42ad6e..cbeda933c6 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventBundleNodeBase.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventBundleNodeBase.java @@ -64,6 +64,7 @@ import org.sleuthkit.autopsy.timeline.datamodel.EventBundle; import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel; import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent; import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType; +import org.sleuthkit.autopsy.timeline.ui.AbstractVisualizationPane; import static org.sleuthkit.autopsy.timeline.ui.detailview.EventBundleNodeBase.show; import org.sleuthkit.autopsy.timeline.zooming.DescriptionLoD; import org.sleuthkit.datamodel.SleuthkitCase; @@ -169,19 +170,29 @@ public abstract class EventBundleNodeBase { /* - * defer tooltip creation till needed, this had a surprisingly large - * impact on speed of loading the chart + * defer tooltip content creation till needed, this had a + * surprisingly large impact on speed of loading the chart */ installTooltip(); + Tooltip.uninstall(chart, AbstractVisualizationPane.getDragTooltip()); showHoverControls(true); toFront(); }); + setOnMouseExited((MouseEvent event) -> { + showHoverControls(false); + if (parentNode != null) { + parentNode.showHoverControls(true); + } else { + Tooltip.install(chart, AbstractVisualizationPane.getDragTooltip()); + } + }); - setDescriptionVisibility(DescriptionVisibility.SHOWN); descVisibility.addListener((ObservableValue observable, DescriptionVisibility oldValue, DescriptionVisibility newValue) -> { setDescriptionVisibility(newValue); }); + setDescriptionVisibility(DescriptionVisibility.SHOWN); + } final DescriptionLoD getDescriptionLoD() { @@ -284,7 +295,7 @@ public abstract class EventBundleNodeBase impl EventDetailChart(DateAxis dateAxis, final Axis verticalAxis, ObservableList> selectedNodes) { super(dateAxis, verticalAxis); + Tooltip.install(this, AbstractVisualizationPane.getDragTooltip()); + dateAxis.setAutoRanging(false); verticalAxis.setVisible(false);//TODO: why doesn't this hide the vertical axis, instead we have to turn off all parts individually? -jm @@ -496,7 +500,7 @@ public final class EventDetailChart extends XYChart impl bundleNode.setVisible(true); bundleNode.setManaged(true); //apply advanced layout description visibility options - bundleNode.setDescriptionVisibilityLevel(descrVisibility.get()); + bundleNode.setDescriptionVisibility(descrVisibility.get()); bundleNode.setDescriptionWidth(truncateAll.get() ? truncateWidth.get() : USE_PREF_SIZE); //do recursive layout