diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterBitFieldVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterBitFieldVMNode.java index 57c706a8438..0d29ee3042e 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterBitFieldVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterBitFieldVMNode.java @@ -47,13 +47,18 @@ import org.eclipse.dd.dsf.ui.viewmodel.VMDelta; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.IDMVMContext; import org.eclipse.debug.core.model.IExpression; +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter2; +import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ComboBoxCellEditor; @@ -216,7 +221,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode /* * Format has been validated. Get the formatted value. */ - FormattedValueDMContext valueDmc = regService.getFormattedValueContext(dmc, finalFormatId); + final FormattedValueDMContext valueDmc = regService.getFormattedValueContext(dmc, finalFormatId); getDMVMProvider().getModelData( RegisterBitFieldVMNode.this, update, regService, valueDmc, @@ -224,8 +229,14 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode @Override public void handleCompleted() { if (!isSuccess()) { - handleFailedUpdate(update); - return; + if (getStatus().getCode() == IDsfStatusConstants.INVALID_STATE) { + update.setLabel("...", labelIndex); //$NON-NLS-1$ + } else { + update.setLabel("Error: " + getStatus().getMessage(), labelIndex); //$NON-NLS-1$ + } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); + update.done(); + return; } /* @@ -239,6 +250,17 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode else { update.setLabel(getData().getFormattedValue() , labelIndex); } + + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); + + // color based on change history + + FormattedValueDMData oldData = (FormattedValueDMData) getDMVMProvider().getArchivedModelData( + RegisterBitFieldVMNode.this, update, valueDmc); + if(oldData != null && !oldData.getFormattedValue().equals(getData().getFormattedValue())) { + update.setBackground( + DebugUIPlugin.getPreferenceColor(IInternalDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB(), labelIndex); + } update.done(); } }, @@ -288,7 +310,50 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode assert getStatus().isOK() || getStatus().getCode() != IDsfStatusConstants.INTERNAL_ERROR || getStatus().getCode() != IDsfStatusConstants.NOT_SUPPORTED; - handleFailedUpdate(update); + /* + * Instead of just failing this outright we are going to attempt to do more here. + * Failing it outright causes the view to display ... for all columns in the line + * and this is uninformative about what is happening. We may be trying to show a + * register whos retrieval has been cancelled by the lower level. Perhaps because + * we are stepping extremely fast and state changes cause the register service to + * return these requests without ever sending them to the debug engine. + * + */ + String[] localColumns = update.getPresentationContext().getColumns(); + if (localColumns == null) + localColumns = new String[] { IDebugVMConstants.COLUMN_ID__NAME }; + + for (int idx = 0; idx < localColumns.length; idx++) { + if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) { + /* + * This used to be easy in that the DMC contained the name. Which allowed us + * to display the register name and an error message across from it. Now that + * name must come from the data and we could not retrieve the data we do not + * have anything intelligent to show here. I think this is going to look very + * ugly and will need to be worked on. We know the service has the name with + * it, it is just the dynamic part which cannot be obtained ( as explained in + * comments above ). + */ + update.setLabel("Unknown name", idx); //$NON-NLS-1$ + update.setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_OBJS_REGISTER), idx); + } else if (IDebugVMConstants.COLUMN_ID__TYPE.equals(localColumns[idx])) { + update.setLabel("", idx); //$NON-NLS-1$ + } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) { + if (getStatus().getCode() == IDsfStatusConstants.INVALID_STATE) { + update.setLabel("...", idx); //$NON-NLS-1$ + } else { + update.setLabel("Error: " + getStatus().getMessage(), idx); //$NON-NLS-1$ + } + } else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(localColumns[idx])) { + update.setLabel("...", idx); //$NON-NLS-1$ + } else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) { + update.setLabel("", idx); //$NON-NLS-1$ + } + + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); + } + + update.done(); return; } @@ -336,6 +401,8 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode update.setLabel(getData().getName(), idx); } } + + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); } if ( ! weAreExtractingFormattedData ) { @@ -345,6 +412,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) { updateFormattedRegisterValue(update, idx, dmc, getData() ); } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); } } } diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterGroupVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterGroupVMNode.java index b3b1c5f7494..52a93c95a77 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterGroupVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterGroupVMNode.java @@ -38,6 +38,7 @@ import org.eclipse.dd.dsf.ui.viewmodel.datamodel.AbstractDMVMProvider; import org.eclipse.dd.dsf.ui.viewmodel.datamodel.IDMVMContext; import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; @@ -46,6 +47,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter2; +import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.TextCellEditor; @@ -215,6 +217,8 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode protected void fillColumnLabel(IRegisterGroupDMContext dmContext, IRegisterGroupDMData dmData, String columnId, int idx, ILabelUpdate update) { + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); + if (IDebugVMConstants.COLUMN_ID__NAME.equals(columnId)) { update.setLabel(dmData.getName(), idx); update.setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_OBJS_REGISTER_GROUP), idx); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterVMNode.java index 710e9a1613e..f58ff9a74db 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/register/RegisterVMNode.java @@ -53,6 +53,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter2; +import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellModifier; @@ -226,7 +227,13 @@ public class RegisterVMNode extends AbstractExpressionVMNode @Override public void handleCompleted() { if (!isSuccess()) { - handleFailedUpdate(update); + if (getStatus().getCode() == IDsfStatusConstants.INVALID_STATE) { + update.setLabel("...", labelIndex); //$NON-NLS-1$ + } else { + update.setLabel("Error: " + getStatus().getMessage(), labelIndex); //$NON-NLS-1$ + } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); + update.done(); return; } /* @@ -240,10 +247,9 @@ public class RegisterVMNode extends AbstractExpressionVMNode RegisterVMNode.this, update, valueDmc); if(oldData != null && !oldData.getFormattedValue().equals(getData().getFormattedValue())) { update.setBackground( - DebugUIPlugin.getPreferenceColor( - IInternalDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB(), - labelIndex); + DebugUIPlugin.getPreferenceColor(IInternalDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB(), labelIndex); } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); update.done(); } }, @@ -291,7 +297,50 @@ public class RegisterVMNode extends AbstractExpressionVMNode assert getStatus().isOK() || getStatus().getCode() != IDsfStatusConstants.INTERNAL_ERROR || getStatus().getCode() != IDsfStatusConstants.NOT_SUPPORTED; - handleFailedUpdate(update); + /* + * Instead of just failing this outright we are going to attempt to do more here. + * Failing it outright causes the view to display ... for all columns in the line + * and this is uninformative about what is happening. We may be trying to show a + * register whos retrieval has been cancelled by the lower level. Perhaps because + * we are stepping extremely fast and state changes cause the register service to + * return these requests without ever sending them to the debug engine. + * + */ + String[] localColumns = update.getPresentationContext().getColumns(); + if (localColumns == null) + localColumns = new String[] { IDebugVMConstants.COLUMN_ID__NAME }; + + for (int idx = 0; idx < localColumns.length; idx++) { + if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) { + /* + * This used to be easy in that the DMC contained the name. Which allowed us + * to display the register name and an error message across from it. Now that + * name must come from the data and we could not retrieve the data we do not + * have anything intelligent to show here. I think this is going to look very + * ugly and will need to be worked on. We know the service has the name with + * it, it is just the dynamic part which cannot be obtained ( as explained in + * comments above ). + */ + update.setLabel("Unknown name", idx); //$NON-NLS-1$ + update.setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_OBJS_REGISTER), idx); + } else if (IDebugVMConstants.COLUMN_ID__TYPE.equals(localColumns[idx])) { + update.setLabel("", idx); //$NON-NLS-1$ + } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) { + if (getStatus().getCode() == IDsfStatusConstants.INVALID_STATE) { + update.setLabel("...", idx); //$NON-NLS-1$ + } else { + update.setLabel("Error: " + getStatus().getMessage(), idx); //$NON-NLS-1$ + } + } else if (IDebugVMConstants.COLUMN_ID__DESCRIPTION.equals(localColumns[idx])) { + update.setLabel("...", idx); //$NON-NLS-1$ + } else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) { + update.setLabel("", idx); //$NON-NLS-1$ + } + + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); + } + + update.done(); return; } @@ -310,6 +359,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode boolean weAreExtractingFormattedData = false; for (int idx = 0; idx < localColumns.length; idx++) { + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); if (IDebugVMConstants.COLUMN_ID__NAME.equals(localColumns[idx])) { update.setLabel(getData().getName(), idx); update.setImageDescriptor(DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_OBJS_REGISTER), idx); diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/variable/VariableVMNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/variable/VariableVMNode.java index d3a923c03d8..924aa52b57e 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/variable/VariableVMNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/internal/provisional/ui/viewmodel/variable/VariableVMNode.java @@ -58,6 +58,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.debug.ui.actions.IWatchExpressionFactoryAdapter2; +import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ICellModifier; @@ -254,8 +255,10 @@ public class VariableVMNode extends AbstractExpressionVMNode } else if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(localColumns[idx])) { update.setLabel(dmc.getExpression(), idx); } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); } + update.done(); return; } @@ -290,6 +293,7 @@ public class VariableVMNode extends AbstractExpressionVMNode update.setLabel(getData().getName(), idx); } } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); } if ( ! weAreExtractingFormattedData ) { @@ -299,6 +303,7 @@ public class VariableVMNode extends AbstractExpressionVMNode if (IDebugVMConstants.COLUMN_ID__VALUE.equals(localColumns[idx])) { updateFormattedExpressionValue(update, idx, dmc, getData()); } + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], idx); } } } @@ -331,7 +336,9 @@ public class VariableVMNode extends AbstractExpressionVMNode @Override public void handleCompleted() { if (!isSuccess()) { - handleFailedUpdate(update); + update.setLabel("Format information not available", labelIndex); + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); + update.done(); return; } @@ -381,7 +388,9 @@ public class VariableVMNode extends AbstractExpressionVMNode @Override public void handleCompleted() { if (!isSuccess()) { - handleFailedUpdate(update); + update.setLabel("Error : " + getStatus().getMessage(), labelIndex); + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); + update.done(); return; } @@ -396,6 +405,7 @@ public class VariableVMNode extends AbstractExpressionVMNode } update.setLabel(stringValueBuf.toString(), labelIndex);*/ update.setLabel(getData().getFormattedValue(), labelIndex); + update.setFontData(JFaceResources.getFontDescriptor(IInternalDebugUIConstants.VARIABLE_TEXT_FONT).getFontData()[0], labelIndex); // Color based on change history FormattedValueDMData oldData = (FormattedValueDMData) getDMVMProvider().getArchivedModelData(