Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
ZoomSettingsPane.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.timeline.zooming;
20 
21 import java.net.URL;
22 import java.time.temporal.ChronoUnit;
23 import java.util.ResourceBundle;
24 import javafx.application.Platform;
25 import javafx.beans.InvalidationListener;
26 import javafx.beans.property.ReadOnlyObjectProperty;
27 import javafx.fxml.FXML;
28 import javafx.scene.control.*;
29 import javafx.util.StringConverter;
30 import org.openide.util.NbBundle;
40 
45 public class ZoomSettingsPane extends TitledPane implements TimeLineView {
46 
47  @FXML
48  private ResourceBundle resources;
49 
50  @FXML
51  private URL location;
52 
53  @FXML
54  private Button backButton;
55 
56  @FXML
57  private Button forwardButton;
58 
59  @FXML
60  private Slider descrLODSlider;
61 
62  @FXML
63  private Slider typeZoomSlider;
64 
65  @FXML
66  private Slider timeUnitSlider;
67 
68  @FXML
69  private Label descrLODLabel;
70 
71  @FXML
72  private Label typeZoomLabel;
73 
74  @FXML
75  private Label timeUnitLabel;
76 
77  @FXML
78  private Label zoomLabel;
79 
80  @FXML
81  private Label historyLabel;
82 
84 
86 
90  public void initialize() {
91 
92  timeUnitSlider.setMax(TimeUnits.values().length - 2);
93  timeUnitSlider.setLabelFormatter(new TimeUnitConverter());
94 
95  typeZoomSlider.setMin(1);
96  typeZoomSlider.setMax(2);
97  typeZoomSlider.setLabelFormatter(new TypeZoomConverter());
98  descrLODSlider.setMax(DescriptionLOD.values().length - 1);
99  descrLODSlider.setLabelFormatter(new DescrLODConverter());
100  descrLODLabel.setText(
101  NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.descrLODLabel.text"));
102  typeZoomLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.typeZoomLabel.text"));
103  timeUnitLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.timeUnitLabel.text"));
104  zoomLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.zoomLabel.text"));
105  historyLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.historyLabel.text"));
106  }
107 
108  public ZoomSettingsPane() {
109  FXMLConstructor.construct(this, "ZoomSettingsPane.fxml"); // NON-NLS
110  }
111 
112  @Override
113  synchronized public void setController(TimeLineController controller) {
114  this.controller = controller;
115  setModel(controller.getEventsModel());
116  descrLODSlider.disableProperty().bind(controller.getViewMode().isEqualTo(VisualizationMode.COUNTS));
117  Back back = new Back(controller);
118  backButton.disableProperty().bind(back.disabledProperty());
119  backButton.setOnAction(back);
120  backButton.setTooltip(new Tooltip(
121  NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.backButton.toolTip.text",
122  back.getAccelerator().getName())));
123  Forward forward = new Forward(controller);
124  forwardButton.disableProperty().bind(forward.disabledProperty());
125  forwardButton.setOnAction(forward);
126  forwardButton.setTooltip(new Tooltip(
127  NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.forwardButton.toolTip.text",
128  forward.getAccelerator().getName())));
129 
130  }
131 
132  @Override
133  public void setModel(FilteredEventsModel filteredEvents) {
134  this.filteredEvents = filteredEvents;
135 
136  initializeSlider(timeUnitSlider,
137  () -> {
138  TimeUnits requestedUnit = TimeUnits.values()[new Double(timeUnitSlider.getValue()).intValue()];
139  if (requestedUnit == TimeUnits.FOREVER) {
140  controller.showFullRange();
141  } else {
143  }
144  },
145  this.filteredEvents.timeRange(),
146  () -> {
147  RangeDivisionInfo rangeInfo = RangeDivisionInfo.getRangeDivisionInfo(this.filteredEvents.timeRange().get());
148  ChronoUnit chronoUnit = rangeInfo.getPeriodSize().getChronoUnit();
149 
150  timeUnitSlider.setValue(TimeUnits.fromChronoUnit(chronoUnit).ordinal() - 1);
151  });
152 
153  initializeSlider(descrLODSlider,
154  () -> {
155  DescriptionLOD newLOD = DescriptionLOD.values()[Math.round(descrLODSlider.valueProperty().floatValue())];
156  if (controller.pushDescrLOD(newLOD) == false) {
157  descrLODSlider.setValue(new DescrLODConverter().fromString(filteredEvents.getDescriptionLOD().toString()));
158  }
159  }, this.filteredEvents.descriptionLOD(),
160  () -> {
161  descrLODSlider.setValue(this.filteredEvents.descriptionLOD().get().ordinal());
162  });
163 
164  initializeSlider(typeZoomSlider,
165  () -> {
166  EventTypeZoomLevel newZoomLevel = EventTypeZoomLevel.values()[Math.round(typeZoomSlider.valueProperty().floatValue())];
167  controller.pushEventTypeZoom(newZoomLevel);
168  },
169  this.filteredEvents.eventTypeZoom(),
170  () -> {
171  typeZoomSlider.setValue(this.filteredEvents.eventTypeZoom().get().ordinal());
172  });
173  }
174 
191  private <T> void initializeSlider(Slider slider, Runnable sliderChangeHandler, ReadOnlyObjectProperty<T> driver, Runnable driverChangHandler) {
192  final InvalidationListener sliderListener = observable -> {
193  if (slider.isValueChanging() == false) {
194  sliderChangeHandler.run();
195  }
196  };
197  slider.valueProperty().addListener(sliderListener);
198  slider.valueChangingProperty().addListener(sliderListener);
199 
200  Platform.runLater(driverChangHandler);
201 
202  driver.addListener(observable -> {
203  slider.valueProperty().removeListener(sliderListener);
204  slider.valueChangingProperty().removeListener(sliderListener);
205 
206  Platform.runLater(driverChangHandler);
207 
208  slider.valueProperty().addListener(sliderListener);
209  slider.valueChangingProperty().addListener(sliderListener);
210  });
211  }
212 
213  //Can these be abstracted to a sort of Enum converter for use in a potential enumslider
214  private static class TimeUnitConverter extends StringConverter<Double> {
215 
216  @Override
217  public String toString(Double object) {
218  return TimeUnits.values()[Math.min(TimeUnits.values().length - 1, object.intValue() + 1)].toString();
219  }
220 
221  @Override
222  public Double fromString(String string) {
223  return new Integer(TimeUnits.valueOf(string).ordinal()).doubleValue();
224  }
225  }
226 
227  private static class TypeZoomConverter extends StringConverter<Double> {
228 
229  @Override
230  public String toString(Double object) {
231  return EventTypeZoomLevel.values()[object.intValue()].getDisplayName();
232  }
233 
234  @Override
235  public Double fromString(String string) {
236  return new Integer(EventTypeZoomLevel.valueOf(string).ordinal()).doubleValue();
237  }
238  }
239 
240  private static class DescrLODConverter extends StringConverter<Double> {
241 
242  @Override
243  public String toString(Double object) {
244  return DescriptionLOD.values()[object.intValue()].getDisplayName();
245  }
246 
247  @Override
248  public Double fromString(String string) {
249  return new Integer(DescriptionLOD.valueOf(string).ordinal()).doubleValue();
250  }
251  }
252 }
synchronized boolean pushDescrLOD(DescriptionLOD newLOD)
static void construct(Node n, String fxmlFileName)
static RangeDivisionInfo getRangeDivisionInfo(Interval timeRange)
synchronized ReadOnlyObjectProperty< Interval > timeRange()
static Interval getIntervalAround(DateTime aroundInstant, ReadablePeriod period)
static TimeUnits fromChronoUnit(ChronoUnit chronoUnit)
Definition: TimeUnits.java:41
synchronized void setController(TimeLineController controller)
synchronized ReadOnlyObjectProperty< EventTypeZoomLevel > eventTypeZoom()
synchronized ReadOnlyObjectProperty< VisualizationMode > getViewMode()
synchronized ReadOnlyObjectProperty< DescriptionLOD > descriptionLOD()
synchronized void pushTimeRange(Interval timeRange)
static DateTime middleOf(Interval interval)
synchronized void pushEventTypeZoom(EventTypeZoomLevel typeZoomeLevel)
void setModel(FilteredEventsModel filteredEvents)

Copyright © 2012-2015 Basis Technology. Generated on: Mon Oct 19 2015
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.