HamburgerMenu
The list of actions behind the three-bar button: everything that can be done to what the button belongs to, without any of it taking up room on the screen.
ExpandHeader header = new ExpandHeader("Led Zeppelin IV");
cp.add(header);
header.addAction(play);
header.addAction(order);
Where it comes from
Usually you do not make one. An
ExpandHeader given a list of
actions grows the three-bar button at
its right, and pressing it opens a HamburgerMenu of those actions just under
it. That is the whole of the API most screens need:
| Call on the header | What it does |
|---|---|
addAction(IUIAction<?>) |
one more entry in the menu |
setActionList(List<IUIAction<?>>) |
the whole menu at once |
clearActions() |
no menu, and no button either |
closeMenu() |
close it from code |
With no actions the header has no button, so a header that needs no menu costs nothing.
Making one yourself
HamburgerMenu menu = new HamburgerMenu(actions);
button.appendAfterMe(menu);
menu.setOnSelection(action -> action.execute(button, null));
| Method | What it does |
|---|---|
new HamburgerMenu(List<IUIAction<?>>) |
the menu, from the actions it shows |
setOnSelection(INotify<IUIAction<?>>) |
told which action was chosen |
close() / isClosed() |
close it, and ask whether it is gone |
Each entry takes its name, its icon and its reason to be disabled from its own action, exactly as a button made from that action does. A disabled entry is greyed out, shows its reason as a tooltip and does not answer a click.
The menu does not appear under the button. It is positioned absolutely at
right: 0 of the block it is added to, so it lines up with the right edge of
that block wherever the button happens to be. It therefore belongs to a
button that is itself at the right - which is where ExpandHeader puts its
three-bar button, and why it looks right there and lopsided anywhere else.
The menu does not run the action. It closes itself and hands the chosen
action to the onSelection notify, and that is where execute() is called.
Without a notify, choosing an entry does nothing at all.
Closing
A HamburgerMenu is a close on click panel: it removes itself from the page
when something is chosen, when the mouse is pressed anywhere else, and when
escape is pressed. Opening one also closes every other one that is still up, so
two of these are never open at the same time.
Like a PopupMenu2 it is therefore built when the
button is pressed and never kept in a field.
Which of the two menus
Both are a small menu that opens at a component and closes itself, and both are made of actions. The difference is what opens them:
| Opened by | Filled with | |
|---|---|---|
PopupMenu2 |
anything, or the chevron of an ActionButton |
actions or items built by hand |
HamburgerMenu |
the hamburger button of an ExpandHeader |
actions only |
New code that needs a menu of its own is better off with PopupMenu2: it is the
newer of the two, it takes items that are not actions, and it opens at the
component that owns it instead of at the right edge of a block.
The menu is written under .ui-hmbrg-menu, one .ui-hmbrg-item per entry.
