|
@@ -68,15 +68,15 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
68
|
68
|
/** Parent Frame. */
|
69
|
69
|
private final Window frame;
|
70
|
70
|
|
71
|
|
- /**
|
72
|
|
- * Creates a new instance of TextPane.
|
|
71
|
+ /**
|
|
72
|
+ * Creates a new instance of TextPane.
|
73
|
73
|
*
|
74
|
74
|
* @param frame Parent Frame
|
75
|
75
|
*/
|
76
|
76
|
public TextPane(final Window frame) {
|
77
|
77
|
super();
|
78
|
78
|
this.frame = frame;
|
79
|
|
-
|
|
79
|
+
|
80
|
80
|
setUI(new TextPaneUI());
|
81
|
81
|
document = frame.getContainer().getDocument();
|
82
|
82
|
|
|
@@ -219,56 +219,11 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
219
|
219
|
|
220
|
220
|
/**
|
221
|
221
|
* Returns the selected text.
|
222
|
|
- *
|
|
222
|
+ *
|
223
|
223
|
* @return Selected text
|
224
|
224
|
*/
|
225
|
225
|
public String getSelectedText() {
|
226
|
|
- final StringBuffer selectedText = new StringBuffer();
|
227
|
|
- final LinePosition selectedRange = canvas.getSelectedRange();
|
228
|
|
-
|
229
|
|
- if (selectedRange.getStartLine() == -1) {
|
230
|
|
- return null;
|
231
|
|
- }
|
232
|
|
-
|
233
|
|
- for (int i = selectedRange.getStartLine(); i
|
234
|
|
- <= selectedRange.getEndLine(); i++) {
|
235
|
|
- if (i != selectedRange.getStartLine()) {
|
236
|
|
- selectedText.append('\n');
|
237
|
|
- }
|
238
|
|
- if (document.getNumLines() <= i) {
|
239
|
|
- return selectedText.toString();
|
240
|
|
- }
|
241
|
|
- final String line = document.getLine(i).getText();
|
242
|
|
- if (!line.isEmpty()) {
|
243
|
|
- if (selectedRange.getEndLine()
|
244
|
|
- == selectedRange.getStartLine()) {
|
245
|
|
- //loop through range
|
246
|
|
- if (selectedRange.getStartPos() != -1 && selectedRange.
|
247
|
|
- getEndPos() != -1) {
|
248
|
|
- selectedText.append(line.substring(
|
249
|
|
- selectedRange.getStartPos(),
|
250
|
|
- selectedRange.getEndPos()));
|
251
|
|
- }
|
252
|
|
- } else if (i == selectedRange.getStartLine()) {
|
253
|
|
- //loop from start of range to the end
|
254
|
|
- if (selectedRange.getStartPos() != -1) {
|
255
|
|
- selectedText.append(line.substring(
|
256
|
|
- selectedRange.getStartPos(), line.length()));
|
257
|
|
- }
|
258
|
|
- } else if (i == selectedRange.getEndLine()) {
|
259
|
|
- //loop from start to end of range
|
260
|
|
- if (selectedRange.getEndPos() != -1) {
|
261
|
|
- selectedText.append(line.substring(0, selectedRange.
|
262
|
|
- getEndPos()));
|
263
|
|
- }
|
264
|
|
- } else {
|
265
|
|
- //loop the whole line
|
266
|
|
- selectedText.append(line);
|
267
|
|
- }
|
268
|
|
- }
|
269
|
|
- }
|
270
|
|
-
|
271
|
|
- return selectedText.toString();
|
|
226
|
+ return getSelectedText(false);
|
272
|
227
|
}
|
273
|
228
|
|
274
|
229
|
/**
|
|
@@ -277,6 +232,17 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
277
|
232
|
* @return Selected text
|
278
|
233
|
*/
|
279
|
234
|
public String getStyledSelectedText() {
|
|
235
|
+ return getSelectedText(true);
|
|
236
|
+ }
|
|
237
|
+
|
|
238
|
+ /**
|
|
239
|
+ * Returns the selected text.
|
|
240
|
+ *
|
|
241
|
+ * @param styled Return styled text?
|
|
242
|
+ *
|
|
243
|
+ * @return Selected text
|
|
244
|
+ */
|
|
245
|
+ public String getSelectedText(final boolean styled) {
|
280
|
246
|
final StringBuffer selectedText = new StringBuffer();
|
281
|
247
|
final LinePosition selectedRange = canvas.getSelectedRange();
|
282
|
248
|
|
|
@@ -292,32 +258,37 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
292
|
258
|
if (document.getNumLines() <= i) {
|
293
|
259
|
return selectedText.toString();
|
294
|
260
|
}
|
295
|
|
- final String line = document.getLine(i).getStyledText();
|
|
261
|
+ final String line;
|
|
262
|
+ if (styled) {
|
|
263
|
+ line = document.getLine(i).getStyledText();
|
|
264
|
+ } else {
|
|
265
|
+ line = document.getLine(i).getText();
|
|
266
|
+ }
|
296
|
267
|
if (!line.isEmpty()) {
|
297
|
268
|
if (selectedRange.getEndLine()
|
298
|
269
|
== selectedRange.getStartLine()) {
|
299
|
270
|
//loop through range
|
300
|
271
|
if (selectedRange.getStartPos() != -1 && selectedRange.
|
301
|
272
|
getEndPos() != -1) {
|
302
|
|
- selectedText.append(Styliser.getStyledText(line,
|
|
273
|
+ selectedText.append(getText(line,
|
303
|
274
|
selectedRange.getStartPos(),
|
304
|
|
- selectedRange.getEndPos()));
|
|
275
|
+ selectedRange.getEndPos(), styled));
|
305
|
276
|
}
|
306
|
277
|
} else if (i == selectedRange.getStartLine()) {
|
307
|
278
|
//loop from start of range to the end
|
308
|
279
|
if (selectedRange.getStartPos() != -1) {
|
309
|
|
- selectedText.append(Styliser.getStyledText(line,
|
310
|
|
- selectedRange.getStartPos(), line.length()));
|
|
280
|
+ selectedText.append(getText(line, selectedRange
|
|
281
|
+ .getStartPos(), line.length(), styled));
|
311
|
282
|
}
|
312
|
283
|
} else if (i == selectedRange.getEndLine()) {
|
313
|
284
|
//loop from start to end of range
|
314
|
285
|
if (selectedRange.getEndPos() != -1) {
|
315
|
|
- selectedText.append(Styliser.getStyledText(line, 0,
|
316
|
|
- selectedRange.getEndPos()));
|
|
286
|
+ selectedText.append(getText(line, 0, selectedRange
|
|
287
|
+ .getEndPos(), styled));
|
317
|
288
|
}
|
318
|
289
|
} else {
|
319
|
290
|
//loop the whole line
|
320
|
|
- selectedText.append(line);
|
|
291
|
+ selectedText.append(getText(line, 0, line.length(), styled));
|
321
|
292
|
}
|
322
|
293
|
}
|
323
|
294
|
}
|
|
@@ -325,6 +296,25 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
325
|
296
|
return selectedText.toString();
|
326
|
297
|
}
|
327
|
298
|
|
|
299
|
+ /**
|
|
300
|
+ * Gets a range of text (styled or unstyled) from the given text.
|
|
301
|
+ *
|
|
302
|
+ * @param text Text to extract text from
|
|
303
|
+ * @param start Start index
|
|
304
|
+ * @param end End index
|
|
305
|
+ * @param styled Styled text?
|
|
306
|
+ *
|
|
307
|
+ * @return Requested text range as a String
|
|
308
|
+ */
|
|
309
|
+ private String getText(final String text, final int start, final int end,
|
|
310
|
+ final boolean styled) {
|
|
311
|
+ if (styled) {
|
|
312
|
+ return Styliser.getStyledText(text, start, end);
|
|
313
|
+ } else {
|
|
314
|
+ return text.substring(start, end);
|
|
315
|
+ }
|
|
316
|
+ }
|
|
317
|
+
|
328
|
318
|
/**
|
329
|
319
|
* Returns the selected range.
|
330
|
320
|
*
|
|
@@ -336,7 +326,7 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
336
|
326
|
|
337
|
327
|
/**
|
338
|
328
|
* Returns whether there is a selected range.
|
339
|
|
- *
|
|
329
|
+ *
|
340
|
330
|
* @return true iif there is a selected range
|
341
|
331
|
*/
|
342
|
332
|
public boolean hasSelectedRange() {
|
|
@@ -356,9 +346,9 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
356
|
346
|
|
357
|
347
|
/**
|
358
|
348
|
* Returns the type of text this click represents.
|
359
|
|
- *
|
|
349
|
+ *
|
360
|
350
|
* @param lineInfo Line info of click.
|
361
|
|
- *
|
|
351
|
+ *
|
362
|
352
|
* @return Click type for specified position
|
363
|
353
|
*/
|
364
|
354
|
public ClickTypeValue getClickType(final LineInfo lineInfo) {
|
|
@@ -367,10 +357,10 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
367
|
357
|
|
368
|
358
|
/**
|
369
|
359
|
* Returns the surrouding word at the specified position.
|
370
|
|
- *
|
|
360
|
+ *
|
371
|
361
|
* @param lineNumber Line number to get word from
|
372
|
362
|
* @param index Position to get surrounding word
|
373
|
|
- *
|
|
363
|
+ *
|
374
|
364
|
* @return Surrounding word
|
375
|
365
|
*/
|
376
|
366
|
public String getWordAtIndex(final int lineNumber, final int index) {
|
|
@@ -395,14 +385,9 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
395
|
385
|
*/
|
396
|
386
|
public void copy(final boolean copyControlCharacters) {
|
397
|
387
|
if (getSelectedText() != null && !getSelectedText().isEmpty()) {
|
398
|
|
- final String selectedText;
|
399
|
|
- if (copyControlCharacters) {
|
400
|
|
- selectedText = getStyledSelectedText();
|
401
|
|
- } else {
|
402
|
|
- selectedText = getSelectedText();
|
403
|
|
- }
|
404
|
388
|
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
|
405
|
|
- new StringSelection(selectedText), null);
|
|
389
|
+ new StringSelection(getSelectedText(
|
|
390
|
+ copyControlCharacters)), null);
|
406
|
391
|
}
|
407
|
392
|
}
|
408
|
393
|
|
|
@@ -514,7 +499,7 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
514
|
499
|
|
515
|
500
|
/**
|
516
|
501
|
* Retrieves this textpane's IRCDocument.
|
517
|
|
- *
|
|
502
|
+ *
|
518
|
503
|
* @return This textpane's IRC document
|
519
|
504
|
*/
|
520
|
505
|
public IRCDocument getDocument() {
|
|
@@ -523,7 +508,7 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
523
|
508
|
|
524
|
509
|
/**
|
525
|
510
|
* Retrives the parent window for this textpane.
|
526
|
|
- *
|
|
511
|
+ *
|
527
|
512
|
* @return Parent window
|
528
|
513
|
*/
|
529
|
514
|
public Window getWindow() {
|