Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2012-04-12 22:26:24 +0000
committerPawel Piech2012-04-12 22:27:38 +0000
commitdf5940c5fae1887ea7780c3a1b17b5593ff491e6 (patch)
treeaa7d2e8613a243247ca43764fa763e0f2290f758
parentb7c28d587867f3a90205d7d27c559bb463681073 (diff)
downloadorg.eclipse.cdt-df5940c5fae1887ea7780c3a1b17b5593ff491e6.tar.gz
org.eclipse.cdt-df5940c5fae1887ea7780c3a1b17b5593ff491e6.tar.xz
org.eclipse.cdt-df5940c5fae1887ea7780c3a1b17b5593ff491e6.zip
Bug 373468 - "Add new expression" node in Expressions view disappears when Expression column is deselected
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/ExpressionManagerVMNode.java62
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/WatchExpressionCellModifier.java21
2 files changed, 67 insertions, 16 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 a5098e6059f..7061cbe5d13 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
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.debug.ui.viewmodel.expression;
+import java.util.Arrays;
import java.util.LinkedList;
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.IExpressionManager;
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.IChildrenUpdate;
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.IDebugUIConstants;
import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ICellModifier;
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
// operation.
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();
}
}
@@ -136,7 +142,14 @@ public class ExpressionManagerVMNode extends AbstractVMNode
// We assume that the getExpressions() will just read local state data,
// 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();
}
}
@@ -168,7 +181,12 @@ public class ExpressionManagerVMNode extends AbstractVMNode
length = expressions.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) {
multiRmCount++;
final int childIndex = i;
@@ -225,22 +243,26 @@ public class ExpressionManagerVMNode extends AbstractVMNode
*/
private void updateNewExpressionVMCLabel(ILabelUpdate update, NewExpressionVMC vmc) {
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++) {
- 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);
- // TODO: replace with an API image consant after bug 313828 is addressed.
- update.setImageDescriptor(DebugUITools.getImageDescriptor(IInternalDebugUIConstants.IMG_LCL_MONITOR_EXPRESSION), i);
+ update.setImageDescriptor(DebugUITools.getImageDescriptor(IDebugUIConstants.IMG_LCL_ADD), i);
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);
} else {
update.setLabel("", i); //$NON-NLS-1$
}
}
-
update.done();
}
@@ -253,6 +275,12 @@ public class ExpressionManagerVMNode extends AbstractVMNode
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()) {
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) {
if (event instanceof ExpressionsChangedEvent) {
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
// 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
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 null;
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/WatchExpressionCellModifier.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/WatchExpressionCellModifier.java
index e027284a04c..71f792b4481 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/WatchExpressionCellModifier.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/expression/WatchExpressionCellModifier.java
@@ -55,13 +55,22 @@ public class WatchExpressionCellModifier implements ICellModifier {
@Override
public boolean canModify(Object element, String property) {
- return IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) &&
- (getWatchExpression(element) != null || element instanceof NewExpressionVMC);
+ if (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
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);
@@ -73,7 +82,11 @@ public class WatchExpressionCellModifier implements ICellModifier {
@Override
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;
String origStrValue = (String) value;

Back to the top