mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +02:00
Bug 373468 - "Add new expression" node in Expressions view disappears when Expression column is deselected
This commit is contained in:
parent
b7c28d5878
commit
df5940c5fa
2 changed files with 67 additions and 16 deletions
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
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) &&
|
return IDebugVMConstants.COLUMN_ID__EXPRESSION.equals(property) &&
|
||||||
(getWatchExpression(element) != null || element instanceof NewExpressionVMC);
|
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue