diff --git a/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java b/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java index 03b5d8ecec..e2ca5467b4 100644 --- a/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java +++ b/core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java @@ -601,6 +601,11 @@ private MenuBar createMenu(final Stage stage) { return menuBar; } + private List listOfLayouts = new LinkedList<>(); + protected List getListOfLayouts() { + return listOfLayouts; + } + /** * Create the load past layouts menu */ @@ -642,6 +647,7 @@ void createLoadLayoutsMenu() { } + listOfLayouts = new LinkedList<>(); // For every non default memento file create a menu item for the load layout menu. if (!layoutFiles.keySet().isEmpty()) { // Sort layout files alphabetically. @@ -655,6 +661,8 @@ void createLoadLayoutsMenu() { // Remove ".memento" filename = filename.substring(0, filename.length() - 8); + listOfLayouts.add(filename); + // Build the list of memento files. memento_files.add(filename); final MenuItem menuItem = new MenuItem(filename); diff --git a/core/ui/src/main/java/org/phoebus/ui/application/SaveLayoutHelper.java b/core/ui/src/main/java/org/phoebus/ui/application/SaveLayoutHelper.java index f5295c73d6..b933336c9f 100644 --- a/core/ui/src/main/java/org/phoebus/ui/application/SaveLayoutHelper.java +++ b/core/ui/src/main/java/org/phoebus/ui/application/SaveLayoutHelper.java @@ -17,8 +17,12 @@ import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; import javafx.scene.control.TextInputDialog; +import org.phoebus.framework.autocomplete.Proposal; +import org.phoebus.framework.autocomplete.ProposalProvider; +import org.phoebus.framework.autocomplete.ProposalService; import org.phoebus.framework.jobs.JobManager; import org.phoebus.framework.workbench.Locations; +import org.phoebus.ui.autocomplete.AutocompleteMenu; import org.phoebus.ui.dialog.DialogHelper; import org.phoebus.ui.docking.DockItem; import org.phoebus.ui.docking.DockItemWithInput; @@ -89,6 +93,29 @@ public static boolean saveLayout(List stagesToSave, String titleText) prompt.setHeaderText(Messages.SaveDlgHdr); positionDialog(prompt, stagesToSave.get(0)); + { + ProposalProvider proposalProvider = new ProposalProvider() { + @Override + public String getName() { + return "Existing Layouts"; + } + + @Override + public List lookup(String text) { + List listOfProposals = new LinkedList<>(); + for (String layout : PhoebusApplication.INSTANCE.getListOfLayouts()) { + if (layout.startsWith(text)) { + listOfProposals.add(new Proposal(layout)); + } + } + return listOfProposals; + } + }; + ProposalService proposalService = new ProposalService(proposalProvider); + AutocompleteMenu autocompleteMenu = new AutocompleteMenu(proposalService); + autocompleteMenu.attachField(prompt.getEditor()); + } + while (true) { final String filename = prompt.showAndWait().orElse(null);