~~NOTRANS~~
~~Title: Customize the Menu~~
Customization of the standard application frame is already described [[vaadin:customize_application|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:
* Remove the SAVE and RELOAD buttons
* Add a custom button to the button area
* Completely remove the button area
Before you can use your own menu implementatiom, set the [[jvx:client:gui:application_parameters|application parameter]]: **Application.Menu.corporation.classname** to the full qualified class name of your menu implementation, e.g.
VaadinUI
com.sibvisions.rad.ui.vaadin.server.VaadinServlet
...
Application.Menu.corporation.classname
com.sibvisions.apps.vaadin.CustomCorporationMenu
...
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);
}
}
}
}