001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: * The Original Software is NetBeans. The Initial Developer of the Original
026: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
027: * Microsystems, Inc. All Rights Reserved.
028: *
029: * If you wish your version of this file to be governed by only the CDDL
030: * or only the GPL Version 2, indicate your decision by adding
031: * "[Contributor] elects to include this software in this distribution
032: * under the [CDDL or GPL Version 2] license." If you do not indicate a
033: * single choice of license, a recipient has the option to distribute
034: * your version of this file under either the CDDL, the GPL Version 2 or
035: * to extend the choice of license to its licensees as provided above.
036: * However, if you add GPL Version 2 code and therefore, elected the GPL
037: * Version 2 license, then the option applies only if the new code is
038: * made subject to such option by the copyright holder.
039: */
040:
041: package org.netbeans.lib.profiler.ui.components;
042:
043: import java.awt.*;
044: import java.net.URL;
045: import javax.swing.*;
046: import javax.swing.event.HyperlinkEvent;
047: import javax.swing.event.HyperlinkListener;
048: import javax.swing.text.BadLocationException;
049: import javax.swing.text.JTextComponent;
050: import javax.swing.text.NavigationFilter;
051: import javax.swing.text.Position;
052:
053: /**
054: * @author Ian Formanek
055: */
056: public class HTMLLabel extends JEditorPane implements HyperlinkListener {
057: //~ Constructors -------------------------------------------------------------------------------------------------------------
058:
059: public HTMLLabel() {
060: setEditorKit(new javax.swing.text.html.HTMLEditorKit());
061: setEditable(false);
062: setOpaque(false);
063: setNavigationFilter(new NavigationFilter() {
064: public void moveDot(FilterBypass fb, int dot,
065: Position.Bias bias) {
066: super .moveDot(fb, 0, bias);
067: }
068:
069: public void setDot(FilterBypass fb, int dot,
070: Position.Bias bias) {
071: super .setDot(fb, 0, bias);
072: }
073:
074: public int getNextVisualPositionFrom(JTextComponent text,
075: int pos, Position.Bias bias, int direction,
076: Position.Bias[] biasRet)
077: throws BadLocationException {
078: return 0;
079: }
080: });
081: setFont(UIManager.getFont("Label.font")); //NOI18N
082: addHyperlinkListener(this );
083: }
084:
085: public HTMLLabel(String text) {
086: this ();
087: setText(text);
088: }
089:
090: //~ Methods ------------------------------------------------------------------------------------------------------------------
091:
092: public void setText(String value) {
093: Font font = getFont();
094: Color textColor = getForeground();
095:
096: value = value.replaceAll("\\n\\r|\\r\\n|\\n|\\r", "<br>"); //NOI18N
097: value = value.replaceAll("<code>", "<code style=\"font-size: "
098: + font.getSize() + "pt;\">"); //NOI18N
099:
100: String colorText = "rgb(" + textColor.getRed() + ","
101: + textColor.getGreen() + "," + textColor.getBlue()
102: + ")"; //NOI18N
103: super .setText("<html><body text=\"" + colorText
104: + "\" style=\"font-size: " + font.getSize()
105: + "pt; font-family: " + font.getName() + ";\">" + value
106: + "</body></html>"); //NOI18N
107: }
108:
109: public void hyperlinkUpdate(HyperlinkEvent e) {
110: if (!isEnabled()) {
111: return;
112: }
113:
114: if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
115: showURL(e.getURL());
116: } else if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) {
117: setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
118: } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) {
119: setCursor(Cursor.getDefaultCursor());
120: }
121: }
122:
123: protected void showURL(URL url) {
124: // override to react to URL clicks
125: }
126: }
|