From 2c822f988ab1c6320e9521e5c8b296046d01729e Mon Sep 17 00:00:00 2001 From: David Inglis Date: Fri, 4 Jun 2004 12:55:29 +0000 Subject: [PATCH] fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=65621 --- .../cdt/make/ui/MakeContentProvider.java | 118 ++---------------- .../eclipse/cdt/make/ui/views/MakeView.java | 35 +++--- 2 files changed, 29 insertions(+), 124 deletions(-) diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java index de4485cfd22..c4ba0e997cc 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java @@ -14,19 +14,15 @@ import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.MakeTargetEvent; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.AbstractTreeViewer; 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 MakeContentProvider implements ITreeContentProvider, IMakeTargetListener, IResourceChangeListener { +public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener { + protected boolean bFlatten; protected StructuredViewer viewer; @@ -52,13 +48,13 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis } else if (obj instanceof IContainer) { ArrayList children = new ArrayList(); try { - IResource[] resource = ((IContainer) obj).members(); + IResource[] resource = ((IContainer)obj).members(); for (int i = 0; i < resource.length; i++) { if (resource[i] instanceof IContainer) { children.add(resource[i]); } } - children.addAll(Arrays.asList(MakeCorePlugin.getDefault().getTargetManager().getTargets((IContainer) obj))); + children.addAll(Arrays.asList(MakeCorePlugin.getDefault().getTargetManager().getTargets((IContainer)obj))); } catch (CoreException e) { // ignore } @@ -69,9 +65,9 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis public Object getParent(Object obj) { if (obj instanceof IMakeTarget) { - return ((IMakeTarget) obj).getContainer(); + return ((IMakeTarget)obj).getContainer(); } else if (obj instanceof IContainer) { - return ((IContainer) obj).getParent(); + return ((IContainer)obj).getParent(); } return null; } @@ -103,27 +99,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis if (this.viewer == null) { MakeCorePlugin.getDefault().getTargetManager().addListener(this); } - this.viewer = (StructuredViewer) viewer; - IWorkspace oldWorkspace = null; - IWorkspace newWorkspace = null; - if (oldInput instanceof IWorkspace) { - oldWorkspace = (IWorkspace) oldInput; - } else if (oldInput instanceof IContainer) { - oldWorkspace = ((IContainer) oldInput).getWorkspace(); - } - if (newInput instanceof IWorkspace) { - newWorkspace = (IWorkspace) newInput; - } else if (newInput instanceof IContainer) { - newWorkspace = ((IContainer) newInput).getWorkspace(); - } - if (oldWorkspace != newWorkspace) { - if (oldWorkspace != null) { - oldWorkspace.removeResourceChangeListener(this); - } - if (newWorkspace != null) { - newWorkspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE); - } - } + this.viewer = (StructuredViewer)viewer; } public void targetChanged(final MakeTargetEvent event) { @@ -133,6 +109,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis case MakeTargetEvent.PROJECT_ADDED : case MakeTargetEvent.PROJECT_REMOVED : ctrl.getDisplay().syncExec(new Runnable() { + public void run() { if (ctrl != null && !ctrl.isDisposed()) { viewer.refresh(); @@ -144,6 +121,7 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis case MakeTargetEvent.TARGET_CHANGED : case MakeTargetEvent.TARGET_REMOVED : ctrl.getDisplay().syncExec(new Runnable() { + public void run() { if (ctrl != null && !ctrl.isDisposed()) { if (bFlatten) { @@ -158,80 +136,4 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis } } } - - void processDelta(IResourceDelta delta) { - // Bail out if the widget was disposed. - Control ctrl = viewer.getControl(); - if (ctrl == null || ctrl.isDisposed() || delta == null) { - return; - } - - IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED); - - // Not interested in Content changes. - for (int i = 0; i < affectedChildren.length; i++) { - if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) { - return; - } - } - - // Handle changed children recursively. - for (int i = 0; i < affectedChildren.length; i++) { - processDelta(affectedChildren[i]); - } - - // Get the affected resource - IResource resource = delta.getResource(); - - // Handle removed children. Issue one update for all removals. - affectedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED); - if (affectedChildren.length > 0) { - ArrayList affected = new ArrayList(affectedChildren.length); - for (int i = 0; i < affectedChildren.length; i++) { - if (affectedChildren[i].getResource() instanceof IContainer) { - affected.add(affectedChildren[i].getResource()); - } - } - if (affected.size() != 0) { - if (viewer instanceof AbstractTreeViewer) { - ((AbstractTreeViewer) viewer).remove(affected.toArray()); - } else { - viewer.refresh(resource); - } - } - } - - // Handle added children. Issue one update for all insertions. - affectedChildren = delta.getAffectedChildren(IResourceDelta.ADDED); - if (affectedChildren.length > 0) { - ArrayList affected = new ArrayList(affectedChildren.length); - for (int i = 0; i < affectedChildren.length; i++) { - if (affectedChildren[i].getResource() instanceof IContainer) { - affected.add(affectedChildren[i].getResource()); - } - } - if (affected.size() != 0) { - if (viewer instanceof AbstractTreeViewer) { - ((AbstractTreeViewer) viewer).add(resource, affected.toArray()); - } else { - viewer.refresh(resource); - } - } - } - } - - public void resourceChanged(IResourceChangeEvent event) { - final IResourceDelta delta = event.getDelta(); - Control ctrl = viewer.getControl(); - if (ctrl != null && !ctrl.isDisposed()) { - // Do a sync exec, not an async exec, since the resource delta - // must be traversed in this method. It is destroyed - // when this method returns. - ctrl.getDisplay().syncExec(new Runnable() { - public void run() { - processDelta(delta); - } - }); - } - } -} +} \ No newline at end of file diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java index 59723ac833c..6d1350db349 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/views/MakeView.java @@ -1,8 +1,7 @@ package org.eclipse.cdt.make.ui.views; /* - * (c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. + * (c) Copyright QNX Software Systems Ltd. 2002. All Rights Reserved. */ import org.eclipse.cdt.make.ui.*; @@ -18,6 +17,7 @@ import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; @@ -28,7 +28,7 @@ import org.eclipse.ui.part.DrillDownAdapter; import org.eclipse.ui.part.ViewPart; public class MakeView extends ViewPart { - + private BuildTargetAction buildTargetAction; private EditTargetAction editTargetAction; private DeleteTargetAction deleteTargetAction; @@ -41,15 +41,15 @@ public class MakeView extends ViewPart { } /** - * @see IWorkbenchPart#setFocus() - */ + * @see IWorkbenchPart#setFocus() + */ public void setFocus() { viewer.getTree().setFocus(); } /** - * @see ContentOutlinePage#createControl - */ + * @see ContentOutlinePage#createControl + */ public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setUseHashlookup(true); @@ -59,16 +59,19 @@ public class MakeView extends ViewPart { drillDownAdapter = new DrillDownAdapter(viewer); viewer.addDoubleClickListener(new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { handleDoubleClick(event); } }); viewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { handleSelectionChanged(event); } }); viewer.getControl().addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent event) { if (event.character == SWT.DEL && event.stateMask == 0) { handleDeleteKeyPressed(); @@ -78,6 +81,7 @@ public class MakeView extends ViewPart { viewer.setContentProvider(new MakeContentProvider()); viewer.setLabelProvider(new MakeLabelProvider()); + viewer.setSorter(new ViewerSorter()); viewer.setInput(ResourcesPlugin.getWorkspace().getRoot()); getSite().setSelectionProvider(viewer); @@ -105,23 +109,22 @@ public class MakeView extends ViewPart { private void fillLocalPullDown(IMenuManager manager) { } - private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { MakeView.this.fillContextMenu(manager); - updateActions((IStructuredSelection) viewer.getSelection()); + updateActions((IStructuredSelection)viewer.getSelection()); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); -// getSite().registerContextMenu(menuMgr, viewer); + // getSite().registerContextMenu(menuMgr, viewer); } - protected void fillContextMenu(IMenuManager manager) { manager.add(buildTargetAction); manager.add(addTargetAction); @@ -131,7 +134,7 @@ public class MakeView extends ViewPart { drillDownAdapter.addNavigationActions(manager); // Other plug-ins can contribute there actions here -// manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + // manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } protected void handleDeleteKeyPressed() { @@ -143,14 +146,14 @@ public class MakeView extends ViewPart { } void handleSelectionChanged(SelectionChangedEvent event) { - IStructuredSelection sel = (IStructuredSelection) event.getSelection(); + IStructuredSelection sel = (IStructuredSelection)event.getSelection(); updateActions(sel); } - + void updateActions(IStructuredSelection sel) { addTargetAction.selectionChanged(sel); - buildTargetAction.selectionChanged(sel); + buildTargetAction.selectionChanged(sel); deleteTargetAction.selectionChanged(sel); editTargetAction.selectionChanged(sel); } -} +} \ No newline at end of file