Autopsy  4.0
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.time.temporal.ChronoUnit;
22 import javafx.application.Platform;
23 import javafx.beans.InvalidationListener;
24 import javafx.beans.property.ReadOnlyObjectProperty;
25 import javafx.fxml.FXML;
26 import javafx.scene.control.Button;
27 import javafx.scene.control.Label;
28 import javafx.scene.control.Slider;
29 import javafx.scene.control.TitledPane;
30 import javafx.scene.control.Tooltip;
31 import javafx.util.StringConverter;
32 import org.openide.util.NbBundle;
41 
48 public class ZoomSettingsPane extends TitledPane {
49 
50  @FXML
51  private Button backButton;
52 
53  @FXML
54  private Button forwardButton;
55 
56  @FXML
57  private Slider descrLODSlider;
58 
59  @FXML
60  private Slider typeZoomSlider;
61 
62  @FXML
63  private Slider timeUnitSlider;
64 
65  @FXML
66  private Label descrLODLabel;
67 
68  @FXML
69  private Label typeZoomLabel;
70 
71  @FXML
72  private Label timeUnitLabel;
73 
74  @FXML
75  private Label zoomLabel;
76 
77  @FXML
78  private Label historyLabel;
79 
81 
83 
87  public void initialize() {
88 
89  timeUnitSlider.setMax(TimeUnits.values().length - 2);
90  timeUnitSlider.setLabelFormatter(new TimeUnitConverter());
91 
92  typeZoomSlider.setMin(1);
93  typeZoomSlider.setMax(2);
94  typeZoomSlider.setLabelFormatter(new TypeZoomConverter());
95  descrLODSlider.setMax(DescriptionLoD.values().length - 1);
96  descrLODSlider.setLabelFormatter(new DescrLODConverter());
97  descrLODLabel.setText(
98  NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.descrLODLabel.text"));
99  typeZoomLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.typeZoomLabel.text"));
100  timeUnitLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.timeUnitLabel.text"));
101  zoomLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.zoomLabel.text"));
102  historyLabel.setText(NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.historyLabel.text"));
103 
104  initializeSlider(timeUnitSlider,
105  () -> {
106  TimeUnits requestedUnit = TimeUnits.values()[new Double(timeUnitSlider.getValue()).intValue()];
107  if (requestedUnit == TimeUnits.FOREVER) {
108  controller.showFullRange();
109  } else {
111  }
112  },
113  this.filteredEvents.timeRangeProperty(),
114  () -> {
115  RangeDivisionInfo rangeInfo = RangeDivisionInfo.getRangeDivisionInfo(this.filteredEvents.timeRangeProperty().get());
116  ChronoUnit chronoUnit = rangeInfo.getPeriodSize().getChronoUnit();
117  timeUnitSlider.setValue(TimeUnits.fromChronoUnit(chronoUnit).ordinal() - 1);
118  });
119 
120  initializeSlider(descrLODSlider,
121  () -> controller.pushDescrLOD(DescriptionLoD.values()[Math.round(descrLODSlider.valueProperty().floatValue())]),
122  this.filteredEvents.descriptionLODProperty(), () -> {
123  descrLODSlider.setValue(this.filteredEvents.descriptionLODProperty().get().ordinal());
124  });
125 
126  initializeSlider(typeZoomSlider,
127  () -> controller.pushEventTypeZoom(EventTypeZoomLevel.values()[Math.round(typeZoomSlider.valueProperty().floatValue())]),
128  this.filteredEvents.eventTypeZoomProperty(),
129  () -> typeZoomSlider.setValue(this.filteredEvents.eventTypeZoomProperty().get().ordinal()));
130 
131  descrLODSlider.disableProperty().bind(controller.viewModeProperty().isEqualTo(VisualizationMode.COUNTS));
132  Back back = new Back(controller);
133  backButton.disableProperty().bind(back.disabledProperty());
134  backButton.setOnAction(back);
135  backButton.setTooltip(new Tooltip(
136  NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.backButton.toolTip.text",
137  back.getAccelerator().getName())));
138  Forward forward = new Forward(controller);
139  forwardButton.disableProperty().bind(forward.disabledProperty());
140  forwardButton.setOnAction(forward);
141  forwardButton.setTooltip(new Tooltip(
142  NbBundle.getMessage(this.getClass(), "ZoomSettingsPane.forwardButton.toolTip.text",
143  forward.getAccelerator().getName())));
144 
145  }
146 
148  this.controller = controller;
149  this.filteredEvents = controller.getEventsModel();
150  FXMLConstructor.construct(this, "ZoomSettingsPane.fxml"); // NON-NLS
151  }
152 
170  private <T> void initializeSlider(Slider slider, Runnable sliderChangeHandler, ReadOnlyObjectProperty<T> driver, Runnable driverChangHandler) {
171  final InvalidationListener sliderListener = observable -> {
172  if (slider.isValueChanging() == false) {
173  sliderChangeHandler.run();
174  }
175  };
176  slider.valueProperty().addListener(sliderListener);
177  slider.valueChangingProperty().addListener(sliderListener);
178 
179  Platform.runLater(driverChangHandler);
180 
181  driver.addListener(observable -> {
182  slider.valueProperty().removeListener(sliderListener);
183  slider.valueChangingProperty().removeListener(sliderListener);
184 
185  Platform.runLater(() -> {
186  driverChangHandler.run();
187  slider.valueProperty().addListener(sliderListener);
188  slider.valueChangingProperty().addListener(sliderListener);
189  });
190  });
191  }
192 
193  //Can these be abstracted to a sort of Enum converter for use in a potential enumslider
194  private static class TimeUnitConverter extends StringConverter<Double> {
195 
196  @Override
197  public String toString(Double object) {
198  return TimeUnits.values()[Math.min(TimeUnits.values().length - 1, object.intValue() + 1)].toString();
199  }
200 
201  @Override
202  public Double fromString(String string) {
203  return new Integer(TimeUnits.valueOf(string).ordinal()).doubleValue();
204  }
205  }
206 
207  private static class TypeZoomConverter extends StringConverter<Double> {
208 
209  @Override
210  public String toString(Double object) {
211  return EventTypeZoomLevel.values()[object.intValue()].getDisplayName();
212  }
213 
214  @Override
215  public Double fromString(String string) {
216  return new Integer(EventTypeZoomLevel.valueOf(string).ordinal()).doubleValue();
217  }
218  }
219 
220  private static class DescrLODConverter extends StringConverter<Double> {
221 
222  @Override
223  public String toString(Double object) {
224  return DescriptionLoD.values()[object.intValue()].getDisplayName();
225  }
226 
227  @Override
228  public Double fromString(String string) {
229  return new Integer(DescriptionLoD.valueOf(string).ordinal()).doubleValue();
230  }
231  }
232 }
synchronized ReadOnlyObjectProperty< VisualizationMode > viewModeProperty()
synchronized ReadOnlyObjectProperty< EventTypeZoomLevel > eventTypeZoomProperty()
synchronized boolean pushTimeRange(Interval timeRange)
static RangeDivisionInfo getRangeDivisionInfo(Interval timeRange)
static Interval getIntervalAround(DateTime aroundInstant, ReadablePeriod period)
static TimeUnits fromChronoUnit(ChronoUnit chronoUnit)
Definition: TimeUnits.java:43
synchronized void pushDescrLOD(DescriptionLoD newLOD)
synchronized ReadOnlyObjectProperty< DescriptionLoD > descriptionLODProperty()
static void construct(Node node, String fxmlFileName)
synchronized ReadOnlyObjectProperty< Interval > timeRangeProperty()
static DateTime middleOf(Interval interval)
synchronized void pushEventTypeZoom(EventTypeZoomLevel typeZoomeLevel)

Copyright © 2012-2015 Basis Technology. Generated on: Wed Apr 6 2016
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.