mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 18:26:01 +02:00
Fixed the IndexView to handle added and removed projects.
This commit is contained in:
parent
c27a51479b
commit
4aa85cde22
1 changed files with 64 additions and 3 deletions
|
@ -23,8 +23,12 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
import org.eclipse.cdt.core.model.ICModel;
|
import org.eclipse.cdt.core.model.ICModel;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||||
|
@ -67,7 +71,7 @@ import org.eclipse.ui.part.ViewPart;
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class IndexView extends ViewPart implements PDOM.IListener {
|
public class IndexView extends ViewPart implements PDOM.IListener, IElementChangedListener {
|
||||||
|
|
||||||
private TreeViewer viewer;
|
private TreeViewer viewer;
|
||||||
// private DrillDownAdapter drillDownAdapter;
|
// private DrillDownAdapter drillDownAdapter;
|
||||||
|
@ -249,7 +253,13 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
try {
|
try {
|
||||||
if (inputElement instanceof ICModel) {
|
if (inputElement instanceof ICModel) {
|
||||||
ICModel model = (ICModel)inputElement;
|
ICModel model = (ICModel)inputElement;
|
||||||
return model.getCProjects();
|
ICProject[] projects = model.getCProjects();
|
||||||
|
for (int i = 0; i < projects.length; ++i) {
|
||||||
|
ICProject project = projects[i];
|
||||||
|
if (project.getUnderlyingResource().isPhantom())
|
||||||
|
System.out.println(project.getElementName() + " is phantom");
|
||||||
|
}
|
||||||
|
return projects;
|
||||||
}
|
}
|
||||||
} catch (CModelException e) {
|
} catch (CModelException e) {
|
||||||
CUIPlugin.getDefault().log(e);
|
CUIPlugin.getDefault().log(e);
|
||||||
|
@ -334,6 +344,7 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
CUIPlugin.getDefault().log(e);
|
CUIPlugin.getDefault().log(e);
|
||||||
}
|
}
|
||||||
|
CoreModel.getDefault().addElementChangedListener(this);
|
||||||
|
|
||||||
makeActions();
|
makeActions();
|
||||||
hookContextMenu();
|
hookContextMenu();
|
||||||
|
@ -357,13 +368,28 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
getSite().registerContextMenu(menuMgr, viewer);
|
getSite().registerContextMenu(menuMgr, viewer);
|
||||||
|
|
||||||
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
|
||||||
|
|
||||||
public void selectionChanged(SelectionChangedEvent event) {
|
public void selectionChanged(SelectionChangedEvent event) {
|
||||||
handleSelectionChanged(event);
|
handleSelectionChanged(event);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
ICModel model = CoreModel.getDefault().getCModel();
|
||||||
|
try {
|
||||||
|
ICProject[] projects = model.getCProjects();
|
||||||
|
for (int i = 0; i < projects.length; ++i) {
|
||||||
|
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(projects[i]);
|
||||||
|
pdom.removeListener(this);
|
||||||
|
}
|
||||||
|
viewer.setChildCount(model, projects.length);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CUIPlugin.getDefault().log(e);
|
||||||
|
}
|
||||||
|
CoreModel.getDefault().removeElementChangedListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
private void makeActions() {
|
private void makeActions() {
|
||||||
rebuildAction = new RebuildIndexAction(viewer);
|
rebuildAction = new RebuildIndexAction(viewer);
|
||||||
countSymbolsAction = new CountNodeAction(viewer);
|
countSymbolsAction = new CountNodeAction(viewer);
|
||||||
|
@ -450,5 +476,40 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void elementChanged(ElementChangedEvent event) {
|
||||||
|
// Only respond to post change events
|
||||||
|
if (event.getType() != ElementChangedEvent.POST_CHANGE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// TODO we'll get fancier when we do a virtual tree.
|
||||||
|
processDelta(event.getDelta());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processDelta(ICElementDelta delta) {
|
||||||
|
int type = delta.getElement().getElementType();
|
||||||
|
switch (type) {
|
||||||
|
case ICElement.C_MODEL:
|
||||||
|
// Loop through the children
|
||||||
|
ICElementDelta[] children = delta.getAffectedChildren();
|
||||||
|
for (int i = 0; i < children.length; ++i)
|
||||||
|
processDelta(children[i]);
|
||||||
|
break;
|
||||||
|
case ICElement.C_PROJECT:
|
||||||
|
switch (delta.getKind()) {
|
||||||
|
case ICElementDelta.ADDED:
|
||||||
|
try {
|
||||||
|
PDOM pdom = ((PDOM)CCorePlugin.getPDOMManager().getPDOM((ICProject)delta.getElement()));
|
||||||
|
pdom.addListener(this);
|
||||||
|
handleChange(pdom);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ICElementDelta.REMOVED:
|
||||||
|
handleChange(null);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue