source: java/FramclipsePlugin/src/main/java/com/framsticks/framclipse/editors/codeCompletion/OrderableCompletionProposal.java @ 193

Last change on this file since 193 was 193, checked in by Maciej Komosinski, 10 years ago

Set svn:eol-style native for all textual files

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain
File size: 5.6 KB
Line 
1package com.framsticks.framclipse.editors.codeCompletion;
2
3import org.eclipse.core.runtime.Assert;
4import org.eclipse.jface.text.BadLocationException;
5import org.eclipse.jface.text.IDocument;
6import org.eclipse.jface.text.contentassist.ICompletionProposal;
7import org.eclipse.jface.text.contentassist.IContextInformation;
8import org.eclipse.swt.graphics.Image;
9import org.eclipse.swt.graphics.Point;
10
11public class OrderableCompletionProposal implements ICompletionProposal,
12                Comparable<OrderableCompletionProposal> {
13
14        /** The string to be displayed in the completion proposal popup. */
15        private String fDisplayString;
16        /** The replacement string. */
17        private String fReplacementString;
18        /** The replacement offset. */
19        private int fReplacementOffset;
20        /** The replacement length. */
21        private int fReplacementLength;
22        /** The cursor position after this proposal has been applied. */
23        private int fCursorPosition;
24        /** The image to be displayed in the completion proposal popup. */
25        private Image fImage;
26        /** The context information of this proposal. */
27        private IContextInformation fContextInformation;
28        /** The additional info of this proposal. */
29        private String fAdditionalProposalInfo;
30
31        private boolean function;
32        private String name;
33        private String type;
34
35        /**
36         * Creates a new completion proposal based on the provided information. The
37         * replacement string is considered being the display string too. All
38         * remaining fields are set to <code>null</code>.
39         *
40         * @param replacementString
41         *            the actual string to be inserted into the document
42         * @param replacementOffset
43         *            the offset of the text to be replaced
44         * @param replacementLength
45         *            the length of the text to be replaced
46         * @param cursorPosition
47         *            the position of the cursor following the insert relative to
48         *            replacementOffset
49         */
50        public OrderableCompletionProposal(String replacementString, int replacementOffset,
51                        int replacementLength, int cursorPosition) {
52                this(replacementString, replacementOffset, replacementLength, cursorPosition, null, null,
53                                null, null);
54        }
55
56        /**
57         * Creates a new completion proposal. All fields are initialized based on
58         * the provided information.
59         *
60         * @param replacementString
61         *            the actual string to be inserted into the document
62         * @param replacementOffset
63         *            the offset of the text to be replaced
64         * @param replacementLength
65         *            the length of the text to be replaced
66         * @param cursorPosition
67         *            the position of the cursor following the insert relative to
68         *            replacementOffset
69         * @param image
70         *            the image to display for this proposal
71         * @param displayString
72         *            the string to be displayed for the proposal
73         * @param contextInformation
74         *            the context information associated with this proposal
75         * @param additionalProposalInfo
76         *            the additional information associated with this proposal
77         */
78        public OrderableCompletionProposal(String replacementString, int replacementOffset,
79                        int replacementLength, int cursorPosition, Image image, String displayString,
80                        IContextInformation contextInformation, String additionalProposalInfo) {
81                Assert.isNotNull(replacementString);
82                Assert.isTrue(replacementOffset >= 0);
83                Assert.isTrue(replacementLength >= 0);
84                Assert.isTrue(cursorPosition >= 0);
85
86                fReplacementString = replacementString;
87                fReplacementOffset = replacementOffset;
88                fReplacementLength = replacementLength;
89                fCursorPosition = cursorPosition;
90                fImage = image;
91                fDisplayString = displayString;
92                fContextInformation = contextInformation;
93                fAdditionalProposalInfo = additionalProposalInfo;
94        }
95
96        /*
97         * @see ICompletionProposal#apply(IDocument)
98         */
99        public void apply(IDocument document) {
100                try {
101                        document.replace(fReplacementOffset, fReplacementLength, fReplacementString);
102                } catch (BadLocationException x) {
103                        // ignore
104                }
105        }
106
107        /*
108         * @see ICompletionProposal#getSelection(IDocument)
109         */
110        public Point getSelection(IDocument document) {
111                return new Point(fReplacementOffset + fCursorPosition, 0);
112        }
113
114        /*
115         * @see ICompletionProposal#getContextInformation()
116         */
117        public IContextInformation getContextInformation() {
118                return fContextInformation;
119        }
120
121        /*
122         * @see ICompletionProposal#getImage()
123         */
124        public Image getImage() {
125                return fImage;
126        }
127
128        /*
129         * @see ICompletionProposal#getDisplayString()
130         */
131        public String getDisplayString() {
132                if (fDisplayString != null) {
133                        return fDisplayString;
134                }
135                return fReplacementString;
136        }
137
138        /*
139         * @see ICompletionProposal#getAdditionalProposalInfo()
140         */
141        public String getAdditionalProposalInfo() {
142                return fAdditionalProposalInfo;
143        }
144
145        public boolean isFunction() {
146                return function;
147        }
148
149        public void setFunction(boolean function) {
150                this.function = function;
151        }
152
153        public String getName() {
154                return name;
155        }
156
157        public void setName(String name) {
158                this.name = name;
159        }
160
161        public String getType() {
162                return type;
163        }
164
165        public void setType(String type) {
166                this.type = type;
167        }
168
169        public int compareTo(OrderableCompletionProposal o) {
170                if (o.function && !function) {
171                        return -1;
172                }
173                if (!o.function && function) {
174                        return 1;
175                }
176
177                if ((type == null) && (o.type != null)) {
178                        int typeNameComparison = -1 * o.type.compareTo(name);
179                        if (typeNameComparison == 0) {
180                                return -1;
181                        }
182                        return typeNameComparison;
183                }
184                if (type != null) {
185                        if (o.type == null) {
186                                int typeNameComparison = type.compareTo(o.name);
187                                if (typeNameComparison == 0) {
188                                        return 1;
189                                }
190                                return typeNameComparison;
191                        }
192
193                        int typeComparison = type.compareTo(o.type);
194                        if (typeComparison != 0) {
195                                return typeComparison;
196                        }
197                }
198
199                return name.compareTo(o.name);
200        }
201}
Note: See TracBrowser for help on using the repository browser.