@Override public void removeListItem(MenuItem menuItem) { listPanel.remove(menuItem); adjustTopPosition(); }
@Override public void onMouseDown(MouseDownEvent event) { long time = System.currentTimeMillis(); if (time - closeTime < 100) { return; } showList(); } },
public void showList() { int x = getAbsoluteLeft() + getOffsetWidth() - 6; popupPanel.show(); popupPanel.getElement().getStyle().setProperty("position", "absolute"); popupPanel.getElement().getStyle().clearProperty("left"); popupPanel.getElement().getStyle().setProperty("right", "calc(100% - " + x + "px"); adjustTopPosition(); }
resources.css().ensureInjected(); initWidget(UI_BINDER.createAndBindUi(this)); addDomHandler( new MouseDownHandler() { @Override
/** Fix top value if need. Need in case if bottom part of menu not display */ private void adjustTopPosition() { int totalHeight = listPanel.getWidgetCount() * 19; // 19 height of menu item int y = getAbsoluteTop() + 19 + totalHeight; if (y > Window.getClientHeight()) { y = getAbsoluteTop() - 8 - totalHeight; // 8 need some correction for looking good in UI popupPanel.getElement().getStyle().clearProperty("top"); } else { y = getAbsoluteTop() + 19; } popupPanel.getElement().getStyle().setProperty("top", "" + y + "px"); }
@Override public void addListItem(MenuItem menuItem) { menuItem.setDelegate(itemDelegate); listPanel.add(menuItem); adjustTopPosition(); }