/*
* HyperlinkLabel.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.core.client.widget;
import com.google.gwt.event.dom.client.*;
import com.google.gwt.user.client.ui.Label;
import org.rstudio.core.client.HandlerRegistrations;
import org.rstudio.core.client.theme.res.ThemeStyles;
public class HyperlinkLabel extends Label
{
public HyperlinkLabel()
{
super();
this.setStyleName("rstudio-HyperlinkLabel");
}
public HyperlinkLabel(String caption, ClickHandler clickHandler)
{
super(caption);
clickHandler_ = clickHandler ;
this.setStyleName("rstudio-HyperlinkLabel");
this.addStyleName(ThemeStyles.INSTANCE.handCursor());
}
public HyperlinkLabel(String caption)
{
this(caption, null);
}
// must call this before the element is loaded
public void setClickHandler(ClickHandler clickHandler)
{
clickHandler_ = clickHandler;
}
private class MouseHandlers implements MouseOverHandler,
MouseOutHandler
{
public void onMouseOver(MouseOverEvent event)
{
if (!alwaysUnderline_)
addStyleDependentName("Link");
}
public void onMouseOut(MouseOutEvent event)
{
if ( !alwaysUnderline_)
removeStyleDependentName("Link");
}
}
public void setAlwaysUnderline(boolean alwaysUnderline)
{
alwaysUnderline_ = alwaysUnderline;
if (alwaysUnderline_)
addStyleDependentName("Link");
else
removeStyleDependentName("Link");
}
public void setClearUnderlineOnClick(boolean clearOnClick)
{
clearUnderlineOnClick_ = clearOnClick;
}
@Override
protected void onLoad()
{
releaseOnUnload_.add(addMouseOverHandler(mouseHandlers_));
releaseOnUnload_.add(addMouseOutHandler(mouseHandlers_));
if (clickHandler_ != null)
releaseOnUnload_.add(addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event)
{
if (clearUnderlineOnClick_)
removeStyleDependentName("Link");
clickHandler_.onClick(event);
}
}));
}
private MouseHandlers mouseHandlers_ = new MouseHandlers();
private ClickHandler clickHandler_ ;
private final HandlerRegistrations releaseOnUnload_ = new HandlerRegistrations();
private boolean alwaysUnderline_ = false;
private boolean clearUnderlineOnClick_ = false;
}