19 package org.sleuthkit.autopsy.timeline.ui.detailview;
21 import java.util.List;
23 import javafx.application.Platform;
24 import javafx.beans.binding.Bindings;
25 import javafx.beans.property.ReadOnlyObjectProperty;
26 import javafx.beans.property.ReadOnlyObjectWrapper;
27 import javafx.collections.FXCollections;
28 import javafx.collections.ObservableList;
29 import javafx.event.EventHandler;
30 import javafx.geometry.Insets;
31 import javafx.geometry.Orientation;
32 import javafx.geometry.Pos;
33 import javafx.scene.input.MouseEvent;
34 import javafx.scene.layout.CornerRadii;
35 import javafx.scene.layout.Pane;
36 import org.joda.time.DateTime;
37 import org.openide.util.NbBundle;
45 @NbBundle.Messages({
"EventBundleNodeBase.toolTip.loading=loading..."})
51 static final CornerRadii CORNER_RADII_3 =
new CornerRadii(3);
52 static final CornerRadii CORNER_RADII_1 =
new CornerRadii(1);
54 final ObservableList<EventNodeBase<?>> subNodes = FXCollections.observableArrayList();
55 final Pane subNodePane =
new Pane();
57 private final ReadOnlyObjectWrapper<DescriptionLoD> descLOD =
new ReadOnlyObjectWrapper<>();
59 MultiEventNodeBase(DetailsChartLane<?> chartLane, BundleType event, ParentNodeType parentNode) {
60 super(event, parentNode, chartLane);
61 setDescriptionLOD(event.getDescriptionLoD());
65 setAlignment(Pos.TOP_LEFT);
66 setMaxWidth(USE_PREF_SIZE);
67 infoHBox.setMaxWidth(USE_PREF_SIZE);
68 subNodePane.setPrefWidth(USE_COMPUTED_SIZE);
69 subNodePane.setMinWidth(USE_PREF_SIZE);
70 subNodePane.setMaxWidth(USE_PREF_SIZE);
75 heightProperty().addListener(heightProp -> chartLane.requestLayout());
76 Platform.runLater(() ->
77 setLayoutX(chartLane.getXAxis().getDisplayPosition(
new DateTime(event.getStartMillis())) - getLayoutXCompensation())
81 infoHBox.setPadding(
new Insets(2, 3, 2, 3));
82 infoHBox.setAlignment(Pos.TOP_LEFT);
84 Bindings.bindContent(subNodePane.getChildren(), subNodes);
88 return descLOD.getReadOnlyProperty();
98 final void setDescriptionLOD(
final DescriptionLoD descriptionLoD) {
99 descLOD.set(descriptionLoD);
102 @SuppressWarnings(
"unchecked")
107 final String getDescription() {
108 return getEvent().getDescription();
111 final Set<Long> getEventIDs() {
112 return getEvent().getEventIDs();
117 return Orientation.HORIZONTAL;
122 chartLane.layoutEventBundleNodes(subNodes, 0);
123 super.layoutChildren();
128 abstract EventHandler<MouseEvent> getDoubleClickHandler();
Orientation getContentBias()
ReadOnlyObjectProperty< DescriptionLoD > descriptionLoDProperty()
synchronized static Logger getLogger(String name)