Преглед на файлове

Remove code duplication in TextPane getSelectedText.

Fixes issue 4447

Change-Id: Ia5844908d2ab6eeed238423338cfe05c10da7bb2
Reviewed-on: http://gerrit.dmdirc.com/1502
Automatic-Compile: DMDirc Local Commits <dmdirc@googlemail.com>
Reviewed-by: Chris Smith <chris@dmdirc.com>
tags/0.6.5
Greg Holmes преди 13 години
родител
ревизия
7f6dcc101b
променени са 1 файла, в които са добавени 57 реда и са изтрити 72 реда
  1. 57
    72
      src/com/dmdirc/addons/ui_swing/textpane/TextPane.java

+ 57
- 72
src/com/dmdirc/addons/ui_swing/textpane/TextPane.java Целия файл

@@ -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() {

Loading…
Отказ
Запис