Home | History | Annotate | Download | only in gle2
      1 
      2 package com.android.ide.eclipse.adt.internal.editors.layout.gle2;
      3 
      4 import org.eclipse.jface.action.Action;
      5 import org.eclipse.jface.action.ActionContributionItem;
      6 import org.eclipse.jface.action.IAction;
      7 import org.eclipse.jface.action.IMenuCreator;
      8 import org.eclipse.swt.events.MenuEvent;
      9 import org.eclipse.swt.events.MenuListener;
     10 import org.eclipse.swt.widgets.Control;
     11 import org.eclipse.swt.widgets.Menu;
     12 import org.eclipse.swt.widgets.MenuItem;
     13 
     14 /**
     15  * Action which creates a submenu that is dynamically populated by subclasses
     16  */
     17 public abstract class SubmenuAction extends Action implements MenuListener, IMenuCreator {
     18     private Menu mMenu;
     19 
     20     public SubmenuAction(String title) {
     21         super(title, IAction.AS_DROP_DOWN_MENU);
     22     }
     23 
     24     @Override
     25     public IMenuCreator getMenuCreator() {
     26         return this;
     27     }
     28 
     29     @Override
     30     public void dispose() {
     31         if (mMenu != null) {
     32             mMenu.dispose();
     33             mMenu = null;
     34         }
     35     }
     36 
     37     @Override
     38     public Menu getMenu(Control parent) {
     39         return null;
     40     }
     41 
     42     @Override
     43     public Menu getMenu(Menu parent) {
     44         mMenu = new Menu(parent);
     45         mMenu.addMenuListener(this);
     46         return mMenu;
     47     }
     48 
     49     @Override
     50     public void menuHidden(MenuEvent e) {
     51     }
     52 
     53     protected abstract void addMenuItems(Menu menu);
     54 
     55     @Override
     56     public void menuShown(MenuEvent e) {
     57         // TODO: Replace this stuff with manager.setRemoveAllWhenShown(true);
     58         MenuItem[] menuItems = mMenu.getItems();
     59         for (int i = 0; i < menuItems.length; i++) {
     60             menuItems[i].dispose();
     61         }
     62         addMenuItems(mMenu);
     63     }
     64 
     65     protected void addDisabledMessageItem(String message) {
     66         IAction action = new Action(message, IAction.AS_PUSH_BUTTON) {
     67             @Override
     68             public void run() {
     69             }
     70         };
     71         action.setEnabled(false);
     72         new ActionContributionItem(action).fill(mMenu, -1);
     73 
     74     }
     75 }
     76