
us.ihmc.scs2.sessionVisualizer.jfx.controllers.chart.YoChartBaselinesOptionPaneController Maven / Gradle / Ivy
package us.ihmc.scs2.sessionVisualizer.jfx.controllers.chart;
import java.io.IOException;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ListView;
import javafx.scene.control.TitledPane;
import javafx.scene.paint.Color;
import us.ihmc.euclid.tools.EuclidCoreTools;
import us.ihmc.scs2.sessionVisualizer.jfx.SessionVisualizerIOTools;
import us.ihmc.scs2.sessionVisualizer.jfx.charts.ChartMarker;
import us.ihmc.scs2.sessionVisualizer.jfx.charts.ChartMarkerType;
import us.ihmc.scs2.sessionVisualizer.jfx.controllers.ControllerListCell;
import us.ihmc.scs2.sessionVisualizer.jfx.controllers.VisualizerController;
import us.ihmc.scs2.sessionVisualizer.jfx.managers.SessionVisualizerWindowToolkit;
public class YoChartBaselinesOptionPaneController implements VisualizerController
{
private static final double ROW_HEIGHT = 24 + 12;
@FXML
private TitledPane mainPane;
@FXML
private ListView baselinesListView;
private ObservableList listViewItems;
private ObservableList userMarkers;
private boolean ignoreChanges = false;
@Override
public void initialize(SessionVisualizerWindowToolkit toolkit)
{
baselinesListView.setCellFactory(param -> new ControllerListCell<>());
baselinesListView.setPrefHeight(ROW_HEIGHT + 2);
listViewItems = baselinesListView.getItems();
listViewItems.addListener((ListChangeListener) change ->
{
int numberOfRows = change.getList().size();
double prefHeight = numberOfRows * ROW_HEIGHT;
prefHeight = EuclidCoreTools.clamp(prefHeight, ROW_HEIGHT, 10.0 * ROW_HEIGHT);
baselinesListView.setPrefHeight(prefHeight + 2);
if (ignoreChanges)
return;
while (change.next())
{
if (change.wasAdded())
{
for (YoChartBaselineEditorPaneController newController : change.getAddedSubList())
{
userMarkers.add(newController.getMarker());
}
}
if (change.wasRemoved())
{
for (YoChartBaselineEditorPaneController oldController : change.getRemoved())
{
userMarkers.remove(oldController.getMarker());
oldController.dispose();
}
}
}
});
}
public void setInput(ObservableList userMarkers)
{
this.userMarkers = userMarkers;
ignoreChanges = true;
listViewItems.clear();
for (ChartMarker marker : userMarkers)
{
listViewItems.add(newBaselineEditor(marker));
}
ignoreChanges = false;
}
@FXML
private void addBaseline()
{
listViewItems.add(newBaselineEditor(null));
}
private YoChartBaselineEditorPaneController newBaselineEditor(ChartMarker marker)
{
FXMLLoader loader = new FXMLLoader(SessionVisualizerIOTools.CHART_BASELINE_EDITOR_PANE_URL);
try
{
loader.load();
YoChartBaselineEditorPaneController editor = loader.getController();
if (marker == null)
{
marker = new ChartMarker(ChartMarkerType.HORIZONTAL, new SimpleDoubleProperty(this, "userMarker" + userMarkers.size(), 0.0));
marker.setStroke(Color.hsb(userMarkers.size() * 360.0 / 4.3, 0.7, 0.8));
}
editor.setInput(marker, () -> listViewItems.remove(editor));
return editor;
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
}
public TitledPane getMainPane()
{
return mainPane;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy