Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcvs2svn2003-02-25 01:42:14 +0000
committercvs2svn2003-02-25 01:42:14 +0000
commitf3a72d7ae15c515a3dad8679e59230c3ed89b3e8 (patch)
treea653486d581fa03e67e24c0c2177be7ea95cf1e1
parent6d601ad8d20f872f37a39125f5d1dc92d975eab5 (diff)
downloadorg.eclipse.cdt-f3a72d7ae15c515a3dad8679e59230c3ed89b3e8.tar.gz
org.eclipse.cdt-f3a72d7ae15c515a3dad8679e59230c3ed89b3e8.tar.xz
org.eclipse.cdt-f3a72d7ae15c515a3dad8679e59230c3ed89b3e8.zip
This commit was manufactured by cvs2svn to create branch 'NewParser1'.
Cherrypick from master 2003-02-25 01:42:13 UTC Alain Magloire <alain@qnx.com> 'Reorginaze import to remove warnings.': core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementContentProvider.java core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementContentProvider.java293
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java164
2 files changed, 457 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementContentProvider.java
new file mode 100644
index 00000000000..f9a151acd7a
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementContentProvider.java
@@ -0,0 +1,293 @@
+package org.eclipse.cdt.ui;
+
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+
+
+import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.ElementChangedEvent;
+import org.eclipse.cdt.core.model.IArchive;
+import org.eclipse.cdt.core.model.IBinary;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICElementDelta;
+import org.eclipse.cdt.core.model.ICFile;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.ICRoot;
+import org.eclipse.cdt.core.model.IElementChangedListener;
+import org.eclipse.cdt.core.model.IParent;
+import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.internal.ui.BaseCElementContentProvider;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Control;
+
+public class CElementContentProvider extends BaseCElementContentProvider implements ITreeContentProvider, IElementChangedListener {
+
+ protected StructuredViewer fViewer;
+ protected Object fInput;
+
+ /* (non-Cdoc)
+ * Method declared on IContentProvider.
+ */
+ public void dispose() {
+ super.dispose();
+ CoreModel.getDefault().removeElementChangedListener(this);
+ }
+
+ /* (non-Cdoc)
+ * Method declared on IContentProvider.
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ super.inputChanged(viewer, oldInput, newInput);
+
+ fViewer = (StructuredViewer)viewer;
+
+ if (oldInput == null && newInput != null) {
+ if (newInput instanceof ICRoot)
+ CoreModel.getDefault().addElementChangedListener(this);
+ } else if (oldInput != null && newInput == null) {
+ CoreModel.getDefault().removeElementChangedListener(this);
+ }
+ fInput= newInput;
+ }
+
+ /**
+ * Creates a new content provider for C elements.
+ */
+ public CElementContentProvider() {
+ }
+
+ /**
+ * Creates a new content provider for C elements.
+ */
+ public CElementContentProvider(boolean provideMembers, boolean provideWorkingCopy) {
+ super(provideMembers, provideWorkingCopy);
+ }
+
+ /* (non-Cdoc)
+ * Method declared on IElementChangedListener.
+ */
+ public void elementChanged(final ElementChangedEvent event) {
+ try {
+ processDelta(event.getDelta());
+ } catch(CModelException e) {
+ CUIPlugin.getDefault().log(e);
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Processes a delta recursively. When more than two children are affected the
+ * tree is fully refreshed starting at this node. The delta is processed in the
+ * current thread but the viewer updates are posted to the UI thread.
+ */
+ protected void processDelta(ICElementDelta delta) throws CModelException {
+ int kind= delta.getKind();
+ int flags= delta.getFlags();
+ ICElement element= delta.getElement();
+
+ //System.out.println("Processing " + element);
+ // handle open and closing of a solution or project
+ if (((flags & ICElementDelta.F_CLOSED) != 0)
+ || ((flags & ICElementDelta.F_OPENED) != 0)) {
+ postRefresh(element);
+ }
+
+ if (kind == ICElementDelta.REMOVED) {
+ Object parent = getParent(element);
+ postRemove(element);
+ if (element instanceof ICFile) {
+ ICFile cfile = (ICFile)element;
+ if (updateContainer(cfile)) {
+ postRefresh(parent);
+ }
+ }
+ }
+
+ if (kind == ICElementDelta.ADDED) {
+ Object parent= getParent(element);
+ postAdd(parent, element);
+ if (element instanceof ICFile) {
+ ICFile cfile = (ICFile)element;
+ if (updateContainer(cfile)) {
+ postRefresh(parent);
+ }
+ }
+ }
+
+ if (kind == ICElementDelta.CHANGED) {
+ if ((flags & ICElementDelta.F_BINARY_PARSER_CHANGED) != 0) {
+ // throw the towel and do a full refresh of the affected C project.
+ postRefresh(element.getCProject());
+ return;
+ } else if (element instanceof ITranslationUnit ||
+ element instanceof IBinary || element instanceof IArchive) {
+ postRefresh(element);
+ return;
+ }
+
+ }
+
+ ICElementDelta[] affectedChildren= delta.getAffectedChildren();
+ for (int i= 0; i < affectedChildren.length; i++) {
+ processDelta(affectedChildren[i]);
+ }
+
+ // Make sure that containers are updated.
+ //if (element instanceof ICRoot) {
+ // updateContainer((ICRoot)element);
+ //}
+ }
+
+ private void updateContainer(ICRoot root) {
+ postRunnable(new Runnable() {
+ public void run () {
+ Control ctrl= fViewer.getControl();
+ if (ctrl != null && !ctrl.isDisposed()) {
+ IStructuredSelection s = (IStructuredSelection)fViewer.getSelection();
+ if (s.isEmpty())
+ return;
+ Object element = s.getFirstElement();
+ if (element instanceof ICProject) {
+ updateContainer((ICProject)element);
+ }
+ }
+ }
+ });
+ }
+
+ protected boolean updateContainer(ICProject cproject) {
+ IParent binContainer = cproject.getBinaryContainer();
+ IParent libContainer = cproject.getArchiveContainer();
+ if (binContainer != null) {
+ postContainerRefresh(binContainer, cproject);
+ }
+ if (libContainer != null) {
+ postContainerRefresh(libContainer, cproject);
+ }
+ return false;
+ }
+
+ private boolean updateContainer(ICFile cfile) {
+ IParent container = null;
+ ICProject cproject = null;
+ if (cfile.isBinary()) {
+ IBinary bin = (IBinary)cfile;
+ if (bin.isExecutable() || bin.isSharedLib()) {
+ cproject = bin.getCProject();
+ container = cproject.getBinaryContainer();
+ }
+ } else if (cfile.isArchive()) {
+ cproject = cfile.getCProject();
+ container = cproject.getArchiveContainer();
+ }
+ if (container != null) {
+ postContainerRefresh(container, cproject);
+ return true;
+ }
+ return false;
+ }
+
+ private void postContainerRefresh(final IParent container, final ICProject cproject) {
+ //System.out.println("UI Container:" + cproject + " " + container);
+ postRunnable(new Runnable() {
+ public void run () {
+ Control ctrl= fViewer.getControl();
+ if (ctrl != null && !ctrl.isDisposed()) {
+ if (container.hasChildren()) {
+ if (fViewer.testFindItem(container) != null) {
+ fViewer.refresh(container);
+ } else {
+ fViewer.refresh(cproject);
+ }
+ } else {
+ fViewer.refresh(cproject);
+ }
+ }
+ }
+ });
+ }
+
+ private void postRefresh(final Object root) {
+ //System.out.println("UI refresh:" + root);
+ postRunnable(new Runnable() {
+ public void run() {
+ // 1GF87WR: ITPUI:ALL - SWTEx + NPE closing a workbench window.
+ Control ctrl= fViewer.getControl();
+ if (ctrl != null && !ctrl.isDisposed())
+ fViewer.refresh(root);
+ }
+ });
+ }
+
+ private void postAdd(final Object parent, final Object element) {
+ //System.out.println("UI add:" + parent + " " + element);
+ postRunnable(new Runnable() {
+ public void run() {
+ // 1GF87WR: ITPUI:ALL - SWTEx + NPE closing a workbench window.
+ Control ctrl= fViewer.getControl();
+ if (ctrl != null && !ctrl.isDisposed())
+// fViewer.add(parent, element);
+ fViewer.refresh(parent);
+ }
+ });
+ }
+
+ private void postRemove(final Object element) {
+ //System.out.println("UI remove:" + element);
+ postRunnable(new Runnable() {
+ public void run() {
+ // 1GF87WR: ITPUI:ALL - SWTEx + NPE closing a workbench window.
+ Control ctrl= fViewer.getControl();
+ if (ctrl != null && !ctrl.isDisposed())
+// fViewer.remove(element);
+ fViewer.refresh(getParent(element));
+ }
+ });
+ }
+
+ private void postRunnable(final Runnable r) {
+ Control ctrl= fViewer.getControl();
+ if (ctrl != null && !ctrl.isDisposed())
+ ctrl.getDisplay().asyncExec(r);
+ }
+
+ /**
+ * The workbench has changed. Process the delta and issue updates to the viewer,
+ * inside the UI thread.
+ *
+ * @see IResourceChangeListener#resourceChanged
+ */
+ //public void resourceChanged(final IResourceChangeEvent event) {
+ // final IResourceDelta delta = event.getDelta();
+ // Control ctrl = viewer.getControl();
+ // if (ctrl != null && !ctrl.isDisposed()) {
+ // ctrl.getDisplay().syncExec(new Runnable() {
+ // public void run() {
+ // processDelta(delta);
+ // }
+ // });
+ // }
+ //}
+
+
+ /**
+ * Returns the implementation of IWorkbenchAdapter for the given
+ * object. Returns null if the adapter is not defined or the
+ * object is not adaptable.
+ */
+ protected ICElement getAdapter(Object o) {
+ if (!(o instanceof IAdaptable)) {
+ return null;
+ }
+ return (ICElement)((IAdaptable)o).getAdapter(ICElement.class);
+ }
+
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java
new file mode 100644
index 00000000000..81f5625de04
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java
@@ -0,0 +1,164 @@
+package org.eclipse.cdt.ui;
+
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+
+import org.eclipse.cdt.core.model.IBinary;
+import org.eclipse.cdt.core.model.ICElement;
+import org.eclipse.cdt.core.model.ICFile;
+import org.eclipse.cdt.internal.ui.CElementImageProvider;
+import org.eclipse.cdt.internal.ui.ErrorTickAdornmentProvider;
+import org.eclipse.cdt.internal.ui.IAdornmentProvider;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+
+/**
+ * The label provider for the c model elements.
+ */
+public class CElementLabelProvider extends LabelProvider {
+
+ private ImageRegistry fImageRegistry;
+ private WorkbenchLabelProvider fWorkbenchLabelProvider;
+
+ private CElementImageProvider fImageLabelProvider;
+
+ private IAdornmentProvider[] fAdornmentProviders;
+
+ private int fImageFlags;
+ private int fTextFlags;
+
+ public CElementLabelProvider() {
+ this(0 /* CElementLabels.M_PARAMETER_TYPES */, CElementImageProvider.OVERLAY_ICONS, null);
+ }
+
+ /**
+ * @param textFlags Flags defined in <code>JavaElementLabels</code>.
+ * @param imageFlags Flags defined in <code>JavaElementImageProvider</code>.
+ */
+ public CElementLabelProvider(int textFlags, int imageFlags, IAdornmentProvider[] adormentProviders) {
+ fImageRegistry= CUIPlugin.getDefault().getImageRegistry();
+ fWorkbenchLabelProvider= new WorkbenchLabelProvider();
+
+ fImageLabelProvider= new CElementImageProvider();
+ fAdornmentProviders= adormentProviders;
+
+ fImageFlags= imageFlags;
+ fTextFlags= textFlags;
+ }
+
+ /**
+ * @see ILabelProvider#getText
+ */
+ public String getText(Object element) {
+ if (element instanceof ICElement) {
+ ICElement celem= (ICElement)element;
+
+ String name= celem.getElementName();
+ if (celem.getElementType() == ICElement.C_FUNCTION) {
+ name += "()";
+ } else if(celem.getElementType() == ICElement.C_FUNCTION_DECLARATION) {
+ name += "();";
+ }
+ if (celem instanceof IBinary) {
+ IBinary bin = (IBinary)celem;
+ name += " - [" + bin.getCPU() + (bin.isLittleEndian() ? "le" : "be") + "]";
+ }
+ return name;
+ }
+ return fWorkbenchLabelProvider.getText(element);
+ }
+
+ /**
+ * @see ILabelProvider#getImage
+ */
+ public Image getImage(Object element) {
+ int imageFlags= getImageFlags();
+ if (fAdornmentProviders != null) {
+ for (int i= 0; i < fAdornmentProviders.length; i++) {
+ imageFlags |= fAdornmentProviders[i].computeAdornmentFlags(element);
+ }
+ }
+
+ if(element instanceof ICElement) {
+ Image result= fImageLabelProvider.getImageLabel(element, imageFlags);
+ if (result != null) {
+ return result;
+ }
+ }
+ if(element instanceof ICFile) {
+ //element = ((ICFile)element).getFile();
+ }
+ return fWorkbenchLabelProvider.getImage(element);
+
+ }
+
+ /**
+ * @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;
+ }
+ fImageRegistry= null;
+ if(fImageLabelProvider != null) {
+ fImageLabelProvider.dispose();
+ }
+ }
+
+ /**
+ * Sets the textFlags.
+ * @param textFlags The textFlags to set
+ */
+ public void setTextFlags(int textFlags) {
+ fTextFlags= textFlags;
+ }
+
+ /**
+ * Sets the imageFlags
+ * @param imageFlags The imageFlags to set
+ */
+ public void setImageFlags(int imageFlags) {
+ fImageFlags= imageFlags;
+ }
+
+ /**
+ * Gets the image flags.
+ * Can be overwriten by super classes.
+ * @return Returns a int
+ */
+ public int getImageFlags() {
+ return fImageFlags;
+ }
+
+ /**
+ * Gets the text flags. Can be overwriten by super classes.
+ * @return Returns a int
+ */
+ public int getTextFlags() {
+ return fTextFlags;
+ }
+
+ public static IAdornmentProvider[] getAdornmentProviders(boolean errortick, IAdornmentProvider extra) {
+ if (errortick) {
+ if (extra == null) {
+ return new IAdornmentProvider[] { new ErrorTickAdornmentProvider() };
+ } else {
+ return new IAdornmentProvider[] { new ErrorTickAdornmentProvider(), extra };
+ }
+ }
+ if (extra != null) {
+ return new IAdornmentProvider[] { extra };
+ }
+ return null;
+ }
+}

Back to the top