1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-13 19:25:38 +02:00

Type Hierarchy: mark selected member in hierarchy.

This commit is contained in:
Markus Schorn 2007-01-25 14:22:20 +00:00
parent df85b0a70c
commit 65af5a4620
13 changed files with 283 additions and 145 deletions

View file

@ -122,7 +122,7 @@ public class TypeHierarchyBaseTest extends BaseUITestCase {
runEventQueue(10);
}
assertNotNull(th);
return th.getMethodViewer();
return th.getMemberViewer();
}
protected TreeItem checkTreeNode(Tree tree, int i0, String label) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

View file

@ -232,6 +232,7 @@ public class CPluginImages {
public static final ImageDescriptor DESC_OVR_REC_RELATESTO= create(T_OVR, "rec_relatesto_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_REC_REFERENCEDBY= create(T_OVR, "rec_referencedby_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_SYSTEM_INCLUDE= create(T_OVR, "systeminclude_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_DEFINES= create(T_OVR, "defines_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_WARNING= create(T_OVR, "warning_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_ERROR= create(T_OVR, "error_co.gif"); //$NON-NLS-1$

View file

@ -39,7 +39,7 @@ import org.eclipse.cdt.internal.core.model.ext.ICElementHandle;
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
class THGraph {
private static final Object[] NO_MEMBERS = new Object[0];
private static final ICElement[] NO_MEMBERS = new ICElement[0];
private THGraphNode fInputNode= null;
private HashSet fRootNodes= new HashSet();
private HashSet fLeaveNodes= new HashSet();
@ -252,31 +252,29 @@ class THGraph {
private void addMembers(IIndex index, THGraphNode graphNode, IBinding binding) throws DOMException, CoreException {
if (graphNode.getMembers(false) == null) {
ArrayList memberList= new ArrayList();
if (binding instanceof ICPPClassType) {
ICPPClassType ct= (ICPPClassType) binding;
ArrayList memberList= new ArrayList();
IBinding[] members= ct.getDeclaredFields();
addMemberElements(index, members, memberList);
members= ct.getDeclaredMethods();
addMemberElements(index, members, memberList);
graphNode.setMembers(memberList.toArray());
}
else if (binding instanceof ICompositeType) {
ICompositeType ct= (ICompositeType) binding;
ArrayList memberList= new ArrayList();
IBinding[] members= ct.getFields();
addMemberElements(index, members, memberList);
graphNode.setMembers(memberList.toArray());
}
else if (binding instanceof IEnumeration) {
IEnumeration ct= (IEnumeration) binding;
ArrayList memberList= new ArrayList();
IBinding[] members= ct.getEnumerators();
addMemberElements(index, members, memberList);
graphNode.setMembers(memberList.toArray());
}
if (memberList.isEmpty()) {
graphNode.setMembers(NO_MEMBERS);
}
else {
graphNode.setMembers(NO_MEMBERS);
graphNode.setMembers((ICElement[]) memberList.toArray(new ICElement[memberList.size()]));
}
}
}

View file

@ -24,7 +24,7 @@ class THGraphNode {
private List fOutgoing= Collections.EMPTY_LIST;
private List fIncoming= Collections.EMPTY_LIST;
private ICElement fElement;
private Object[] fMembers= null;
private ICElement[] fMembers= null;
THGraphNode(ICElement element) {
fElement= element;
@ -63,17 +63,17 @@ class THGraphNode {
return fIncoming;
}
public void setMembers(Object[] array) {
public void setMembers(ICElement[] array) {
fMembers= array;
}
public Object[] getMembers(boolean addInherited) {
public ICElement[] getMembers(boolean addInherited) {
if (!addInherited) {
return fMembers;
}
ArrayList list= new ArrayList();
collectMembers(new HashSet(), list);
return list.toArray();
return (ICElement[]) list.toArray(new ICElement[list.size()]);
}
private void collectMembers(HashSet visited, List list) {

View file

@ -58,9 +58,11 @@ class THHierarchyModel {
private boolean fShowInheritedMembers;
private THGraph fGraph;
private Object[] fRootNodes;
private THNode fHierarchySelection;
private ICElement fHierarchySelectionToRestore;
private THNode[] fRootNodes;
private THNode fSelectedTypeNode;
private ICElement fTypeToSelect;
private ICElement fSelectedMember;
private String fMemberSignatureToSelect;
private Job fJob;
private Display fDisplay;
@ -90,6 +92,8 @@ class THHierarchyModel {
public void setShowInheritedMembers(boolean showInheritedMembers) {
fShowInheritedMembers = showInheritedMembers;
computeSelectedMember();
updateImplementors();
}
public Object[] getHierarchyRootElements() {
@ -107,8 +111,8 @@ class THHierarchyModel {
stopGraphComputation();
fInput= input;
fRootNodes= null;
fHierarchySelection= null;
fHierarchySelectionToRestore= input;
fSelectedTypeNode= null;
fTypeToSelect= input;
}
synchronized public void computeGraph() {
@ -198,7 +202,7 @@ class THHierarchyModel {
while(!stack.isEmpty()) {
THNode node= (THNode) stack.remove(stack.size()-1);
THGraphNode gnode= fGraph.getNode(node.getRepresentedDeclaration());
THGraphNode gnode= fGraph.getNode(node.getElement());
List edges= fwd ? gnode.getOutgoing() : gnode.getIncoming();
if (edges.isEmpty()) {
leaves.add(node);
@ -213,25 +217,53 @@ class THHierarchyModel {
}
}
}
fHierarchySelection= newSelection[0];
if (fHierarchySelection == null) {
fHierarchySelection= newSelection[1];
fSelectedTypeNode= newSelection[0];
if (fSelectedTypeNode == null) {
fSelectedTypeNode= newSelection[1];
}
if (fHierarchySelection != null) {
fHierarchySelectionToRestore= fHierarchySelection.getRepresentedDeclaration();
if (fSelectedTypeNode != null) {
fTypeToSelect= fSelectedTypeNode.getElement();
computeSelectedMember();
}
fRootNodes= roots.toArray();
fRootNodes= (THNode[]) roots.toArray(new THNode[roots.size()]);
updateImplementors();
}
private void computeSelectedMember() {
ICElement oldSelection= fSelectedMember;
fSelectedMember= null;
if (fSelectedTypeNode != null && fMemberSignatureToSelect != null) {
THGraphNode gnode= fGraph.getNode(fSelectedTypeNode.getElement());
if (gnode != null) {
ICElement[] members= gnode.getMembers(fShowInheritedMembers);
for (int i = 0; i < members.length; i++) {
ICElement member= members[i];
if (member.equals(oldSelection)) {
fSelectedMember= member;
return;
}
}
for (int i = 0; i < members.length; i++) {
ICElement member= members[i];
if (fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
fSelectedMember= member;
return;
}
}
}
}
}
private THNode createNode(THNode[] newSelection, THNode parent, THGraphNode gnode) {
ICElement element = gnode.getElement();
THNode node= new THNode(parent, element);
if (newSelection[0] == null) {
if (node.equals(fHierarchySelection)) {
if (node.equals(fSelectedTypeNode)) {
newSelection[0]= node;
}
else if (newSelection[1] == null) {
if (element.equals(fHierarchySelectionToRestore)) {
if (element.equals(fTypeToSelect)) {
newSelection[1]= node;
}
}
@ -250,8 +282,8 @@ class THHierarchyModel {
fView.setMessage(Messages.THHierarchyModel_errorComputingHierarchy);
}
else {
if (fHierarchySelectionToRestore == fInput) {
fHierarchySelectionToRestore= inputNode.getElement();
if (fTypeToSelect == fInput) {
fTypeToSelect= inputNode.getElement();
}
fInput= inputNode.getElement();
}
@ -275,19 +307,21 @@ class THHierarchyModel {
}
public THNode getSelectionInHierarchy() {
return fHierarchySelection;
return fSelectedTypeNode;
}
public void onHierarchySelectionChanged(THNode node) {
fHierarchySelection= node;
fSelectedTypeNode= node;
if (node != null) {
fHierarchySelectionToRestore= node.getRepresentedDeclaration();
fTypeToSelect= node.getElement();
}
computeSelectedMember();
updateImplementors();
}
public Object[] getMembers() {
if (fHierarchySelection != null) {
THGraphNode gnode= fGraph.getNode(fHierarchySelection.getRepresentedDeclaration());
if (fSelectedTypeNode != null) {
THGraphNode gnode= fGraph.getNode(fSelectedTypeNode.getElement());
Object[] result= gnode.getMembers(fShowInheritedMembers);
if (result != null) {
return result;
@ -295,4 +329,57 @@ class THHierarchyModel {
}
return NO_CHILDREN;
}
public void onMemberSelectionChanged(ICElement elem) {
fSelectedMember= elem;
if (fSelectedMember != null) {
fMemberSignatureToSelect= TypeHierarchyUI.getLocalElementSignature(fSelectedMember);
}
updateImplementors();
}
private void updateImplementors() {
if (fRootNodes != null) {
for (int i = 0; i < fRootNodes.length; i++) {
THNode node = fRootNodes[i];
updateImplementors(node);
}
}
}
private void updateImplementors(THNode node) {
node.setIsImplementor(isImplementor(node.getElement()));
THNode[] children= node.getChildren();
for (int i = 0; i < children.length; i++) {
THNode child = children[i];
updateImplementors(child);
}
}
private boolean isImplementor(ICElement element) {
if (element == null || fSelectedMember == null) {
return false;
}
THGraphNode gnode= fGraph.getNode(element);
if (gnode != null) {
ICElement[] members= gnode.getMembers(false);
if (members != null) {
for (int i = 0; i < members.length; i++) {
ICElement member = members[i];
if (member == fSelectedMember) {
return true;
}
if (fMemberSignatureToSelect != null &&
fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
return true;
}
}
}
}
return false;
}
public ICElement getSelectedMember() {
return fSelectedMember;
}
}

View file

@ -47,7 +47,7 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
public Image getImage(Object element) {
if (element instanceof THNode) {
THNode node= (THNode) element;
ICElement decl= node.getRepresentedDeclaration();
ICElement decl= node.getElement();
if (decl != null) {
Image image= fCLabelProvider.getImage(decl);
if (image != null) {
@ -64,7 +64,7 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
public String getText(Object element) {
if (element instanceof THNode) {
THNode node= (THNode) element;
ICElement decl= node.getRepresentedDeclaration();
ICElement decl= node.getElement();
if (decl != null) {
String label= fCLabelProvider.getText(decl);
return label;
@ -93,6 +93,9 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
flags |= CElementImageDescriptor.REFERENCED_BY;
}
}
if (node.isImplementor()) {
flags |= CElementImageDescriptor.DEFINES;
}
String key= image.toString()+String.valueOf(flags);
Image result= (Image) fCachedImages.get(key);

View file

@ -14,11 +14,11 @@ package org.eclipse.cdt.internal.ui.typehierarchy;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
public class THMethodContentProvider implements IStructuredContentProvider {
public class THMemberContentProvider implements IStructuredContentProvider {
private static final Object[] NO_CHILDREN= new Object[0];
private THHierarchyModel fModel;
public THMethodContentProvider() {
public THMemberContentProvider() {
}
final public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

View file

@ -23,18 +23,19 @@ import org.eclipse.cdt.internal.ui.util.CoreUtility;
public class THNode implements IAdaptable {
private THNode fParent;
private ICElement fRepresentedDecl;
private ICElement fElement;
private List fChildren= Collections.EMPTY_LIST;
private int fHashCode;
private boolean fIsFiltered;
private boolean fIsImplementor;
/**
* Creates a new node for the include browser
*/
public THNode(THNode parent, ICElement decl) {
fParent= parent;
fRepresentedDecl= decl;
fElement= decl;
fHashCode= computeHashCode();
}
@ -43,8 +44,8 @@ public class THNode implements IAdaptable {
if (fParent != null) {
hashCode= fParent.hashCode() * 31;
}
if (fRepresentedDecl != null) {
hashCode+= fRepresentedDecl.hashCode();
if (fElement != null) {
hashCode+= fElement.hashCode();
}
return hashCode;
}
@ -63,7 +64,7 @@ public class THNode implements IAdaptable {
return false;
}
return CoreUtility.safeEquals(fRepresentedDecl, rhs.fRepresentedDecl);
return CoreUtility.safeEquals(fElement, rhs.fElement);
}
/**
@ -74,13 +75,13 @@ public class THNode implements IAdaptable {
}
public ICElement getRepresentedDeclaration() {
return fRepresentedDecl;
public ICElement getElement() {
return fElement;
}
public Object getAdapter(Class adapter) {
if (adapter.isAssignableFrom(ICElement.class)) {
return getRepresentedDeclaration();
return getElement();
}
return null;
}
@ -112,8 +113,16 @@ public class THNode implements IAdaptable {
return !fChildren.isEmpty();
}
public Object[] getChildren() {
return fChildren.toArray();
public THNode[] getChildren() {
return (THNode[]) fChildren.toArray(new THNode[fChildren.size()]);
}
public void setIsImplementor(boolean val) {
fIsImplementor= val;
}
public boolean isImplementor() {
return fIsImplementor;
}
}

View file

@ -112,9 +112,9 @@ public class THViewPart extends ViewPart {
private static final int ORIENTATION_HORIZONTAL = 1;
private static final int ORIENTATION_VERTICAL = 2;
private static final int ORIENTATION_SINGLE = 3;
private static final int METHOD_LABEL_OPTIONS_SIMPLE = CElementLabels.M_PARAMETER_TYPES;
private static final int METHOD_LABEL_OPTIONS_QUALIFIED = METHOD_LABEL_OPTIONS_SIMPLE | CElementLabels.ALL_POST_QUALIFIED;
private static final int METHOD_ICON_OPTIONS = CElementImageProvider.OVERLAY_ICONS;
private static final int MEMBER_LABEL_OPTIONS_SIMPLE = CElementLabels.M_PARAMETER_TYPES;
private static final int MEMBER_LABEL_OPTIONS_QUALIFIED = MEMBER_LABEL_OPTIONS_SIMPLE | CElementLabels.ALL_POST_QUALIFIED;
private static final int MEMBER_ICON_OPTIONS = CElementImageProvider.OVERLAY_ICONS;
private IMemento fMemento;
private boolean fShowsMessage= true;
@ -129,21 +129,21 @@ public class THViewPart extends ViewPart {
private Text fInfoText;
private SashForm fSplitter;
private ViewForm fHierarchyViewForm;
private ViewForm fMethodViewForm;
private CLabel fMethodLabel;
private ViewForm fMemberViewForm;
private CLabel fMemberLabel;
// viewers
private THHierarchyModel fModel;
private THLabelProvider fHierarchyLabelProvider;
private CUILabelProvider fMethodLabelProvider;
private TableViewer fMethodViewer;
private CUILabelProvider fMemberLabelProvider;
private TableViewer fMemberViewer;
private TreeViewer fHierarchyTreeViewer;
// filters, sorter
// private WorkingSetFilterUI fWorkingSetFilterUI;
// actions
private ToolBarManager fMethodToolbarManager;
private ToolBarManager fMemberToolbarManager;
private Action fShowSuperTypeHierarchyAction;
private Action fShowSubTypeHierarchyAction;
private Action fShowTypeHierarchyAction;
@ -189,13 +189,13 @@ public class THViewPart extends ViewPart {
if (input == null) {
setMessage(Messages.THViewPart_instruction);
fHierarchyTreeViewer.setInput(null);
fMethodViewer.setInput(null);
fMemberViewer.setInput(null);
return;
}
fShowsMessage= false;
fModel.setInput(input);
fHierarchyTreeViewer.setInput(fModel);
fMethodViewer.setInput(fModel);
fMemberViewer.setInput(fModel);
fPagebook.showPage(fSplitter);
updateDescription();
updateHistory(input);
@ -222,7 +222,7 @@ public class THViewPart extends ViewPart {
private void initSelectionProvider() {
SelectionProviderMediator mediator= new SelectionProviderMediator();
mediator.addViewer(fHierarchyTreeViewer);
mediator.addViewer(fMethodViewer);
mediator.addViewer(fMemberViewer);
getSite().setSelectionProvider(new AdaptingSelectionProvider(ICElement.class, mediator));
}
@ -294,7 +294,7 @@ public class THViewPart extends ViewPart {
fHierarchyLabelProvider.setShowFiles(showFiles);
fShowFilesInLabelsAction.setChecked(showFiles);
fMethodToolbarManager.update(true);
fMemberToolbarManager.update(true);
}
public void init(IViewSite site, IMemento memento) throws PartInitException {
@ -347,14 +347,14 @@ public class THViewPart extends ViewPart {
onContextMenuAboutToShow(m, false);
}
});
menu = manager.createContextMenu(fMethodViewer.getControl());
fMethodViewer.getControl().setMenu(menu);
site.registerContextMenu(CUIPlugin.ID_TYPE_HIERARCHY + ".methods", manager, fMethodViewer); //$NON-NLS-1$
menu = manager.createContextMenu(fMemberViewer.getControl());
fMemberViewer.getControl().setMenu(menu);
site.registerContextMenu(CUIPlugin.ID_TYPE_HIERARCHY + ".members", manager, fMemberViewer); //$NON-NLS-1$
}
protected void onContextMenuAboutToShow(IMenuManager menu, boolean hierarchyView) {
CUIPlugin.createStandardGroups(menu);
StructuredViewer viewer= hierarchyView ? (StructuredViewer) fHierarchyTreeViewer : fMethodViewer;
StructuredViewer viewer= hierarchyView ? (StructuredViewer) fHierarchyTreeViewer : fMemberViewer;
final ICElement elem= selectionToElement(viewer.getSelection());
if (elem != null) {
menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, fOpenElement);
@ -400,31 +400,31 @@ public class THViewPart extends ViewPart {
Control hierarchyControl= createHierarchyControl(fHierarchyViewForm);
fHierarchyViewForm.setContent(hierarchyControl);
fMethodViewForm= new ViewForm(fSplitter, SWT.NONE);
Control methodControl= createMethodControl(fMethodViewForm);
fMethodViewForm.setContent(methodControl);
fMemberViewForm= new ViewForm(fSplitter, SWT.NONE);
Control memberControl= createMemberControl(fMemberViewForm);
fMemberViewForm.setContent(memberControl);
fMethodLabel = new CLabel(fMethodViewForm, SWT.NONE);
fMethodLabel.setText(Messages.THViewPart_MethodPane_title);
fMethodViewForm.setTopLeft(fMethodLabel);
fMemberLabel = new CLabel(fMemberViewForm, SWT.NONE);
fMemberLabel.setText(Messages.THViewPart_MethodPane_title);
fMemberViewForm.setTopLeft(fMemberLabel);
}
private Control createMethodControl(ViewForm parent) {
fMethodLabelProvider= new CUILabelProvider(METHOD_LABEL_OPTIONS_SIMPLE, METHOD_ICON_OPTIONS);
fMethodViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
fMethodViewer.setContentProvider(new THMethodContentProvider());
fMethodViewer.setLabelProvider(fMethodLabelProvider);
fMethodViewer.addOpenListener(new IOpenListener() {
private Control createMemberControl(ViewForm parent) {
fMemberLabelProvider= new CUILabelProvider(MEMBER_LABEL_OPTIONS_SIMPLE, MEMBER_ICON_OPTIONS);
fMemberViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
fMemberViewer.setContentProvider(new THMemberContentProvider());
fMemberViewer.setLabelProvider(fMemberLabelProvider);
fMemberViewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent event) {
onOpenElement(event.getSelection());
}
});
fMethodViewer.addSelectionChangedListener(new ISelectionChangedListener() {
fMemberViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(final SelectionChangedEvent event) {
onMethodSelectionChanged(event);
onMemberSelectionChanged(event);
}
});
fMethodViewer.setSorter(new ViewerSorter() {
fMemberViewer.setSorter(new ViewerSorter() {
public int category(Object element) {
if (element instanceof ICElement) {
ICElement celem= (ICElement)element;
@ -446,14 +446,17 @@ public class THViewPart extends ViewPart {
}
});
ToolBar methodToolBar= new ToolBar(parent, SWT.FLAT | SWT.WRAP);
parent.setTopCenter(methodToolBar);
fMethodToolbarManager= new ToolBarManager(methodToolBar);
return fMethodViewer.getControl();
ToolBar memberToolBar= new ToolBar(parent, SWT.FLAT | SWT.WRAP);
parent.setTopCenter(memberToolBar);
fMemberToolbarManager= new ToolBarManager(memberToolBar);
return fMemberViewer.getControl();
}
protected void onMethodSelectionChanged(SelectionChangedEvent event) {
protected void onMemberSelectionChanged(SelectionChangedEvent event) {
if (fIgnoreSelectionChanges == 0) {
ICElement elem= selectionToElement(event.getSelection());
fModel.onMemberSelectionChanged(elem);
fHierarchyTreeViewer.refresh();
}
}
@ -485,8 +488,7 @@ public class THViewPart extends ViewPart {
if (fIgnoreSelectionChanges == 0) {
THNode node= selectionToNode(event.getSelection());
fModel.onHierarchySelectionChanged(node);
fMethodViewer.refresh();
updateDescription();
updateView();
}
}
@ -636,10 +638,10 @@ public class THViewPart extends ViewPart {
fFieldFilterAction= new Action(Messages.THViewPart_HideFields_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
fMethodViewer.addFilter(fFieldFilter);
fMemberViewer.addFilter(fFieldFilter);
}
else {
fMethodViewer.removeFilter(fFieldFilter);
fMemberViewer.removeFilter(fFieldFilter);
}
}
};
@ -649,10 +651,10 @@ public class THViewPart extends ViewPart {
fStaticFilterAction= new Action(Messages.THViewPart_HideStatic_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
fMethodViewer.addFilter(fStaticFilter);
fMemberViewer.addFilter(fStaticFilter);
}
else {
fMethodViewer.removeFilter(fStaticFilter);
fMemberViewer.removeFilter(fStaticFilter);
}
}
};
@ -662,10 +664,10 @@ public class THViewPart extends ViewPart {
fNonPublicFilterAction= new Action(Messages.THViewPart_HideNonPublic_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
fMethodViewer.addFilter(fNonPublicFilter);
fMemberViewer.addFilter(fNonPublicFilter);
}
else {
fMethodViewer.removeFilter(fNonPublicFilter);
fMemberViewer.removeFilter(fNonPublicFilter);
}
}
};
@ -743,12 +745,12 @@ public class THViewPart extends ViewPart {
mm.add(new Separator());
mm.add(fShowFilesInLabelsAction);
// method toolbar
fMethodToolbarManager.add(fShowInheritedMembersAction);
fMethodToolbarManager.add(new Separator());
fMethodToolbarManager.add(fFieldFilterAction);
fMethodToolbarManager.add(fStaticFilterAction);
fMethodToolbarManager.add(fNonPublicFilterAction);
// member toolbar
fMemberToolbarManager.add(fShowInheritedMembersAction);
fMemberToolbarManager.add(new Separator());
fMemberToolbarManager.add(fFieldFilterAction);
fMemberToolbarManager.add(fStaticFilterAction);
fMemberToolbarManager.add(fNonPublicFilterAction);
}
protected void onOpenElement(ISelection selection) {
@ -817,14 +819,14 @@ public class THViewPart extends ViewPart {
Image image= null;
THNode node= fModel.getSelectionInHierarchy();
if (node != null) {
elem= node.getRepresentedDeclaration();
elem= node.getElement();
if (elem != null) {
label= CElementLabels.getElementLabel(elem, 0);
image= fHierarchyLabelProvider.getImage(elem);
}
}
fMethodLabel.setText(label);
fMethodLabel.setImage(image);
fMemberLabel.setText(label);
fMemberLabel.setImage(image);
}
}
setContentDescription(message);
@ -854,21 +856,33 @@ public class THViewPart extends ViewPart {
protected void onShowInheritedMembers(boolean show) {
if (fModel.isShowInheritedMembers() != show) {
fModel.setShowInheritedMembers(show);
fMethodLabelProvider.setTextFlags(show ?
METHOD_LABEL_OPTIONS_QUALIFIED : METHOD_LABEL_OPTIONS_SIMPLE);
fMethodViewer.refresh();
fMemberLabelProvider.setTextFlags(show ?
MEMBER_LABEL_OPTIONS_QUALIFIED : MEMBER_LABEL_OPTIONS_SIMPLE);
updateViewers();
}
}
private void updateView() {
private void updateViewers() {
if (!fShowsMessage) {
fIgnoreSelectionChanges++;
try {
fHierarchyTreeViewer.refresh();
fMethodViewer.refresh();
fMemberViewer.refresh();
setSelections();
}
finally {
fIgnoreSelectionChanges--;
}
}
}
private void updateView() {
if (!fShowsMessage) {
fIgnoreSelectionChanges++;
try {
updateViewers();
updateDescription();
updateActionEnablement();
setSelections();
}
finally {
fIgnoreSelectionChanges--;
@ -884,6 +898,10 @@ public class THViewPart extends ViewPart {
fHierarchyTreeViewer.setSelection(new StructuredSelection(node));
fHierarchyTreeViewer.expandToLevel(node, 1);
}
ICElement elem= fModel.getSelectedMember();
if (elem != null) {
fMemberViewer.setSelection(new StructuredSelection(elem));
}
}
finally {
fIgnoreSelectionChanges--;
@ -947,8 +965,8 @@ public class THViewPart extends ViewPart {
return fHierarchyTreeViewer;
}
public TableViewer getMethodViewer() {
return fMethodViewer;
public TableViewer getMemberViewer() {
return fMemberViewer;
}
private void restoreOrientation(int orientation) {
@ -998,10 +1016,10 @@ public class THViewPart extends ViewPart {
orientation= getBestOrientation();
}
if (orientation == ORIENTATION_SINGLE) {
fMethodViewForm.setVisible(false);
fMemberViewForm.setVisible(false);
} else {
if (fCurrentViewOrientation == ORIENTATION_SINGLE) {
fMethodViewForm.setVisible(true);
fMemberViewForm.setVisible(true);
}
boolean horizontal= orientation == ORIENTATION_HORIZONTAL;
fSplitter.setOrientation(horizontal ? SWT.HORIZONTAL : SWT.VERTICAL);

View file

@ -32,8 +32,10 @@ import org.eclipse.cdt.core.dom.ast.IEnumeration;
import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IFunctionDeclaration;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.ui.CUIPlugin;
@ -218,4 +220,21 @@ public class TypeHierarchyUI {
}
return false;
}
static String getLocalElementSignature(ICElement element) {
if (element != null) {
try {
switch (element.getElementType()) {
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
return ((IFunctionDeclaration) element).getSignature();
case ICElement.C_FIELD:
return element.getElementName();
}
} catch (CModelException e) {
CUIPlugin.getDefault().log(e);
}
}
return null;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2006 IBM Corporation and others.
* Copyright (c) 2005, 2007 IBM Corporation 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
@ -444,12 +444,12 @@ public class CElementImageProvider {
if ((renderFlags & OVERLAY_WARNING) !=0) {
flags |= CElementImageDescriptor.WARNING;
}
if ((renderFlags & OVERLAY_OVERRIDE) !=0) {
flags |= CElementImageDescriptor.OVERRIDES;
}
if ((renderFlags & OVERLAY_IMPLEMENTS) !=0) {
flags |= CElementImageDescriptor.IMPLEMENTS;
}
// if ((renderFlags & OVERLAY_OVERRIDE) !=0) {
// flags |= CElementImageDescriptor.OVERRIDES;
// }
// if ((renderFlags & OVERLAY_IMPLEMENTS) !=0) {
// flags |= CElementImageDescriptor.IMPLEMENTS;
// }
return flags;
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* Copyright (c) 2000, 2007 IBM Corporation 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
@ -49,7 +49,9 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/** Flag to render the static adornment */
public final static int STATIC= 0x008;
/** Flag to render the runnable adornment */
/**
* @deprecated flag never had an effect
*/
public final static int RUNNABLE= 0x010;
/** Flag to render the waring adornment */
@ -58,10 +60,14 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/** Flag to render the error adornment */
public final static int ERROR= 0x040;
/** Flag to render the 'override' adornment */
/**
* @deprecated flag never had an effect
*/
public final static int OVERRIDES= 0x080;
/** Flag to render the 'implements' adornment */
/**
* @deprecated flag never had an effect
*/
public final static int IMPLEMENTS= 0x100;
/** Flag to render the 'relates to' adornment (for trees, an arrow down) */
@ -79,6 +85,9 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/** Flag to render the 'system include' adornment */
public final static int SYSTEM_INCLUDE= 0x2000;
/** Flag to render the 'defines' adornment in the type hierarchy*/
public final static int DEFINES= 0x4000;
private ImageDescriptor fBaseImage;
private int fFlags;
private Point fSize;
@ -103,8 +112,8 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/**
* Sets the descriptors adornments. Valid values are: <code>ABSTRACT</code>, <code>FINAL</code>,
* <code>SYNCHRONIZED</code>, </code>STATIC<code>, </code>RUNNABLE<code>, </code>WARNING<code>,
* </code>ERROR<code>, </code>OVERRIDDEN<code>, or any combination of those.
* </code>STATIC<code>, </code>WARNING<code>,
* </code>ERROR<code>, or any combination of those.
*
* @param adornments the image descritpors adornments
*/
@ -199,6 +208,10 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
x-= data.width;
drawImage(data, x, 0);
}
if ((fFlags & DEFINES) != 0) {
data= CPluginImages.DESC_OVR_DEFINES.getImageData();
drawImage(data, 0, 0);
}
if ((fFlags & TEMPLATE) != 0) {
data= CPluginImages.DESC_OVR_TEMPLATE.getImageData();
x-= data.width;
@ -235,26 +248,16 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
x-= data.width;
drawImage(data, x, size.y-data.height);
}
/*if ((fFlags & SYNCHRONIZED) != 0) {
data= CPluginImages.DESC_OVR_SYNCH.getImageData();
x-= data.width;
drawImage(data, x, size.y - data.height);
}
if ((fFlags & RUNNABLE) != 0) {
data= CPluginImages.DESC_OVR_RUN.getImageData();
x-= data.width;
drawImage(data, x, size.y - data.height);
}
if ((fFlags & OVERRIDES) != 0) {
data= CPluginImages.DESC_OVR_OVERRIDES.getImageData();
x-= data.width;
drawImage(data, x, size.y - data.height);
}
if ((fFlags & IMPLEMENTS) != 0) {
data= CPluginImages.DESC_OVR_IMPLEMENTS.getImageData();
x-= data.width;
drawImage(data, x, size.y - data.height);
} */
// if ((fFlags & OVERRIDES) != 0) {
// data= CPluginImages.DESC_OVR_OVERRIDES.getImageData();
// x-= data.width;
// drawImage(data, x, size.y - data.height);
// }
// if ((fFlags & IMPLEMENTS) != 0) {
// data= CPluginImages.DESC_OVR_IMPLEMENTS.getImageData();
// x-= data.width;
// drawImage(data, x, size.y - data.height);
// }
}
private void drawBottomLeft() {