20 package net.sf.gridarta.textedit.textarea;
22 import javax.swing.text.BadLocationException;
23 import javax.swing.text.Element;
24 import javax.swing.text.Segment;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
114 public void setSelection(
final int newStart,
final int newEnd,
final int newStartLine,
final int newEndLine,
final boolean newBias) {
134 final Element map =
document.getDefaultRootElement();
146 final StringBuilder buf =
new StringBuilder();
147 final Segment seg =
new Segment();
150 final Element lineElement = map.getElement(i);
151 int lineStart = lineElement.getStartOffset();
152 final int lineEnd = lineElement.getEndOffset() - 1;
154 lineStart = Math.min(lineStart + start, lineEnd);
155 final int lineLen = Math.min(end - start, lineEnd - lineStart);
157 getText(lineStart, lineLen, seg);
158 buf.append(seg.array, seg.offset, seg.count);
165 return buf.toString();
184 public String
getText(
final int start,
final int len) {
186 return document.getText(start, len);
187 }
catch (
final BadLocationException bl) {
188 bl.printStackTrace();
200 public void getText(
final int start,
final int len, @NotNull
final Segment segment) {
202 document.getText(start, len, segment);
203 }
catch (
final BadLocationException bl) {
204 bl.printStackTrace();
219 final Element map =
document.getDefaultRootElement();
235 final Element lineElement = map.getElement(i);
236 final int lineStart = lineElement.getStartOffset();
237 final int lineEnd = lineElement.getEndOffset() - 1;
238 final int rectangleStart = Math.min(lineEnd, lineStart + start);
240 document.remove(rectangleStart, Math.min(lineEnd - rectangleStart, end - start));
242 if (selectedText ==
null) {
246 currNewline = selectedText.indexOf(
'\n', lastNewline);
247 if (currNewline == -1) {
248 currNewline = selectedText.length();
251 document.insertString(rectangleStart, selectedText.substring(lastNewline, currNewline),
null);
253 lastNewline = Math.min(selectedText.length(), currNewline + 1);
256 if (selectedText !=
null && currNewline != selectedText.length()) {
258 document.insertString(offset,
"\n",
null);
259 document.insertString(offset + 1, selectedText.substring(currNewline + 1),
null);
263 if (selectedText !=
null) {
267 }
catch (
final BadLocationException bl) {
268 bl.printStackTrace();
269 throw new InternalError(
"Cannot replace selection");
322 return document.getDefaultRootElement().getElementCount();
330 return document.getDefaultRootElement().getElementIndex(offset);
340 final Element lineElement =
document.getDefaultRootElement().getElement(line);
341 return lineElement ==
null ? -1 : lineElement.getStartOffset();
351 final Element lineElement =
document.getDefaultRootElement().getElement(line);
352 return lineElement ==
null ? -1 : lineElement.getEndOffset();
360 final Element lineElement =
document.getDefaultRootElement().getElement(line);
361 return lineElement ==
null ? -1 : lineElement.getEndOffset() - lineElement.getStartOffset() - 1;
371 }
catch (
final BadLocationException bl) {
372 bl.printStackTrace();
380 public void setText(@NotNull
final String text) {
384 document.insertString(0, text,
null);
385 }
catch (
final BadLocationException bl) {
386 bl.printStackTrace();
408 public void getLineText(
final int lineIndex, @NotNull
final Segment segment) {