1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 06:02:11 +02:00

Bug 373468 - "Add new expression" node in Expressions view disappears when Expression column is deselected

This commit is contained in:
Pawel Piech 2012-04-12 15:26:24 -07:00
parent b7c28d5878
commit df5940c5fa
2 changed files with 67 additions and 16 deletions

View file

@ -10,6 +10,7 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.dsf.debug.ui.viewmodel.expression; package org.eclipse.cdt.dsf.debug.ui.viewmodel.expression;
import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -25,7 +26,6 @@ import org.eclipse.cdt.dsf.ui.viewmodel.VMDelta;
import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IExpressionManager; import org.eclipse.debug.core.IExpressionManager;
import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.core.model.IExpression;
import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; 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.IElementEditor;
@ -37,6 +37,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationCont
import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.TextCellEditor;
@ -124,7 +125,12 @@ public class ExpressionManagerVMNode extends AbstractVMNode
// local state data, so we don't bother using a job to perform this // local state data, so we don't bother using a job to perform this
// operation. // operation.
for (int i = 0; i < updates.length; i++) { for (int i = 0; i < updates.length; i++) {
updates[i].setHasChilren(fManager.getExpressions().length != 0); boolean hasChildren = fManager.getExpressions().length != 0;
if (!hasChildren && updates[i].getPresentationContext().getColumns() != null) {
hasChildren = true;
}
updates[i].setHasChilren(hasChildren);
updates[i].done(); updates[i].done();
} }
} }
@ -136,7 +142,14 @@ public class ExpressionManagerVMNode extends AbstractVMNode
// We assume that the getExpressions() will just read local state data, // We assume that the getExpressions() will just read local state data,
// so we don't bother using a job to perform this operation. // so we don't bother using a job to perform this operation.
update.setChildCount(fManager.getExpressions().length + 1); int count = fManager.getExpressions().length;
// Account for "Add New Expression" element
if (update.getPresentationContext().getColumns() != null) {
count += 1;
}
update.setChildCount(count);
update.done(); update.done();
} }
} }
@ -168,7 +181,12 @@ public class ExpressionManagerVMNode extends AbstractVMNode
length = expressions.length; length = expressions.length;
} }
final int highOffset= lowOffset + length; final int highOffset= lowOffset + length;
for (int i = lowOffset; i < highOffset && i < expressions.length + 1; i++) { // If columns are present, add the "Add New Expression" element.
int expressionsLength = expressions.length;
if (update.getPresentationContext().getColumns() != null) {
expressionsLength += 1;
}
for (int i = lowOffset; i < highOffset && i < expressionsLength; i++) {
if (i < expressions.length) { if (i < expressions.length) {
multiRmCount++; multiRmCount++;
final int childIndex = i; final int childIndex = i;
@ -225,22 +243,26 @@ public class ExpressionManagerVMNode extends AbstractVMNode
*/ */
private void updateNewExpressionVMCLabel(ILabelUpdate update, NewExpressionVMC vmc) { private void updateNewExpressionVMCLabel(ILabelUpdate update, NewExpressionVMC vmc) {
String[] columnIds = update.getColumnIds() != null ? String[] columnIds = update.getColumnIds() != null ?
update.getColumnIds() : new String[] { IDebugVMConstants.COLUMN_ID__NAME }; update.getColumnIds() : new String[0];
for (int i = 0; i < columnIds.length; i++) { for (int i = 0; i < columnIds.length; i++) {
if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(columnIds[i])) { // Bug 373468: show "Add New Expression" label in name column if
// expression column is not shown.
if ( IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(columnIds[i]) ||
(IDebugVMConstants.COLUMN_ID__NAME.equals(columnIds[i]) &&
!Arrays.asList(columnIds).contains(IDebugVMConstants.COLUMN_ID__EXPRESSION)) )
{
update.setLabel(MessagesForExpressionVM.ExpressionManagerLayoutNode__newExpression_label, i); update.setLabel(MessagesForExpressionVM.ExpressionManagerLayoutNode__newExpression_label, i);
// TODO: replace with an API image consant after bug 313828 is addressed. update.setImageDescriptor(DebugUITools.getImageDescriptor(IDebugUIConstants.IMG_LCL_ADD), i);
update.setImageDescriptor(DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_LCL_MONITOR_EXPRESSION), i);
FontData fontData = JFaceResources.getFontDescriptor(IDebugUIConstants.PREF_VARIABLE_TEXT_FONT).getFontData()[0]; FontData fontData = JFaceResources.getFontDescriptor(IDebugUIConstants.PREF_VARIABLE_TEXT_FONT).getFontData()[0];
fontData.setStyle(SWT.ITALIC); // Bugzilla 287598: Distinguish 'Add new expression' entry from actual expressions // Bugzilla 287598: Distinguish 'Add new expression' entry from actual expressions
fontData.setStyle(SWT.ITALIC);
update.setFontData(fontData, i); update.setFontData(fontData, i);
} else { } else {
update.setLabel("", i); //$NON-NLS-1$ update.setLabel("", i); //$NON-NLS-1$
} }
} }
update.done(); update.done();
} }
@ -253,6 +275,12 @@ public class ExpressionManagerVMNode extends AbstractVMNode
retVal |= IModelDelta.ADDED | IModelDelta.REMOVED | IModelDelta.INSERTED | IModelDelta.CONTENT ; retVal |= IModelDelta.ADDED | IModelDelta.REMOVED | IModelDelta.INSERTED | IModelDelta.CONTENT ;
} }
if ( event instanceof PropertyChangeEvent &&
IPresentationContext.PROPERTY_COLUMNS.equals(((PropertyChangeEvent)event).getProperty()) )
{
retVal |= IModelDelta.CONTENT;
}
for (IExpression expression : fManager.getExpressions()) { for (IExpression expression : fManager.getExpressions()) {
retVal |= getExpressionVMProvider().getDeltaFlagsForExpression(expression, event); retVal |= getExpressionVMProvider().getDeltaFlagsForExpression(expression, event);
} }
@ -264,7 +292,14 @@ public class ExpressionManagerVMNode extends AbstractVMNode
public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) { public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) {
if (event instanceof ExpressionsChangedEvent) { if (event instanceof ExpressionsChangedEvent) {
buildDeltaForExpressionsChangedEvent((ExpressionsChangedEvent)event, parentDelta, nodeOffset, requestMonitor); buildDeltaForExpressionsChangedEvent((ExpressionsChangedEvent)event, parentDelta, nodeOffset, requestMonitor);
} else { }
else if ( event instanceof PropertyChangeEvent &&
IPresentationContext.PROPERTY_COLUMNS.equals(((PropertyChangeEvent)event).getProperty()) )
{
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
requestMonitor.done();
}
else {
// For each expression, find its corresponding node and ask that // For each expression, find its corresponding node and ask that
// layout node for its delta flags for given event. If there are delta flags to be // layout node for its delta flags for given event. If there are delta flags to be
@ -322,7 +357,10 @@ public class ExpressionManagerVMNode extends AbstractVMNode
*/ */
@Override @Override
public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) { public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) {
if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(columnId)) { if (IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(columnId) ||
(IDebugVMConstants.COLUMN_ID__NAME.equals(columnId) &&
!Arrays.asList(context.getColumns()).contains(IDebugVMConstants.COLUMN_ID__EXPRESSION)) )
{
return new TextCellEditor(parent); return new TextCellEditor(parent);
} }
return null; return null;

View file

@ -55,13 +55,22 @@ public class WatchExpressionCellModifier implements ICellModifier {
@Override @Override
public boolean canModify(Object element, String property) { public boolean canModify(Object element, String property) {
return IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) && if (element instanceof NewExpressionVMC) {
(getWatchExpression(element) != null || element instanceof NewExpressionVMC); return IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) ||
IDebugVMConstants.COLUMN_ID__NAME.equals(property);
} else {
return IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) &&
getWatchExpression(element) != null;
}
} }
@Override @Override
public Object getValue(Object element, String property) { public Object getValue(Object element, String property) {
if (!IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property)) return ""; //$NON-NLS-1$ if (!IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) &&
!IDebugVMConstants.COLUMN_ID__NAME.equals(property))
{
return ""; //$NON-NLS-1$
}
IWatchExpression expression = getWatchExpression(element); IWatchExpression expression = getWatchExpression(element);
@ -73,7 +82,11 @@ public class WatchExpressionCellModifier implements ICellModifier {
@Override @Override
public void modify(Object element, String property, Object value) { public void modify(Object element, String property, Object value) {
if (!IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property)) return; if (!IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) &&
!IDebugVMConstants.COLUMN_ID__NAME.equals(property))
{
return;
}
if (!(value instanceof String)) return; if (!(value instanceof String)) return;
String origStrValue = (String) value; String origStrValue = (String) value;