Customization of the standard application frame is already described here. But the menu can also be customized without extending the application itself. The menu has some features which aren't available without extending it.
Let's change the menu a little bit:
Before you can use your own menu implementatiom, set the application parameter: Application.Menu.corporation.classname to the full qualified class name of your menu implementation, e.g.
<servlet> <servlet-name>VaadinUI</servlet-name> <servlet-class>com.sibvisions.rad.ui.vaadin.server.VaadinServlet</servlet-class> ... <init-param> <param-name>Application.Menu.corporation.classname</param-name> <param-value>com.sibvisions.apps.vaadin.CustomCorporationMenu</param-value> </init-param> ... </servlet>
It's super easy to remove some buttons:
public class CustomCorporationMenu extends WebMenuCorporation { public CustomCorporationMenu(IApplication pApplication) { super(pApplication); } @Override protected void configureMenu() { super.configureMenu(); removeItem(EDIT_SAVE); removeItem(EDIT_RELOAD); } }
To add a custom button, you need a little bit more code, because the button should be visible if authenticated only:
public class CustomCorporationMenu extends WebMenuCorporation { public static final String OPTION_CLOSEALL = "Option/CloseAll"; private UIButton butCloseAll; public CustomCorporationMenu(IApplication pApplication) { super(pApplication); } @Override protected void addMenuAreaButtons(IContainer pArea) { butCloseAll = new UIButton(); butCloseAll.setImage(UIImage.getImage(IFontAwesome.ARROW_CIRCLE_LEFT_SMALL)); //same style as all other buttons Style.addStyleNames(butCloseAll, "topbutton", "topcloseall"); //ADDs the CloseAll Button before all other buttons! pArea.add(butCloseAll); super.addMenuAreaButtons(pArea); } @Override protected void putComponents() { super.putComponents(); put(OPTION_CLOSEALL, butCloseAll); } @Override public void createStandardMenu() { super.createStandardMenu(); setItemVisible(OPTION_CLOSEALL, false); } @Override public void doAfterLogin(RemoteApplication pApplication) { super.doAfterLogin(pApplication); setItemVisible(OPTION_CLOSEALL, true); } }
And not so tricky is the removal of the button area:
public class CustomCorporationMenu extends WebMenuCorporation { public CustomCorporationMenu(IApplication pApplication) { super(pApplication); } @Override protected void updateMenuPosition(LayoutMode pMode) { super.updateMenuPosition(pMode); //removes the options panel from the header UIPanel panel = getHeaderOptionsPanel(); if (panel != null) { IContainer parent = panel.getParent(); if (parent != null) { panel.getParent().remove(panel); } } } }