package org.xmind.ui.internal.actions; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.menus.IWorkbenchContribution; import org.eclipse.ui.services.IServiceLocator; import org.xmind.core.ISheet; import org.xmind.gef.ui.editor.IGraphicalEditorPage; import org.xmind.ui.internal.MindMapUIPlugin; import org.xmind.ui.internal.editor.MindMapEditor; public class AllowManualLayoutMenu extends ContributionItem implements IWorkbenchContribution { private boolean dirty = true; // IGraphicalEditorPage page; IWorkbenchWindow window; private IMenuListener menuListener = new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { manager.markDirty(); dirty = true; } }; @Override public boolean isDynamic() { return true; } @Override public void fill(Menu menu, int index) { if (getParent() instanceof MenuManager) ((MenuManager) getParent()).addMenuListener(menuListener); if (!dirty) return; MenuManager manager = new MenuManager(); fillMenu(manager); IContributionItem items[] = manager.getItems(); if (items.length > 0) { for (int i = 0; i < items.length; i++) { items[i].fill(menu, index++); } } dirty = false; } public void fillMenu(MenuManager menuManager) { IPreferenceStore prefStore = MindMapUIPlugin.getDefault() .getPreferenceStore(); AllowManualLayoutAction allowManualLayoutAction = new AllowManualLayoutAction( prefStore); IWorkbenchPart part = window.getActivePage().getActivePart(); if (null == part || !(part instanceof MindMapEditor)) { allowManualLayoutAction.setEnabled(false); } else if (part instanceof MindMapEditor) { IGraphicalEditorPage page = ((MindMapEditor) part) .getActivePageInstance(); if (page != null) { ISheet sheet = page.getAdapter(ISheet.class); String structureClass = sheet.getRootTopic() .getStructureClass(); allowManualLayoutAction.setEnabled(structureClass == null || structureClass.contains("org.xmind.ui.map")); //$NON-NLS-1$ } } menuManager.add(allowManualLayoutAction); } @Override public void initialize(IServiceLocator serviceLocator) { window = serviceLocator.getService(IWorkbenchWindow.class); } }