1 11 package org.eclipse.team.internal.ccvs.ui.tags; 12 13 import java.util.ArrayList ; 14 import java.util.HashMap ; 15 import java.util.Iterator ; 16 import java.util.List ; 17 import java.util.Map ; 18 19 import org.eclipse.core.runtime.Assert; 20 import org.eclipse.jface.contentassist.*; 21 import org.eclipse.jface.resource.ImageDescriptor; 22 import org.eclipse.jface.text.*; 23 import org.eclipse.jface.text.contentassist.*; 24 import org.eclipse.swt.events.DisposeEvent; 25 import org.eclipse.swt.events.DisposeListener; 26 import org.eclipse.swt.graphics.Image; 27 import org.eclipse.swt.widgets.*; 28 import org.eclipse.team.internal.ccvs.core.CVSTag; 29 import org.eclipse.ui.contentassist.ContentAssistHandler; 30 31 34 public class TagContentAssistProcessor implements ISubjectControlContentAssistProcessor { 35 36 private FilteredTagList tags; 37 private Map images = new HashMap (); 38 39 public static void createContentAssistant(Text text, TagSource tagSource, int includeFlags) { 40 final TagContentAssistProcessor tagContentAssistProcessor = new TagContentAssistProcessor(tagSource, includeFlags); 41 text.addDisposeListener(new DisposeListener() { 42 public void widgetDisposed(DisposeEvent e) { 43 tagContentAssistProcessor.dispose(); 44 } 45 }); 46 ContentAssistHandler.createHandlerForText(text, createSubjectContentAssistant(tagContentAssistProcessor)); 47 } 48 49 private static SubjectControlContentAssistant createSubjectContentAssistant(IContentAssistProcessor processor) { 50 final SubjectControlContentAssistant contentAssistant= new SubjectControlContentAssistant(); 51 52 contentAssistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE); 53 54 56 contentAssistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE); 57 contentAssistant.setInformationControlCreator(new IInformationControlCreator() { 58 public IInformationControl createInformationControl(Shell parent) { 59 return new DefaultInformationControl(parent); 60 } 61 }); 62 63 return contentAssistant; 64 } 65 66 public TagContentAssistProcessor(TagSource tagSource, int includeFlags) { 67 tags = new FilteredTagList(tagSource, TagSource.convertIncludeFlaqsToTagTypes(includeFlags)); 68 } 69 70 73 public ICompletionProposal[] computeCompletionProposals(IContentAssistSubjectControl contentAssistSubjectControl, int documentOffset) { 74 Control c = contentAssistSubjectControl.getControl(); 75 int docLength = contentAssistSubjectControl.getDocument().getLength(); 76 if (c instanceof Text) { 77 Text t = (Text)c; 78 String filter = t.getText(); 79 tags.setPattern(filter); 80 CVSTag[] matching = tags.getMatchingTags(); 81 if (matching.length > 0) { 82 List proposals = new ArrayList (); 83 for (int i = 0; i < matching.length; i++) { 84 CVSTag tag = matching[i]; 85 String name = tag.getName(); 86 ImageDescriptor desc = TagElement.getImageDescriptor(tag); 87 Image image = null; 88 if (desc != null) { 89 image = (Image)images.get(desc); 90 if (image == null) { 91 image = desc.createImage(); 92 images.put(desc, image); 93 } 94 } 95 CompletionProposal proposal = new CompletionProposal(name, 0, docLength, name.length(), image, name, null, null); 96 proposals.add(proposal); 97 } 98 return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[proposals.size()]); 99 } 100 } 101 return null; 102 } 103 104 107 public IContextInformation[] computeContextInformation(IContentAssistSubjectControl contentAssistSubjectControl, int documentOffset) { 108 return null; 109 } 110 111 114 public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { 115 Assert.isTrue(false, "ITextViewer not supported"); return null; 117 } 118 119 122 public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) { 123 return null; 124 } 125 126 129 public char[] getCompletionProposalAutoActivationCharacters() { 130 return null; 131 } 132 133 136 public char[] getContextInformationAutoActivationCharacters() { 137 return null; 138 } 139 140 143 public String getErrorMessage() { 144 return null; 145 } 146 147 150 public IContextInformationValidator getContextInformationValidator() { 151 return null; 152 } 153 154 157 public void dispose() { 158 for (Iterator iter = images.values().iterator(); iter.hasNext();) { 159 Image image = (Image) iter.next(); 160 image.dispose(); 161 } 162 } 163 164 } 165 | Popular Tags |