aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/SubmenuAction.java
blob: 0923dda7991c7fe895fe593a71d7db962940e6cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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);

    }
}