19package org.sleuthkit.autopsy.timeline.ui.detailview;
21import javafx.scene.chart.Axis;
22import javafx.scene.control.Tooltip;
23import javafx.scene.input.MouseButton;
24import javafx.scene.shape.Line;
25import org.joda.time.DateTime;
26import org.openide.util.NbBundle;
27import org.sleuthkit.autopsy.timeline.TimeLineController;
28import org.sleuthkit.autopsy.timeline.ui.AbstractTimelineChart;
34@NbBundle.Messages({
"# {0} - date/time at guideline position",
35 "GuideLine.tooltip.text={0}\nRight-click to remove.\nDrag to reposition."})
36class GuideLine extends Line {
40 private final Tooltip tooltip =
new Tooltip();
41 private final DetailsChart chart;
44 private double startLayoutX;
45 private double dragStartX = 0;
50 GuideLine(DetailsChart chart) {
53 Axis<DateTime> xAxis = chart.getXAxis();
54 endYProperty().bind(chart.heightProperty().subtract(xAxis.heightProperty().subtract(xAxis.tickLengthProperty())));
56 getStyleClass().add(
"guide-line");
58 Tooltip.install(
this, tooltip);
59 tooltip.setOnShowing(showing -> tooltip.setText(Bundle.GuideLine_tooltip_text(getDateTimeAsString())));
62 setOnMouseEntered(entered -> Tooltip.uninstall(chart, CHART_DEFAULT_TOOLTIP));
63 setOnMouseExited(exited -> Tooltip.install(chart, CHART_DEFAULT_TOOLTIP));
65 setOnMouseClicked(clickedEvent -> {
66 if (clickedEvent.getButton() == MouseButton.SECONDARY
67 && clickedEvent.isStillSincePress()) {
68 chart.clearGuideLine(
this);
69 clickedEvent.consume();
72 setOnMousePressed(pressedEvent -> {
73 startLayoutX = getLayoutX();
74 dragStartX = pressedEvent.getScreenX();
76 setOnMouseDragged(dragEvent -> {
77 double dX = dragEvent.getScreenX() - dragStartX;
78 relocate(startLayoutX + dX, 0);
83 private String getDateTimeAsString() {
static DateTimeFormatter getZonedFormatter()
static Tooltip getDefaultTooltip()