diff --git a/plugins/networktables/src/main/java/edu/wpi/first/shuffleboard/plugin/networktables/sources/CompositeNetworkTableSource.java b/plugins/networktables/src/main/java/edu/wpi/first/shuffleboard/plugin/networktables/sources/CompositeNetworkTableSource.java index a4d57d89c..b70f0469d 100644 --- a/plugins/networktables/src/main/java/edu/wpi/first/shuffleboard/plugin/networktables/sources/CompositeNetworkTableSource.java +++ b/plugins/networktables/src/main/java/edu/wpi/first/shuffleboard/plugin/networktables/sources/CompositeNetworkTableSource.java @@ -1,5 +1,6 @@ package edu.wpi.first.shuffleboard.plugin.networktables.sources; +import edu.wpi.first.networktables.NetworkTableValue; import edu.wpi.first.shuffleboard.api.data.ComplexData; import edu.wpi.first.shuffleboard.api.data.ComplexDataType; import edu.wpi.first.shuffleboard.api.data.IncompleteDataException; @@ -13,6 +14,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; @@ -27,6 +29,8 @@ public class CompositeNetworkTableSource> extends Netwo private static final Logger log = Logger.getLogger(CompositeNetworkTableSource.class.getName()); + private Optional preferredWidget; + private final Map backingMap = new HashMap<>(); private final ComplexDataType dataType; @@ -43,6 +47,7 @@ public CompositeNetworkTableSource(String tableName, ComplexDataType dataType this.dataType = dataType; String path = NetworkTable.normalizeKey(tableName, false); NetworkTable table = NetworkTableInstance.getDefault().getTable(path); + preferredWidget = loadWidgetFromWidgetEntry(table); setData(dataType.getDefaultValue()); setTableListener((key, event) -> { @@ -86,4 +91,13 @@ public ComplexDataType getDataType() { protected boolean isSingular() { return false; } + + @Override + public Optional preferredWidget() { + return preferredWidget; + } + + private static Optional loadWidgetFromWidgetEntry(NetworkTable table) { + return Optional.ofNullable(table.getValue(".widget")).filter(NetworkTableValue::isString).map(NetworkTableValue::getString); + } }