/***************************************************************** * Copyright (c) 2009, 2011 Texas Instruments and others * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * Patrick Chuong (Texas Instruments) - Initial API and implementation (Bug 238956) *****************************************************************/ package org.eclipse.debug.internal.ui.model.elements; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.internal.ui.CompositeDebugImageDescriptor; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.breakpoints.provisional.IBreakpointContainer; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.TreePath; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.RGB; import org.eclipse.ui.model.IWorkbenchAdapter2; /** * Breakpoint container label provider. * * @since 3.6 */ public class BreakpointContainerLabelProvider extends DebugElementLabelProvider { @Override protected ImageDescriptor getImageDescriptor(TreePath elementPath, IPresentationContext presentationContext, String columnId) throws CoreException { ImageDescriptor desc = super.getImageDescriptor(elementPath, presentationContext, columnId); int flags = computeAdornmentFlags(); if (flags > 0) { Image image = DebugUIPlugin.getImageDescriptorRegistry().get(desc); CompositeDebugImageDescriptor compDesc = new CompositeDebugImageDescriptor(image, flags); return compDesc; } return desc; } @Override public boolean getChecked(TreePath path, IPresentationContext presentationContext) throws CoreException { Object lastSegment = path.getLastSegment(); if (lastSegment instanceof IBreakpointContainer) { IBreakpointContainer container = (IBreakpointContainer) lastSegment; for (IBreakpoint breakpoint : container.getBreakpoints()) { if (breakpoint.isEnabled()) { return true; } } return false; } return super.getChecked(path, presentationContext); } @Override public boolean getGrayed(TreePath path, IPresentationContext presentationContext) throws CoreException { Object lastSegment = path.getLastSegment(); if (lastSegment instanceof IBreakpointContainer) { IBreakpointContainer container = (IBreakpointContainer) lastSegment; // Return true, gray if some breakpoints are enabled and some are disabled. // return false if all breakpoints are either disabled or all are enabled. boolean hasEnabled = false; boolean hasDisabled = false; for (IBreakpoint breakpoint : container.getBreakpoints()) { if (breakpoint.isEnabled()) { hasEnabled = true; } else { hasDisabled = true; } if (hasEnabled && hasDisabled) { return true; } } return false; } return super.getGrayed(path, presentationContext); } // Forward font data requests to the workbench adapter @Override protected FontData getFontData(TreePath elementPath, IPresentationContext presentationContext, String columnId) throws CoreException { Object element = elementPath.getLastSegment(); FontData fontData = super.getFontData(elementPath, presentationContext, columnId); if (fontData == null && element instanceof IAdaptable) { IWorkbenchAdapter2 adapter = ((IAdaptable)element).getAdapter(IWorkbenchAdapter2.class); if (adapter != null) { fontData = adapter.getFont(element); } } return fontData; } // Forward foreground color requests to the workbench adapter @Override protected RGB getForeground(TreePath elementPath, IPresentationContext presentationContext, String columnId) throws CoreException { Object element = elementPath.getLastSegment(); RGB rgb = super.getForeground(elementPath, presentationContext, columnId); if (rgb == null && element instanceof IAdaptable) { IWorkbenchAdapter2 adapter = ((IAdaptable)element).getAdapter(IWorkbenchAdapter2.class); if (adapter != null) { rgb = adapter.getForeground(element); } } return rgb; } // Forward background color requests to the workbench adapter @Override protected RGB getBackground(TreePath elementPath, IPresentationContext presentationContext, String columnId) throws CoreException { Object element = elementPath.getLastSegment(); RGB rgb = super.getBackground(elementPath, presentationContext, columnId); if (rgb == null && element instanceof IAdaptable) { IWorkbenchAdapter2 adapter = ((IAdaptable)element).getAdapter(IWorkbenchAdapter2.class); if (adapter != null) { rgb = adapter.getBackground(element); } } return rgb; } /** * Computes and return common adornment flags for the given category. * * @return adornment flags defined in CompositeDebugImageDescriptor */ private int computeAdornmentFlags() { if (!DebugPlugin.getDefault().getBreakpointManager().isEnabled()) { return CompositeDebugImageDescriptor.SKIP_BREAKPOINT; } return 0; } }