1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-30 21:55:31 +02:00

- fixed 36837

- refactor label providers to viewsupport and removed old IAdormentProvider
This commit is contained in:
David Inglis 2004-09-10 01:19:40 +00:00
parent 440cb7be37
commit 01ffdd1a22
33 changed files with 254 additions and 530 deletions

View file

@ -1,3 +1,47 @@
2004-09-09 David Inglis
Fix for 36837 - CVS decoration updating
* src/org/eclipse/cdt/internal/ui/editor/CEditorErrorTickUpdater.java
* src/org/eclipse/cdt/internal/ui/util/ProblemTreeViewer.java
removed Eclipse 1.0 way of decorating label providers - use label decorators
* src/org/eclipse/cdt/internal/ui/ErrorTickAdornmentProvider.java
* src/org/eclipse/cdt/internal/ui/IAdornmentProvider.java
refactored to internal.ui.viewsupport
* src/org/eclipse/cdt/internal/ui/CElementImageProvider.java
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/AppearanceAwareLabelProvider.java
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/CUILabelProvider.java
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/ProblemsLabelDecorator.java
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/DecoratingCLabelProvider.java
* src/org/eclipse/cdt/internal/ui/StandardCElementLabelProvider.java
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPElementLabelProvider.java
changes due to refactor
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/CBrowsingPart.java
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/MembersView.java
* browser/org/eclipse/cdt/internal/ui/browser/cbrowsing/ProjectsView.java
* browser/org/eclipse/cdt/internal/ui/browser/typehierarchy/HierarchyLabelProvider.java
* browser/org/eclipse/cdt/internal/ui/browser/typehierarchy/HistoryAction.java
* browser/org/eclipse/cdt/internal/ui/browser/typehierarchy/MethodsLabelProvider.java
* browser/org/eclipse/cdt/internal/ui/browser/typehierarchy/MethodsViewer.java
* browser/org/eclipse/cdt/internal/ui/browser/typehierarchy/TypeHierarchyViewPart.java
* browser/org/eclipse/cdt/internal/ui/browser/typehierarchy/TypeHierarchyViewer.java
* src/org/eclipse/cdt/internal/ui/CWorkbenchAdapter.java
* src/org/eclipse/cdt/internal/ui/compare/CNode.java
* src/org/eclipse/cdt/internal/ui/cview/CView.java
* src/org/eclipse/cdt/internal/ui/cview/CViewLabelProvider.java
* src/org/eclipse/cdt/internal/ui/editor/CContentOutlinePage.java
* src/org/eclipse/cdt/internal/ui/editor/CEditor.java
* src/org/eclipse/cdt/internal/ui/text/contentassist/ResultCollector.java
* src/org/eclipse/cdt/internal/ui/util/IProblemChangedListener.java
* src/org/eclipse/cdt/internal/ui/util/ProblemMarkerManager.java
* src/org/eclipse/cdt/internal/ui/util/ProblemTableViewer.java
2004-09-09 Bogdan Gheorghe
Fix for 73406 - Indexer: Double-Indexing on Specific Project

View file

@ -33,6 +33,7 @@ import org.eclipse.cdt.internal.ui.browser.opentype.OpenTypeMessages;
import org.eclipse.cdt.internal.ui.editor.CEditor;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
import org.eclipse.cdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.internal.ui.viewsupport.IViewPartInputProvider;
import org.eclipse.cdt.internal.ui.workingsets.WorkingSetFilterActionGroup;

View file

@ -19,6 +19,7 @@ import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ISourceRoot;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.viewsupport.AppearanceAwareLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.ITypeDef;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.jface.viewers.DoubleClickEvent;

View file

@ -17,9 +17,9 @@ import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IMethod;
import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.model.IStructure;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.StandardCElementLabelProvider;
import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.jface.resource.CompositeImageDescriptor;
@ -116,23 +116,12 @@ public class HierarchyLabelProvider extends StandardCElementLabelProvider // App
return false;
}
return true;
}
/* (non-Javadoc)
* @see ILabelProvider#getText
*/
public String getText(Object element) {
String text= super.getText(element);
// return decorateText(text, element);
return text;
}
/* (non-Javadoc)
* @see ILabelProvider#getImage
*/
public Image getImage(Object element) {
// return super.getImage(element);
Image result= null;
if (element instanceof ICElement) {
ImageDescriptor desc= getTypeImageDescriptor((ICElement) element);
@ -143,9 +132,9 @@ public class HierarchyLabelProvider extends StandardCElementLabelProvider // App
result= CUIPlugin.getImageDescriptorRegistry().get(desc);
}
} else {
result= fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
result= fImageLabelProvider.getImageLabel(element, getImageFlags());
}
return decorateImage(result, element);
return result;
}
private ImageDescriptor getTypeImageDescriptor(ICElement type) {

View file

@ -11,8 +11,8 @@
package org.eclipse.cdt.internal.ui.browser.typehierarchy;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;

View file

@ -17,8 +17,8 @@ import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IMethod;
import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.internal.ui.viewsupport.StandardCElementLabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;

View file

@ -18,7 +18,7 @@ import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.internal.ui.util.ProblemTableViewer;
import org.eclipse.cdt.internal.ui.util.SelectionUtil;
import org.eclipse.cdt.ui.CElementLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.actions.MemberFilterActionGroup;
import org.eclipse.jface.action.IMenuListener;
@ -92,9 +92,9 @@ public class MethodsViewer extends ProblemTableViewer {
cprovider.showInheritedMethods(on);
fShowInheritedMembersAction.setChecked(on);
if (on) {
fLabelProvider.turnOn(CElementLabelProvider.SHOW_POST_QUALIFIED);
fLabelProvider.setTextFlags(fLabelProvider.getTextFlags() | CElementLabels.T_POST_QUALIFIED);
} else {
fLabelProvider.turnOff(CElementLabelProvider.SHOW_POST_QUALIFIED);
fLabelProvider.setTextFlags(fLabelProvider.getTextFlags() & ~CElementLabels.T_POST_QUALIFIED);
}
if (on) {
sortByDefiningTypeNoRedraw(false);

View file

@ -25,11 +25,11 @@ import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
import org.eclipse.cdt.internal.ui.actions.CompositeActionGroup;
import org.eclipse.cdt.internal.ui.actions.SelectAllAction;
import org.eclipse.cdt.internal.ui.browser.cbrowsing.CUILabelProvider;
import org.eclipse.cdt.internal.ui.browser.cbrowsing.StatusBarUpdater;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.IViewPartInputProvider;
import org.eclipse.cdt.internal.ui.workingsets.WorkingSetFilterActionGroup;
import org.eclipse.cdt.ui.CUIPlugin;

View file

@ -13,7 +13,7 @@ package org.eclipse.cdt.internal.ui.browser.typehierarchy;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IMember;
import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer;
import org.eclipse.cdt.ui.CElementLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
@ -56,15 +56,10 @@ public abstract class TypeHierarchyViewer extends ProblemTreeViewer {
public void setQualifiedTypeName(boolean on) {
if (on) {
fLabelProvider.turnOn(CElementLabelProvider.SHOW_POST_QUALIFIED);
fLabelProvider.setTextFlags(fLabelProvider.getTextFlags() | CElementLabels.T_POST_QUALIFIED);
} else {
fLabelProvider.turnOff(CElementLabelProvider.SHOW_POST_QUALIFIED);
fLabelProvider.setTextFlags(fLabelProvider.getTextFlags() & ~CElementLabels.T_POST_QUALIFIED);
}
// if (on) {
// fLabelProvider.setTextFlags(fLabelProvider.getTextFlags() | CElementLabels.T_POST_QUALIFIED);
// } else {
// fLabelProvider.setTextFlags(fLabelProvider.getTextFlags() & ~CElementLabels.T_POST_QUALIFIED);
// }
refresh();
}

View file

@ -11,6 +11,7 @@ import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.ui.CElementLabelProvider;
import org.eclipse.cdt.ui.CUIPlugin;

View file

@ -1,138 +0,0 @@
/*******************************************************************************
* Copyright (c) 2000, 2004 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.core.model.ISourceRange;
import org.eclipse.cdt.core.model.ISourceReference;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.ui.texteditor.MarkerAnnotation;
import org.eclipse.ui.texteditor.MarkerUtilities;
public class ErrorTickAdornmentProvider implements IAdornmentProvider {
private static final int ERRORTICK_WARNING= CElementImageProvider.OVERLAY_WARNING;
private static final int ERRORTICK_ERROR= CElementImageProvider.OVERLAY_ERROR;
/*
* @see IAdornmentProvider#computeAdornmentFlags(Object, int)
*/
public int computeAdornmentFlags(Object obj) {
try {
if (obj instanceof ICElement) {
ICElement element= (ICElement) obj;
int type= element.getElementType();
switch (type) {
case ICElement.C_PROJECT:
case ICElement.C_CCONTAINER:
return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_INFINITE, null);
case ICElement.C_UNIT:
return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_ONE, null);
case ICElement.C_FUNCTION:
case ICElement.C_CLASS:
case ICElement.C_UNION:
case ICElement.C_STRUCT:
case ICElement.C_VARIABLE:
case ICElement.C_METHOD:
ITranslationUnit tu= ((ISourceReference)element).getTranslationUnit();
if (tu != null && tu.exists()) {
// I assume that only source elements in compilation unit can have markers
ISourceRange range= ((ISourceReference)element).getSourceRange();
return getErrorTicksFromMarkers(tu.getResource(), IResource.DEPTH_ONE, range);
}
default:
}
} else if (obj instanceof IResource) {
return getErrorTicksFromMarkers((IResource) obj, IResource.DEPTH_INFINITE, null);
}
} catch (CoreException e) {
CUIPlugin.getDefault().log(e);
}
return 0;
}
/*
* @see IAdornmentProvider#dispose()
*/
public void dispose() {
}
private int getErrorTicksFromMarkers(IResource res, int depth, ISourceRange range) throws CoreException {
// Trying to call findMarkers() on non existing resources will throw an exception
// findMarkers() --> CoreException - if this method fails.
// Reasons include:
// This resource does not exist.
// This resource is a project that is not open.
if (res == null || !res.isAccessible()) { // for elements in archives
return 0;
}
int info= 0;
IMarker[] markers= res.findMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, depth);
if (markers != null) {
for (int i= 0; i < markers.length && (info != ERRORTICK_ERROR); i++) {
IMarker curr= markers[i];
if (range == null || isMarkerInRange(curr, range)) {
int priority= curr.getAttribute(IMarker.SEVERITY, -1);
if (priority == IMarker.SEVERITY_WARNING) {
info= ERRORTICK_WARNING;
} else if (priority == IMarker.SEVERITY_ERROR) {
info= ERRORTICK_ERROR;
}
}
}
}
return info;
}
private boolean isMarkerInRange(IMarker marker, ISourceRange range) throws CoreException {
if (marker.isSubtypeOf(IMarker.TEXT)) {
int pos= marker.getAttribute(IMarker.CHAR_START, -1);
int offset= range.getStartPos();
if(pos == -1) {
int line= MarkerUtilities.getLineNumber(marker);
if (line >= 0) {
return (line >= range.getStartLine() && line <= range.getEndLine());
}
}
return (offset <= pos && offset + range.getLength() > pos);
}
return false;
}
private IMarker isAnnotationInRange(IAnnotationModel model, Annotation annot, ISourceRange range) throws CoreException {
if (annot instanceof MarkerAnnotation) {
IMarker marker= ((MarkerAnnotation)annot).getMarker();
if (marker.exists() && marker.isSubtypeOf(ICModelMarker.C_MODEL_PROBLEM_MARKER)) {
Position pos= model.getPosition(annot);
if (pos.overlapsWith(range.getStartPos(), range.getLength())) {
return marker;
}
}
}
return null;
}
}

View file

@ -1,27 +0,0 @@
package org.eclipse.cdt.internal.ui;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
/**
* @since 1.0
*/
public interface IAdornmentProvider {
/**
* Computes the adornment flags for the given element.
* Flags defined in <code>JavaElementImageProvider</code>.
*/
int computeAdornmentFlags(Object element);
/**
* Called when the parent label provider is disposed
*/
void dispose();
}

View file

@ -5,7 +5,7 @@ package org.eclipse.cdt.internal.ui.compare;
* All Rights Reserved.
*/
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.DocumentRangeNode;

View file

@ -34,6 +34,8 @@ import org.eclipse.cdt.internal.ui.drag.TransferDragSourceListener;
import org.eclipse.cdt.internal.ui.preferences.CPluginPreferencePage;
import org.eclipse.cdt.internal.ui.util.EditorUtility;
import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer;
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.DecoratingCLabelProvider;
import org.eclipse.cdt.ui.CElementContentProvider;
import org.eclipse.cdt.ui.CElementSorter;
import org.eclipse.cdt.ui.CLocalSelectionTransfer;
@ -49,11 +51,9 @@ import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelection;
@ -100,6 +100,7 @@ import org.eclipse.ui.part.PluginTransfer;
import org.eclipse.ui.part.ResourceTransfer;
import org.eclipse.ui.part.ShowInContext;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.eclipse.ui.views.framelist.FrameList;
import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
@ -416,9 +417,8 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
* Sets the label provider for the viewer.
*/
void initLabelProvider(TreeViewer viewer) {
ILabelProvider cProvider = createLabelProvider();
ILabelDecorator decorator = CUIPlugin.getDefault().getWorkbench().getDecoratorManager().getLabelDecorator();
viewer.setLabelProvider(new DecoratingLabelProvider(cProvider, decorator));
CUILabelProvider cProvider = createLabelProvider();
viewer.setLabelProvider(new DecoratingCLabelProvider(cProvider, true));
}
/**
@ -509,7 +509,6 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
viewer.setComparer(new CViewElementComparer());
initContentProvider(viewer);
initLabelProvider(viewer);
CUIPlugin.getDefault().getProblemMarkerManager().addListener(viewer);
CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
initFilters(viewer);
@ -565,7 +564,7 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
return provider;
}
protected ILabelProvider createLabelProvider() {
protected CUILabelProvider createLabelProvider() {
return new CViewLabelProvider();
}
@ -577,7 +576,6 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
CUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
if (viewer != null) {
viewer.removeTreeListener(expansionListener);
CUIPlugin.getDefault().getProblemMarkerManager().removeListener(viewer);
}
if (getActionGroup() != null) {
getActionGroup().dispose();
@ -794,17 +792,6 @@ public class CView extends ViewPart implements ISetSelectionTarget, IPropertyCha
}
}
/**
* Sets the decorator for the package explorer.
*
* @param decorator
* a label decorator or <code>null</code> for no decorations.
*/
public void setLabelDecorator(ILabelDecorator decorator) {
ILabelProvider cProvider = createLabelProvider();
viewer.setLabelProvider(new DecoratingLabelProvider(cProvider, decorator));
}
public void propertyChange(PropertyChangeEvent event) {
if (viewer == null) return;

View file

@ -13,9 +13,8 @@ package org.eclipse.cdt.internal.ui.cview;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IIncludeReference;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.IAdornmentProvider;
import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.StandardCElementLabelProvider;
import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IContainer;
@ -39,8 +38,8 @@ public class CViewLabelProvider extends StandardCElementLabelProvider {
* @param flags
* @param adormentProviders
*/
public CViewLabelProvider(int flags, IAdornmentProvider[] adormentProviders) {
super(flags, adormentProviders);
public CViewLabelProvider(int textFlags, int imageFlags) {
super(textFlags, imageFlags);
}
/* (non-Javadoc)

View file

@ -12,9 +12,9 @@ import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.core.model.IPathEntryContainer;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;

View file

@ -12,11 +12,11 @@ import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider;
import org.eclipse.cdt.internal.ui.actions.AbstractToggleLinkingAction;
import org.eclipse.cdt.internal.ui.actions.ActionMessages;
import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup;
import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer;
import org.eclipse.cdt.internal.ui.viewsupport.StandardCElementLabelProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.cdt.ui.actions.CustomFiltersActionGroup;
@ -235,8 +235,6 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
treeViewer.addSelectionChangedListener(this);
CUIPlugin.getDefault().getProblemMarkerManager().addListener(treeViewer);
MenuManager manager= new MenuManager(fContextMenuId);
manager.setRemoveAllWhenShown(true);
manager.addMenuListener(new IMenuListener() {
@ -277,8 +275,6 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
}
public void dispose() {
CUIPlugin.getDefault().getProblemMarkerManager().removeListener(treeViewer);
if (treeViewer != null) {
treeViewer.removeSelectionChangedListener(this);
}

View file

@ -214,9 +214,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
*/
protected void doSetInput(IEditorInput input) throws CoreException {
super.doSetInput(input);
if (fCEditorErrorTickUpdater != null) {
fCEditorErrorTickUpdater.setAnnotationModel(getDocumentProvider().getAnnotationModel(input));
}
setOutlinePageInput(fOutlinePage, input);
if (fProjectionModelUpdater != null) {
@ -506,7 +503,6 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
}
if (fCEditorErrorTickUpdater != null) {
fCEditorErrorTickUpdater.setAnnotationModel(null);
fCEditorErrorTickUpdater.dispose();
fCEditorErrorTickUpdater = null;
}

View file

@ -12,9 +12,12 @@ package org.eclipse.cdt.internal.ui.editor;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.ui.CElementLabelProvider;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.IAnnotationModelListener;
import org.eclipse.cdt.internal.ui.util.IProblemChangedListener;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.util.Assert;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
@ -25,65 +28,57 @@ import org.eclipse.ui.IEditorInput;
* on the annotation model of a Java Editor and update the title images when the annotation
* model changed.
*/
public class CEditorErrorTickUpdater implements IAnnotationModelListener {
public class CEditorErrorTickUpdater implements IProblemChangedListener {
protected CEditor fCEditor;
private IAnnotationModel fAnnotationModel;
private CElementLabelProvider fLabelProvider;
private CUILabelProvider fLabelProvider;
public CEditorErrorTickUpdater(CEditor editor) {
fCEditor= editor;
Assert.isNotNull(editor);
fCEditor= editor;
fLabelProvider= new CUILabelProvider(0, CElementImageProvider.SMALL_ICONS);
fLabelProvider.addLabelDecorator(new ProblemsLabelDecorator(null));
CUIPlugin.getDefault().getProblemMarkerManager().addListener(this);
}
/**
* Defines the annotation model to listen to. To be called when the
* annotation model changes.
* @param model The new annotation model or <code>null</code>
* to uninstall.
/* (non-Javadoc)
* @see IProblemChangedListener#problemsChanged(IResource[], boolean)
*/
public void setAnnotationModel(IAnnotationModel model) {
if (fAnnotationModel != null) {
fAnnotationModel.removeAnnotationModelListener(this);
}
if (model != null) {
if (fLabelProvider == null) {
fLabelProvider= new CElementLabelProvider(CElementLabelProvider.SHOW_SMALL_ICONS, CElementLabelProvider.getAdornmentProviders(true, null));
}
fAnnotationModel=model;
fAnnotationModel.addAnnotationModelListener(this);
modelChanged(fAnnotationModel);
} else {
if (fLabelProvider != null) {
fLabelProvider.dispose();
}
fLabelProvider= null;
fAnnotationModel= null;
}
}
/*
* @see IAnnotationModelListener#modelChanged(IAnnotationModel)
*/
public void modelChanged(IAnnotationModel model) {
Image titleImage= fCEditor.getTitleImage();
if (titleImage == null) {
public void problemsChanged(IResource[] resourcesChanged, boolean isMarkerChange) {
if (isMarkerChange) {
return;
}
IEditorInput input= fCEditor.getEditorInput();
if (input != null) { // might run async, tests needed
ICElement celement= (ICElement) input.getAdapter(ICElement.class);
if (fLabelProvider != null && celement != null) {
Image newImage= fLabelProvider.getImage(celement);
if (titleImage != newImage) {
updatedTitleImage(newImage);
if (celement != null) {
IResource resource= celement.getResource();
if (resource == null) {
return;
}
for (int i = 0; i < resourcesChanged.length; i++){
if (resource.equals(resourcesChanged[i])) {
updateEditorImage(celement);
return;
}
}
}
}
}
public void updateEditorImage(ICElement celement) {
Image titleImage= fCEditor.getTitleImage();
if (titleImage == null) {
return;
}
Image newImage= fLabelProvider.getImage(celement);
if (titleImage != newImage) {
postImageChange(newImage);
}
}
private void updatedTitleImage(final Image newImage) {
private void postImageChange(final Image newImage) {
Shell shell= fCEditor.getEditorSite().getShell();
if (shell != null && !shell.isDisposed()) {
shell.getDisplay().syncExec(new Runnable() {
@ -93,16 +88,9 @@ public class CEditorErrorTickUpdater implements IAnnotationModelListener {
});
}
}
public void dispose() {
if (fLabelProvider != null) {
fLabelProvider.dispose();
fLabelProvider= null;
}
fAnnotationModel= null;
fLabelProvider.dispose();
CUIPlugin.getDefault().getProblemMarkerManager().removeListener(this);
}
}

View file

@ -14,8 +14,8 @@ import java.util.HashSet;
import java.util.Set;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.FunctionPrototypeSummary;
import org.eclipse.jface.resource.ImageDescriptor;

View file

@ -5,7 +5,7 @@ package org.eclipse.cdt.internal.ui.util;
* All Rights Reserved.
*/
import java.util.Set;
import org.eclipse.core.resources.IResource;
/**
* Can be added to a ProblemMarkerManager to get notified about error
@ -17,6 +17,6 @@ public interface IProblemChangedListener {
* @param changedElements A set of type <code>IPath</code> that
* describe the resources that had an error marker change.
*/
void problemsChanged(Set changedElements);
void problemsChanged(IResource[] changedResources, boolean markerChanged);
}

View file

@ -5,15 +5,10 @@ package org.eclipse.cdt.internal.ui.util;
* All Rights Reserved.
*/
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.core.CProjectNature;
import java.util.HashSet;
import org.eclipse.cdt.internal.ui.editor.TranslationUnitAnnotationModelEvent;
import org.eclipse.cdt.ui.CUIPlugin;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IProject;
@ -23,8 +18,6 @@ import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.text.source.AnnotationModelEvent;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.IAnnotationModelListener;
@ -32,10 +25,9 @@ import org.eclipse.jface.text.source.IAnnotationModelListenerExtension;
import org.eclipse.jface.util.ListenerList;
import org.eclipse.swt.widgets.Display;
/**
* Listens to resource deltas and filters for marker changes of type IMarker.PROBLEM
* Viewers showing error ticks should register as listener to
* Listens to resource deltas and filters for marker changes of type
* IMarker.PROBLEM Viewers showing error ticks should register as listener to
* this type.
*/
public class ProblemMarkerManager implements IResourceChangeListener, IAnnotationModelListener, IAnnotationModelListenerExtension {
@ -45,53 +37,48 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
*/
private static class ProjectErrorVisitor implements IResourceDeltaVisitor {
private HashSet fChangedElements;
private HashSet fChangedElements;
public ProjectErrorVisitor(HashSet changedElements) {
fChangedElements= changedElements;
fChangedElements = changedElements;
}
public boolean visit(IResourceDelta delta) throws CoreException {
IResource res= delta.getResource();
IResource res = delta.getResource();
if (res instanceof IProject && delta.getKind() == IResourceDelta.CHANGED) {
try {
IProject project= (IProject) res;
if (!project.isAccessible() || !project.hasNature(CProjectNature.C_NATURE_ID)) {
// only track open C projects
return false;
}
} catch (CoreException e) {
CUIPlugin.getDefault().log(e.getStatus());
IProject project = (IProject)res;
if (!project.isAccessible()) {
// only track open C projects
return false;
}
}
checkInvalidate(delta, res.getFullPath());
checkInvalidate(delta, res);
return true;
}
private void checkInvalidate(IResourceDelta delta, IPath path) {
int kind= delta.getKind();
if (kind == IResourceDelta.REMOVED || kind == IResourceDelta.ADDED || (kind == IResourceDelta.CHANGED && isErrorDelta(delta))) {
private void checkInvalidate(IResourceDelta delta, IResource resource) {
int kind = delta.getKind();
if (kind == IResourceDelta.REMOVED || kind == IResourceDelta.ADDED
|| (kind == IResourceDelta.CHANGED && isErrorDelta(delta))) {
// invalidate the path and all parent paths
while (!path.isEmpty() && !path.isRoot() && !fChangedElements.contains(path)) {
fChangedElements.add(path);
path= path.removeLastSegments(1);
while (resource.getType() != IResource.ROOT && fChangedElements.add(resource)) {
resource = resource.getParent();
}
}
}
private boolean isErrorDelta(IResourceDelta delta) {
if ((delta.getFlags() & IResourceDelta.MARKERS) != 0) {
IMarkerDelta[] markerDeltas= delta.getMarkerDeltas();
for (int i= 0; i < markerDeltas.length; i++) {
if (markerDeltas[i].isSubtypeOf(ICModelMarker.C_MODEL_PROBLEM_MARKER)) {
int kind= markerDeltas[i].getKind();
}
}
private boolean isErrorDelta(IResourceDelta delta) {
if ( (delta.getFlags() & IResourceDelta.MARKERS) != 0) {
IMarkerDelta[] markerDeltas = delta.getMarkerDeltas();
for (int i = 0; i < markerDeltas.length; i++) {
if (markerDeltas[i].isSubtypeOf(IMarker.PROBLEM)) {
int kind = markerDeltas[i].getKind();
if (kind == IResourceDelta.ADDED || kind == IResourceDelta.REMOVED)
return true;
int severity= markerDeltas[i].getAttribute(IMarker.SEVERITY, -1);
int newSeverity= markerDeltas[i].getMarker().getAttribute(IMarker.SEVERITY, -1);
int severity = markerDeltas[i].getAttribute(IMarker.SEVERITY, -1);
int newSeverity = markerDeltas[i].getMarker().getAttribute(IMarker.SEVERITY, -1);
if (newSeverity != severity)
return true;
return true;
}
}
}
@ -100,20 +87,19 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
}
private ListenerList fListeners;
public ProblemMarkerManager() {
fListeners= new ListenerList(5);
fListeners = new ListenerList(5);
}
/*
* @see IResourceChangeListener#resourceChanged
*/
*/
public void resourceChanged(IResourceChangeEvent event) {
HashSet changedElements= new HashSet();
HashSet changedElements = new HashSet();
try {
IResourceDelta delta= event.getDelta();
IResourceDelta delta = event.getDelta();
if (delta != null)
delta.accept(new ProjectErrorVisitor(changedElements));
} catch (CoreException e) {
@ -121,39 +107,45 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
}
if (!changedElements.isEmpty()) {
fireChanges(changedElements);
IResource[] changes = (IResource[])changedElements.toArray(new IResource[changedElements.size()]);
fireChanges(changes, true);
}
}
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see IAnnotationModelListener#modelChanged(IAnnotationModel)
*/
public void modelChanged(IAnnotationModel model) {
// no action
}
/* (non-Javadoc)
/*
* (non-Javadoc)
*
* @see IAnnotationModelListenerExtension#modelChanged(AnnotationModelEvent)
*/
public void modelChanged(AnnotationModelEvent event) {
if (event instanceof TranslationUnitAnnotationModelEvent) {
TranslationUnitAnnotationModelEvent cuEvent= (TranslationUnitAnnotationModelEvent) event;
TranslationUnitAnnotationModelEvent cuEvent = (TranslationUnitAnnotationModelEvent)event;
if (cuEvent.includesProblemMarkerAnnotationChanges()) {
//IResource[] changes= new IResource[] {cuEvent.getUnderlyingResource()};
//IResource[] changes= new IResource[]
// {cuEvent.getUnderlyingResource()};
IResource res = cuEvent.getUnderlyingResource();
if (res != null) {
fireChanges(Collections.singleton(res.getFullPath()));
fireChanges(new IResource[]{res}, false);
}
}
}
}
}
/**
* Adds a listener for problem marker changes.
*/
public void addListener(IProblemChangedListener listener) {
if (fListeners.isEmpty()) {
if (fListeners.isEmpty()) {
CUIPlugin.getWorkspace().addResourceChangeListener(this);
CUIPlugin.getDefault().getDocumentProvider().addGlobalAnnotationModelListener(this);
}
@ -162,7 +154,7 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
/**
* Removes a <code>IProblemChangedListener</code>.
*/
*/
public void removeListener(IProblemChangedListener listener) {
fListeners.remove(listener);
if (fListeners.isEmpty()) {
@ -170,20 +162,21 @@ public class ProblemMarkerManager implements IResourceChangeListener, IAnnotatio
CUIPlugin.getDefault().getDocumentProvider().removeGlobalAnnotationModelListener(this);
}
}
private void fireChanges(final Set changes) {
Display display= SWTUtil.getStandardDisplay();
private void fireChanges(final IResource[] changes, final boolean markerChanged) {
Display display = SWTUtil.getStandardDisplay();
if (display != null && !display.isDisposed()) {
display.asyncExec(new Runnable() {
public void run() {
Object[] listeners= fListeners.getListeners();
for (int i= 0; i < listeners.length; i++) {
IProblemChangedListener curr= (IProblemChangedListener) listeners[i];
curr.problemsChanged(changes);
public void run() {
Object[] listeners = fListeners.getListeners();
for (int i = 0; i < listeners.length; i++) {
IProblemChangedListener curr = (IProblemChangedListener)listeners[i];
curr.problemsChanged(changes, markerChanged);
}
}
});
}
}
}
}

View file

@ -13,7 +13,7 @@ package org.eclipse.cdt.internal.ui.util;
import java.util.ArrayList;
import org.eclipse.cdt.internal.ui.browser.cbrowsing.ProblemsLabelDecorator.ProblemsLabelChangedEvent;
import org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator.ProblemsLabelChangedEvent;
import org.eclipse.core.resources.IResource;
import org.eclipse.swt.widgets.Composite;

View file

@ -5,15 +5,14 @@ package org.eclipse.cdt.internal.ui.util;
* All Rights Reserved.
*/
import java.util.Set;
import java.util.ArrayList;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.Widget;
@ -24,9 +23,9 @@ import org.eclipse.swt.widgets.Widget;
* A <code>ProblemItemMapper</code> is contained that maps all items in
* the tree to underlying resource
*/
public class ProblemTreeViewer extends TreeViewer implements IProblemChangedListener {
public class ProblemTreeViewer extends TreeViewer {
protected ProblemItemMapper fProblemItemMapper;
protected ResourceToItemsMapper fResourceToItemsMapper;
/*
* @see TreeViewer#TreeViewer(Composite)
@ -53,44 +52,39 @@ public class ProblemTreeViewer extends TreeViewer implements IProblemChangedList
}
private void initMapper() {
fProblemItemMapper= new ProblemItemMapper();
fResourceToItemsMapper= new ResourceToItemsMapper(this);
}
/*
* @see IProblemChangedListener#problemsChanged
*/
public void problemsChanged(final Set changed) {
Control control= getControl();
if (control != null && !control.isDisposed()) {
control.getDisplay().asyncExec(new Runnable() {
public void run() {
fProblemItemMapper.problemsChanged(changed, (ILabelProvider)getLabelProvider());
}
});
}
}
/*
* @see StructuredViewer#mapElement(Object, Widget)
*/
protected void mapElement(Object element, Widget item) {
super.mapElement(element, item);
if (item instanceof Item) {
fProblemItemMapper.addToMap(element, (Item) item);
fResourceToItemsMapper.addToMap(element, (Item) item);
}
}
/*
* @see StructuredViewer#unmapElement(Object, Widget)
*/
protected void unmapElement(Object element, Widget item) {
if (item instanceof Item) {
fProblemItemMapper.removeFromMap(element, (Item) item);
fResourceToItemsMapper.removeFromMap(element, (Item) item);
}
super.unmapElement(element);
}
/*
* @see StructuredViewer#unmapAllElements()
*/
protected void unmapAllElements() {
fResourceToItemsMapper.clearMap();
super.unmapAllElements();
}
/*
* @see ContentViewer#handleLabelProviderChanged(LabelProviderChangedEvent)
*/
@ -100,39 +94,26 @@ public class ProblemTreeViewer extends TreeViewer implements IProblemChangedList
super.handleLabelProviderChanged(event);
return;
}
/*
// map the event to the Java elements if possible
// this does not handle the ambiguity of default packages
Object[] mapped= new Object[source.length];
for (int i= 0; i < source.length; i++) {
Object o= source[i];
// needs to handle the case of:
// default package
// package fragment root on project
if (o instanceof IResource) {
IResource r= (IResource)o;
IJavaElement element= JavaCore.create(r);
if (element != null)
mapped[i]= element;
else
mapped[i]= o;
} else {
mapped[i]= o;
Object[] changed= event.getElements();
if (changed != null && !fResourceToItemsMapper.isEmpty()) {
ArrayList others= new ArrayList(changed.length);
for (int i= 0; i < changed.length; i++) {
Object curr= changed[i];
if (curr instanceof IResource) {
fResourceToItemsMapper.resourceChanged((IResource) curr);
} else {
others.add(curr);
}
}
}
super.handleLabelProviderChanged(new LabelProviderChangedEvent((IBaseLabelProvider)event.getSource(), mapped)); */
if (others.isEmpty()) {
return;
}
event= new LabelProviderChangedEvent((IBaseLabelProvider) event.getSource(), others.toArray());
}
super.handleLabelProviderChanged(event);
return;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.StructuredViewer#handleInvalidSelection(org.eclipse.jface.viewers.ISelection, org.eclipse.jface.viewers.ISelection)
*/
protected void handleInvalidSelection(ISelection invalidSelection, ISelection newSelection) {
super.handleInvalidSelection(invalidSelection, newSelection);
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.AbstractTreeViewer#isExpandable(java.lang.Object)

View file

@ -8,10 +8,8 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.browser.cbrowsing;
package org.eclipse.cdt.internal.ui.viewsupport;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.ui.PreferenceConstants;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;

View file

@ -1,4 +1,4 @@
package org.eclipse.cdt.internal.ui;
package org.eclipse.cdt.internal.ui.viewsupport;
/*
* (c) Copyright IBM Corp. 2000, 2001.
@ -20,6 +20,7 @@ import org.eclipse.cdt.core.model.ISourceRoot;
import org.eclipse.cdt.core.model.ITemplate;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IFile;

View file

@ -8,13 +8,12 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.browser.cbrowsing;
package org.eclipse.cdt.internal.ui.viewsupport;
import java.util.ArrayList;
import org.eclipse.cdt.core.browser.ITypeInfo;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.internal.ui.browser.cbrowsing.StorageLabelProvider;
import org.eclipse.cdt.ui.browser.typeinfo.TypeInfoLabelProvider;
import org.eclipse.core.resources.IStorage;
@ -116,7 +115,7 @@ public class CUILabelProvider extends LabelProvider implements IColorProvider {
protected int evaluateTextFlags(Object element) {
return getTextFlags();
}
protected Image decorateImage(Image image, Object element) {
if (fLabelDecorators != null && image != null) {
for (int i= 0; i < fLabelDecorators.size(); i++) {

View file

@ -8,7 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.browser.cbrowsing;
package org.eclipse.cdt.internal.ui.viewsupport;
import org.eclipse.swt.graphics.Color;

View file

@ -8,7 +8,7 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.browser.cbrowsing;
package org.eclipse.cdt.internal.ui.viewsupport;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
@ -19,7 +19,6 @@ import org.eclipse.cdt.internal.corext.refactoring.ListenerList;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.util.IProblemChangedListener;
import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
import org.eclipse.cdt.internal.ui.viewsupport.ImageImageDescriptor;
import org.eclipse.cdt.ui.CElementImageDescriptor;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.core.resources.IFile;
@ -159,29 +158,18 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
case ICElement.C_PROJECT:
case ICElement.C_CCONTAINER:
return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_INFINITE, null);
// case ICElement.PACKAGE_FRAGMENT:
// case ICElement.CLASS_FILE:
// return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_ONE, null);
// case ICElement.COMPILATION_UNIT:
// case ICElement.PACKAGE_DECLARATION:
// case ICElement.IMPORT_DECLARATION:
// case ICElement.IMPORT_CONTAINER:
// case ICElement.TYPE:
// case ICElement.INITIALIZER:
// case ICElement.METHOD:
// case ICElement.FIELD:
// case ICElement.LOCAL_VARIABLE:
// ICompilationUnit cu= (ICompilationUnit) element.getAncestor(ICElement.COMPILATION_UNIT);
// if (cu != null) {
// ISourceReference ref= (type == ICElement.COMPILATION_UNIT) ? null : (ISourceReference) element;
// // The assumption is that only source elements in compilation unit can have markers
// if (cu.isWorkingCopy()) {
// // working copy: look at annotation model
// return getErrorTicksFromWorkingCopy(cu, ref);
// }
// return getErrorTicksFromMarkers(cu.getResource(), IResource.DEPTH_ONE, ref);
// }
// break;
case ICElement.C_UNIT:
return getErrorTicksFromMarkers(element.getResource(), IResource.DEPTH_ONE, null);
case ICElement.C_FUNCTION:
case ICElement.C_CLASS:
case ICElement.C_UNION:
case ICElement.C_STRUCT:
case ICElement.C_VARIABLE:
case ICElement.C_METHOD:
ITranslationUnit tu= ((ISourceReference)element).getTranslationUnit();
if (tu != null && tu.exists()) {
return getErrorTicksFromMarkers(tu.getResource(), IResource.DEPTH_ONE, tu);
}
default:
}
} else if (obj instanceof IResource) {
@ -315,14 +303,14 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
fListeners= new ListenerList();
}
fListeners.add(listener);
// if (fProblemChangedListener == null) {
// fProblemChangedListener= new IProblemChangedListener() {
// public void problemsChanged(IResource[] changedResources, boolean isMarkerChange) {
// fireProblemsChanged(changedResources, isMarkerChange);
// }
// };
// CUIPlugin.getDefault().getProblemMarkerManager().addListener(fProblemChangedListener);
// }
if (fProblemChangedListener == null) {
fProblemChangedListener= new IProblemChangedListener() {
public void problemsChanged(IResource[] changedResources, boolean isMarkerChange) {
fireProblemsChanged(changedResources, isMarkerChange);
}
};
CUIPlugin.getDefault().getProblemMarkerManager().addListener(fProblemChangedListener);
}
}
/* (non-Javadoc)

View file

@ -8,7 +8,7 @@
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui;
package org.eclipse.cdt.internal.ui.viewsupport;
import org.eclipse.cdt.ui.*;
@ -20,17 +20,14 @@ import org.eclipse.jface.util.PropertyChangeEvent;
* CElementLabelProvider that respects settings from the Appearance preference page.
* Triggers a viewer update when a preference changes.
*/
public class StandardCElementLabelProvider extends CElementLabelProvider implements IPropertyChangeListener {
public class StandardCElementLabelProvider extends AppearanceAwareLabelProvider implements IPropertyChangeListener {
//public final static int DEFAULT_FLAGS = SHOW_OVERLAY_ICONS | SHOW_PARAMETERS;
public final static int DEFAULT_FLAGS = SHOW_OVERLAY_ICONS ;
/**
* Constructor for StandardCElementLabelProvider.
* @see CElementLabelProvider#CElementLabelProvider
*/
public StandardCElementLabelProvider(int flags, IAdornmentProvider[] adormentProviders) {
super(flags, adormentProviders);
public StandardCElementLabelProvider(int textFlags, int imageFlags) {
super(textFlags, imageFlags);
initMasks();
CUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
}
@ -40,7 +37,7 @@ public class StandardCElementLabelProvider extends CElementLabelProvider impleme
* and the ErrorTickAdornmentProvider.
*/
public StandardCElementLabelProvider() {
this(DEFAULT_FLAGS, new IAdornmentProvider[] { new ErrorTickAdornmentProvider() });
super();
}
private void initMasks() {

View file

@ -10,8 +10,8 @@
*******************************************************************************/
package org.eclipse.cdt.internal.ui.wizards.classwizard;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProviderListener;

View file

@ -13,10 +13,10 @@ import org.eclipse.cdt.core.model.INamespace;
import org.eclipse.cdt.core.model.ITemplate;
import org.eclipse.cdt.core.model.ITypeDef;
import org.eclipse.cdt.core.model.IVariableDeclaration;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.ErrorTickAdornmentProvider;
import org.eclipse.cdt.internal.ui.IAdornmentProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.model.WorkbenchLabelProvider;
@ -83,7 +83,6 @@ public class CElementLabelProvider extends LabelProvider {
private WorkbenchLabelProvider fWorkbenchLabelProvider;
protected CElementImageProvider fImageLabelProvider;
private IAdornmentProvider[] fAdornmentProviders;
private int fFlags;
private int fImageFlags;
@ -94,18 +93,9 @@ public class CElementLabelProvider extends LabelProvider {
}
public CElementLabelProvider(int flags) {
this(flags, null);
}
/**
* @param textFlags Flags defined in <code>CElementLabels</code>.
* @param imageFlags Flags defined in <code>CElementImageProvider</code>.
*/
public CElementLabelProvider(int flags, IAdornmentProvider[] adormentProviders) {
fWorkbenchLabelProvider= new WorkbenchLabelProvider();
fImageLabelProvider= new CElementImageProvider();
fAdornmentProviders= adormentProviders;
fFlags = flags;
}
@ -199,38 +189,13 @@ public class CElementLabelProvider extends LabelProvider {
* @see ILabelProvider#getImage
*/
public Image getImage(Object element) {
return fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
return fImageLabelProvider.getImageLabel(element, getImageFlags());
}
protected int evaluateImageFlags(Object element) {
int imageFlags= getImageFlags();
if (fAdornmentProviders != null) {
for (int i= 0; i < fAdornmentProviders.length; i++) {
imageFlags |= fAdornmentProviders[i].computeAdornmentFlags(element);
}
}
return imageFlags;
}
protected Image decorateImage(Image image, Object element) {
// if (fLabelDecorators != null && image != null) {
// for (int i= 0; i < fLabelDecorators.size(); i++) {
// ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
// image= decorator.decorateImage(image, element);
// }
// }
return image;
}
/**
* @see IBaseLabelProvider#dispose()
*/
public void dispose() {
if (fAdornmentProviders != null) {
for (int i= 0; i < fAdornmentProviders.length; i++) {
fAdornmentProviders[i].dispose();
}
}
if (fWorkbenchLabelProvider != null) {
fWorkbenchLabelProvider.dispose();
fWorkbenchLabelProvider= null;
@ -244,24 +209,6 @@ public class CElementLabelProvider extends LabelProvider {
return (fFlags & flag) != 0;
}
/**
* Turns on the rendering options specified in the given flags.
*
* @param flags the options; a bitwise OR of <code>SHOW_* </code> constants
*/
public void turnOn(int flags) {
fFlags |= flags;
}
/**
* Turns off the rendering options specified in the given flags.
*
* @param flags the initial options; a bitwise OR of <code>SHOW_* </code> constants
*/
public void turnOff(int flags) {
fFlags &= (~flags);
}
/**
* Gets the image flags.
* Can be overwriten by super classes.
@ -298,17 +245,4 @@ public class CElementLabelProvider extends LabelProvider {
}
return fTextFlags;
}
public static IAdornmentProvider[] getAdornmentProviders(boolean errortick, IAdornmentProvider extra) {
if (errortick) {
if (extra == null) {
return new IAdornmentProvider[] { new ErrorTickAdornmentProvider() };
}
return new IAdornmentProvider[] { new ErrorTickAdornmentProvider(), extra };
}
if (extra != null) {
return new IAdornmentProvider[] { extra };
}
return null;
}
}