KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > team > internal > ccvs > ui > tags > TagContentAssistProcessor


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.team.internal.ccvs.ui.tags;
12
13 import java.util.ArrayList JavaDoc;
14 import java.util.HashMap JavaDoc;
15 import java.util.Iterator JavaDoc;
16 import java.util.List JavaDoc;
17 import java.util.Map JavaDoc;
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 /**
32  * A content assist processor for tags for use with Text widgets.
33  */

34 public class TagContentAssistProcessor implements ISubjectControlContentAssistProcessor {
35
36     private FilteredTagList tags;
37     private Map JavaDoc images = new HashMap JavaDoc();
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         //ContentAssistPreference.configure(contentAssistant, JavaPlugin.getDefault().getPreferenceStore());
55

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     /* (non-Javadoc)
71      * @see org.eclipse.jface.contentassist.ISubjectControlContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.contentassist.IContentAssistSubjectControl, int)
72      */

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 JavaDoc filter = t.getText();
79             tags.setPattern(filter);
80             CVSTag[] matching = tags.getMatchingTags();
81             if (matching.length > 0) {
82                 List JavaDoc proposals = new ArrayList JavaDoc();
83                 for (int i = 0; i < matching.length; i++) {
84                     CVSTag tag = matching[i];
85                     String JavaDoc 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     /* (non-Javadoc)
105      * @see org.eclipse.jface.contentassist.ISubjectControlContentAssistProcessor#computeContextInformation(org.eclipse.jface.contentassist.IContentAssistSubjectControl, int)
106      */

107     public IContextInformation[] computeContextInformation(IContentAssistSubjectControl contentAssistSubjectControl, int documentOffset) {
108         return null;
109     }
110
111     /* (non-Javadoc)
112      * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int)
113      */

114     public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
115         Assert.isTrue(false, "ITextViewer not supported"); //$NON-NLS-1$
116
return null;
117     }
118
119     /* (non-Javadoc)
120      * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)
121      */

122     public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
123         return null;
124     }
125
126     /* (non-Javadoc)
127      * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
128      */

129     public char[] getCompletionProposalAutoActivationCharacters() {
130         return null;
131     }
132
133     /* (non-Javadoc)
134      * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
135      */

136     public char[] getContextInformationAutoActivationCharacters() {
137         return null;
138     }
139
140     /* (non-Javadoc)
141      * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
142      */

143     public String JavaDoc getErrorMessage() {
144         return null;
145     }
146
147     /* (non-Javadoc)
148      * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
149      */

150     public IContextInformationValidator getContextInformationValidator() {
151         return null;
152     }
153     
154     /**
155      * Dispose of any images created by the assistant
156      */

157     public void dispose() {
158         for (Iterator JavaDoc iter = images.values().iterator(); iter.hasNext();) {
159             Image image = (Image) iter.next();
160             image.dispose();
161         }
162     }
163     
164 }
165
Popular Tags