Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's a fairly complete solution, not perfect, explained after code:</p> <pre><code>public class MyMenuBar extends Composite { private class OpenTab implements ScheduledCommand { private String wid; public OpenTab(String windowId) { wid = windowId; } @Override public void execute() { WinUtl.newAppTab(wid); } } interface MyMenuBarUiBinder extends UiBinder&lt;Widget, MyMenuBar&gt; {} private static MyMenuBarUiBinder uiBinder = GWT.create(MyMenuBarUiBinder.class); @UiField MenuBar mainMenu; @UiField MenuBar subsMenu; @UiField MenuItem subsChoice1; @UiField MenuItem subsChoice2; @UiField MenuItem subsChoice3; @UiField MenuBar svcPrvdrMenu; @UiField MenuItem svcPrvdrChoice1; @UiField MenuItem svcPrvdrChoice2; @UiField MenuBar netMgtMenu; @UiField MenuItem netMgtChoice1; @UiField MenuBar reportsMenu; @UiField MenuItem reportsChoice1; @UiField MenuBar auditsMenu; @UiField MenuItem auditsChoice1; @UiField MenuBar securityMenu; @UiField MenuItem securityChoice1; @UiField MenuBar helpMenu; @UiField MenuItem helpChoice1; private boolean subMenuPopped = false; private boolean subMenuEntered = false; private static Type&lt;MouseOverHandler&gt; OVR_EVT = MouseOverEvent.getType(); private static Type&lt;MouseOutHandler&gt; OUT_EVT = MouseOutEvent.getType(); private MouseOverHandler mainOverHandler = new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { subMenuPopped = true; } }; private MouseOutHandler mainOutHandler = new MouseOutHandler() { @Override public void onMouseOut(MouseOutEvent event) { Element e = event.getRelativeElement() boolean movedUp = (event.getRelativeY(e) &lt; 0); if ((movedUp &amp;&amp; subMenuPopped) || subMenuEntered) { subMenuPopped = false; subMenuEntered = false; mainMenu.closeAllChildren(true); } } }; private MouseOverHandler subOverHandler = new MouseOverHandler() { @Override public void onMouseOver(MouseOverEvent event) { subMenuEntered = true; } }; private MouseOutHandler subOutHandler = new MouseOutHandler() { @Override public void onMouseOut(MouseOutEvent event) { subMenuPopped = false; subMenuEntered = false; mainMenu.closeAllChildren(true); } }; public MyMenuBar() { initWidget(uiBinder.createAndBindUi(this)); mainMenu.addStyleName("npac-MenuBar"); mainMenu.setAutoOpen(true); mainMenu.setAnimationEnabled(true); mainMenu.setFocusOnHoverEnabled(true); subsChoice1.setScheduledCommand(new OpenTab(Names.Wid.NPA)); mainMenu.addDomHandler(mainOverHandler, OVR_EVT); mainMenu.addDomHandler(mainOutHandler, OUT_EVT); addHandlers(subsMenu); addHandlers(svcPrvdrMenu); addHandlers(netMgtMenu); addHandlers(reportsMenu); addHandlers(auditsMenu); addHandlers(securityMenu); addHandlers(helpMenu); } private void addHandlers(MenuBar m) { m.addDomHandler(subOverHandler, OVR_EVT); m.addDomHandler(subOutHandler, OUT_EVT); } } </code></pre> <p>This handles the case where mouseOver opens subMenu, user then mouses UP, off mainMenu (subMenu closes). It does not handle the mouse moving diagonally down, past either side of subMenu (submenu stays open) Certainly can be improved, but I just got it to work and wanted to share ;-)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload