changedUpdate exception
[fedora-idea.git] / platform / platform-impl / src / com / intellij / ui / HoverHyperlinkLabel.java
blobf76ca316ee910c861c32e02b29c4e56497b6f269
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.ui;
18 import org.jetbrains.annotations.NonNls;
20 import javax.swing.*;
21 import javax.swing.event.HyperlinkEvent;
22 import javax.swing.event.HyperlinkListener;
23 import javax.swing.plaf.basic.BasicHTML;
24 import java.awt.*;
25 import java.awt.event.MouseAdapter;
26 import java.awt.event.MouseEvent;
27 import java.util.ArrayList;
29 /**
30 * @author Eugene Belyaev
32 public class HoverHyperlinkLabel extends JLabel {
33 private String myOriginalText;
34 private final ArrayList<HyperlinkListener> myListeners = new ArrayList<HyperlinkListener>();
36 public HoverHyperlinkLabel(String text) {
37 this(text, Color.BLUE);
40 public HoverHyperlinkLabel(String text, Color color) {
41 super(text);
42 myOriginalText = text;
43 setForeground(color);
44 setupListener();
47 private void setupListener() {
48 addMouseListener(new MouseHandler());
51 public void setText(String text) {
52 if (BasicHTML.isHTMLString(getText())) { // if is currently showing string as html
53 super.setText(underlineTextInHtml(text));
55 else {
56 super.setText(text);
58 myOriginalText = text;
61 @NonNls private String underlineTextInHtml(final String text) {
62 return "<html><u>" + text + "</u></html>";
65 public String getOriginalText() {
66 return myOriginalText;
69 private class MouseHandler extends MouseAdapter {
70 public void mouseClicked(MouseEvent e) {
71 HyperlinkListener[] listeners = myListeners.toArray(new HyperlinkListener[myListeners.size()]);
72 HyperlinkEvent event = new HyperlinkEvent(HoverHyperlinkLabel.this, HyperlinkEvent.EventType.ACTIVATED, null);
73 for (int i = 0; i < listeners.length; i++) {
74 HyperlinkListener listener = listeners[i];
75 listener.hyperlinkUpdate(event);
79 public void mouseEntered(MouseEvent e) {
80 HoverHyperlinkLabel.super.setText(underlineTextInHtml(myOriginalText));
81 setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
84 public void mouseExited(MouseEvent e) {
85 HoverHyperlinkLabel.super.setText(myOriginalText);
86 setCursor(Cursor.getDefaultCursor());
90 public void addHyperlinkListener(HyperlinkListener listener) {
91 myListeners.add(listener);
94 public void removeHyperlinkListener(HyperlinkListener listener) {
95 myListeners.remove(listener);