/***************************************************************** * Copyright (c) 2012 Texas Instruments and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Winnie Lai (Texas Instruments) - Individual Element Number Format (Bug 202556) * Winnie Lai (Texas Instruments) - Allow contributions around number format menu (Bug 371012) *****************************************************************/ package org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat; import org.eclipse.cdt.dsf.debug.ui.viewmodel.actions.VMHandlerUtils; import org.eclipse.cdt.dsf.ui.viewmodel.IVMContext; import org.eclipse.cdt.dsf.ui.viewmodel.IVMNode; import org.eclipse.cdt.dsf.ui.viewmodel.IVMProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.ui.AbstractDebugView; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.Viewer; /** * Dynamic menu contribution that restores the element number format in the current * selection of the view to view's preference. * * We pull 'restore to preference' menu item out from ElementNumberFormatsContribution * so that clients can add extra contribution before or after it. See 371012. * @since 2.3 */ public class RestoreNumberFormatPreferenceContribution extends ElementNumberFormatsContribution { @Override protected IContributionItem[] getContributionItems() { ISelection selection = VMHandlerUtils.getSelection(fServiceLocator); if (selection == null || selection.isEmpty() || selection instanceof ITreeSelection == false) { return new IContributionItem[0]; } IVMProvider provider = VMHandlerUtils.getVMProviderForSelection(selection); IPresentationContext context = provider.getPresentationContext(); TreePath[] elementPaths = ((ITreeSelection) selection).getPaths(); IVMNode[] nodes = new IVMNode[elementPaths.length]; Object viewerInput = null; if (context.getPart() instanceof AbstractDebugView) { Viewer viewer = ((AbstractDebugView)context.getPart()).getViewer(); if (viewer != null) { viewerInput = viewer.getInput(); } } for (int i = 0; i < elementPaths.length; i++) { Object segment = elementPaths[i].getLastSegment(); if (segment instanceof IVMContext) { nodes[i] = ((IVMContext) segment).getVMNode(); } else { nodes[i] = null; } } IContributionItem[] items = new IContributionItem[1]; items[0] = new ActionContributionItem(new SelectFormatAction( (IElementFormatProvider) provider, context, nodes, viewerInput, elementPaths, null)); return items; } }