1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 01:15:29 +02:00

[218847] Create a DataModelInitialized event, to properly initialize selection in Debug view

This commit is contained in:
Marc Khouzam 2009-04-21 14:51:39 +00:00
parent ed7fb8c287
commit 795dbe40e0
5 changed files with 63 additions and 8 deletions

View file

@ -19,6 +19,7 @@ import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Sequence;
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContext;
import org.eclipse.cdt.dsf.debug.service.ISourceLookup.ISourceLookupDMContext;
@ -509,6 +510,17 @@ public class FinalLaunchSequence extends Sequence {
}
}
},
/*
* Indicate that the Data Model has been filled. This will trigger the Debug view to expand.
*/
new Step() {
@Override
public void execute(final RequestMonitor requestMonitor) {
fLaunch.getSession().dispatchEvent(new DataModelInitializedEvent(fCommandControl.getContext()),
fCommandControl.getProperties());
requestMonitor.done();
}
},
/*
* Cleanup
*/

View file

@ -20,6 +20,7 @@ import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.datamodel.IDMEvent;
import org.eclipse.cdt.dsf.debug.service.IRunControl;
@ -243,7 +244,7 @@ public abstract class AbstractThreadVMNode extends AbstractDMVMNode
rm.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfStatusConstants.NOT_SUPPORTED, "", null)); //$NON-NLS-1$
rm.done();
return;
} else if (e instanceof ModelProxyInstalledEvent) {
} else if (e instanceof ModelProxyInstalledEvent || e instanceof DataModelInitializedEvent) {
getThreadVMCForModelProxyInstallEvent(
parentDelta,
new DataRequestMonitor<VMContextInfo>(getExecutor(), rm) {
@ -339,7 +340,7 @@ public abstract class AbstractThreadVMNode extends AbstractDMVMNode
return IModelDelta.CONTENT;
} else if (e instanceof SteppingTimedOutEvent) {
return IModelDelta.CONTENT;
} else if (e instanceof ModelProxyInstalledEvent) {
} else if (e instanceof ModelProxyInstalledEvent || e instanceof DataModelInitializedEvent) {
return IModelDelta.SELECT | IModelDelta.EXPAND;
}
return IModelDelta.NO_CHANGE;
@ -382,7 +383,7 @@ public abstract class AbstractThreadVMNode extends AbstractDMVMNode
// the user that the program is running.
parentDelta.addNode(createVMContext(dmc), IModelDelta.CONTENT);
rm.done();
} else if (e instanceof ModelProxyInstalledEvent) {
} else if (e instanceof ModelProxyInstalledEvent || e instanceof DataModelInitializedEvent) {
// Model Proxy install event is generated when the model is first
// populated into the view. This happens when a new debug session
// is started or when the view is first opened.

View file

@ -15,6 +15,7 @@ import java.util.List;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin;
import org.eclipse.cdt.dsf.ui.viewmodel.AbstractVMProvider;
import org.eclipse.cdt.dsf.ui.viewmodel.IRootVMNode;
@ -73,7 +74,10 @@ public class LaunchRootVMNode extends RootVMNode
{
return false;
}
} else if (e instanceof DataModelInitializedEvent) {
return true;
}
return super.isDeltaEvent(rootObject, e);
}
@ -85,6 +89,8 @@ public class LaunchRootVMNode extends RootVMNode
if (le.fType == LaunchesEvent.Type.CHANGED || le.fType == LaunchesEvent.Type.TERMINATED) {
flags = IModelDelta.STATE | IModelDelta.CONTENT;
}
} else if (e instanceof DataModelInitializedEvent) {
flags = IModelDelta.EXPAND | IModelDelta.CONTENT;
}
return flags;
@ -121,8 +127,9 @@ public class LaunchRootVMNode extends RootVMNode
}
}
}
}
} else if (event instanceof DataModelInitializedEvent) {
rootDelta.setFlags(rootDelta.getFlags() | IModelDelta.EXPAND | IModelDelta.CONTENT);
}
rm.setData(rootDelta);
rm.done();
}

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl;
import org.eclipse.cdt.dsf.debug.service.IStack;
@ -509,7 +510,7 @@ public class StackFramesVMNode extends AbstractDMVMNode
*/
@Override
public void getContextsForEvent(final VMDelta parentDelta, Object e, final DataRequestMonitor<IVMContext[]> rm) {
if (e instanceof ModelProxyInstalledEvent) {
if (e instanceof ModelProxyInstalledEvent || e instanceof DataModelInitializedEvent) {
// Retrieve the list of stack frames, and mark the top frame to be selected.
getVMProvider().updateNode(
this,
@ -546,7 +547,7 @@ public class StackFramesVMNode extends AbstractDMVMNode
return IModelDelta.CONTENT | IModelDelta.EXPAND;
} else if (e instanceof SteppingTimedOutEvent) {
return IModelDelta.CONTENT;
} else if (e instanceof ModelProxyInstalledEvent) {
} else if (e instanceof ModelProxyInstalledEvent || e instanceof DataModelInitializedEvent) {
return IModelDelta.SELECT | IModelDelta.EXPAND;
} else if (e instanceof ExpandStackEvent) {
return IModelDelta.CONTENT;
@ -598,7 +599,7 @@ public class StackFramesVMNode extends AbstractDMVMNode
buildDeltaForSuspendedEvent(execDmc, execDmc, parent, nodeOffset, rm);
} else if (e instanceof SteppingTimedOutEvent) {
buildDeltaForSteppingTimedOutEvent((SteppingTimedOutEvent)e, parent, nodeOffset, rm);
} else if (e instanceof ModelProxyInstalledEvent) {
} else if (e instanceof ModelProxyInstalledEvent || e instanceof DataModelInitializedEvent) {
buildDeltaForModelProxyInstalledEvent(parent, nodeOffset, rm);
} else if (e instanceof ExpandStackEvent) {
IExecutionDMContext execDmc = ((ExpandStackEvent)e).getDMContext();

View file

@ -0,0 +1,34 @@
/*******************************************************************************
* Copyright (c) 2009 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.datamodel;
/**
* An event to signal the initial availability of the data model.
*
* @since 2.0
*/
public class DataModelInitializedEvent extends AbstractDMEvent<IDMContext> {
/**
* Create an event for the given data model context.
* The context should represent the root of the data model hierarchy.
*
* <p>
* Clients may instantiate and subclass.
* </p>
*
* @param context the data model context
*/
public DataModelInitializedEvent(IDMContext context) {
super(context);
}
}