From 2b5a13b1f206472e6818ae1ee489834e71c5fdf5 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Fri, 11 Aug 2023 11:29:05 +0200 Subject: [PATCH] CSSTUDIO-2007 Add version of getDockItemWithInput() that returns any DockItemWithInput whose input is the specified input. Improve check by not requiring that the application be the same. --- .../phoebus/ui/docking/DockItemWithInput.java | 4 ++-- .../org/phoebus/ui/docking/DockStage.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/ui/src/main/java/org/phoebus/ui/docking/DockItemWithInput.java b/core/ui/src/main/java/org/phoebus/ui/docking/DockItemWithInput.java index e3d9dc4c97..96a1d009dd 100644 --- a/core/ui/src/main/java/org/phoebus/ui/docking/DockItemWithInput.java +++ b/core/ui/src/main/java/org/phoebus/ui/docking/DockItemWithInput.java @@ -424,7 +424,7 @@ else if (response == ButtonType.NO) } URI newInput = ResourceParser.getURI(actual_file.get()); - DockItemWithInput existingInstanceWithInput = DockStage.getDockItemWithInput(getApplication().getAppDescriptor().getName(), newInput); + DockItemWithInput existingInstanceWithInput = DockStage.getDockItemWithInput(newInput); if (existingInstanceWithInput == null || (input != null && newInput.getPath().equals(input.getPath()))) { // Update input setInput(newInput); @@ -440,7 +440,7 @@ else if (response == ButtonType.NO) dialog.setTitle(Messages.SaveAsFileAlreadyOpen_title); String headerText = MessageFormat.format(Messages.SaveAsFileAlreadyOpen_header, filename); dialog.setHeaderText(headerText); - String contentText = MessageFormat.format(Messages.SaveAsFileAlreadyOpen_content, getApplication().getAppDescriptor().getDisplayName(), filename); + String contentText = MessageFormat.format(Messages.SaveAsFileAlreadyOpen_content, existingInstanceWithInput.getApplication().getAppDescriptor().getDisplayName(), filename); dialog.setContentText(contentText); int width = 550; int height = 200; diff --git a/core/ui/src/main/java/org/phoebus/ui/docking/DockStage.java b/core/ui/src/main/java/org/phoebus/ui/docking/DockStage.java index b4a1efb195..7d65b16336 100644 --- a/core/ui/src/main/java/org/phoebus/ui/docking/DockStage.java +++ b/core/ui/src/main/java/org/phoebus/ui/docking/DockStage.java @@ -366,6 +366,25 @@ public static DockItemWithInput getDockItemWithInput(final String application_na return null; } + /** Locate DockItemWithInput with input + * @param input Input, must not be null + * @return {@link DockItemWithInput} or null if not found + */ + public static DockItemWithInput getDockItemWithInput(URI input) + { + Objects.requireNonNull(input); + for (Stage stage : getDockStages()) + for (DockPane pane : getDockPanes(stage)) + for (DockItem tab : pane.getDockItems()) + if (tab instanceof DockItemWithInput) + { + DockItemWithInput item = (DockItemWithInput) tab; + if (input.equals(item.getInput())) + return item; + } + return null; + } + /** Locate any 'fixed' {@link DockPane}s and un-fix them * @param stage Stage where to clear 'fixed' panes */