Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] cdt.ui patch

====
Email bounced, the first time.
====

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/ChangeLog,v
retrieving revision 1.75
diff -u -r1.75 ChangeLog
--- ChangeLog	27 Mar 2003 20:02:04 -0000	1.75
+++ ChangeLog	31 Mar 2003 03:51:19 -0000
@@ -1,5 +1,20 @@
 2003-03-27 Alain Magloire
 
+	The selection in the CView to CEditor was not done.
+	We have now a new hierarchy for the binary and Archive:
+	IBinary
+		IBinaryModule
+			IBinaryFunction
+			IBinaryVariable
+				IBinaryElement
+
+	* src/org/eclipse/cdt/internal/ui/cview/CView.java
+	* src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
+	* src/org/eclipse/cdt/internal/ui/CElementImageProvider.java
+	* src/org/eclipse/cdt/ui/CElementContentProvider.java
+
+2003-03-27 Alain Magloire
+
 	Patch from Thomas Fletcher.
 	
 	* src/org/eclipse/cdt/internal/ui/editor/BracketPainter.java:
Index: src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java,v
retrieving revision 1.4
diff -u -r1.4 BaseCElementContentProvider.java
--- src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java	27 Mar 2003 16:12:17 -0000	1.4
+++ src/org/eclipse/cdt/internal/ui/BaseCElementContentProvider.java	31 Mar 2003 03:51:21 -0000
@@ -9,6 +9,7 @@
 import java.util.List;
 
 import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.model.IArchive;
 import org.eclipse.cdt.core.model.IArchiveContainer;
 import org.eclipse.cdt.core.model.IBinary;
@@ -157,7 +158,9 @@
 			} else {
 				return true;	
 			}
-		} else if (element instanceof ICContainer) {
+		}
+ 
+		if (element instanceof ICContainer) {
 			return true;
 		}
 		
@@ -173,13 +176,23 @@
 	 * Method declared on ITreeContentProvider.
 	 */
 	public Object getParent(Object element) {
-		//if (!exists(element))
-		//	return null;
+		if (!exists(element)) {
+			return null;
+		}
+		return internalGetParent(element);
+	}
+
+	public Object internalGetParent(Object element) {
 		if (element instanceof ICElement) {
 			return ((ICElement)element).getParent();			
 		}
 		if (element instanceof IResource) {
-			return ((IResource)element).getParent();
+			IResource parent= ((IResource)element).getParent();
+			ICElement cParent= CoreModel.getDefault().create(parent);
+			if (cParent != null && cParent.exists()) {
+				return cParent;
+			}
+			return parent;
 		}
 		return null;
 	}
Index: src/org/eclipse/cdt/internal/ui/CElementImageProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CElementImageProvider.java,v
retrieving revision 1.7
diff -u -r1.7 CElementImageProvider.java
--- src/org/eclipse/cdt/internal/ui/CElementImageProvider.java	28 Mar 2003 21:05:24 -0000	1.7
+++ src/org/eclipse/cdt/internal/ui/CElementImageProvider.java	31 Mar 2003 03:51:22 -0000
@@ -6,11 +6,12 @@
  */
 
 import org.eclipse.cdt.core.model.IBinary;
+import org.eclipse.cdt.core.model.IBinaryModule;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IDeclaration;
 import org.eclipse.cdt.core.model.IMember;
 import org.eclipse.cdt.core.model.IMethodDeclaration;
-import org.eclipse.cdt.core.model.IDeclaration;
 import org.eclipse.cdt.internal.ui.util.ImageDescriptorRegistry;
 import org.eclipse.cdt.ui.CElementImageDescriptor;
 import org.eclipse.cdt.ui.CUIPlugin;
@@ -158,6 +159,9 @@
 		int type = celement.getElementType();
 		switch (type) {
 			case ICElement.C_VCONTAINER:
+				if (celement instanceof IBinaryModule) {
+					return CPluginImages.DESC_OBJS_BINARY;
+				}
 				return CPluginImages.DESC_OBJS_CONTAINER;
 
 			case ICElement.C_BINARY: {
Index: src/org/eclipse/cdt/internal/ui/cview/CView.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/cview/CView.java,v
retrieving revision 1.16
diff -u -r1.16 CView.java
--- src/org/eclipse/cdt/internal/ui/cview/CView.java	27 Mar 2003 16:12:17 -0000	1.16
+++ src/org/eclipse/cdt/internal/ui/cview/CView.java	31 Mar 2003 03:51:26 -0000
@@ -13,9 +13,13 @@
 import org.eclipse.cdt.core.model.IArchiveContainer;
 import org.eclipse.cdt.core.model.IBinary;
 import org.eclipse.cdt.core.model.IBinaryContainer;
+import org.eclipse.cdt.core.model.IBinaryModule;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICModel;
+import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.core.model.IParent;
+import org.eclipse.cdt.core.model.ISourceReference;
+import org.eclipse.cdt.core.model.ITranslationUnit;
 import org.eclipse.cdt.core.resources.MakeUtil;
 import org.eclipse.cdt.internal.ui.StandardCElementLabelProvider;
 import org.eclipse.cdt.internal.ui.editor.CEditor;
@@ -36,6 +40,7 @@
 import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
@@ -83,6 +88,7 @@
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IMemento;
 import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IStorageEditorInput;
 import org.eclipse.ui.IViewSite;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchPage;
@@ -966,17 +972,24 @@
 				ICElement celement = (ICElement)o;
 				IResource res  = (IResource)celement.getAdapter(IResource.class);
 				if (res != null) {
-					if (celement.getElementType() == ICElement.C_VCONTAINER) {   
-						ICElement parent = celement.getParent();
-						IResource proj = (IResource)parent.getAdapter(IResource.class);
-						if (celement instanceof IArchiveContainer)
-							return proj.getFullPath() + " - archives";
-						else
-							return proj.getFullPath() + " - binaries";
-					} else if (celement.getElementType() > ICElement.C_UNIT) {
-						return res.getFullPath().toString() + " - [" + celement.getElementName() +"]";
-					}
 					return res.getFullPath().toString();
+				} else if (celement.getElementType() == ICElement.C_VCONTAINER) {					   
+					if (celement instanceof IBinaryContainer) {
+						ICProject cproj = celement.getCProject();
+						if (cproj != null) {
+							return cproj.getPath() + " - binaries";
+						}
+					} else if (celement instanceof IArchiveContainer) {
+						ICProject cproj = celement.getCProject();
+						if (cproj != null) {
+							return cproj.getPath() + " - archives";
+						}
+					} else if (celement instanceof IBinaryModule) {
+						IBinary bin = ((IBinaryModule)celement).getBinary();
+						return bin.getPath() + ":" + celement.getElementName();
+					}
+				} else if (celement.getElementType() > ICElement.C_UNIT) {
+					return celement.getPath().toString() + " - [" + celement.getElementName() +"]";
 				}
 				return celement.getElementName();
 			} else {
@@ -1141,24 +1154,30 @@
 					return;
 				}
 			}
-		} else if (obj instanceof ICElement) {
-			ICElement celement = (ICElement) obj;
-			IResource res = (IResource)celement.getAdapter(IResource.class);
-			if (res == null || !(res instanceof IFile))
+		} else if (obj instanceof ISourceReference) {
+			ISourceReference sourceRef = (ISourceReference) obj;
+			ITranslationUnit tu = sourceRef.getTranslationUnit();
+			if (tu == null) 
+				return;
+			IPath path = tu.getPath();
+			if (path == null)
 				return;
 			IWorkbenchPage page = getSite().getPage();
 			IEditorReference editorReferences[] = page.getEditorReferences();
 			for (int i = 0; i < editorReferences.length; ++i) {
 				IEditorPart editor = editorReferences[i].getEditor(false);
-				if(null != editor) {
+				if (null != editor) {
 					IEditorInput input = editor.getEditorInput();
-					if (input instanceof IFileEditorInput && res.equals(((IFileEditorInput)input).getFile())) {
-						page.bringToTop(editor);
-						if (editor instanceof CEditor) {
-							CEditor e = (CEditor)editor;
-							e.selectionChanged (new SelectionChangedEvent (e.getOutlinePage (),selection));
+					try {
+						if (input instanceof IStorageEditorInput && path.equals(((IStorageEditorInput)input).getStorage().getFullPath())) {
+							page.bringToTop(editor);
+							if (editor instanceof CEditor) {
+								CEditor e = (CEditor)editor;
+								e.selectionChanged (new SelectionChangedEvent (e.getOutlinePage (),selection));
+							}
+							return;
 						}
-						return;
+					} catch (CoreException e) {
 					}
 				}
 			}
Index: src/org/eclipse/cdt/ui/CElementContentProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementContentProvider.java,v
retrieving revision 1.3
diff -u -r1.3 CElementContentProvider.java
--- src/org/eclipse/cdt/ui/CElementContentProvider.java	27 Mar 2003 16:11:56 -0000	1.3
+++ src/org/eclipse/cdt/ui/CElementContentProvider.java	31 Mar 2003 03:51:28 -0000
@@ -11,6 +11,7 @@
 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.ICContainer;
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICElementDelta;
 import org.eclipse.cdt.core.model.ICModel;
@@ -19,6 +20,8 @@
 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.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.StructuredViewer;
@@ -99,7 +102,7 @@
 		}
 
 		if (kind == ICElementDelta.REMOVED) {
-			Object parent = getParent(element);
+			Object parent = internalGetParent(element);
 			postRemove(element);
 			if (updateContainer(element)) {
 				postRefresh(parent);
@@ -107,7 +110,7 @@
 		}
 
 		if (kind == ICElementDelta.ADDED) {
-			Object parent= getParent(element);
+			Object parent= internalGetParent(element);
 			postAdd(parent, element);
 			if (updateContainer(element)) {
 				postRefresh(parent);
@@ -127,6 +130,13 @@
 
 		}
 
+		if (delta.getResourceDeltas() != null) {
+			IResourceDelta[] rd= delta.getResourceDeltas();
+			for (int i= 0; i < rd.length; i++) {
+				processResourceDelta(rd[i], element);
+			}
+		}
+
 		ICElementDelta[] affectedChildren= delta.getAffectedChildren();
 		for (int i= 0; i < affectedChildren.length; i++) {
 			processDelta(affectedChildren[i]);
@@ -138,6 +148,48 @@
 		//}
 	}
 
+	/*
+	 * Process resource deltas
+	 */
+	private void processResourceDelta(IResourceDelta delta, Object parent) {
+		int status= delta.getKind();
+		IResource resource= delta.getResource();
+		// filter out changes affecting the output folder
+		if (resource == null) {
+			return;
+		}
+                        
+		// this could be optimized by handling all the added children in the parent
+		if ((status & IResourceDelta.REMOVED) != 0) {
+			if (!(parent instanceof ICContainer)) {
+				// refresh one level above to deal with empty package filtering properly
+				postRefresh(internalGetParent(parent));
+			} else {
+				postRemove(resource);
+			}
+		}
+		if ((status & IResourceDelta.ADDED) != 0) {
+			if (!(parent instanceof ICContainer)) {
+				// refresh one level above to deal with empty package filtering properly
+				postRefresh(internalGetParent(parent));
+			} else {
+				postAdd(parent, resource);
+			}
+		}
+		IResourceDelta[] affectedChildren= delta.getAffectedChildren();
+
+		if (affectedChildren.length > 1) {
+			// more than one child changed, refresh from here downwards
+			postRefresh(resource);
+			return;
+		}
+
+		for (int i= 0; i < affectedChildren.length; i++) {
+			processResourceDelta(affectedChildren[i], resource);
+		}
+	}
+
+
 //	private void updateContainer(ICModel root) {
 //		postRunnable(new Runnable() {
 //			public void run () {
@@ -240,7 +292,7 @@
 				Control ctrl= fViewer.getControl();
 				if (ctrl != null && !ctrl.isDisposed())
 //			fViewer.remove(element);
-			fViewer.refresh(getParent(element));
+			fViewer.refresh(internalGetParent(element));
 			}
 		});
 	}



Back to the top