Example usage for org.eclipse.jface.action MenuManager markDirty

List of usage examples for org.eclipse.jface.action MenuManager markDirty

Introduction

In this page you can find the example usage for org.eclipse.jface.action MenuManager markDirty.

Prototype

@Override
public void markDirty() 

Source Link

Document

The MenuManager implementation of this ContributionManager method also propagates the dirty flag up the parent chain.

Usage

From source file:net.yatomiya.e4.ui.workbench.renderers.swt.ContributionRecord.java

License:Open Source License

/**
 * @param context//w w w  .j  a  v  a2s. co m
 */
public void updateVisibility(IEclipseContext context) {
    ExpressionContext exprContext = new ExpressionContext(context);
    updateIsVisible(exprContext);
    HashSet<ContributionRecord> recentlyUpdated = new HashSet<>();
    recentlyUpdated.add(this);
    boolean changed = false;
    for (MMenuElement item : generatedElements) {
        boolean currentVisibility = computeVisibility(recentlyUpdated, item, exprContext);
        if (item.isVisible() != currentVisibility) {
            changed = true;
            item.setVisible(currentVisibility);
        }
    }
    for (MMenuElement item : sharedElements) {
        boolean currentVisibility = computeVisibility(recentlyUpdated, item, exprContext);
        if (item.isVisible() != currentVisibility) {
            changed = true;
            item.setVisible(currentVisibility);
        }
    }

    if (changed) {
        MenuManager manager = getManagerForModel();
        if (manager != null) {
            manager.markDirty();
        }
    }
}

From source file:net.yatomiya.e4.ui.workbench.renderers.swt.MenuManagerRenderer.java

License:Open Source License

@Override
public Object createWidget(MUIElement element, Object parent) {
    if (!(element instanceof MMenu))
        return null;

    final MMenu menuModel = (MMenu) element;
    Menu newMenu = null;//from www.j  a v a 2s.  c o  m
    MenuManager menuManager = null;
    boolean menuBar = false;

    if (parent instanceof Decorations) {
        MUIElement container = (MUIElement) ((EObject) element).eContainer();
        if (container instanceof MWindow) {
            menuManager = getManager(menuModel);
            if (menuManager == null) {
                menuManager = new MenuManager(NO_LABEL, menuModel.getElementId());
                linkModelToManager(menuModel, menuManager);
            }
            newMenu = menuManager.createMenuBar((Decorations) parent);
            ((Decorations) parent).setMenuBar(newMenu);
            newMenu.setData(menuManager);
            menuBar = true;
        } else {
            menuManager = getManager(menuModel);
            if (menuManager == null) {
                menuManager = new MenuManager(NO_LABEL, menuModel.getElementId());
                linkModelToManager(menuModel, menuManager);
            }
            newMenu = menuManager.createContextMenu((Control) parent);
            // we can't be sure this is the correct parent.
            // ((Control) parent).setMenu(newMenu);
            newMenu.setData(menuManager);
        }
    } else if (parent instanceof Menu) {
        // Object data = ((Menu) parent).getData();
        logger.debug(new Exception(), "Trying to render a sub menu " //$NON-NLS-1$
                + menuModel + "\n\t" + parent); //$NON-NLS-1$
        return null;

    } else if (parent instanceof Control) {
        menuManager = getManager(menuModel);
        if (menuManager == null) {
            menuManager = new MenuManager(NO_LABEL, menuModel.getElementId());
            linkModelToManager(menuModel, menuManager);
        }
        newMenu = menuManager.createContextMenu((Control) parent);
        // we can't be sure this is the correct parent.
        // ((Control) parent).setMenu(newMenu);
        if (element instanceof MPopupMenu && element.isVisible()) {
            Object data = getUIContainer(element);
            if (data instanceof Control && parent.equals(data)) {
                ((Control) parent).setMenu(newMenu);
            }
        }
        newMenu.setData(menuManager);
    }
    if (menuManager != null && !menuManager.getRemoveAllWhenShown()) {
        processContributions(menuModel, menuModel.getElementId(), menuBar, menuModel instanceof MPopupMenu);
    }
    if (newMenu != null) {
        newMenu.addDisposeListener(new DisposeListener() {
            @Override
            public void widgetDisposed(DisposeEvent e) {
                cleanUp(menuModel);
                MenuManager manager = getManager(menuModel);
                if (manager != null) {
                    manager.markDirty();
                }
            }
        });
    }
    return newMenu;
}

From source file:net.yatomiya.e4.ui.workbench.renderers.swt.MenuManagerRenderer.java

License:Open Source License

/**
 * @param menuManager//from   ww  w  .  j a va  2 s  . co m
 * @param element
 * @param evalContext
 */
public static void updateVisibility(MenuManager menuManager, MMenuElement element,
        ExpressionContext evalContext) {
    boolean current = element.isVisible();
    boolean visible = true;
    boolean evaluated = false;
    if (element.getPersistedState().get(VISIBILITY_IDENTIFIER) != null) {
        evaluated = true;
        String identifier = element.getPersistedState().get(VISIBILITY_IDENTIFIER);
        Object rc = evalContext.eclipseContext.get(identifier);
        if (rc instanceof Boolean) {
            visible = ((Boolean) rc).booleanValue();
        }
    }
    if (visible && (element.getVisibleWhen() instanceof MCoreExpression)) {
        evaluated = true;
        visible = ContributionsAnalyzer.isVisible((MCoreExpression) element.getVisibleWhen(), evalContext);
    }
    if (evaluated && visible != current) {
        element.setVisible(visible);
        menuManager.markDirty();
    }
}

From source file:net.yatomiya.e4.ui.workbench.renderers.swt.StackRenderer.java

License:Open Source License

/**
 * Determine whether the given view menu has any visible menu items.
 *
 * @param viewMenu/*from w w w.  j a  v a  2 s.  c om*/
 *            the view menu to check
 * @param part
 *            the view menu's parent part
 * @return <tt>true</tt> if the specified view menu has visible children,
 *         <tt>false</tt> otherwise
 */
private boolean hasVisibleMenuItems(MMenu viewMenu, MPart part) {
    if (!viewMenu.isToBeRendered() || !viewMenu.isVisible()) {
        return false;
    }

    for (MMenuElement menuElement : viewMenu.getChildren()) {
        if (menuElement.isToBeRendered() && menuElement.isVisible()) {
            if (OpaqueElementUtil.isOpaqueMenuItem(menuElement)
                    || OpaqueElementUtil.isOpaqueMenuSeparator(menuElement)) {
                IContributionItem item = (IContributionItem) OpaqueElementUtil.getOpaqueItem(menuElement);
                if (item != null && item.isVisible()) {
                    return true;
                }
            } else {
                return true;
            }
        }
    }

    Object menuRenderer = viewMenu.getRenderer();
    if (menuRenderer instanceof MenuManagerRenderer) {
        MenuManager manager = ((MenuManagerRenderer) menuRenderer).getManager(viewMenu);
        if (manager != null && manager.isVisible()) {
            return true;
        }
    }

    Control control = (Control) part.getWidget();
    if (control != null) {
        Menu menu = (Menu) renderer.createGui(viewMenu, control.getShell(), part.getContext());
        if (menu != null) {
            menuRenderer = viewMenu.getRenderer();
            if (menuRenderer instanceof MenuManagerRenderer) {
                MenuManagerRenderer menuManagerRenderer = (MenuManagerRenderer) menuRenderer;
                MenuManager manager = menuManagerRenderer.getManager(viewMenu);
                if (manager != null) {
                    // remark ourselves as dirty so that the menu will be
                    // reconstructed
                    manager.markDirty();
                }
            }
            return menu.getItemCount() != 0;
        }
    }
    return false;
}

From source file:org.eclipse.e4.demo.split.renderer.swt.SplitStackRenderer.java

License:Open Source License

/**
 * Determine whether the given view menu has any visible menu items.
 * //  ww w. ja  va2 s  . c om
 * @param viewMenu
 *            the view menu to check
 * @param part
 *            the view menu's parent part
 * @return <tt>true</tt> if the specified view menu has visible children,
 *         <tt>false</tt> otherwise
 */
private boolean hasVisibleMenuItems(MMenu viewMenu, MPart part) {
    if (!viewMenu.isToBeRendered() || !viewMenu.isVisible()) {
        return false;
    }

    for (MMenuElement menuElement : viewMenu.getChildren()) {
        if (menuElement.isToBeRendered() && menuElement.isVisible()) {
            if (menuElement instanceof MOpaqueMenuItem) {
                IContributionItem item = (IContributionItem) ((MOpaqueMenuItem) menuElement).getOpaqueItem();
                if (item != null && item.isVisible()) {
                    return true;
                }
            } else if (menuElement instanceof MOpaqueMenuSeparator) {
                IContributionItem item = (IContributionItem) ((MOpaqueMenuSeparator) menuElement)
                        .getOpaqueItem();
                if (item != null && item.isVisible()) {
                    return true;
                }
            } else {
                return true;
            }
        }
    }

    Object menuRenderer = viewMenu.getRenderer();
    if (menuRenderer instanceof MenuManagerRenderer) {
        MenuManager manager = ((MenuManagerRenderer) menuRenderer).getManager(viewMenu);
        if (manager != null && manager.isVisible()) {
            return true;
        }
    }

    Control control = (Control) part.getWidget();
    if (control != null) {
        Menu menu = (Menu) renderer.createGui(viewMenu, control.getShell(), part.getContext());
        if (menu != null) {
            menuRenderer = viewMenu.getRenderer();
            if (menuRenderer instanceof MenuManagerRenderer) {
                MenuManagerRenderer menuManagerRenderer = (MenuManagerRenderer) menuRenderer;
                MenuManager manager = menuManagerRenderer.getManager(viewMenu);
                if (manager != null) {
                    // remark ourselves as dirty so that the menu will be
                    // reconstructed
                    manager.markDirty();
                }
            }
            return menu.getItemCount() != 0;
        }
    }
    return false;
}

From source file:org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord.java

License:Open Source License

/**
 * @param context// w w  w .  j a  va 2  s .  c om
 */
public void updateVisibility(IEclipseContext context) {
    ExpressionContext exprContext = new ExpressionContext(context);
    updateIsVisible(exprContext);
    HashSet<ContributionRecord> recentlyUpdated = new HashSet<ContributionRecord>();
    recentlyUpdated.add(this);
    boolean changed = false;
    for (MMenuElement item : generatedElements) {
        boolean currentVisibility = computeVisibility(recentlyUpdated, item, exprContext);
        if (item.isVisible() != currentVisibility) {
            changed = true;
            item.setVisible(currentVisibility);
        }
    }
    for (MMenuElement item : sharedElements) {
        boolean currentVisibility = computeVisibility(recentlyUpdated, item, exprContext);
        if (item.isVisible() != currentVisibility) {
            changed = true;
            item.setVisible(currentVisibility);
        }
    }

    if (changed) {
        MenuManager manager = getManagerForModel();
        if (manager != null) {
            manager.markDirty();
        }
    }
}

From source file:org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.java

License:Open Source License

/**
 * @param menuManager/*from   www .j  a  va  2s.c om*/
 * @param element
 * @param evalContext
 */
public static void updateVisibility(MenuManager menuManager, MMenuElement element,
        ExpressionContext evalContext) {
    if (!(element.getVisibleWhen() instanceof MCoreExpression)) {
        return;
    }
    boolean val = ContributionsAnalyzer.isVisible((MCoreExpression) element.getVisibleWhen(), evalContext);
    if (val != element.isVisible()) {
        element.setVisible(val);
        menuManager.markDirty();
    }
}