diff options
Diffstat (limited to 'dsf/org.eclipse.cdt.dsf.ui')
5 files changed, 261 insertions, 109 deletions
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java index f53b3360469..128d9b91a1c 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java @@ -64,11 +64,11 @@ public class ExpressionManagerVMNode extends AbstractVMNode * VMC for a new expression object to be added. When user clicks on this node to * edit it, he will create a new expression. */ - class NewExpressionVMC extends AbstractVMContext { + public class NewExpressionVMC extends AbstractVMContext { public NewExpressionVMC() { super(ExpressionManagerVMNode.this); } - + @Override @SuppressWarnings("rawtypes") public Object getAdapter(Class adapter) { @@ -90,7 +90,17 @@ public class ExpressionManagerVMNode extends AbstractVMNode private IExpressionManager fManager = DebugPlugin.getDefault().getExpressionManager(); /** Cached reference to a cell modifier for editing expression strings of invalid expressions */ - private WatchExpressionCellModifier fWatchExpressionCellModifier = new WatchExpressionCellModifier(); + private ICellModifier fWatchExpressionCellModifier = null; + + /** + * @since 2.1 + * + * @return The cell modifier to be used when editing. If you need to provide + * a custom cell editor you would override this method. + */ + protected ICellModifier createCellModifier() { + return new WatchExpressionCellModifier(); + } public ExpressionManagerVMNode(ExpressionVMProvider provider) { super(provider); @@ -296,7 +306,10 @@ public class ExpressionManagerVMNode extends AbstractVMNode return new TreePath(elementList.toArray()); } - + /* + * (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor#getCellEditor(org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.String, java.lang.Object, org.eclipse.swt.widgets.Composite) + */ public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) { if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(columnId)) { return new TextCellEditor(parent); @@ -304,7 +317,14 @@ public class ExpressionManagerVMNode extends AbstractVMNode return null; } + /* + * (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor#getCellModifier(org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.Object) + */ public ICellModifier getCellModifier(IPresentationContext context, Object element) { + if ( fWatchExpressionCellModifier == null ) { + fWatchExpressionCellModifier = createCellModifier(); + } return fWatchExpressionCellModifier; } } diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java index 46e8744698b..e715b1a94a5 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/SingleExpressionVMNode.java @@ -320,7 +320,10 @@ public class SingleExpressionVMNode extends AbstractDMVMNode implements IElement return new RootDMVMContext(getVMProvider().getRootVMNode(), dmc); } - void setExpression(IExpressionDMContext dmc) { + /** + * @since 2.1 + */ + public void setExpression(IExpressionDMContext dmc) { String text = dmc.getExpression(); fManager.setExpression(new SimpleExpression(text)); } diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/register/RegisterVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/register/RegisterVMNode.java index a8096afde83..61aa8780be5 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/register/RegisterVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/register/RegisterVMNode.java @@ -74,6 +74,7 @@ import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugModelPresentation; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter2; +import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellModifier; @@ -207,8 +208,58 @@ public class RegisterVMNode extends AbstractExpressionVMNode * * @since 2.0 */ - + private LabelBackground columnIdValueBackground; + private IPropertyChangeListener fPreferenceChangeListener; + + @Override + public void dispose() { + + if ( fPreferenceChangeListener != null ) { + DebugUITools.getPreferenceStore().removePropertyChangeListener(fPreferenceChangeListener); + } + + super.dispose(); + } + protected IElementLabelProvider createLabelProvider() { + /* + * Create background which is responsive to the preference color changes. + */ + columnIdValueBackground = new LabelBackground( + DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()) + { + { + setPropertyNames(new String[] { + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT, + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT}); + } + + @Override + public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { + Boolean activeFormatChanged = (Boolean)properties.get( + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT); + Boolean activeChanged = (Boolean)properties.get( + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE); + return Boolean.TRUE.equals(activeChanged) && !Boolean.TRUE.equals(activeFormatChanged); + } + }; + + if ( fPreferenceChangeListener != null ) { + DebugUITools.getPreferenceStore().removePropertyChangeListener(fPreferenceChangeListener); + } + + fPreferenceChangeListener = new IPropertyChangeListener() { + public void propertyChange(PropertyChangeEvent event) { + if ( event.getProperty().equals(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND) ) { + columnIdValueBackground.setBackground(DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()); + } + } + }; + + DebugUITools.getPreferenceStore().addPropertyChangeListener(fPreferenceChangeListener); + PropertiesBasedLabelProvider provider = new PropertiesBasedLabelProvider(); // The name column consists of the register name. @@ -283,26 +334,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode return !status.isOK(); } }, - new LabelBackground( - DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()) - { - { - setPropertyNames(new String[] { - IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, - IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT, - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT}); - } - - @Override - public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { - Boolean activeFormatChanged = (Boolean)properties.get( - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT); - Boolean activeChanged = (Boolean)properties.get( - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE); - return Boolean.TRUE.equals(activeChanged) && !Boolean.TRUE.equals(activeFormatChanged); - } - }, + columnIdValueBackground, new StaleDataLabelForeground(), new VariableLabelFont(), })); @@ -403,7 +435,6 @@ public class RegisterVMNode extends AbstractExpressionVMNode return provider; } - @Override public String toString() { diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java index 08d01336073..389ea2b8592 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java @@ -88,6 +88,7 @@ import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugModelPresentation; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter2; +import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellModifier; @@ -102,29 +103,29 @@ public class VariableVMNode extends AbstractExpressionVMNode implements IElementEditor, IElementLabelProvider, IElementPropertiesProvider, IElementMementoProvider { /** - * @since 2.0 + * @since 2.1 */ - private static final String PROP_VARIABLE_TYPE_NAME = "variable_type_name"; //$NON-NLS-1$ + public static final String PROP_VARIABLE_TYPE_NAME = "variable_type_name"; //$NON-NLS-1$ /** - * @since 2.0 + * @since 2.1 */ - private static final String PROP_VARIABLE_BASIC_TYPE = "variable_basic_type"; //$NON-NLS-1$ + public static final String PROP_VARIABLE_BASIC_TYPE = "variable_basic_type"; //$NON-NLS-1$ /** - * @since 2.0 + * @since 2.1 */ - private static final String PROP_VARIABLE_ADDRESS = "variable_address"; //$NON-NLS-1$ + public static final String PROP_VARIABLE_ADDRESS = "variable_address"; //$NON-NLS-1$ /** - * @since 2.0 + * @since 2.1 */ - private static final String PROP_VARIABLE_SHOW_TYPE_NAMES = "variable_show_type_names"; //$NON-NLS-1$ + public static final String PROP_VARIABLE_SHOW_TYPE_NAMES = "variable_show_type_names"; //$NON-NLS-1$ /** - * @since 2.0 + * @since 2.1 */ - private static final String PROP_VARIABLE_ADDRESS_CHANGED = ICachingVMProvider.PROP_IS_CHANGED_PREFIX + PROP_VARIABLE_ADDRESS; + public static final String PROP_VARIABLE_ADDRESS_CHANGED = ICachingVMProvider.PROP_IS_CHANGED_PREFIX + PROP_VARIABLE_ADDRESS; private final SyncVariableDataAccess fSyncVariableDataAccess; @@ -213,48 +214,142 @@ public class VariableVMNode extends AbstractExpressionVMNode * * @since 2.0 */ - protected IElementLabelProvider createLabelProvider() { - PropertiesBasedLabelProvider provider = new PropertiesBasedLabelProvider(); + private LabelBackground columnIdValueBackground; + private LabelBackground columnNoColumnsBackground; + private IPropertyChangeListener fPreferenceChangeListener; + + /* + * (non-Javadoc) + * @see org.eclipse.cdt.dsf.ui.viewmodel.datamodel.AbstractDMVMNode#dispose() + * + * We need to take over the dispose so we can get rid of the preference listener we created. + */ + @Override + public void dispose() { + + if ( fPreferenceChangeListener != null ) { + DebugUITools.getPreferenceStore().removePropertyChangeListener(fPreferenceChangeListener); + } + + super.dispose(); + } - // - // Create label image objects which are used in more than one column. - // - - // Pointer image is used for variable and function pointers. - LabelImage pointerLabelImage = new LabelImage(CDebugImages.DESC_OBJS_VARIABLE_POINTER) { - { setPropertyNames(new String[] { PROP_VARIABLE_BASIC_TYPE }); } + /** + * Create label image objects which are used in more than one column. + * + * @since 2.1 + * + * Pointer image is used for variable and function pointers. + */ + public final static LabelImage POINTER_LABEL_IMAGE = new LabelImage(CDebugImages.DESC_OBJS_VARIABLE_POINTER) { + { setPropertyNames(new String[] { PROP_VARIABLE_BASIC_TYPE }); } - @Override - public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { - String type = (String)properties.get(PROP_VARIABLE_BASIC_TYPE); - return IExpressionDMData.BasicType.pointer.name().equals(type) || - IExpressionDMData.BasicType.function.name().equals(type); - }; + @Override + public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { + String type = (String)properties.get(PROP_VARIABLE_BASIC_TYPE); + return IExpressionDMData.BasicType.pointer.name().equals(type) || + IExpressionDMData.BasicType.function.name().equals(type); }; - - // Aggregate image is used for array, struct, etc. - LabelImage aggregateLabelImage = new LabelImage(CDebugImages.DESC_OBJS_VARIABLE_AGGREGATE) { - { setPropertyNames(new String[] { PROP_VARIABLE_BASIC_TYPE }); } + }; + + /** + * @since 2.1 + * + * Aggregate image is used for array, struct, etc. + */ + public final static LabelImage AGGREGATE_LABEL_IMAGE = new LabelImage(CDebugImages.DESC_OBJS_VARIABLE_AGGREGATE) { + { setPropertyNames(new String[] { PROP_VARIABLE_BASIC_TYPE }); } - @Override - public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { - String type = (String)properties.get(PROP_VARIABLE_BASIC_TYPE); - return IExpressionDMData.BasicType.array.name().equals(type) || - IExpressionDMData.BasicType.composite.name().equals(type); - }; + @Override + public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { + String type = (String)properties.get(PROP_VARIABLE_BASIC_TYPE); + return IExpressionDMData.BasicType.array.name().equals(type) || + IExpressionDMData.BasicType.composite.name().equals(type); }; + }; + + /** + * @since 2.1 + * + * Simple variable image is used for all other types, except when there is no type specified. + */ + public final static LabelImage SIMPLE_LABEL_IMAGE = new LabelImage(CDebugImages.DESC_OBJS_VARIABLE_SIMPLE) { + { setPropertyNames(new String[] { PROP_VARIABLE_BASIC_TYPE }); } - // Simple variable image is used for all other types, except when there is no type specified. - LabelImage simpleLabelImage = new LabelImage(CDebugImages.DESC_OBJS_VARIABLE_SIMPLE) { - { setPropertyNames(new String[] { PROP_VARIABLE_BASIC_TYPE }); } - - @Override - public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { - String type = (String)properties.get(PROP_VARIABLE_BASIC_TYPE); - return type != null; - }; + @Override + public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { + String type = (String)properties.get(PROP_VARIABLE_BASIC_TYPE); + return type != null; }; - + }; + + protected IElementLabelProvider createLabelProvider() { + + // + // Create the foreground/background colors which can be dynamically modified. + // + columnIdValueBackground = new LabelBackground( + DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()) + { + { + setPropertyNames(new String[] { + FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT), + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT), + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT, + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT}); + } + + @Override + public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { + Boolean activeFormatChanged = (Boolean)properties.get( + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT); + Boolean activeChanged = (Boolean)properties.get( + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE); + Boolean stringChanged = (Boolean)properties.get( + ICachingVMProvider.PROP_IS_CHANGED_PREFIX + FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT)); + return Boolean.TRUE.equals(stringChanged) || + ( Boolean.TRUE.equals(activeChanged) && !Boolean.TRUE.equals(activeFormatChanged)); + }; + }; + + columnNoColumnsBackground = new LabelBackground(DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()) + { + { + setPropertyNames(new String[] { + FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT), + IDebugVMConstants.PROP_IS_STRING_FORMAT_VALUE_CHANGED, + IDebugVMConstants.PROP_IS_ACTIVE_FORMATTED_VALUE_CHANGED}); + } + + @Override + public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { + Boolean stringChanged = (Boolean)properties.get(IDebugVMConstants.PROP_IS_STRING_FORMAT_VALUE_CHANGED); + Boolean activeChanged = (Boolean)properties.get(IDebugVMConstants.PROP_IS_ACTIVE_FORMATTED_VALUE_CHANGED); + return Boolean.TRUE.equals(stringChanged) || Boolean.TRUE.equals(activeChanged); + } + }; + + // Get rid of the previous listener if it exists and then create a new one and sign it up. + if ( fPreferenceChangeListener != null ) { + DebugUITools.getPreferenceStore().removePropertyChangeListener(fPreferenceChangeListener); + } + + fPreferenceChangeListener = new IPropertyChangeListener() { + public void propertyChange(PropertyChangeEvent event) { + if ( event.getProperty().equals(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND) ) { + columnIdValueBackground.setBackground(DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()); + columnNoColumnsBackground.setBackground(DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()); + } + } + }; + + DebugUITools.getPreferenceStore().addPropertyChangeListener(fPreferenceChangeListener); + + // Create the initial properties provider which can be built on. + PropertiesBasedLabelProvider provider = new PropertiesBasedLabelProvider(); + // The name column consists of the expression name. The name column image depends on the variable type. provider.setColumnInfo( IDebugVMConstants.COLUMN_ID__NAME, @@ -262,9 +357,9 @@ public class VariableVMNode extends AbstractExpressionVMNode new LabelText( MessagesForVariablesVM.VariableVMNode_Name_column__text_format, new String[] { PROP_NAME }), - pointerLabelImage, - aggregateLabelImage, - simpleLabelImage, + POINTER_LABEL_IMAGE, + AGGREGATE_LABEL_IMAGE, + SIMPLE_LABEL_IMAGE, new StaleDataLabelForeground(), new VariableLabelFont(), })); @@ -277,9 +372,9 @@ public class VariableVMNode extends AbstractExpressionVMNode new LabelText( MessagesForVariablesVM.VariableVMNode_Expression_column__text_format, new String[] { PROP_ELEMENT_EXPRESSION }), - pointerLabelImage, - aggregateLabelImage, - simpleLabelImage, + POINTER_LABEL_IMAGE, + AGGREGATE_LABEL_IMAGE, + SIMPLE_LABEL_IMAGE, new StaleDataLabelForeground(), new VariableLabelFont(), })); @@ -342,31 +437,7 @@ public class VariableVMNode extends AbstractExpressionVMNode } }, // - new LabelBackground( - DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB()) - { - { - setPropertyNames(new String[] { - FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT), - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT), - IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE, - IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT, - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT}); - } - - @Override - public boolean isEnabled(IStatus status, java.util.Map<String,Object> properties) { - Boolean activeFormatChanged = (Boolean)properties.get( - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT); - Boolean activeChanged = (Boolean)properties.get( - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + IDebugVMConstants.PROP_FORMATTED_VALUE_ACTIVE_FORMAT_VALUE); - Boolean stringChanged = (Boolean)properties.get( - ICachingVMProvider.PROP_IS_CHANGED_PREFIX + FormattedValueVMUtil.getPropertyForFormatId(IFormattedValues.STRING_FORMAT)); - return Boolean.TRUE.equals(stringChanged) || - ( Boolean.TRUE.equals(activeChanged) && !Boolean.TRUE.equals(activeFormatChanged)); - }; - }, + columnIdValueBackground, new StaleDataLabelForeground(), new VariableLabelFont(), })); @@ -501,9 +572,9 @@ public class VariableVMNode extends AbstractExpressionVMNode new ErrorLabelText( MessagesForVariablesVM.VariableVMNode_NoColumns_column__Error__text_format, new String[] { PROP_NAME }), - pointerLabelImage, - aggregateLabelImage, - simpleLabelImage, + POINTER_LABEL_IMAGE, + AGGREGATE_LABEL_IMAGE, + SIMPLE_LABEL_IMAGE, new LabelForeground(new RGB(255, 0, 0)) // TODO: replace with preference error color { { setPropertyNames(new String[] { PROP_NAME }); } @@ -532,6 +603,7 @@ public class VariableVMNode extends AbstractExpressionVMNode return Boolean.TRUE.equals(stringChanged) || Boolean.TRUE.equals(activeChanged); }; }, + columnNoColumnsBackground, new StaleDataLabelBackground(), new VariableLabelFont(), })); diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/properties/LabelColumnInfo.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/properties/LabelColumnInfo.java index 07fd4fe52ee..e1d056609d6 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/properties/LabelColumnInfo.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/ui/viewmodel/properties/LabelColumnInfo.java @@ -76,13 +76,39 @@ public class LabelColumnInfo { /** * Returns the list of configured label attributes for this column. * - * @since 2.0 + * @since 2.1 */ - protected LabelAttribute[] setLabelAttributes(LabelAttribute attributes) { - return fLabelAttributes; + protected void setLabelAttributes(LabelAttribute[] attributes) { + fLabelAttributes = attributes; + + List<String> names = new LinkedList<String>(); + for (LabelAttribute attr : attributes) { + for (String name : attr.getPropertyNames()) { + names.add(name); + } + } + + fPropertyNames = names.toArray(new String[names.size()]); } /** + * Inserts an attribute in front of all the other existing attributes. + * + * @since 2.1 + */ + public void insertAttribute(LabelAttribute attribute) { + LabelAttribute[] newAttributeList = new LabelAttribute[fLabelAttributes.length+1]; + + for ( int idx = 0 ; idx < fLabelAttributes.length; idx ++ ) { + newAttributeList[ idx + 1 ] = fLabelAttributes[ idx ]; + } + + newAttributeList[ 0 ] = attribute; + + setLabelAttributes( newAttributeList ); + } + + /** * Updates the label parameters for this column based on the provided * properties. The label information is written to the givne label * update under the given column index. |