You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jitsi/src/net/java/sip/communicator/util/swing/SIPCommLinkButton.java

280 lines
6.0 KiB

/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.util.swing;
import net.java.sip.communicator.util.swing.plaf.*;
import java.awt.*;
import java.net.*;
import javax.swing.*;
/**
* A button which text is a link. The button looks like a link.
*/
public class SIPCommLinkButton
extends JButton
{
private static final long serialVersionUID = 1L;
/**
* Class id key used in UIDefaults.
*/
private static final String UIClassID = "LinkButtonUI";
/**
* Adds the ui class to UIDefaults.
*/
static
{
UIManager.getDefaults().put(UIClassID,
SIPCommLinkButtonUI.class.getName());
}
public static final int ALWAYS_UNDERLINE = 0;
public static final int HOVER_UNDERLINE = 1;
public static final int NEVER_UNDERLINE = 2;
private int linkBehavior;
private Color linkColor;
private Color colorPressed;
private Color visitedLinkColor;
private Color disabledLinkColor;
private URL buttonURL;
private boolean isLinkVisited;
/**
* Created Link Button.
*/
public SIPCommLinkButton()
{
this(null, null);
}
/**
* Created Link Button with text.
* @param text
*/
public SIPCommLinkButton(String text)
{
this(text, null);
}
/**
* Created Link Button with url.
* @param url
*/
public SIPCommLinkButton(URL url)
{
this(null, url);
}
/**
* Created Link Button with text and url.
* @param text
* @param url
*/
public SIPCommLinkButton(String text, URL url)
{
super(text);
linkBehavior = SIPCommLinkButton.HOVER_UNDERLINE;
linkColor = Color.blue;
colorPressed = Color.red;
visitedLinkColor = new Color(128, 0, 128);
if (text == null && url != null)
this.setText(url.toExternalForm());
setLinkURL(url);
this.setBorderPainted(false);
this.setContentAreaFilled(false);
this.setRolloverEnabled(true);
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
public String getUIClassID()
{
return SIPCommLinkButton.UIClassID;
}
/**
* Setup the tooltip.
*/
protected void setupToolTipText()
{
String tip = null;
if (buttonURL != null)
tip = buttonURL.toExternalForm();
setToolTipText(tip);
}
/**
* Changes link behaviour.
* @param bnew the new behaviour. One of ALWAYS_UNDERLINE, HOVER_UNDERLINE
* and NEVER_UNDERLINE.
*/
public void setLinkBehavior(int bnew)
{
if (bnew != ALWAYS_UNDERLINE && bnew != HOVER_UNDERLINE
&& bnew != NEVER_UNDERLINE)
throw new IllegalArgumentException("Not a legal LinkBehavior");
int old = linkBehavior;
linkBehavior = bnew;
firePropertyChange("linkBehavior", old, bnew);
repaint();
}
/**
* Returns the link behaviour.
* @return the link behaviour.
*/
public int getLinkBehavior()
{
return linkBehavior;
}
/**
* Sets the link color.
* @param color the new color.
*/
public void setLinkColor(Color color)
{
Color colorOld = linkColor;
linkColor = color;
firePropertyChange("linkColor", colorOld, color);
repaint();
}
/**
* Return the link color.
* @return link color.
*/
public Color getLinkColor()
{
return linkColor;
}
/**
* Sets the active link color.
* @param colorNew the new color.
*/
public void setActiveLinkColor(Color colorNew)
{
Color colorOld = colorPressed;
colorPressed = colorNew;
firePropertyChange("activeLinkColor", colorOld, colorNew);
repaint();
}
/**
* Returns the active link color.
* @return the active link color.
*/
public Color getActiveLinkColor()
{
return colorPressed;
}
/**
* Sets disabled link color.
* @param color the new color.
*/
public void setDisabledLinkColor(Color color)
{
Color colorOld = disabledLinkColor;
disabledLinkColor = color;
firePropertyChange("disabledLinkColor", colorOld, color);
if (!isEnabled())
repaint();
}
/**
* Returns the disabled link color.
* @return the disabled link color.
*/
public Color getDisabledLinkColor()
{
return disabledLinkColor;
}
/**
* Set visited link color.
* @param colorNew the new visited link color.
*/
public void setVisitedLinkColor(Color colorNew)
{
Color colorOld = visitedLinkColor;
visitedLinkColor = colorNew;
firePropertyChange("visitedLinkColor", colorOld, colorNew);
repaint();
}
/**
* Returns visited link color.
* @return visited link color.
*/
public Color getVisitedLinkColor()
{
return visitedLinkColor;
}
/**
* Set a link.
* @param url the url.
*/
public void setLinkURL(URL url)
{
URL urlOld = buttonURL;
buttonURL = url;
setupToolTipText();
firePropertyChange("linkURL", urlOld, url);
revalidate();
repaint();
}
/**
* Returns the url.
* @return the link url.
*/
public URL getLinkURL()
{
return buttonURL;
}
/**
* Set a link visited.
* @param flagNew is link visited.
*/
public void setLinkVisited(boolean flagNew)
{
boolean flagOld = isLinkVisited;
isLinkVisited = flagNew;
firePropertyChange("linkVisited", flagOld, flagNew);
repaint();
}
/**
* Returns is link visited.
* @return is link visited.
*/
public boolean isLinkVisited()
{
return isLinkVisited;
}
}