82 @SuppressWarnings(
"this-escape")
85 this.filteredEvents =
controller.getEventsModel();
90 "ZoomSettingsPane.descrLODLabel.text=Description Detail:",
91 "ZoomSettingsPane.typeZoomLabel.text=Event Type:",
92 "ZoomSettingsPane.timeUnitLabel.text=Time Units:",
93 "ZoomSettingsPane.zoomLabel.text=Zoom"})
95 zoomLabel.setText(Bundle.ZoomSettingsPane_zoomLabel_text());
98 typeZoomSlider.setMax(TimelineEventType.HierarchyLevel.values().length - 1);
100 controller::pushEventTypeZoom,
102 TimelineEventType.HierarchyLevel.class,
103 TimelineEventType.HierarchyLevel::ordinal,
104 Function.identity());
105 typeZoomLabel.setText(Bundle.ZoomSettingsPane_typeZoomLabel_text());
109 controller::pushDescrLOD,
111 TimelineLevelOfDetail.class,
112 TimelineLevelOfDetail::ordinal,
113 Function.identity());
114 descrLODLabel.setText(Bundle.ZoomSettingsPane_descrLODLabel_text());
127 controller::pushTimeUnit,
133 timeUnitLabel.setText(Bundle.ZoomSettingsPane_timeUnitLabel_text());
137 visibleProperty().bind(notListMode);
138 managedProperty().bind(notListMode);
179 @NbBundle.Messages({
"ZoomSettingsPane.sliderChange.errorText=Error responding to slider value change."})
181 private <DriverType, EnumType extends Enum<EnumType>>
void configureSliderListeners(
183 CheckedConsumer<EnumType> sliderValueConsumer,
184 ReadOnlyObjectProperty<DriverType> modelProperty,
185 Class<EnumType> enumClass,
186 Function<DriverType, Integer> driverValueMapper,
187 Function<Integer, Integer> labelIndexMapper) {
190 slider.setLabelFormatter(
new EnumSliderLabelFormatter<>(enumClass, labelIndexMapper));
193 final InvalidationListener sliderListener = observable -> {
195 if (slider.isValueChanging() ==
false) {
197 EnumType sliderValueAsEnum = enumClass.getEnumConstants()[Math.round((
float) slider.getValue())];
199 sliderValueConsumer.accept(sliderValueAsEnum);
200 }
catch (TskCoreException exception) {
201 logger.log(Level.SEVERE,
"Error responding to slider value change.", exception);
202 Notifications.create().owner(getScene().getWindow())
203 .text(Bundle.ZoomSettingsPane_sliderChange_errorText())
209 slider.valueProperty().addListener(sliderListener);
210 slider.valueChangingProperty().addListener(sliderListener);
213 slider.setValue(driverValueMapper.apply(modelProperty.get()));
216 modelProperty.addListener(modelProp -> {
218 slider.valueProperty().removeListener(sliderListener);
219 slider.valueChangingProperty().removeListener(sliderListener);
221 Platform.runLater(() -> {
223 slider.setValue(driverValueMapper.apply(modelProperty.get()));
226 slider.valueProperty().addListener(sliderListener);
227 slider.valueChangingProperty().addListener(sliderListener);
240 static private class EnumSliderLabelFormatter<EnumType
extends Enum<EnumType>> extends StringConverter<Double> {
245 private final Class<EnumType>
clazz;
253 EnumSliderLabelFormatter(Class<EnumType> enumClass, Function<Integer, Integer> indexMapper) {
254 this.clazz = enumClass;
255 this.indexAdjsuter = indexMapper;
266 EnumType enumConstant =
clazz.getEnumConstants()[
indexAdjsuter.apply(dbl.intValue())];
268 return (String)
clazz.getMethod(
"getDisplayName", (Class<?>[])
null).invoke(enumConstant, (Object[])
null);
269 }
catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
270 return enumConstant.toString();
276 throw new UnsupportedOperationException(
"This method should not be used. This EnumSliderLabelFormatter is being used in an unintended way.");
288 void accept(T input)
throws TskCoreException;