
us.ihmc.scs2.sessionVisualizer.jfx.controllers.sliderboard.YoSliderboardManager Maven / Gradle / Ivy
package us.ihmc.scs2.sessionVisualizer.jfx.controllers.sliderboard;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleObjectProperty;
import javafx.fxml.FXMLLoader;
import javafx.stage.Window;
import javafx.util.Pair;
import org.apache.commons.lang3.tuple.ImmutableTriple;
import us.ihmc.log.LogTools;
import us.ihmc.messager.TopicListener;
import us.ihmc.messager.javafx.JavaFXMessager;
import us.ihmc.scs2.definition.yoSlider.YoButtonDefinition;
import us.ihmc.scs2.definition.yoSlider.YoKnobDefinition;
import us.ihmc.scs2.definition.yoSlider.YoSliderDefinition;
import us.ihmc.scs2.definition.yoSlider.YoSliderboardDefinition;
import us.ihmc.scs2.definition.yoSlider.YoSliderboardListDefinition;
import us.ihmc.scs2.definition.yoSlider.YoSliderboardType;
import us.ihmc.scs2.session.Session;
import us.ihmc.scs2.sessionVisualizer.jfx.SCSGuiConfiguration;
import us.ihmc.scs2.sessionVisualizer.jfx.SessionVisualizerIOTools;
import us.ihmc.scs2.sessionVisualizer.jfx.SessionVisualizerTopics;
import us.ihmc.scs2.sessionVisualizer.jfx.managers.Manager;
import us.ihmc.scs2.sessionVisualizer.jfx.managers.SecondaryWindowManager;
import us.ihmc.scs2.sessionVisualizer.jfx.managers.SessionVisualizerToolkit;
import us.ihmc.scs2.sessionVisualizer.jfx.xml.XMLTools;
import jakarta.xml.bind.JAXBException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
public class YoSliderboardManager implements Manager
{
private final Property behringerSliderboard = new SimpleObjectProperty<>(this, "behringerSliderboard", null);
private final SessionVisualizerToolkit toolkit;
private final SessionVisualizerTopics topics;
private final JavaFXMessager messager;
private YoSliderboardListDefinition initialConfiguration = null;
public YoSliderboardManager(SessionVisualizerToolkit toolkit)
{
messager = toolkit.getMessager();
topics = toolkit.getTopics();
this.toolkit = toolkit;
}
public void saveSessionConfiguration(SCSGuiConfiguration configuration)
{
handleSaveRequest(configuration.getYoSliderboardConfigurationFile());
}
private final TopicListener saveRequestListener = m -> handleSaveRequest(m);
private final TopicListener loadRequestListener = m -> handleLoadRequest(m);
private final TopicListener clearAllRequestListener = m -> handleClearRequest(m);
private final TopicListener setMultiRequestListener = m -> handleSetRequest(m);
private final TopicListener setSingleRequestListener = m -> handleSetRequest(m);
private final TopicListener> removeRequestListener = m -> handleRemoveRequest(m.getKey(), m.getValue());
private final TopicListener> setButtonRequestListener = m -> handleSetButtonRequest(m.getLeft(),
m.getMiddle(),
m.getRight());
private final TopicListener> setKnobRequestListener = m -> handleSetKnobRequest(m.getLeft(),
m.getMiddle(),
m.getRight());
private final TopicListener> setSliderRequestListener = m -> handleSetSliderRequest(m.getLeft(),
m.getMiddle(),
m.getRight());
private final TopicListener> clearButtonRequestListener = m -> handleClearButtonRequest(m.getLeft(),
m.getMiddle(),
m.getRight());
private final TopicListener> clearKnobRequestListener = m -> handleClearKnobRequest(m.getLeft(),
m.getMiddle(),
m.getRight());
private final TopicListener> clearSliderRequestListener = m -> handleClearSliderRequest(m.getLeft(),
m.getMiddle(),
m.getRight());
@Override
public void startSession(Session session)
{
initialConfiguration = null;
messager.addFXTopicListener(topics.getYoMultiSliderboardSave(), saveRequestListener);
messager.addFXTopicListener(topics.getYoMultiSliderboardLoad(), loadRequestListener);
messager.addFXTopicListener(topics.getYoMultiSliderboardClearAll(), clearAllRequestListener);
messager.addFXTopicListener(topics.getYoMultiSliderboardSet(), setMultiRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardSet(), setSingleRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardRemove(), removeRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardSetButton(), setButtonRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardSetKnob(), setKnobRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardSetSlider(), setSliderRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardClearButton(), clearButtonRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardClearKnob(), clearKnobRequestListener);
messager.addFXTopicListener(topics.getYoSliderboardClearSlider(), clearSliderRequestListener);
}
@Override
public void stopSession()
{
messager.removeFXTopicListener(topics.getYoMultiSliderboardSave(), saveRequestListener);
messager.removeFXTopicListener(topics.getYoMultiSliderboardLoad(), loadRequestListener);
messager.removeFXTopicListener(topics.getYoMultiSliderboardClearAll(), clearAllRequestListener);
messager.removeFXTopicListener(topics.getYoMultiSliderboardSet(), setMultiRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardSet(), setSingleRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardRemove(), removeRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardSetButton(), setButtonRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardSetKnob(), setKnobRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardSetSlider(), setSliderRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardClearButton(), clearButtonRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardClearKnob(), clearKnobRequestListener);
messager.removeFXTopicListener(topics.getYoSliderboardClearSlider(), clearSliderRequestListener);
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().close();
behringerSliderboard.setValue(null);
}
}
@Override
public boolean isSessionLoaded()
{
// TODO Should probably return something else here.
return false;
}
private void handleSaveRequest(File file)
{
YoSliderboardListDefinition definitionToSave;
if (behringerSliderboard.getValue() != null)
definitionToSave = behringerSliderboard.getValue().toYoSliderboardListDefinition(true);
else
definitionToSave = initialConfiguration;
if (definitionToSave != null)
{
try
{
XMLTools.saveYoSliderboardListDefinition(new FileOutputStream(file), definitionToSave);
}
catch (IOException | JAXBException e)
{
e.printStackTrace();
}
}
}
private void handleLoadRequest(File file)
{
LogTools.info("Loading from file: " + file);
try
{
YoSliderboardListDefinition definition = XMLTools.loadYoSliderboardListDefinition(new FileInputStream(file));
handleSetRequest(definition);
if (definition.getWindowConfiguration() != null && !definition.getYoSliderboards().isEmpty() && definition.getWindowConfiguration().isShowing())
{
openSliderboardWindow(null, definition.getYoSliderboards().get(0).getType());
}
}
catch (IOException | JAXBException e)
{
e.printStackTrace();
}
}
private void handleClearRequest(Boolean m)
{
if (behringerSliderboard.getValue() != null)
behringerSliderboard.getValue().clear();
else
initialConfiguration = null;
}
private void handleSetRequest(YoSliderboardListDefinition definition)
{
if (behringerSliderboard.getValue() != null)
behringerSliderboard.getValue().setInput(definition);
else
initialConfiguration = new YoSliderboardListDefinition(definition);
}
private void handleSetRequest(YoSliderboardDefinition definition)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().setSliderboard(definition);
}
else
{
if (initialConfiguration == null)
initialConfiguration = new YoSliderboardListDefinition();
int index = findSliderboardIndex(definition.getName(), definition.getType());
if (index != -1)
initialConfiguration.getYoSliderboards().get(index).set(definition);
else
initialConfiguration.getYoSliderboards().add(definition);
}
}
private void handleRemoveRequest(String sliderboardName, YoSliderboardType sliderboardType)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().closeSliderboard(sliderboardName, sliderboardType);
}
else
{
if (initialConfiguration == null)
initialConfiguration = new YoSliderboardListDefinition();
int index = findSliderboardIndex(sliderboardName, sliderboardType);
if (index != -1)
initialConfiguration.getYoSliderboards().remove(index);
}
}
private void handleSetButtonRequest(String sliderboardName, YoSliderboardType sliderboardType, YoButtonDefinition buttonDefinition)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().setButtonInput(sliderboardName, sliderboardType, buttonDefinition);
}
else
{
YoSliderboardDefinition sliderboard = getOrCreateSliderboardDefinition(sliderboardName, sliderboardType);
sliderboard.getButtons().add(new YoButtonDefinition(buttonDefinition));
}
}
private void handleSetKnobRequest(String sliderboardName, YoSliderboardType sliderboardType, YoKnobDefinition knobDefinition)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().setKnobInput(sliderboardName, sliderboardType, knobDefinition);
}
else
{
YoSliderboardDefinition sliderboard = getOrCreateSliderboardDefinition(sliderboardName, sliderboardType);
sliderboard.getKnobs().add(new YoKnobDefinition(knobDefinition));
}
}
private void handleSetSliderRequest(String sliderboardName, YoSliderboardType sliderboardType, YoSliderDefinition sliderDefinition)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().setSliderInput(sliderboardName, sliderboardType, sliderDefinition);
}
else
{
YoSliderboardDefinition sliderboard = getOrCreateSliderboardDefinition(sliderboardName, sliderboardType);
sliderboard.getSliders().add(new YoSliderDefinition(sliderDefinition));
}
}
private YoSliderboardDefinition getOrCreateSliderboardDefinition(String sliderboardName, YoSliderboardType sliderboardType)
{
if (initialConfiguration == null)
initialConfiguration = new YoSliderboardListDefinition();
int sliderboardIndex = findSliderboardIndex(sliderboardName, sliderboardType);
YoSliderboardDefinition sliderboard;
if (sliderboardIndex != -1)
{
sliderboard = initialConfiguration.getYoSliderboards().get(sliderboardIndex);
}
else
{
sliderboard = new YoSliderboardDefinition(sliderboardName);
initialConfiguration.getYoSliderboards().add(sliderboard);
}
return sliderboard;
}
private void handleClearButtonRequest(String sliderboardName, YoSliderboardType sliderboardType, int buttonIndex)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().removeButtonInput(sliderboardName, sliderboardType, buttonIndex);
}
else
{
if (initialConfiguration == null)
initialConfiguration = new YoSliderboardListDefinition();
int sliderboardIndex = findSliderboardIndex(sliderboardName, sliderboardType);
if (sliderboardIndex == -1)
return;
YoSliderboardDefinition sliderboard = initialConfiguration.getYoSliderboards().get(sliderboardIndex);
List buttons = sliderboard.getButtons();
for (int i = buttons.size() - 1; i >= 0; i--)
{
if (i == buttonIndex && buttons.get(i).getIndex() == -1)
buttons.remove(i);
else if (buttons.get(i).getIndex() == buttonIndex)
buttons.remove(i);
}
}
}
private void handleClearKnobRequest(String sliderboardName, YoSliderboardType sliderboardType, int knobIndex)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().removeKnobInput(sliderboardName, sliderboardType, knobIndex);
}
else
{
if (initialConfiguration == null)
initialConfiguration = new YoSliderboardListDefinition();
int sliderboardIndex = findSliderboardIndex(sliderboardName, sliderboardType);
if (sliderboardIndex == -1)
return;
YoSliderboardDefinition sliderboard = initialConfiguration.getYoSliderboards().get(sliderboardIndex);
List knobs = sliderboard.getKnobs();
for (int i = knobs.size() - 1; i >= 0; i--)
{
if (i == knobIndex && knobs.get(i).getIndex() == -1)
knobs.remove(i);
else if (knobs.get(i).getIndex() == knobIndex)
knobs.remove(i);
}
}
}
private void handleClearSliderRequest(String sliderboardName, YoSliderboardType sliderboardType, int sliderIndex)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().removeSliderInput(sliderboardName, sliderboardType, sliderIndex);
}
else
{
if (initialConfiguration == null)
initialConfiguration = new YoSliderboardListDefinition();
int sliderboardIndex = findSliderboardIndex(sliderboardName, sliderboardType);
if (sliderboardIndex == -1)
return;
YoSliderboardDefinition sliderboard = initialConfiguration.getYoSliderboards().get(sliderboardIndex);
List sliders = sliderboard.getSliders();
for (int i = sliders.size() - 1; i >= 0; i--)
{
if (i == sliderIndex && sliders.get(i).getIndex() == -1)
sliders.remove(i);
else if (sliders.get(i).getIndex() == sliderIndex)
sliders.remove(i);
}
}
}
private int findSliderboardIndex(String sliderboardName, YoSliderboardType type)
{
if (sliderboardName == null)
return -1;
List yoSliderboards = initialConfiguration.getYoSliderboards();
for (int i = 0; i < yoSliderboards.size(); i++)
{
YoSliderboardDefinition sliderboard = yoSliderboards.get(i);
if (sliderboardName.equals(sliderboard.getName()) && sliderboard.getType() == type)
return i;
}
return -1;
}
public void openSliderboardWindow(Window requestSource, YoSliderboardType type)
{
if (behringerSliderboard.getValue() != null)
{
behringerSliderboard.getValue().showWindow();
behringerSliderboard.getValue().ensureTab(type);
return;
}
try
{
FXMLLoader fxmlLoader = new FXMLLoader(SessionVisualizerIOTools.YO_MULTI_SLIDERBOARD_WINDOW_URL);
fxmlLoader.load();
YoMultiSliderboardWindowController controller = fxmlLoader.getController();
controller.initialize(toolkit);
if (initialConfiguration != null)
{
controller.setInput(initialConfiguration);
if (initialConfiguration.getWindowConfiguration() == null)
SecondaryWindowManager.initializeSecondaryWindowWithOwner(requestSource, controller.getWindow());
initialConfiguration = null;
}
else
{
YoSliderboardListDefinition initial = new YoSliderboardListDefinition();
initial.getYoSliderboards().add(new YoSliderboardDefinition(YoMultiSliderboardWindowController.DEFAULT_SLIDERBOARD_NAME, type));
controller.setInput(initial);
SecondaryWindowManager.initializeSecondaryWindowWithOwner(requestSource, controller.getWindow());
}
behringerSliderboard.setValue(controller);
controller.showWindow();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy