0

I see GXT Menu can only be set on CellButtonBase subclasses' instances through setMenu() method. I'd like to show an image instead of a button and show a menu when user clicks that image. unfortunately, Image is not a subclass of CellButtonBase and thus I can't attach a GXT Menu to it. so how can I make TextButton (which seems to be my only choice here) look like an image if I have to use it? There's no documentation or examples on this subject. I asked on Sencha GXT forum support, but got no response.

Alex
  • 2,589
  • 3
  • 35
  • 44

1 Answers1

1

ok, I found a way to do this without TextButton. add an Image and call menu.show(...) in click handler.

  private void createMenu() {
    menu = new Menu();

    Image menuButtonImage = new Image(Resources.INSTANCE.nav_preferences());
    menuButtonImage.addStyleName(CSS.header_bar_icon());
    menuButtonImage.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        menu.showAt(getAbsoluteLeft(), getAbsoluteTop() + MENU_OFFSET_FROM_IMAGE_TOP);
      }
    });
    menu.addShowHandler(new ShowEvent.ShowHandler() {
      @Override
      public void onShow(ShowEvent event) {
        highlight();
      }
    });
    menu.addHideHandler(new HideEvent.HideHandler() {
      @Override
      public void onHide(HideEvent event) {
        removeHighlight();
      }
    });
    menu.setStyleName(CSS.menu());
    add(menuButtonImage);

  }
  private void addUserSettings() {
    MenuItem userSettingsItem = new MenuItem("User Settings");
    userSettingsItem.addSelectionHandler(new SelectionHandler<Item>() {
      @Override
      public void onSelection(SelectionEvent<Item> event) {
        _coreLayout.showUserSettingsPage();
      }
    });
    userSettingsItem.setStyleName(CSS.menu_item());
    menu.add(userSettingsItem);
  }

  private void highlight() {
    addStyleName(CSS.header_bar_icon_box_selected());
  }

  private void removeHighlight() {
    removeStyleName(CSS.header_bar_icon_box_selected());
  }
Alex
  • 2,589
  • 3
  • 35
  • 44