1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[250226] - [expressions] Removing an expression in expressions view can collapse other expanded expressions.

This commit is contained in:
Pawel Piech 2008-10-09 05:08:43 +00:00
parent 57deb09291
commit 568c4e705a
2 changed files with 73 additions and 27 deletions

View file

@ -17,7 +17,6 @@ import org.eclipse.dd.dsf.concurrent.CountingRequestMonitor;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.IDebugVMConstants;
import org.eclipse.dd.dsf.debug.internal.provisional.ui.viewmodel.expression.ExpressionVMProvider.ExpressionsChangedEvent;
import org.eclipse.dd.dsf.ui.concurrent.ViewerCountingRequestMonitor;
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMContext;
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMNode;
@ -291,7 +290,7 @@ public class ExpressionManagerVMNode extends AbstractVMNode
// Add a flag if the list of expressions in the global expression manager has changed.
if (event instanceof ExpressionsChangedEvent) {
retVal |= IModelDelta.CONTENT;
retVal |= IModelDelta.ADDED | IModelDelta.REMOVED | IModelDelta.INSERTED | IModelDelta.CONTENT ;
}
for (IExpression expression : fManager.getExpressions()) {
@ -302,12 +301,11 @@ public class ExpressionManagerVMNode extends AbstractVMNode
}
public void buildDelta(final Object event, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor requestMonitor) {
// Add a flag if the list of expressions has changed.
if (event instanceof ExpressionsChangedEvent) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
}
buildDeltaForExpressionsChangedEvent((ExpressionsChangedEvent)event, parentDelta, nodeOffset, requestMonitor);
} else {
// Once again, 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
// generated, call the asynchronous method to do so.
CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), requestMonitor);
@ -329,6 +327,22 @@ public class ExpressionManagerVMNode extends AbstractVMNode
multiRm.setDoneCount(buildDeltaForExpressionCallCount);
}
}
private void buildDeltaForExpressionsChangedEvent(ExpressionsChangedEvent event, VMDelta parentDelta,
int nodeOffset, RequestMonitor requestMonitor)
{
CountingRequestMonitor multiRm = new CountingRequestMonitor(getExecutor(), requestMonitor);
for (int i = 0; i < event.getExpressions().length; i++) {
int expIndex = event.getIndex() != -1
? nodeOffset + event.getIndex() + i
: -1;
getExpressionVMProvider().buildDeltaForExpression(
event.getExpressions()[i], expIndex, event, parentDelta, getTreePathFromDelta(parentDelta),
new RequestMonitor(getExecutor(), multiRm));
}
multiRm.setDoneCount(event.getExpressions().length);
}
private TreePath getTreePathFromDelta(IModelDelta delta) {
List<Object> elementList = new LinkedList<Object>();

View file

@ -92,7 +92,7 @@ public class ExpressionVMProviderModelProxyStrategy extends DefaultVMModelProxyS
@Override
protected void handleSuccess() {
buildDeltaForExpressionElement(
node, getData(), expressionElementIdx, event, parentDelta, path, rm);
node, expression, getData(), expressionElementIdx, event, parentDelta, path, rm);
}
@Override
@ -107,9 +107,9 @@ public class ExpressionVMProviderModelProxyStrategy extends DefaultVMModelProxyS
});
}
private void buildDeltaForExpressionElement(final IExpressionVMNode node, Object expressionElement,
final int expressionElementIdx, final Object event, final VMDelta parentDelta, final TreePath path,
final RequestMonitor rm)
private void buildDeltaForExpressionElement(IExpressionVMNode node, IExpression expression, Object expressionElement,
int expressionElementIdx, Object event, VMDelta parentDelta, TreePath path, RequestMonitor rm)
{
CountingRequestMonitor multiRm = new CountingRequestMonitor(getVMProvider().getExecutor(), rm);
int multiRmCount = 0;
@ -129,6 +129,38 @@ public class ExpressionVMProviderModelProxyStrategy extends DefaultVMModelProxyS
multiRmCount++;
}
if (event instanceof ExpressionsChangedEvent) {
buildDeltaForExpressionsChangedEvent(expressionElement, expressionElementIdx,
(ExpressionsChangedEvent)event, parentDelta, multiRm);
multiRmCount++;
}
multiRm.setDoneCount(multiRmCount);
}
private void buildDeltaForExpressionsChangedEvent(Object element, int elementIdx, ExpressionsChangedEvent event,
VMDelta parentDelta, final RequestMonitor rm)
{
switch (event.getType()) {
case ADDED:
parentDelta.addNode(element, -1, IModelDelta.ADDED);
break;
case CHANGED:
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
break;
case MOVED:
parentDelta.addNode(element, -1, IModelDelta.REMOVED);
parentDelta.addNode(element, elementIdx, IModelDelta.INSERTED);
break;
case REMOVED:
parentDelta.addNode(element, -1, IModelDelta.REMOVED);
break;
case INSERTED:
parentDelta.addNode(element, elementIdx, IModelDelta.INSERTED);
break;
default:
break;
}
rm.done();
}
}