diff options
author | Jean Michel-Lemieux | 2004-02-13 16:17:48 +0000 |
---|---|---|
committer | Jean Michel-Lemieux | 2004-02-13 16:17:48 +0000 |
commit | 90a9f66b824a1d3b68f22a645e87290be6e7d7fd (patch) | |
tree | e01abb38fe1ad7e9c9c0a5c11fa0fc642335f0eb | |
parent | 6bbf07548ebe273f8df1355afbd560bf3197fe7b (diff) | |
download | eclipse.platform.team-90a9f66b824a1d3b68f22a645e87290be6e7d7fd.tar.gz eclipse.platform.team-90a9f66b824a1d3b68f22a645e87290be6e7d7fd.tar.xz eclipse.platform.team-90a9f66b824a1d3b68f22a645e87290be6e7d7fd.zip |
*** empty log message ***
12 files changed, 87 insertions, 78 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/BackgroundEventHandler.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/BackgroundEventHandler.java index a75f1628b..4e8cd1057 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/BackgroundEventHandler.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/BackgroundEventHandler.java @@ -142,6 +142,7 @@ public abstract class BackgroundEventHandler { jobDone(event); } }); + eventHandlerJob.setSystem(true); eventHandlerJob.setPriority(Job.SHORT); } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSLocalCompareConfiguration.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSLocalCompareConfiguration.java index cd7b1a313..c6c912290 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSLocalCompareConfiguration.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSLocalCompareConfiguration.java @@ -75,7 +75,7 @@ public class CVSLocalCompareConfiguration extends DiffTreeViewerConfiguration { public Object prepareInput(IProgressMonitor monitor) throws TeamException { subscriber.refresh(subscriber.roots(), IResource.DEPTH_INFINITE, monitor); collector.waitForCollector(monitor); - return getInput(); + return prepareInput(monitor); } /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSSynchronizeViewCompareConfiguration.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSSynchronizeViewCompareConfiguration.java index 1808b716a..81f3a9b65 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSSynchronizeViewCompareConfiguration.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSSynchronizeViewCompareConfiguration.java @@ -70,18 +70,6 @@ public class CVSSynchronizeViewCompareConfiguration extends TeamSubscriberPageDi public void setGroupIncomingByComment(boolean enabled) { this.isGroupIncomingByComment = enabled; if(getParticipant().getMode() == TeamSubscriberParticipant.INCOMING_MODE) { - setInput(getViewer()); - } - } - - /* (non-Javadoc) - * @see org.eclipse.team.ui.synchronize.DiffTreeViewerConfiguration#getInput() - */ - protected Object getInput() { - if(isGroupIncomingByComment() && getParticipant().getMode() == TeamSubscriberParticipant.INCOMING_MODE) { - return new ChangeLogViewerInput(getSyncSet()); - } else { - return super.getInput(); } } @@ -97,7 +85,6 @@ public class CVSSynchronizeViewCompareConfiguration extends TeamSubscriberPageDi oldMode == TeamSubscriberParticipant.INCOMING_MODE) { aSyncExec(new Runnable() { public void run() { - setInput(getViewer()); } }); } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogViewerInput.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogViewerInput.java index 2c46854eb..c4080d1ef 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogViewerInput.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/ChangeLogViewerInput.java @@ -148,7 +148,7 @@ public class ChangeLogViewerInput extends SyncInfoSetViewerInput { } public IStatus run(IProgressMonitor monitor) { if (set != null && !shutdown) { - final SyncInfoDiffNode[] nodes = calculateRoots(getRoot().getSyncInfoSet(), monitor); + final SyncInfoDiffNode[] nodes = calculateRoots(getSyncInfoSet(), monitor); UIJob updateUI = new UIJob("updating change log viewers") { public IStatus runInUIThread(IProgressMonitor monitor) { AbstractTreeViewer tree = getTreeViewer(); @@ -157,7 +157,7 @@ public class ChangeLogViewerInput extends SyncInfoSetViewerInput { } for (int i = 0; i < nodes.length; i++) { addToViewer(nodes[i]); - buildTree(nodes[i]); + buildModelObjects(nodes[i]); } return Status.OK_STATUS; } @@ -173,19 +173,23 @@ public class ChangeLogViewerInput extends SyncInfoSetViewerInput { super(set); } - /* (non-Javadoc) - * @see org.eclipse.team.ui.synchronize.views.SyncInfoSetViewerInput#buildTree(org.eclipse.compare.structuremergeviewer.DiffNode) + /* + * (non-Javadoc) + * @see org.eclipse.team.ui.synchronize.viewers.SyncInfoSetViewerInput#buildModelObjects(org.eclipse.compare.structuremergeviewer.DiffNode) */ - protected IDiffElement[] buildTree(DiffNode node) { + protected IDiffElement[] buildModelObjects(DiffNode node) { if(node == this) { UIJob job = new UIJob("") { public IStatus runInUIThread(IProgressMonitor monitor) { AbstractTreeViewer tree = getTreeViewer(); - if (tree != null) { + if (tree != null && !tree.getControl().isDisposed()) { if(pendingItem == null) { pendingItem = new PendingUpdateAdapter(); } - removeAllFromTree(); + IDiffElement[] elements = getChildren(); + for (int i = 0; i < elements.length; i++) { + tree.remove(elements[i]); + } tree.add(ChangeLogViewerInput.this, pendingItem); } return Status.OK_STATUS; @@ -206,7 +210,7 @@ public class ChangeLogViewerInput extends SyncInfoSetViewerInput { fetchLogEntriesJob.setSyncInfoSet(getSyncInfoSet()); fetchLogEntriesJob.schedule(); } else { - return super.buildTree(node); + return super.buildModelObjects(node); } return new IDiffElement[0]; } diff --git a/bundles/org.eclipse.team.ui/DESIGN.TXT b/bundles/org.eclipse.team.ui/DESIGN.TXT index 37b7930cb..2212069da 100644 --- a/bundles/org.eclipse.team.ui/DESIGN.TXT +++ b/bundles/org.eclipse.team.ui/DESIGN.TXT @@ -72,3 +72,6 @@ Data (sync info, sync info set) 1. when does the viewer model get created, it is implementation dependant
2. what is creating the viewer model takes a while.
+
+How is progress shown?
+======================
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/TeamSubscriberParticipantPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/TeamSubscriberParticipantPage.java index 14e4002ab..a5dd8d809 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/TeamSubscriberParticipantPage.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/TeamSubscriberParticipantPage.java @@ -27,7 +27,7 @@ import org.eclipse.team.internal.ui.synchronize.ChangesSection; import org.eclipse.team.internal.ui.synchronize.ConfigureRefreshScheduleDialog; import org.eclipse.team.internal.ui.synchronize.actions.*; import org.eclipse.team.ui.synchronize.ISynchronizeView; -import org.eclipse.team.ui.synchronize.viewers.*; +import org.eclipse.team.ui.synchronize.viewers.SyncInfoDiffTreeViewer; import org.eclipse.ui.*; import org.eclipse.ui.part.*; diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/CompressedFolderViewerInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/CompressedFolderViewerInput.java index b4245ac83..b9d02f97c 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/CompressedFolderViewerInput.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/CompressedFolderViewerInput.java @@ -21,8 +21,8 @@ import org.eclipse.team.core.subscribers.*; public class CompressedFolderViewerInput extends SyncInfoSetViewerInput { - public CompressedFolderViewerInput(AbstractTreeViewer viewer, SyncInfoSet set) { - super(viewer, set); + public CompressedFolderViewerInput(SyncInfoSet set) { + super(set); } /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DiffTreeViewerConfiguration.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DiffTreeViewerConfiguration.java index 70fdc46a6..78d279064 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DiffTreeViewerConfiguration.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DiffTreeViewerConfiguration.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.team.ui.synchronize.viewers; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.*; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; @@ -18,6 +19,7 @@ import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.MenuListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.*; +import org.eclipse.team.core.TeamException; import org.eclipse.team.core.subscribers.SyncInfoSet; import org.eclipse.team.internal.core.Assert; import org.eclipse.team.internal.ui.*; @@ -118,28 +120,39 @@ public class DiffTreeViewerConfiguration implements IPropertyChangeListener { initializeActions(viewer); viewer.setLabelProvider(getLabelProvider()); viewer.setContentProvider(getContentProvider()); + + // The input may of been set already. In that case, don't change it and + // simply assign it to the view. + if(viewerInput == null) { + viewerInput = (SyncInfoSetViewerInput)getInput(); + viewerInput.prepareInput(null); + } setInput(viewer); } /** - * Set the input of the viewer to a <code>SyncInfoDiffNodeRoot</code>. - * This will also set the sorter of the viewer to the one provided by the - * input. * @param viewer - * the viewer */ - protected void setInput(StructuredViewer viewer) { + private void setInput(AbstractTreeViewer viewer) { + viewerInput.setViewer(viewer); + viewer.setSorter(viewerInput.getViewerSorter()); + viewer.setInput(viewerInput); + } + + /** + * Creates the input for this view and initializes it. At the time this method + * is called the viewer may not of been created yet. + * + * @param monitor shows progress while preparing the input + * @return the input that can be shown in a viewer + */ + public Object prepareInput(IProgressMonitor monitor)throws TeamException { if(viewerInput != null) { viewerInput.dispose(); } - viewerInput = (SyncInfoSetViewerInput) getInput(); - // TODO: must prevent sorter change from causing a refresh - // viewer.setInput(null); /* prevent a refresh when the sorter changes - // */ - viewer.setSorter(viewerInput.getViewerSorter()); - viewer.setInput(viewerInput); - - viewerInput.prepareInput(null); + viewerInput = (SyncInfoSetViewerInput) getInput(); + viewerInput.prepareInput(monitor); + return viewerInput; } /** @@ -149,9 +162,9 @@ public class DiffTreeViewerConfiguration implements IPropertyChangeListener { */ protected Object getInput() { if (getShowCompressedFolders()) { - return new CompressedFolderViewerInput(getViewer(), getSyncSet()); + return new CompressedFolderViewerInput(getSyncSet()); } - return new SyncInfoSetViewerInput(getViewer(), getSyncSet()); + return new SyncInfoSetViewerInput(getSyncSet()); } /** @@ -339,7 +352,12 @@ public class DiffTreeViewerConfiguration implements IPropertyChangeListener { */ public void propertyChange(PropertyChangeEvent event) { if (viewer != null && event.getProperty().equals(IPreferenceIds.SYNCVIEW_COMPRESS_FOLDERS)) { - setInput(viewer); + try { + prepareInput(null); + setInput(getViewer()); + } catch (TeamException e) { + TeamUIPlugin.log(e); + } } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoDiffTreeViewer.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoDiffTreeViewer.java index 94e9c320f..84defbed8 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoDiffTreeViewer.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoDiffTreeViewer.java @@ -66,7 +66,7 @@ public final class SyncInfoDiffTreeViewer extends TreeViewer implements INavigat * @see org.eclipse.compare.internal.INavigatable#gotoDifference(boolean) */ public boolean gotoDifference(boolean next) { - return TreeViewerUtils.navigate(this, next, true /*don't fire open event*/, false /*set selection*/); + return TreeViewerUtils.navigate(this, next, true /*fire open event*/, false /*set selection*/); } /* (non-Javadoc) diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetCompareInput.java index 2d73c61a9..5e45fc213 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetCompareInput.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetCompareInput.java @@ -20,6 +20,7 @@ import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.*; import org.eclipse.swt.widgets.Composite; +import org.eclipse.team.core.TeamException; import org.eclipse.team.internal.ui.Utils; /** @@ -144,6 +145,10 @@ public class SyncInfoSetCompareInput extends CompareEditorInput { * @see org.eclipse.compare.CompareEditorInput#prepareInput(org.eclipse.core.runtime.IProgressMonitor) */ protected Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - return diffViewerConfiguration.getViewer().getInput(); + try { + return diffViewerConfiguration.prepareInput(monitor); + } catch (TeamException e) { + throw new InvocationTargetException(e); + } } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetViewerInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetViewerInput.java index aa2d0274a..7cff985d7 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetViewerInput.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoSetViewerInput.java @@ -11,8 +11,6 @@ package org.eclipse.team.ui.synchronize.viewers; import java.util.*; - -import org.eclipse.compare.internal.INavigatable; import org.eclipse.compare.structuremergeviewer.*; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; @@ -43,20 +41,19 @@ import org.eclipse.team.internal.ui.TeamUIPlugin; * @since 3.0 */ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInfoSetChangeListener { - + // During updates we keep track of the parent elements that need their // labels updated. This is required to support displaying information in a // parent label that is dependant on the state of its children. For example, // showing conflict markers on folders if it contains child conflicts. private Set parentsToUpdate = new HashSet(); - // Map from resources to model objects. This allows effecient lookup // of model objects based on changes occuring to resources. private Map resourceMap = Collections.synchronizedMap(new HashMap()); - // The viewer this input is being displayed in private AbstractTreeViewer viewer; - + // Flasg to indicate if tree control should be updated while + // building the model. private boolean refreshViewer; /** @@ -65,9 +62,8 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf * * @param set the sync set used as the basis for the model created by this input. */ - public SyncInfoSetViewerInput(AbstractTreeViewer viewer, SyncInfoSet set) { + public SyncInfoSetViewerInput(SyncInfoSet set) { super(null /* no parent */, set, ResourcesPlugin.getWorkspace().getRoot()); - this.viewer = viewer; } /** @@ -77,7 +73,7 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf * the resource * @return the <code>SyncInfoDiffNode</code> for the given resource */ - public DiffNode getModelObject(IResource resource) { + protected DiffNode getModelObject(IResource resource) { return (DiffNode) resourceMap.get(resource); } @@ -89,11 +85,15 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf public AbstractTreeViewer getTreeViewer() { return viewer; } - + + public void setViewer(AbstractTreeViewer viewer) { + this.viewer = viewer; + } + public ViewerSorter getViewerSorter() { return new SyncInfoDiffNodeSorter(); } - + /* * (non-Javadoc) * @see org.eclipse.compare.structuremergeviewer.DiffContainer#hasChildren() @@ -128,7 +128,7 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf resourceMap.clear(); getSyncInfoSet().removeSyncSetChangedListener(this); } - + /* * (non-Javadoc) * @see org.eclipse.team.ccvs.syncviews.views.ISyncSetChangedListener#syncSetChanged() @@ -140,21 +140,22 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf final Control ctrl = viewer.getControl(); if (ctrl != null && !ctrl.isDisposed()) { ctrl.getDisplay().syncExec(new Runnable() { + public void run() { if (!ctrl.isDisposed()) { - BusyIndicator.showWhile(ctrl.getDisplay(), - new Runnable() { - public void run() { - handleChanges(event); - } - }); + BusyIndicator.showWhile(ctrl.getDisplay(), new Runnable() { + + public void run() { + handleChanges(event); + } + }); } } }); } } } - + /** * For each node create children based on the contents of * @param node @@ -192,7 +193,6 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf } return new IDiffElement[0]; } - protected SyncInfoDiffNode createModelObject(DiffNode parent, IResource resource) { SyncInfoSet set = parent instanceof SyncInfoDiffNode ? ((SyncInfoDiffNode) parent).getSyncInfoSet() : getSyncInfoSet(); @@ -240,11 +240,11 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf } return result; } - + protected void associateDiffNode(IResource childResource, SyncInfoDiffNode childNode) { resourceMap.put(childResource, childNode); } - + protected void unassociateDiffNode(IResource childResource) { resourceMap.remove(childResource); } @@ -341,35 +341,27 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf removeFromViewer(removedRoots[i]); } } - - - - protected void reset() { try { refreshViewer = false; resourceMap.clear(); clearModelObjects(this); - // remove all from tree viewer IDiffElement[] elements = getChildren(); for (int i = 0; i < elements.length; i++) { viewer.remove(elements[i]); } - associateDiffNode(ResourcesPlugin.getWorkspace().getRoot(), this); buildModelObjects(this); } finally { refreshViewer = true; } TeamUIPlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { if (viewer != null && !viewer.getControl().isDisposed()) { viewer.refresh(); - if (viewer instanceof INavigatable) { - ((INavigatable) viewer).gotoDifference(true); - } } } }); @@ -382,7 +374,7 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf updateParentLabels(diffNode); } } - + /** * Remove any traces of the resource and any of it's descendants in the * hiearchy defined by the content provider from the content provider and @@ -398,7 +390,7 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf updateParentLabels(node); } } - + protected void addToViewer(SyncInfoDiffNode node) { associateDiffNode(node.getResource(), node); if (canUpdateViewer()) { @@ -407,7 +399,6 @@ public class SyncInfoSetViewerInput extends SyncInfoDiffNode implements ISyncInf updateParentLabels(node); } } - /** * @param tree diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ui/views/ContentProviderTestView.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ui/views/ContentProviderTestView.java index 6649f2568..09580d67c 100644 --- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ui/views/ContentProviderTestView.java +++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/ui/views/ContentProviderTestView.java @@ -51,7 +51,7 @@ public class ContentProviderTestView extends ViewPart { } public void setInput(SyncInfoSet set) { - CompressedFolderViewerInput root = new CompressedFolderViewerInput(getViewer(), set); + CompressedFolderViewerInput root = new CompressedFolderViewerInput(set); viewer.setSorter(root.getViewerSorter()); viewer.setInput(root); } |