diff options
author | Michael Valenta | 2004-11-19 21:39:28 +0000 |
---|---|---|
committer | Michael Valenta | 2004-11-19 21:39:28 +0000 |
commit | 1613f5d0a5b09ac5c50438cec7eb6c50d87b2025 (patch) | |
tree | 6428d9c5388136b8d71ca86b981f6bed9507b8be | |
parent | f71a29cb9c3374f7bd79d5eb0a03be40da90ad6b (diff) | |
download | eclipse.platform.team-1613f5d0a5b09ac5c50438cec7eb6c50d87b2025.tar.gz eclipse.platform.team-1613f5d0a5b09ac5c50438cec7eb6c50d87b2025.tar.xz eclipse.platform.team-1613f5d0a5b09ac5c50438cec7eb6c50d87b2025.zip |
*** empty log message ***
6 files changed, 102 insertions, 23 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/SingleFolderTagSource.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/SingleFolderTagSource.java index baa6fd701..1c6bb08a8 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/SingleFolderTagSource.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/SingleFolderTagSource.java @@ -42,6 +42,9 @@ public class SingleFolderTagSource extends TagSource { * @see org.eclipse.team.internal.ccvs.ui.merge.TagSource#getTags(int) */ public CVSTag[] getTags(int type) { + if (type == CVSTag.HEAD || type == BASE) { + return super.getTags(type); + } return getTags(getFolder(), type); } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagConfigurationDialog.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagConfigurationDialog.java index f85a5fe26..ff636fabf 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagConfigurationDialog.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagConfigurationDialog.java @@ -116,6 +116,9 @@ public class TagConfigurationDialog extends Dialog { * @see org.eclipse.team.internal.ccvs.ui.merge.TagSource#getTags(int) */ public CVSTag[] getTags(int type) { + if (type == CVSTag.HEAD || type == BASE) { + return super.getTags(type); + } List list = getTagList(type); if (list != null) return (CVSTag[]) list.toArray(new CVSTag[list.size()]); diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagContentAssistProcessor.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagContentAssistProcessor.java index 086e1c0e0..9b8ee483e 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagContentAssistProcessor.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagContentAssistProcessor.java @@ -10,28 +10,40 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.tags; -import java.util.ArrayList; +import java.util.*; import java.util.List; import org.eclipse.jface.contentassist.*; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.text.*; import org.eclipse.jface.text.contentassist.*; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.*; import org.eclipse.team.internal.ccvs.core.CVSTag; import org.eclipse.ui.contentassist.ContentAssistHandler; - +/** + * A content assist processor for tags for use with Text widgets. + */ public class TagContentAssistProcessor implements ISubjectControlContentAssistProcessor { private FilteredTagList tags; private String lastError; + private Map images = new HashMap(); public static void createContentAssistant(Text text, TagSource tagSource, int includeFlags) { - ContentAssistHandler.createHandlerForText(text, createSubjectContentAssistant(new TagContentAssistProcessor(tagSource, includeFlags))); + final TagContentAssistProcessor tagContentAssistProcessor = new TagContentAssistProcessor(tagSource, includeFlags); + text.addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + tagContentAssistProcessor.dispose(); + } + }); + ContentAssistHandler.createHandlerForText(text, createSubjectContentAssistant(tagContentAssistProcessor)); } - - public static SubjectControlContentAssistant createSubjectContentAssistant(IContentAssistProcessor processor) { + + private static SubjectControlContentAssistant createSubjectContentAssistant(IContentAssistProcessor processor) { final SubjectControlContentAssistant contentAssistant= new SubjectControlContentAssistant(); contentAssistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE); @@ -68,7 +80,15 @@ public class TagContentAssistProcessor implements ISubjectControlContentAssistPr for (int i = 0; i < matching.length; i++) { CVSTag tag = matching[i]; String name = tag.getName(); + ImageDescriptor desc = TagElement.getImageDescriptor(tag); Image image = null; + if (desc != null) { + image = (Image)images.get(desc); + if (image == null) { + image = desc.createImage(); + images.put(desc, image); + } + } CompletionProposal proposal = new CompletionProposal(name, 0, docLength, name.length(), image, name, null, null); proposals.add(proposal); } @@ -130,4 +150,14 @@ public class TagContentAssistProcessor implements ISubjectControlContentAssistPr return null; } + /** + * Dispose of any images created by the assistant + */ + public void dispose() { + for (Iterator iter = images.values().iterator(); iter.hasNext();) { + Image image = (Image) iter.next(); + image.dispose(); + } + } + }
\ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagElement.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagElement.java index 512a62ce2..139144450 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagElement.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagElement.java @@ -23,6 +23,16 @@ public class TagElement implements IWorkbenchAdapter, IAdaptable { Object parent; CVSTag tag; + public static ImageDescriptor getImageDescriptor(CVSTag tag) { + if (tag.getType() == CVSTag.BRANCH || tag.equals(CVSTag.DEFAULT)) { + return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_TAG); + } else if (tag.getType() == CVSTag.DATE){ + return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_DATE); + }else { + return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_PROJECT_VERSION); + } + } + /** * @deprecated * @param tag @@ -42,15 +52,9 @@ public class TagElement implements IWorkbenchAdapter, IAdaptable { return null; } public ImageDescriptor getImageDescriptor(Object object) { - if (tag.getType() == CVSTag.BRANCH || tag == CVSTag.DEFAULT) { - return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_TAG); - } else if (tag.getType() == CVSTag.DATE){ - return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_DATE); - }else { - return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_PROJECT_VERSION); - } + return getImageDescriptor(tag); } - public String getLabel(Object o) { + public String getLabel(Object o) { if(tag.getType() == CVSTag.DATE){ Date date = tag.asDate(); if (date != null){ diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSource.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSource.java index d3a761461..4c9595fc0 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSource.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSource.java @@ -24,6 +24,11 @@ import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; */ public abstract class TagSource { + /* + * Special constant representing the BASE tag + */ + public static final int BASE = -1; + public static final TagSource EMPTY = new TagSource() { public void commit(CVSTag[] tags, boolean replace, IProgressMonitor monitor) throws CVSException { // No-op @@ -57,14 +62,23 @@ public abstract class TagSource { } public static int[] convertIncludeFlaqsToTagTypes(int includeFlags) { - if ((includeFlags & TagSelectionArea.INCLUDE_BRANCHES) > 0 && (includeFlags & TagSelectionArea.INCLUDE_VERSIONS) > 0) { - return new int [] { CVSTag.VERSION, CVSTag.BRANCH }; - } else if ((includeFlags & (TagSelectionArea.INCLUDE_BRANCHES)) > 0) { - return new int [] { CVSTag.BRANCH }; - } else if ((includeFlags & (TagSelectionArea.INCLUDE_VERSIONS)) > 0) { - return new int [] { CVSTag.VERSION }; + List types = new ArrayList(); + if ((includeFlags & TagSelectionArea.INCLUDE_BRANCHES) > 0) + types.add(new Integer(CVSTag.BRANCH)); + if ((includeFlags & TagSelectionArea.INCLUDE_VERSIONS) > 0) + types.add(new Integer(CVSTag.VERSION)); + if ((includeFlags & (TagSelectionArea.INCLUDE_HEAD_TAG)) > 0) + types.add(new Integer(CVSTag.HEAD)); + if ((includeFlags & (TagSelectionArea.INCLUDE_DATES)) > 0) + types.add(new Integer(CVSTag.DATE)); + if ((includeFlags & (TagSelectionArea.INCLUDE_BASE_TAG)) > 0) + types.add(new Integer(BASE)); + int[] result = new int[types.size()]; + for (int i = 0; i < result.length; i++) { + result[i] = ((Integer)types.get(i)).intValue(); + } - return new int[] { }; + return result; } /** @@ -136,7 +150,15 @@ public abstract class TagSource { } } - public abstract CVSTag[] getTags(int type); + public CVSTag[] getTags(int type) { + switch (type) { + case BASE: + return new CVSTag[] { CVSTag.BASE }; + case CVSTag.HEAD: + return new CVSTag[] { CVSTag.DEFAULT }; + } + return new CVSTag[0]; + } public CVSTag[] getTags(int[] types) { if (types.length == 0) { diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java index 1ec2c8edc..dda9b8e06 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/wizards/MergeWizardPage.java @@ -128,11 +128,11 @@ public class MergeWizardPage extends CVSWizardPage { } private CVSTag getTagFor(String text, boolean versionsOnly) { - if (text == CVSTag.DEFAULT.getName()) { + if (text.equals(CVSTag.DEFAULT.getName())) { if (versionsOnly) return null; return CVSTag.DEFAULT; } - if (text == CVSTag.BASE.getName()) { + if (text.equals(CVSTag.BASE.getName())) { if (versionsOnly) return null; return CVSTag.BASE; } @@ -156,6 +156,12 @@ public class MergeWizardPage extends CVSWizardPage { endTag = selectedTag; if (endTagField != null) { endTagField.setText(endTag.getName()); + if (startTag == null && endTag.getType() == CVSTag.BRANCH) { + CVSTag tag = findCommonBaseTag(endTag); + if (tag != null) { + setStartTag(tag); + } + } } updateEnablements(); } @@ -171,6 +177,17 @@ public class MergeWizardPage extends CVSWizardPage { } } + private CVSTag findCommonBaseTag(CVSTag tag) { + CVSTag[] tags = tagSource.getTags(CVSTag.VERSION); + for (int i = 0; i < tags.length; i++) { + CVSTag potentialMatch = tags[i]; + if (potentialMatch.getName().indexOf(tag.getName()) != -1) { + return potentialMatch; + } + } + return null; + } + private void updateEnablements() { if (endTag == null && endTagField.getText().length() > 0) { setErrorMessage("The specified end tag is not known to exist. Either enter a different tag or refresh the known tags."); |