/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package edu.wpi.first.tableviewer; import edu.wpi.first.wpilibj.networktables.NetworkTableProvider; import edu.wpi.first.wpilibj.networktables2.NetworkTableNode; import javax.swing.event.TableModelEvent; /** * Responsible for showing data inside a single NetworkTableEntry: a key, a * value, and a type that has been extrapolated from the value. * * @author Sam */ public class LeafNode extends AbstractTreeNode { public LeafNode(NetworkTableNode node, String key, TableEntryData data) { super(node, key, data); table = new NetworkTableProvider(node).getTable(key.substring(0, key.lastIndexOf('/'))); } /** * Changes the value of the data displayed within this leaf. This is only a * graphical update; use #setValue to actually change the value in the * NetworkTable. * * @param newValue The new value for this leaf to show. */ public void updateValue(Object newValue) { data.setValue(newValue); outline.tableChanged(new TableModelEvent(outline.getModel())); } /** * Pushes the value of this leaf to the NetworkTable associated with it. * * @param newValue The value to send to the NetworkTable. */ public void setValue(Object newValue) { String v = newValue.toString(); switch (data.getType().toString()) { case "Boolean": table.putBoolean(data.getKey(), v.equalsIgnoreCase("true")); break; case "Number": try { table.putNumber(data.getKey(), Double.parseDouble(v)); } catch (NumberFormatException e) { System.err.println("Invalid number " + v); } break; case "String": table.putString(data.getKey(), v); break; default: System.err.println("Cannot edit a value of type " + data.getType()); break; } } @Override public boolean isLeaf() { return true; } @Override public String toString() { return data.getKey(); } }