diff --git a/core/ui/src/main/java/org/phoebus/ui/docking/DockPane.java b/core/ui/src/main/java/org/phoebus/ui/docking/DockPane.java index cca55779c..dc642ea17 100644 --- a/core/ui/src/main/java/org/phoebus/ui/docking/DockPane.java +++ b/core/ui/src/main/java/org/phoebus/ui/docking/DockPane.java @@ -14,6 +14,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Consumer; import java.util.logging.Level; @@ -299,7 +300,7 @@ public void setDockParent(final Parent dock_parent) if (dock_parent == null || dock_parent instanceof BorderPane || dock_parent instanceof SplitDock || - dock_parent instanceof SplitPane) // "dock_parent instanceof SplitPane" is for the case of the Navigator application running + dock_parent instanceof SplitPane) // "dock_parent instanceof SplitPane" is for the case of the ESS-specific Navigator application running this.dock_parent = dock_parent; else throw new IllegalArgumentException("Expected BorderPane or SplitDock or SplitPane, got " + dock_parent); @@ -654,11 +655,17 @@ else if (dock_parent instanceof BorderPane) // Place that new split in the border pane parent.setCenter(split); } - else if (dock_parent instanceof SplitPane) + else if (dock_parent instanceof SplitPane) // "dock_parent instanceof SplitPane" is for the case of the ESS-specific Navigator application running { final SplitPane parent = (SplitPane) dock_parent; // Remove this dock pane from BorderPane - double dividerPosition = parent.getDividerPositions()[0]; + Optional dividerPosition; + if (parent.getDividerPositions().length > 1) { + dividerPosition = Optional.of(parent.getDividerPositions()[0]); + } + else { + dividerPosition = Optional.empty(); + } parent.getItems().remove(this); // Place in split alongside a new dock pane final DockPane new_pane = new DockPane(); @@ -668,7 +675,9 @@ else if (dock_parent instanceof SplitPane) new_pane.setDockParent(split); // Place that new split in the border pane parent.getItems().add(split); - parent.setDividerPosition(0, dividerPosition); + if (dividerPosition.isPresent()) { + parent.setDividerPosition(0, dividerPosition.get()); + } } else throw new IllegalStateException("Cannot split, dock_parent is " + dock_parent); diff --git a/core/ui/src/main/java/org/phoebus/ui/docking/SplitDock.java b/core/ui/src/main/java/org/phoebus/ui/docking/SplitDock.java index 357176839..f8482cd41 100644 --- a/core/ui/src/main/java/org/phoebus/ui/docking/SplitDock.java +++ b/core/ui/src/main/java/org/phoebus/ui/docking/SplitDock.java @@ -170,11 +170,13 @@ else if (dock_parent instanceof SplitDock) final boolean was_first = parent.removeItem(this); parent.addItem(was_first, child); } - else if (dock_parent instanceof SplitPane) { + else if (dock_parent instanceof SplitPane) { // "dock_parent instanceof SplitPane" is for the case of the ESS-specific Navigator application running final SplitPane parent = (SplitPane) dock_parent; - // parent.getItems().get(1) == this, parent.getItems().get(0) == Navigator application - // No need to remove 'this' from parent, just update parent.getItems().get(1) to child - parent.getItems().set(1, child); + // parent.getItems().get(1) == this, parent.getItems().get(0) == (ESS-specific) Navigator application, + // when the (ESS-specific) Navigator is being displayed. + // parent.getItems().get(0) == this when (ESS-specific) Navigator is not being displayed. + // No need to remove 'this' from parent, just update parent.getItems().get(last index) to child + parent.getItems().set(parent.getItems().size()-1, child); } else {