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 de2a5a3c02..3a3851fe4c 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 @@ -203,7 +203,7 @@ public class PhoebusApplication extends Application { /** * Menu to add a layout to the current layout */ - private final Menu add_layout = new Menu(Messages.AddLayout, ImageCache.getImageView(ImageCache.class, "/icons/layouts.png")); + private final Menu add_layout = new Menu(Messages.AddLayout, ImageCache.getImageView(ImageCache.class, "/icons/add_layout.png")); /** * List of memento names @@ -229,6 +229,11 @@ public class PhoebusApplication extends Application { */ private MenuButton layout_menu_button; + /** + * Toolbar button for adding past layouts + */ + private MenuButton add_layout_menu_button; + /** * Last file used by 'File, Open' menu * (the _directory_ is actually used by the file-open dialog) @@ -759,6 +764,7 @@ void createLoadLayoutsMenu() { final List menuItemList = new ArrayList<>(); final List toolbarMenuItemList = new ArrayList<>(); final List addLayoutMenuItemList = new ArrayList<>(); + final List toolbarAddLayoutMenuItemList = new ArrayList<>(); final Map layoutFiles = new HashMap(); @@ -822,6 +828,12 @@ void createLoadLayoutsMenu() { addLayoutMenuItem.setMnemonicParsing(false); addLayoutMenuItem.setOnAction(event -> startAddingLayout(file)); addLayoutMenuItemList.add(addLayoutMenuItem); + + // Repeat for the same menu in the toolbar. They can't share menu items. + final MenuItem toolbarAddLayoutMenuItem = new MenuItem(filename); + toolbarAddLayoutMenuItem.setMnemonicParsing(false); + toolbarAddLayoutMenuItem.setOnAction(event -> startAddingLayout(file)); + toolbarAddLayoutMenuItemList.add(toolbarAddLayoutMenuItem); } }); } @@ -832,6 +844,7 @@ void createLoadLayoutsMenu() { load_layout.getItems().setAll(menuItemList); add_layout.getItems().setAll(addLayoutMenuItemList); layout_menu_button.getItems().setAll(toolbarMenuItemList); + add_layout_menu_button.getItems().setAll(toolbarAddLayoutMenuItemList); delete_layouts.setDisable(memento_files.isEmpty()); }); }); @@ -965,6 +978,12 @@ private ToolBar createToolbar() { if (! Preferences.toolbar_entries.contains("!Layouts")) toolBar.getItems().add(layout_menu_button); + add_layout_menu_button = new MenuButton(null, ImageCache.getImageView(getClass(), "/icons/add_layout.png")); + add_layout_menu_button.setTooltip(new Tooltip(Messages.AddLayout)); + if (Preferences.toolbar_entries.contains("Add Layouts") && !Preferences.toolbar_entries.contains("!Add Layouts")) { + toolBar.getItems().add(add_layout_menu_button); + } + // Contributed Entries ToolbarEntryService.getInstance().listToolbarEntries().forEach((entry) -> { final AtomicBoolean open_new = new AtomicBoolean(); diff --git a/core/ui/src/main/java/org/phoebus/ui/application/ToolbarEntryService.java b/core/ui/src/main/java/org/phoebus/ui/application/ToolbarEntryService.java index 9872637359..d46e54193d 100644 --- a/core/ui/src/main/java/org/phoebus/ui/application/ToolbarEntryService.java +++ b/core/ui/src/main/java/org/phoebus/ui/application/ToolbarEntryService.java @@ -29,7 +29,7 @@ private ToolbarEntryService() { if (suppress) desired = desired.substring(1); // Skip entries handled in PhoebusApplication - if (desired.equals("Home") || desired.equals("Top Resources") || desired.equals("Layouts")) + if (desired.equals("Home") || desired.equals("Top Resources") || desired.equals("Layouts") || desired.equals("Add Layouts")) continue; // Add specific 'desired' entry ToolbarEntry found = null; diff --git a/core/ui/src/main/resources/icons/add_layout.png b/core/ui/src/main/resources/icons/add_layout.png new file mode 100644 index 0000000000..3f47a4e89c Binary files /dev/null and b/core/ui/src/main/resources/icons/add_layout.png differ diff --git a/core/ui/src/main/resources/phoebus_ui_preferences.properties b/core/ui/src/main/resources/phoebus_ui_preferences.properties index f4fdbd0cda..3c840dd285 100644 --- a/core/ui/src/main/resources/phoebus_ui_preferences.properties +++ b/core/ui/src/main/resources/phoebus_ui_preferences.properties @@ -52,9 +52,12 @@ home_display=examples:/01_main.bob?app=display_runtime,Example Display # # The special entry "*" adds all remaining available toolbar entries. # An entry starting with "!" removes that item from the available entries. -# The order of the initial buttons "Home, Top Resources, Layouts" +# The order of the initial buttons "Home, Top Resources, Layouts, Add Layouts" # cannot be changed, but they can be suppressed by adding "!", -# for example "Home, !Top Resources, !Layouts". +# for example "Home, !Top Resources, !Layouts, !Add Layouts". +# +# The special entry "Add Layouts" is NOT added to the toolbar by default. It +# can be added to the toolbar by specifying "Add Layouts". # # The strings in the list of entries MUST match what is returned from # ToolbarEntry#getId(). This allows for customization/localization of app name