diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java new file mode 100644 index 000000000..0923dda79 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java @@ -0,0 +1,75 @@ + +package com.android.ide.eclipse.adt.internal.editors.layout.gle2; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuCreator; +import org.eclipse.swt.events.MenuEvent; +import org.eclipse.swt.events.MenuListener; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; + +/** + * Action which creates a submenu that is dynamically populated by subclasses + */ +public abstract class SubmenuAction extends Action implements MenuListener, IMenuCreator { + private Menu mMenu; + + public SubmenuAction(String title) { + super(title, IAction.AS_DROP_DOWN_MENU); + } + + @Override + public IMenuCreator getMenuCreator() { + return this; + } + + @Override + public void dispose() { + if (mMenu != null) { + mMenu.dispose(); + mMenu = null; + } + } + + @Override + public Menu getMenu(Control parent) { + return null; + } + + @Override + public Menu getMenu(Menu parent) { + mMenu = new Menu(parent); + mMenu.addMenuListener(this); + return mMenu; + } + + @Override + public void menuHidden(MenuEvent e) { + } + + protected abstract void addMenuItems(Menu menu); + + @Override + public void menuShown(MenuEvent e) { + // TODO: Replace this stuff with manager.setRemoveAllWhenShown(true); + MenuItem[] menuItems = mMenu.getItems(); + for (int i = 0; i < menuItems.length; i++) { + menuItems[i].dispose(); + } + addMenuItems(mMenu); + } + + protected void addDisabledMessageItem(String message) { + IAction action = new Action(message, IAction.AS_PUSH_BUTTON) { + @Override + public void run() { + } + }; + action.setEnabled(false); + new ActionContributionItem(action).fill(mMenu, -1); + + } +} |