/******************************************************************************* * Copyright (c) 2014 Ericsson 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: * Marc Khouzam (Ericsson) - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.examples.dsf.gdb.viewmodel; import java.util.Map; import org.eclipse.cdt.debug.ui.IPinProvider.IPinElementColorDescriptor; import org.eclipse.cdt.dsf.debug.ui.viewmodel.launch.ExecutionContextLabelText; import org.eclipse.cdt.dsf.debug.ui.viewmodel.launch.ILaunchVMConstants; import org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.launch.GdbExecutionContextLabelText; import org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.launch.IGdbLaunchVMConstants; import org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.launch.ThreadVMNode; import org.eclipse.cdt.dsf.service.DsfSession; import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider; import org.eclipse.cdt.dsf.ui.viewmodel.properties.LabelAttribute; import org.eclipse.cdt.dsf.ui.viewmodel.properties.LabelColumnInfo; import org.eclipse.cdt.dsf.ui.viewmodel.properties.LabelImage; import org.eclipse.cdt.dsf.ui.viewmodel.properties.LabelText; import org.eclipse.cdt.dsf.ui.viewmodel.properties.PropertiesBasedLabelProvider; import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; @SuppressWarnings("restriction") public class GdbExtendedThreadVMNode extends ThreadVMNode { public GdbExtendedThreadVMNode(AbstractDMVMProvider provider, DsfSession session) { super(provider, session); } @Override protected IElementLabelProvider createLabelProvider() { PropertiesBasedLabelProvider provider = new PropertiesBasedLabelProvider(); provider.setColumnInfo( PropertiesBasedLabelProvider.ID_COLUMN_NO_COLUMNS, new LabelColumnInfo(new LabelAttribute[] { // Text is made of the thread name followed by its state and state change reason. new GdbExecutionContextLabelText( GdbExtendedVMMessages.ThreadVMNode_No_columns__text_format, new String[] { ExecutionContextLabelText.PROP_NAME_KNOWN, PROP_NAME, ExecutionContextLabelText.PROP_ID_KNOWN, ILaunchVMConstants.PROP_ID, IGdbLaunchVMConstants.PROP_OS_ID_KNOWN, IGdbLaunchVMConstants.PROP_OS_ID, IGdbLaunchVMConstants.PROP_CORES_ID_KNOWN, IGdbLaunchVMConstants.PROP_CORES_ID, ILaunchVMConstants.PROP_IS_SUSPENDED, ExecutionContextLabelText.PROP_STATE_CHANGE_REASON_KNOWN, ILaunchVMConstants.PROP_STATE_CHANGE_REASON, ExecutionContextLabelText.PROP_STATE_CHANGE_DETAILS_KNOWN, ILaunchVMConstants.PROP_STATE_CHANGE_DETAILS}), new LabelText(GdbExtendedVMMessages.ThreadVMNode_No_columns__Error__label, new String[0]), /* RUNNING THREAD - RED PIN */ new LabelImage(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_THREAD_RUNNING_R_PINNED)) { { setPropertyNames(new String[] { ILaunchVMConstants.PROP_IS_SUSPENDED, IGdbLaunchVMConstants.PROP_PINNED_CONTEXT, IGdbLaunchVMConstants.PROP_PIN_COLOR }); } @Override public boolean isEnabled(IStatus status, Map<String, Object> properties) { Boolean prop = (Boolean) properties.get(ILaunchVMConstants.PROP_IS_SUSPENDED); Boolean pin_prop = (Boolean) properties.get(IGdbLaunchVMConstants.PROP_PINNED_CONTEXT); Object pin_color_prop = properties.get(IGdbLaunchVMConstants.PROP_PIN_COLOR); return (prop != null && pin_prop != null && pin_color_prop != null) ? !prop.booleanValue() && pin_prop.booleanValue() && pin_color_prop.equals(IPinElementColorDescriptor.RED) : false; }; }, /* RUNNING THREAD - GREEN PIN */ new LabelImage(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_THREAD_RUNNING_G_PINNED)) { { setPropertyNames(new String[] { ILaunchVMConstants.PROP_IS_SUSPENDED, IGdbLaunchVMConstants.PROP_PINNED_CONTEXT, IGdbLaunchVMConstants.PROP_PIN_COLOR }); } @Override public boolean isEnabled(IStatus status, Map<String, Object> properties) { Boolean prop = (Boolean) properties.get(ILaunchVMConstants.PROP_IS_SUSPENDED); Boolean pin_prop = (Boolean) properties.get(IGdbLaunchVMConstants.PROP_PINNED_CONTEXT); Object pin_color_prop = properties.get(IGdbLaunchVMConstants.PROP_PIN_COLOR); return (prop != null && pin_prop != null && pin_color_prop != null) ? !prop.booleanValue() && pin_prop.booleanValue() && pin_color_prop.equals(IPinElementColorDescriptor.GREEN) : false; }; }, /* RUNNING THREAD - BLUE PIN */ new LabelImage(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_THREAD_RUNNING_B_PINNED)) { { setPropertyNames(new String[] { ILaunchVMConstants.PROP_IS_SUSPENDED, IGdbLaunchVMConstants.PROP_PINNED_CONTEXT, IGdbLaunchVMConstants.PROP_PIN_COLOR }); } @Override public boolean isEnabled(IStatus status, Map<String, Object> properties) { Boolean prop = (Boolean) properties.get(ILaunchVMConstants.PROP_IS_SUSPENDED); Boolean pin_prop = (Boolean) properties.get(IGdbLaunchVMConstants.PROP_PINNED_CONTEXT); Object pin_color_prop = properties.get(IGdbLaunchVMConstants.PROP_PIN_COLOR); return (prop != null && pin_prop != null && pin_color_prop != null) ? !prop.booleanValue() && pin_prop.booleanValue() && pin_color_prop.equals(IPinElementColorDescriptor.BLUE) : false; }; }, /* RUNNING THREAD - NO PIN */ new LabelImage(DebugUITools.getImageDescriptor(IDebugUIConstants.IMG_OBJS_THREAD_RUNNING)) { { setPropertyNames(new String[] { ILaunchVMConstants.PROP_IS_SUSPENDED }); } @Override public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { // prop has been seen to be null during session shutdown [313823] Boolean prop = (Boolean)properties.get(ILaunchVMConstants.PROP_IS_SUSPENDED); return (prop != null) ? !prop.booleanValue() : false; }; }, /* SUSPENDED THREAD - RED PIN */ new LabelImage(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_THREAD_SUSPENDED_R_PINNED)) { { setPropertyNames(new String[] { IGdbLaunchVMConstants.PROP_PINNED_CONTEXT, IGdbLaunchVMConstants.PROP_PIN_COLOR }); } @Override public boolean isEnabled(IStatus status, Map<String, Object> properties) { Boolean pin_prop = (Boolean)properties.get(IGdbLaunchVMConstants.PROP_PINNED_CONTEXT); Object pin_color_prop = properties.get(IGdbLaunchVMConstants.PROP_PIN_COLOR); return (pin_prop != null && pin_color_prop != null) ? pin_prop.booleanValue() && pin_color_prop.equals(IPinElementColorDescriptor.RED) : false; }; }, /* SUSPENDED THREAD - GREEN PIN */ new LabelImage(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_THREAD_SUSPENDED_G_PINNED)) { { setPropertyNames(new String[] { IGdbLaunchVMConstants.PROP_PINNED_CONTEXT, IGdbLaunchVMConstants.PROP_PIN_COLOR }); } @Override public boolean isEnabled(IStatus status, Map<String, Object> properties) { Boolean pin_prop = (Boolean)properties.get(IGdbLaunchVMConstants.PROP_PINNED_CONTEXT); Object pin_color_prop = properties.get(IGdbLaunchVMConstants.PROP_PIN_COLOR); return (pin_prop != null && pin_color_prop != null) ? pin_prop.booleanValue() && pin_color_prop.equals(IPinElementColorDescriptor.GREEN) : false; }; }, /* SUSPENDED THREAD - BLUE PIN */ new LabelImage(CDTSharedImages.getImageDescriptor(CDTSharedImages.IMG_THREAD_SUSPENDED_B_PINNED)) { { setPropertyNames(new String[] { IGdbLaunchVMConstants.PROP_PINNED_CONTEXT, IGdbLaunchVMConstants.PROP_PIN_COLOR }); } @Override public boolean isEnabled(IStatus status, Map<String, Object> properties) { Boolean pin_prop = (Boolean)properties.get(IGdbLaunchVMConstants.PROP_PINNED_CONTEXT); Object pin_color_prop = properties.get(IGdbLaunchVMConstants.PROP_PIN_COLOR); return (pin_prop != null && pin_color_prop != null) ? pin_prop.booleanValue() && pin_color_prop.equals(IPinElementColorDescriptor.BLUE) : false; }; }, /* SUSPENDED THREAD - NO PIN */ new LabelImage(DebugUITools.getImageDescriptor(IDebugUIConstants.IMG_OBJS_THREAD_SUSPENDED)), })); return provider; } }