1/* 2 * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 25package sun.jvm.hotspot.ui; 26 27import java.io.*; 28import java.awt.event.*; 29import java.awt.im.InputContext; 30import java.awt.datatransfer.*; 31import javax.swing.*; 32import javax.swing.event.*; 33import javax.swing.text.*; 34 35/** A simple subclass of JEditorPane for displaying uneditable html 36 */ 37 38public class SAEditorPane extends JEditorPane { 39 40 public SAEditorPane() { 41 setEditable(false); 42 setContentType("text/html"); 43 } 44 45 /** 46 Override getSelectedText so that <br> elements produce \n when 47 text is copied out of the window. 48 */ 49 50 public String getSelectedText() { 51 StringBuffer result = new StringBuffer(); 52 Document doc = getDocument(); 53 54 int start = getSelectionStart(); 55 int end = getSelectionEnd(); 56 57 try { 58 // Create an iterator using the root element 59 ElementIterator it = new ElementIterator(doc.getDefaultRootElement()); 60 61 // Iterate all content elements (which are leaves) 62 Element e; 63 String separator = System.getProperty("line.separator"); 64 while ((e = it.next()) != null) { 65 if (e.isLeaf()) { 66 int rangeStart = e.getStartOffset(); 67 int rangeEnd = e.getEndOffset(); 68 69 if (rangeEnd < start || rangeStart > end) continue; 70 if (end < rangeEnd) rangeEnd = end; 71 if (start > rangeStart) rangeStart = start; 72 try { 73 String line = getText(rangeStart, rangeEnd-rangeStart); 74 if (e.getName().equals("br")) 75 result.append(separator); 76 else 77 result.append(line); 78 } catch (BadLocationException ex) { 79 } 80 } 81 } 82 } catch (Exception e) { 83 e.printStackTrace(); 84 } 85 return result.toString(); 86 } 87 88 public void setText(String text) { 89 super.setText(text); 90 // put the cursor at the top instead of leaving it at the end. 91 setCaretPosition(0); 92 } 93} 94