Package com.google.testing.testify.risk.frontend.client.view.widgets

Source Code of com.google.testing.testify.risk.frontend.client.view.widgets.NavigationLink

// Copyright 2010 Google Inc. All Rights Reseved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


package com.google.testing.testify.risk.frontend.client.view.widgets;

import com.google.common.base.Function;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.testing.testify.risk.frontend.client.presenter.TaPagePresenter;

/**
* Navigation link widget. This control is a wrapper on top of a GWT Hyperlink widget,
* except that it enables you to disable the control as well as associate the link's target history
* token with a given project.
* <p>
* The widget has three CSS properties:
* tty-NavigationLink, which covers the entire widget.
* tty-NavigationLinkText, which covers just the link text (even the disabled text).
* tty-NavigationLinkTextDisabled, which covers the text when disabled.
*
* @author jimr@google.com (Jim Reardon)
*/
public class NavigationLink extends Composite implements HasText {

  private final DeckPanel panel;

  // The hyper link is displayed when the control is enabled; otherwise the fake link will be.
  private final Label fakeLink;
  private final Hyperlink realLink;

  private long projectId;
  private String targetHistoryToken;
  private TaPagePresenter presenter;
  private Function<Void, TaPagePresenter> createPresenterFunction;

  private static final int WIDGET_ID_ENABLED = 0;
  private static final int WIDGET_ID_DISABLED = 1;

  private static final String NAV_STYLE_UNSELECTED = "tty-LeftNavItem";
  private static final String NAV_STYLE_SELECTED = "tty-LeftNavItemSelected";
  private static final String NAV_STYLE_DISABLED = "tty-LeftNavItemDisabled";

  public NavigationLink() {
    this("", -1, "", null);
  }

  public NavigationLink(String text, long projectId, String targetHistoryToken,
      Function<Void, TaPagePresenter> createPresenterFunction) {
    this.targetHistoryToken = targetHistoryToken;
    this.projectId = projectId;
    this.createPresenterFunction = createPresenterFunction;

    panel = new DeckPanel();
    SimplePanel fakeLinkPanel = new SimplePanel();
    fakeLink = new Label(text);
    fakeLinkPanel.add(fakeLink);
    realLink = new Hyperlink(text, getHyperlinkTarget());
    panel.add(realLink);
    panel.add(fakeLinkPanel);
    enable();
    super.initWidget(panel);
  }

  public void setCreatePresenterFunction(Function<Void, TaPagePresenter> function) {
    this.createPresenterFunction = function;
  }

  public TaPagePresenter getPresenter() {
    if (presenter == null) {
      presenter = createPresenterFunction.apply(null);
    }
    return presenter;
  }

  @Override
  public void setText(String text) {
    fakeLink.setText(text);
    realLink.setText(text);
  }

  @Override
  public String getText() {
    return realLink.getText();
  }

  public void setProjectId(long projectId) {
    this.projectId = projectId;
    realLink.setTargetHistoryToken(getHyperlinkTarget());
  }

  public void setTargetHistoryToken(String token) {
    this.targetHistoryToken = token;
    realLink.setTargetHistoryToken(getHyperlinkTarget());
  }

  public String getHistoryTokenName() {
    return targetHistoryToken;
  }

  /** Updates the hyperlink's target to encode project name and history token. */
  private String getHyperlinkTarget() {
    return "/" + projectId + "/" + targetHistoryToken;
  }

  public Hyperlink getHyperlink() {
    return realLink;
  }

  public void enable() {
    panel.setStyleName(NAV_STYLE_UNSELECTED);
    panel.showWidget(WIDGET_ID_ENABLED);
  }

  public void select() {
    panel.setStyleName(NAV_STYLE_SELECTED);
    panel.showWidget(WIDGET_ID_ENABLED);
  }

  public void unSelect() {
    enable();
  }

  public void disable() {
    panel.setStyleName(NAV_STYLE_DISABLED);
    panel.showWidget(WIDGET_ID_DISABLED);
  }
}
TOP

Related Classes of com.google.testing.testify.risk.frontend.client.view.widgets.NavigationLink

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.