Home | History | Annotate | Download | only in ui
      1 package autotest.common.ui;
      2 
      3 import com.google.gwt.event.logical.shared.CloseHandler;
      4 import com.google.gwt.user.client.Command;
      5 import com.google.gwt.user.client.Window;
      6 import com.google.gwt.user.client.ui.MenuBar;
      7 import com.google.gwt.user.client.ui.MenuItem;
      8 import com.google.gwt.user.client.ui.PopupPanel;
      9 
     10 
     11 
     12 public class ContextMenu {
     13     private  PopupPanel popup = new PopupPanel(true);
     14     private AutoHideMenu menu = new AutoHideMenu();
     15     private boolean enabled = true;
     16 
     17     private class CommandWrapper implements Command {
     18         private Command command;
     19 
     20         CommandWrapper(Command command) {
     21             this.command = command;
     22         }
     23 
     24         public void execute() {
     25             popup.hide();
     26             command.execute();
     27         }
     28     }
     29 
     30     private class AutoHideMenu extends MenuBar {
     31         public AutoHideMenu() {
     32             super(true);
     33         }
     34 
     35         public MenuItem addItem(String text, Command cmd) {
     36             return super.addItem(text, new CommandWrapper(cmd));
     37         }
     38 
     39         public void setEnabled(boolean enabled) {
     40             for (MenuItem menuItem : getItems()) {
     41                 menuItem.setEnabled(enabled);
     42             }
     43         }
     44     }
     45 
     46     public ContextMenu() {
     47         menu.setAutoOpen(true);
     48         setUseHandCursor(true);
     49         popup.add(menu);
     50     }
     51 
     52     protected void setUseHandCursor(boolean enabled) {
     53         if (enabled)
     54             menu.addStyleName("menubar-hand-cursor");
     55         else
     56             menu.removeStyleName("menubar-hand-cursor");
     57     }
     58 
     59     public void addItem(String text, Command cmd) {
     60         menu.addItem(text, new CommandWrapper(cmd));
     61     }
     62 
     63     public MenuBar addSubMenuItem(String text) {
     64         MenuBar subMenu = new AutoHideMenu();
     65         menu.addItem(text, subMenu);
     66         return subMenu;
     67     }
     68 
     69     public void showAt(int left, int top) {
     70         popup.setPopupPosition(left, top);
     71         popup.show();
     72     }
     73 
     74     public void showAtWindow(int left, int top) {
     75         showAt(left + Window.getScrollLeft(), top + Window.getScrollTop());
     76     }
     77 
     78     public void addCloseHandler(CloseHandler<PopupPanel> closeHandler) {
     79         popup.addCloseHandler(closeHandler);
     80     }
     81 
     82     public boolean isEnabled() {
     83         return enabled;
     84     }
     85 
     86     public void setEnabled(boolean enabled) {
     87         this.enabled = enabled;
     88         menu.setEnabled(enabled);
     89         setUseHandCursor(enabled);
     90     }
     91 }
     92