Package org.eclipse.swt.custom
Interface StyledTextContent
- All Known Subinterfaces:
IDocumentAdapter
- All Known Implementing Classes:
StyledLineWrapper
public interface StyledTextContent
Clients may implement the StyledTextContent interface to provide a
custom store for the StyledText widget content. The StyledText widget
interacts with its StyledTextContent in order to access and update
the text that is being displayed and edited in the widget.
A custom content implementation can be set in the widget using the
StyledText.setContent API.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addTextChangeListener
(TextChangeListener listener) Called by StyledText to add itself as an Observer to content changes.int
Return the number of characters in the content.getLine
(int lineIndex) Return the line at the given line index without delimiters.int
getLineAtOffset
(int offset) Return the line index at the given character offset.int
Return the number of lines.Return the line delimiter that should be used by the StyledText widget when inserting new lines.int
getOffsetAtLine
(int lineIndex) Return the character offset of the first character of the given line.getTextRange
(int start, int length) Returns a string representing the content at the given range.void
removeTextChangeListener
(TextChangeListener listener) Remove the specified text changed listener.void
replaceTextRange
(int start, int replaceLength, String text) Replace the text with "newText" starting at position "start" for a length of "replaceLength".void
Set text to "text".
-
Method Details
-
addTextChangeListener
Called by StyledText to add itself as an Observer to content changes. See TextChangeListener for a description of the listener methods that are called when text changes occur.- Parameters:
listener
- the listener- Throws:
IllegalArgumentException
-- ERROR_NULL_ARGUMENT when listener is null
-
getCharCount
int getCharCount()Return the number of characters in the content.- Returns:
- the number of characters in the content.
-
getLine
Return the line at the given line index without delimiters.- Parameters:
lineIndex
- index of the line to return. Does not include delimiters of preceding lines. Index 0 is the first line of the content.- Returns:
- the line text without delimiters
For example, if text = "\r\n\r\n", and delimiter = "\r\n", then:
- getLine(0) == ""
- getLine(1) == ""
- getLine(2) == ""
- getLine(0) == "A"
- getLine(1) == "BC"
- getLine(2) == "D"
-
getLineAtOffset
int getLineAtOffset(int offset) Return the line index at the given character offset.- Parameters:
offset
- offset of the line to return. The first character of the document is at offset 0. An offset ofgetCharCount()
is valid and should answer the line index of the last line.- Returns:
- the line index. The first line is at index 0. If the character
at offset is a delimiter character, answer the line index of the line
that is delimited.
For example, if text = "\r\n\r\n", and delimiter = "\r\n", then:
- getLineAtOffset(0) == 0
- getLineAtOffset(1) == 0
- getLineAtOffset(2) == 1
- getLineAtOffset(3) == 1
- getLineAtOffset(4) == 2
- getLineAtOffset(0) == 0
- getLineAtOffset(1) == 0
- getLineAtOffset(2) == 1
- getLineAtOffset(3) == 1
- getLineAtOffset(4) == 1
- getLineAtOffset(5) == 2
- getLineAtOffset(6) == 2
-
getLineCount
int getLineCount()Return the number of lines. Should answer 1 when no text is specified. The StyledText widget relies on this behavior for drawing the cursor.- Returns:
- the number of lines. For example:
- text value ==> getLineCount
- null ==> 1
- "" ==> 1
- "a\n" ==> 2
- "\n\n" ==> 3
-
getLineDelimiter
String getLineDelimiter()Return the line delimiter that should be used by the StyledText widget when inserting new lines. New lines entered using key strokes and paste operations use this line delimiter. Implementors may use System.lineSeparator() to return the platform line delimiter.- Returns:
- the line delimiter that should be used by the StyledText widget when inserting new lines.
-
getOffsetAtLine
int getOffsetAtLine(int lineIndex) Return the character offset of the first character of the given line.NOTE: When there is no text (i.e., no lines), getOffsetAtLine(0) is a valid call that should return 0.
- Parameters:
lineIndex
- index of the line. The first line is at index 0.- Returns:
- offset offset of the first character of the line. The first
character of the document is at offset 0. The return value should
include line delimiters.
For example, if text = "\r\ntest\r\n" and delimiter = "\r\n", then:
- getOffsetAtLine(0) == 0
- getOffsetAtLine(1) == 2
- getOffsetAtLine(2) == 8
-
getTextRange
Returns a string representing the content at the given range.- Parameters:
start
- the start offset of the text to return. Offset 0 is the first character of the document.length
- the length of the text to return- Returns:
- the text at the given range
-
removeTextChangeListener
Remove the specified text changed listener.- Parameters:
listener
- the listener which should no longer be notified- Throws:
IllegalArgumentException
-- ERROR_NULL_ARGUMENT when listener is null
-
replaceTextRange
Replace the text with "newText" starting at position "start" for a length of "replaceLength".Implementors have to notify the TextChangeListeners that were added using
addTextChangeListener
before and after the content is changed. ATextChangingEvent
has to be sent to the textChanging method before the content is changed and aTextChangedEvent
has to be sent to the textChanged method after the content has changed. The text change that occurs after theTextChangingEvent
has been sent has to be consistent with the data provided in theTextChangingEvent
. This data will be cached by the widget and will be used when theTextChangedEvent
is received.The
TextChangingEvent
should be set as follows:- event.start = start of the replaced text
- event.newText = text that is going to be inserted or empty String if no text will be inserted
- event.replaceCharCount = length of text that is going to be replaced
- event.newCharCount = length of text that is going to be inserted
- event.replaceLineCount = number of lines that are going to be replaced
- event.newLineCount = number of new lines that are going to be inserted
- (replaceText, newText) ==> (replaceLineCount, newLineCount)
- ("", "\n") ==> (0, 1)
- ("\n\n", "a") ==> (2, 0)
- ("a", "\n\n") ==> (0, 2)
- ("\n", "") ==> (1, 0)
- Parameters:
start
- start offset of text to replace, none of the offsets include delimiters of preceding lines, offset 0 is the first character of the documentreplaceLength
- length of text to replacetext
- text to replace- See Also:
-
setText
Set text to "text". Implementors have to send aTextChangedEvent
to the textSet method of the TextChangeListeners that were added usingaddTextChangeListener
.- Parameters:
text
- the new text- See Also:
-