/* * 05/26/2012 * * ParameterizedCompletionInsertionInfo.java - Used internally to track the * changes required for a specific parameterized completion. * * This library is distributed under a modified BSD license. See the included * RSyntaxTextArea.License.txt file for details. */ package org.fife.ui.autocomplete; import java.util.ArrayList; import java.util.List; import javax.swing.text.Position; import org.fife.ui.rsyntaxtextarea.DocumentRange; /** * Describes a parameterized completion - what's being inserted, where the * parameters are in the inserted text, etc. * * @author Robert Futrell * @version 1.0 */ class ParameterizedCompletionInsertionInfo { private int minOffs; private Position maxOffs; private int defaultEnd; private int selStart; private int selEnd; private String textToInsert; private List<DocumentRange> replacementLocations; private List<ReplacementCopy> replacementCopies; public ParameterizedCompletionInsertionInfo() { defaultEnd = -1; } public void addReplacementCopy(String id, int start, int end) { if (replacementCopies==null) { replacementCopies = new ArrayList<ReplacementCopy>(1); } replacementCopies.add(new ReplacementCopy(id, start, end)); } /** * Marks a region of the replacement text as representing a variable name * or some other construct that the user should replace. * * @param start The start offset. * @param end The end offset. * @see #getReplacementCount() * @see #getReplacementLocation(int) */ public void addReplacementLocation(int start, int end) { if (replacementLocations==null) { replacementLocations = new ArrayList<DocumentRange>(1); } replacementLocations.add(new DocumentRange(start, end)); } public int getDefaultEndOffs() { return defaultEnd>-1 ? defaultEnd : getMaxOffset().getOffset(); } /** * Returns the maximum offset the caret can move to before being outside * of the text inserted for this completion. * * @return The maximum offset. * @see #getMinOffset() */ public Position getMaxOffset() { return maxOffs; } /** * Returns the minimum offset the caret can move to before being outside * of the text inserted for this completion. * * @return The minimum offset. * @see #getMaxOffset() */ public int getMinOffset() { return minOffs; } public int getReplacementCopyCount() { return replacementCopies==null ? 0 : replacementCopies.size(); } /** * Returns the number of replacements in the completion. * * @return The number of replacements in the completion. */ public int getReplacementCount() { return replacementLocations==null ? 0 : replacementLocations.size(); } public ReplacementCopy getReplacementCopy(int index) { return replacementCopies.get(index); } /** * Returns the starting- and ending-offsets of the replacement regions * in the completion. * * @param index The replacement region. * @return The range in the document of that replacement region. * @see #getReplacementCount() */ public DocumentRange getReplacementLocation(int index) { return replacementLocations.get(index); } /** * Returns the offset that should be the end of the initially selected * text when the completion is inserted (i.e., the end offset of the first * replacement region). * * @return The end offset for the initial selection. * @see #getSelectionStart() */ public int getSelectionEnd() { return selEnd; } /** * Returns the offset that should be the start of the initially selected * text when the completion is inserted (i.e., the start offset of the * first replacement region). * * @return The start offset for the initial selection. * @see #getSelectionEnd() */ public int getSelectionStart() { return selStart; } /** * Returns the actual text to insert when the completion is selected. * * @return The text to insert. * @see #setTextToInsert(String) */ public String getTextToInsert() { return textToInsert; } /** * Returns whether or not there is an initial selected region for the * completion (i.e., whether the completion actually has any parameters). * * @return Whether there is a region to initially select for the completion. */ public boolean hasSelection() { return selEnd!=selStart; } /** * Sets the initially selected region for the completion. * * @param selStart The selection start. * @param selEnd The selection end. * @see #getSelectionEnd() * @see #getSelectionStart() */ public void setInitialSelection(int selStart, int selEnd) { this.selStart = selStart; this.selEnd = selEnd; } /** * Sets the document range the caret can move around in before being * outside of the text inserted for the completion. * * @param minOffs The minimum offset. * @param maxOffs The maximum offset, that will track its location as the * document is modified. * @see #getMinOffset() * @see #getMaxOffset() */ public void setCaretRange(int minOffs, Position maxOffs) { this.minOffs = minOffs; this.maxOffs = maxOffs; } public void setDefaultEndOffs(int end) { defaultEnd = end; } /** * Sets the text to insert for the completion. * * @param text The text to insert. * @see #getTextToInsert() */ public void setTextToInsert(String text) { this.textToInsert = text; } public static class ReplacementCopy { private String id; private int start; private int end; public ReplacementCopy(String id, int start, int end) { this.id = id; this.start = start; this.end = end; } public int getEnd() { return end; } public String getId() { return id; } public int getStart() { return start; } } }