Skip to content

Commit

Permalink
CSSTUDIO-2015 (1) Fix bug: use 'nestedNavigationTabsWidget' instead o…
Browse files Browse the repository at this point in the history
…f 'model_widget'; (2) Include tab number and tab name when looking up which tab was last open.
  • Loading branch information
abrahamwolk committed Sep 7, 2023
1 parent 65ca7f3 commit d0fb6ff
Showing 1 changed file with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;

import javafx.util.Pair;
import org.apache.commons.lang3.tuple.MutablePair;
import org.csstudio.display.builder.model.DirtyFlag;
import org.csstudio.display.builder.model.DisplayModel;
Expand Down Expand Up @@ -57,10 +58,10 @@ public class NavigationTabsRepresentation extends RegionBaseRepresentation<Navig
private final DirtyFlag dirty_tabs = new DirtyFlag();
private final DirtyFlag dirty_tab_look = new DirtyFlag();
private final DirtyFlag dirty_active_tab = new DirtyFlag();
private class SelectedNavigationTabs extends MutablePair<Integer, HashMap<String, SelectedNavigationTabs>> {
private class SelectedNavigationTabs extends MutablePair<Integer, HashMap<Pair<Integer, String>, HashMap<String, SelectedNavigationTabs>>> {
public SelectedNavigationTabs(int activeTab) {
left = activeTab;
right = new HashMap<>();
right = new HashMap<>(); // 'right' is a mapping of the form: Tab Number & Tab Name (Integer, String) -> Name of Navigator Tab Widget (String) -> Opened Tab and Sub-Tabs (SelectedNavigationTabs)
}
};
protected SelectedNavigationTabs selectedNavigationTabs = new SelectedNavigationTabs(0);
Expand Down Expand Up @@ -243,20 +244,30 @@ private synchronized void updatePendingDisplay(final JobMonitor monitor)
});
checkCompletion(model_widget, completion, "timeout representing new content");

int tabNumber = model_widget.propActiveTab().getValue();
String tabName = model_widget.propTabs().getValue().get(model_widget.propActiveTab().getValue()).name().getValue();
Pair<Integer, String> tabNumberAndTabName = new Pair<>(tabNumber, tabName);

if (!selectedNavigationTabs.right.containsKey(tabNumberAndTabName)) {
selectedNavigationTabs.right.put(tabNumberAndTabName, new HashMap<>());
}
HashMap<String, SelectedNavigationTabs> selectedNavigationTabsHashMapForCurrentTab = selectedNavigationTabs.right.get(tabNumberAndTabName);

new_model.getChildren()
.stream()
.filter(widget -> widget instanceof NavigationTabsWidget)
.forEach(widget -> {
NavigationTabsWidget nestedNavigationTabsWidget = (NavigationTabsWidget) widget;
NavigationTabsRepresentation nestedNavigationTabsRepresentation = (NavigationTabsRepresentation) nestedNavigationTabsWidget.getUserData(Widget.USER_DATA_REPRESENTATION);
SelectedNavigationTabs nestedNavigationTabsRepresentation_selectedNavigationTabs;
if (!selectedNavigationTabs.right.containsKey(nestedNavigationTabsWidget.getName())) {
int activeTab = nestedNavigationTabsWidget.propTabs().size() > model_widget.propActiveTab().getValue() ? 0 : model_widget.propActiveTab().getValue();
nestedNavigationTabsRepresentation_selectedNavigationTabs = new SelectedNavigationTabs(activeTab);
selectedNavigationTabs.right.put(nestedNavigationTabsWidget.getName(), nestedNavigationTabsRepresentation_selectedNavigationTabs);

if (!selectedNavigationTabsHashMapForCurrentTab.containsKey(nestedNavigationTabsWidget.getName())) {
//int activeTab = nestedNavigationTabsWidget.propTabs().size() > nestedNavigationTabsWidget.propActiveTab().getValue() ? 0 : nestedNavigationTabsWidget.propActiveTab().getValue();
nestedNavigationTabsRepresentation_selectedNavigationTabs = new SelectedNavigationTabs(nestedNavigationTabsWidget.propActiveTab().getValue());
selectedNavigationTabsHashMapForCurrentTab.put(nestedNavigationTabsWidget.getName(), nestedNavigationTabsRepresentation_selectedNavigationTabs);
}
else {
nestedNavigationTabsRepresentation_selectedNavigationTabs = selectedNavigationTabs.right.get(nestedNavigationTabsWidget.getName());
nestedNavigationTabsRepresentation_selectedNavigationTabs = selectedNavigationTabsHashMapForCurrentTab.get(nestedNavigationTabsWidget.getName());
if (nestedNavigationTabsWidget.propTabs().size() > nestedNavigationTabsRepresentation_selectedNavigationTabs.left) {
nestedNavigationTabsWidget.propActiveTab().setValue(nestedNavigationTabsRepresentation_selectedNavigationTabs.left);
}
Expand Down

0 comments on commit d0fb6ff

Please sign in to comment.