Skip to content

Commit 69b2dc2

Browse files
authored
Don't switch to selected tab on value change (#771)
1 parent 1c2afe2 commit 69b2dc2

2 files changed

Lines changed: 25 additions & 20 deletions

File tree

plugins/networktables/src/main/java/edu/wpi/first/shuffleboard/plugin/networktables/NetworkTablesPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
@Description(
4343
group = "edu.wpi.first.shuffleboard",
4444
name = "NetworkTables",
45-
version = "2.3.1",
45+
version = "2.3.2",
4646
summary = "Provides sources and widgets for NetworkTables"
4747
)
4848
public class NetworkTablesPlugin extends Plugin {

plugins/networktables/src/main/java/edu/wpi/first/shuffleboard/plugin/networktables/TabGenerator.java

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import edu.wpi.first.networktables.NetworkTableType;
2121
import edu.wpi.first.networktables.NetworkTableValue;
2222
import edu.wpi.first.networktables.StringArraySubscriber;
23+
import edu.wpi.first.networktables.StringSubscriber;
24+
import edu.wpi.first.networktables.PubSubOption;
2325
import edu.wpi.first.networktables.Topic;
2426

2527
import java.util.EnumSet;
@@ -55,6 +57,8 @@ final class TabGenerator {
5557
private final NetworkTableInstance inst;
5658
private StringArraySubscriber tabsSubscriber;
5759
private int tabsListener;
60+
private StringSubscriber tabSelectionSubscriber;
61+
private int tabSelectionListener;
5862
private int metadataListener;
5963
private int dataListener;
6064
private final Components componentRegistry;
@@ -79,6 +83,21 @@ public void start() {
7983
tabs.dirty();
8084
});
8185

86+
tabSelectionSubscriber = rootMetaTable.getStringTopic(SELECTED_ENTRY_NAME)
87+
.subscribe("", PubSubOption.keepDuplicates(true));
88+
tabSelectionListener = inst.addListener(
89+
tabSelectionSubscriber,
90+
EnumSet.of(NetworkTableEvent.Kind.kValueAll, NetworkTableEvent.Kind.kImmediate),
91+
event -> {
92+
// If the value can be parsed as an int, assume it's the tab index, otherwise assume tab title.
93+
String str = event.valueData.value.getString();
94+
try {
95+
tabs.setSelectedTab(Integer.parseInt(str));
96+
} catch (NumberFormatException e) {
97+
tabs.setSelectedTab(str);
98+
}
99+
});
100+
82101
metadataListener = inst.addListener(
83102
new String[] {METADATA_TABLE_NAME + "/"},
84103
EnumSet.of(NetworkTableEvent.Kind.kValueAll, NetworkTableEvent.Kind.kImmediate),
@@ -95,6 +114,8 @@ public void start() {
95114
public void stop() {
96115
tabsSubscriber.close();
97116
inst.removeListener(tabsListener);
117+
tabSelectionSubscriber.close();
118+
inst.removeListener(tabSelectionListener);
98119
inst.removeListener(metadataListener);
99120
inst.removeListener(dataListener);
100121
}
@@ -109,18 +130,6 @@ public TabStructure getStructure() {
109130
private void metadataChanged(NetworkTableEvent event) {
110131
String name = event.valueData.getTopic().getName();
111132

112-
// Special case for global metadata, not tab or widget data
113-
if (name.equals("/Shuffleboard/.metadata/Selected")) {
114-
// If the value can be parsed as an int, assume it's the tab index, otherwise assume tab title.
115-
String str = event.valueData.value.getString();
116-
try {
117-
tabs.setSelectedTab(Integer.parseInt(str));
118-
} catch (NumberFormatException e) {
119-
tabs.setSelectedTab(str);
120-
}
121-
return;
122-
}
123-
124133
List<String> metaHierarchy = NetworkTable.getHierarchy(name);
125134
if (metaHierarchy.size() < 5) {
126135
// Not metadata for a component or a tab, bail
@@ -206,16 +215,12 @@ private void dataChanged(NetworkTableEvent event) {
206215
.takeWhile(s -> !s.contains("/."))
207216
.collect(Collectors.toList());
208217
if (tables.size() >= 3) {
209-
updateFrom(tables);
218+
updateStructure(tables);
219+
tabs.dirty();
210220
}
211221
return;
212222
}
213-
updateFrom(hierarchy);
214-
}
215-
216-
private void updateFrom(List<String> tables) {
217-
updateStructure(tables);
218-
tabs.dirty();
223+
updateStructure(hierarchy);
219224
}
220225

221226
private void updateStructure(List<String> hierarchy) {

0 commit comments

Comments
 (0)