org.rstudio.core.client.widget.HyperlinkLabel.java Source code

Java tutorial

Introduction

Here is the source code for org.rstudio.core.client.widget.HyperlinkLabel.java

Source

/*
 * 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;
}