diff --git a/wpilibc/wpilibC++Devices/include/Preferences.h b/wpilibc/wpilibC++Devices/include/Preferences.h index 54371acf1a..a2c3bc4d4f 100644 --- a/wpilibc/wpilibC++Devices/include/Preferences.h +++ b/wpilibc/wpilibC++Devices/include/Preferences.h @@ -60,4 +60,13 @@ class Preferences : public ErrorBase { private: std::shared_ptr m_table; + class Listener : public ITableListener { + public: + void ValueChanged(ITable* source, llvm::StringRef key, + std::shared_ptr value, bool isNew) override; + void ValueChangedEx(ITable* source, llvm::StringRef key, + std::shared_ptr value, + unsigned int flags) override; + }; + Listener m_listener; }; diff --git a/wpilibc/wpilibC++Devices/src/Preferences.cpp b/wpilibc/wpilibC++Devices/src/Preferences.cpp index cb6d1001e3..ed3f076bcb 100644 --- a/wpilibc/wpilibC++Devices/src/Preferences.cpp +++ b/wpilibc/wpilibC++Devices/src/Preferences.cpp @@ -16,7 +16,17 @@ /** The Preferences table name */ static const char *kTableName = "Preferences"; +void Preferences::Listener::ValueChanged(ITable* source, llvm::StringRef key, + std::shared_ptr value, + bool isNew) {} +void Preferences::Listener::ValueChangedEx(ITable* source, llvm::StringRef key, + std::shared_ptr value, + unsigned int flags) { + source->SetPersistent(key); +} + Preferences::Preferences() : m_table(NetworkTable::GetTable(kTableName)) { + m_table->AddTableListenerEx(&m_listener, NT_NOTIFY_NEW | NT_NOTIFY_IMMEDIATE); HALReport(HALUsageReporting::kResourceType_Preferences, 0); } diff --git a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Preferences.java b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Preferences.java index f939c272cf..9e334ccd03 100644 --- a/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Preferences.java +++ b/wpilibj/wpilibJavaDevices/src/main/java/edu/wpi/first/wpilibj/Preferences.java @@ -11,6 +11,8 @@ import java.util.Vector; import edu.wpi.first.wpilibj.communication.FRCNetworkCommunicationsLibrary.tResourceType; import edu.wpi.first.wpilibj.communication.UsageReporting; import edu.wpi.first.wpilibj.networktables.NetworkTable; +import edu.wpi.first.wpilibj.tables.ITable; +import edu.wpi.first.wpilibj.tables.ITableListener; import edu.wpi.first.wpilibj.tables.TableKeyNotDefinedException; /** @@ -48,6 +50,20 @@ public class Preferences { * The network table */ private NetworkTable table; + /** + * Listener to set all Preferences values to persistent (for backwards + * compatibility with old dashboards). + */ + private final ITableListener listener = new ITableListener() { + @Override + public void valueChanged(ITable table, String key, Object value, boolean isNew) { + // unused + } + @Override + public void valueChangedEx(ITable table, String key, Object value, int flags) { + table.setPersistent(key); + } + }; /** * Returns the preferences instance. @@ -66,6 +82,7 @@ public class Preferences { */ private Preferences() { table = NetworkTable.getTable(TABLE_NAME); + table.addTableListenerEx(listener, ITable.NOTIFY_NEW | ITable.NOTIFY_IMMEDIATE); UsageReporting.report(tResourceType.kResourceType_Preferences, 0); }