50public final class PrimaryDetailsChartLane
extends DetailsChartLane<EventStripe> implements
ContextMenuProvider {
60 @NbBundle.Messages({
"PrimaryDetailsChartLane.stripeChangeListener.errorMessage=Error adding stripe to chart lane."})
62 super(parentChart, dateAxis, verticalAxis,
true);
67 parentChart.getRootEventStripes().addListener((ListChangeListener.Change<? extends
EventStripe> change) -> {
68 while (change.next()) {
70 for (EventStripe stripe : change.getAddedSubList()) {
73 } catch (TskCoreException ex) {
74 Notifications.create().owner(getScene().getWindow())
75 .text(Bundle.PrimaryDetailsChartLane_stripeChangeListener_errorMessage()).showError();
76 logger.log(Level.SEVERE,
"Error adding stripe to chart lane.", ex);
78 change.getRemoved().forEach(this::removeEvent);
82 for (EventStripe stripe : parentChart.getRootEventStripes()) {
85 }
catch (TskCoreException ex) {
86 Notifications.create().owner(getScene().getWindow())
87 .text(Bundle.PrimaryDetailsChartLane_stripeChangeListener_errorMessage())
89 logger.log(Level.SEVERE,
"Error adding stripe to chart lane.", ex);
94 getSelectedNodes().addListener((ListChangeListener.Change<? extends EventNodeBase<?>> change) -> {
95 while (change.next()) {
96 change.getRemoved().forEach(removedNode -> {
97 removedNode.getEvent().getClusters().forEach(cluster -> {
98 Line removedLine = projectionMap.remove(cluster);
99 getChartChildren().removeAll(removedLine);
103 change.getAddedSubList().forEach(addedNode -> {
104 for (EventCluster range : addedNode.getEvent().getClusters()) {
105 double y = dateAxis.getLayoutY() + PROJECTED_LINE_Y_OFFSET;
107 = new Line(dateAxis.localToParent(getXForEpochMillis(range.getStartMillis()), 0).getX(), y,
108 dateAxis.localToParent(getXForEpochMillis(range.getEndMillis()), 0).getX(), y);
109 line.setStroke(getColor(addedNode.getEventType()).deriveColor(0, 1, 1, .5));
110 line.setStrokeWidth(PROJECTED_LINE_STROKE_WIDTH);
111 line.setStrokeLineCap(StrokeLineCap.ROUND);
112 projectionMap.put(range, line);
113 getChartChildren().add(line);
121 return getXAxis().localToParent(getXForEpochMillis(epochMillis), 0).getX();
125 void doAdditionalLayout() {
126 for (
final Map.Entry<
EventCluster, Line> entry : projectionMap.entrySet()) {
128 final Line line = entry.getValue();
130 line.setStartX(getParentXForEpochMillis(cluster.
getStartMillis()));
131 line.setEndX(getParentXForEpochMillis(cluster.
getEndMillis()));
133 line.setStartY(getXAxis().getLayoutY() + PROJECTED_LINE_Y_OFFSET);
134 line.setEndY(getXAxis().getLayoutY() + PROJECTED_LINE_Y_OFFSET);