aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java
diff options
context:
space:
mode:
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.java75
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);
+
+ }
+}