diff options
author | Michael Valenta | 2004-06-08 15:32:02 +0000 |
---|---|---|
committer | Michael Valenta | 2004-06-08 15:32:02 +0000 |
commit | 606f1d8c80cfc07eadb37b587d234b4ae9bc641c (patch) | |
tree | 8c623786ddec656e2dfe270951207749116c7eb1 | |
parent | 628266a7f1a2e58a167f8bddcde2b80982c3244a (diff) | |
download | eclipse.platform.team-606f1d8c80cfc07eadb37b587d234b4ae9bc641c.tar.gz eclipse.platform.team-606f1d8c80cfc07eadb37b587d234b4ae9bc641c.tar.xz eclipse.platform.team-606f1d8c80cfc07eadb37b587d234b4ae9bc641c.zip |
Checkout wizard now supports multi-select
2 files changed, 74 insertions, 41 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java index 2cd65dd6d..e439686ea 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/CheckoutWizard.java @@ -69,6 +69,7 @@ public class CheckoutWizard extends Wizard implements ICVSWizard, INewWizard { modulePage = new ModuleSelectionPage("moduleSelection", Policy.bind("CheckoutWizard.10"), substImage); //$NON-NLS-1$ //$NON-NLS-2$ modulePage.setDescription(Policy.bind("CheckoutWizard.11")); //$NON-NLS-1$ modulePage.setHelpContxtId(IHelpContextIds.CHECKOUT_MODULE_SELECTION_PAGE); + modulePage.setSupportsMultiSelection(true); addPage(modulePage); // Dummy page to allow lazy creation of CheckoutAsWizard @@ -85,7 +86,7 @@ public class CheckoutWizard extends Wizard implements ICVSWizard, INewWizard { * @see org.eclipse.jface.wizard.Wizard#canFinish() */ public boolean canFinish() { - return (wizard == null && getSelectedModule() != null) || + return (wizard == null && getSelectedModules().length > 0) || (wizard != null && wizard.canFinish()); } @@ -102,7 +103,7 @@ public class CheckoutWizard extends Wizard implements ICVSWizard, INewWizard { return true; } else { try { - new CheckoutMultipleProjectsOperation(getPart(), new ICVSRemoteFolder[] { getSelectedModule() }, null) + new CheckoutMultipleProjectsOperation(getPart(), getSelectedModules(), null) .run(); if (isNewLocation) { KnownRepositories.getInstance().addRepository(location, true /* broadcast */); @@ -174,15 +175,23 @@ public class CheckoutWizard extends Wizard implements ICVSWizard, INewWizard { return modulePage; } if (page == modulePage) { - ICVSRemoteFolder selectedModule = getSelectedModule(); - if (selectedModule != null && selectedModule.isDefinedModule()) { - // No further configuration is possible for defined modules - return null; + ICVSRemoteFolder[] selectedModules = getSelectedModules(); + if (selectedModules.length == 0) return null; + for (int i = 0; i < selectedModules.length; i++) { + ICVSRemoteFolder folder = selectedModules[i]; + if (folder.isDefinedModule()) { + // No further configuration is possible for defined modules + return null; + } } if (aboutToShow) { try { - boolean hasMetafile = hasProjectMetafile(selectedModule); - wizard = new CheckoutAsWizard(getPart(), new ICVSRemoteFolder[] { selectedModule }, ! hasMetafile /* allow configuration */); + boolean hasMetafile = true; + if (selectedModules.length == 1) { + // Only allow configuration if one module is selected + hasMetafile = hasProjectMetafile(selectedModules[0]); + } + wizard = new CheckoutAsWizard(getPart(), selectedModules, ! hasMetafile /* allow configuration */); wizard.addPages(); return wizard.getStartingPage(); } catch (InvocationTargetException e) { @@ -218,9 +227,9 @@ public class CheckoutWizard extends Wizard implements ICVSWizard, INewWizard { return result[0]; } - private ICVSRemoteFolder getSelectedModule() { + private ICVSRemoteFolder[] getSelectedModules() { if (modulePage == null) return null; - return modulePage.getSelectedModule(); + return modulePage.getSelectedModules(); } /** diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ModuleSelectionPage.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ModuleSelectionPage.java index a150da249..1da872963 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ModuleSelectionPage.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/ModuleSelectionPage.java @@ -12,6 +12,8 @@ package org.eclipse.team.internal.ccvs.ui.wizards; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Iterator; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; @@ -47,6 +49,7 @@ public class ModuleSelectionPage extends CVSWizardPage { private ICVSRepositoryLocation location; private boolean badLocation = false; private String helpContextId; + private boolean supportsMultiSelection; public ModuleSelectionPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); @@ -153,26 +156,42 @@ public class ModuleSelectionPage extends CVSWizardPage { } setModuleListInput(); } - ICVSRemoteFolder folder = internalGetSelectedModule(); - setPageComplete(folder != null); + setPageComplete(internalGetSelectedModules().length > 0); } } - private ICVSRemoteFolder internalGetSelectedModule() { + private ICVSRemoteFolder[] internalGetSelectedModules() { if (moduleList != null && moduleList.getControl().isEnabled()) { ISelection selection = moduleList.getSelection(); - if (selection instanceof IStructuredSelection) { + if (!selection.isEmpty() && selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection)selection; - Object firstElement = ss.getFirstElement(); - if (firstElement instanceof ICVSRemoteFolder) { - return (ICVSRemoteFolder)firstElement; + ArrayList result = new ArrayList(); + for (Iterator iter = ss.iterator(); iter.hasNext();) { + Object element = iter.next(); + if (element instanceof ICVSRemoteFolder) { + result.add(element); + } + } + return (ICVSRemoteFolder[]) result.toArray(new ICVSRemoteFolder[result.size()]); } - } - return null; + } else { + ICVSRemoteFolder folder = null; + if (moduleName != null) { + folder = internalCreateModuleHandle(moduleName); + } else { + if (project != null) { + folder = internalCreateModuleHandle(project.getName()); + } + } + if (folder != null) { + return new ICVSRemoteFolder[] { folder }; + } + } + return new ICVSRemoteFolder[0]; } - private ICVSRemoteFolder internalCreateModule(String name) { + private ICVSRemoteFolder internalCreateModuleHandle(String name) { ICVSRepositoryLocation location = getLocation(); if (location == null) return null; return location.getRemoteFolder(name, CVSTag.DEFAULT); @@ -185,30 +204,26 @@ public class ModuleSelectionPage extends CVSWizardPage { * @return the selected exisiting remote module */ public ICVSRemoteFolder getSelectedModule() { - final ICVSRemoteFolder[] folder = new ICVSRemoteFolder[] { null }; + ICVSRemoteFolder[] selectedModules = getSelectedModules(); + if (selectedModules.length > 0) { + return selectedModules[0]; + } else { + return null; + } + } + + public ICVSRemoteFolder[] getSelectedModules() { + final ICVSRemoteFolder[][] folder = new ICVSRemoteFolder[][] { null }; Display.getDefault().syncExec(new Runnable() { public void run() { - folder[0] = internalGetSelectedModule(); - if (folder[0] == null) { - if (moduleName != null) { - folder[0] = internalCreateModule(moduleName); - } else { - if (project != null) { - folder[0] = internalCreateModule(project.getName()); - } - } - } + folder[0] = internalGetSelectedModules(); } }); return folder[0]; } - public boolean isSelectedModuleExists() { - return internalGetSelectedModule() != null; - } - private TreeViewer createModuleTree(Composite composite, int horizontalSpan) { - Tree tree = new Tree(composite, SWT.SINGLE | SWT.BORDER); + Tree tree = new Tree(composite, (supportsMultiSelection ? SWT.MULTI : SWT.SINGLE) | SWT.BORDER); GridData data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = horizontalSpan; tree.setLayoutData(data); @@ -235,11 +250,17 @@ public class ModuleSelectionPage extends CVSWizardPage { result.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { updateEnablements(false); - ICVSRemoteFolder selectedModule = getSelectedModule(); - if (selectedModule == null) return; - String repositoryRelativePath = selectedModule.getRepositoryRelativePath(); - if (repositoryRelativePath.equals(FolderSyncInfo.VIRTUAL_DIRECTORY)) return; - text.setText(repositoryRelativePath); + ICVSRemoteFolder[] modules = internalGetSelectedModules(); + if (modules.length == 1) { + // There is at 1 module selected + ICVSRemoteFolder selectedModule = modules[0]; + String repositoryRelativePath = selectedModule.getRepositoryRelativePath(); + if (!repositoryRelativePath.equals(FolderSyncInfo.VIRTUAL_DIRECTORY)) { + text.setText(repositoryRelativePath); + } + } else { + text.setText(""); //$NON-NLS-1$ + } } }); result.getTree().addMouseListener(new MouseAdapter() { @@ -275,4 +296,7 @@ public class ModuleSelectionPage extends CVSWizardPage { public void setProject(IProject project) { this.project = project; } + public void setSupportsMultiSelection(boolean supportsMultiSelection) { + this.supportsMultiSelection = supportsMultiSelection; + } } |