package org.sigmah.client.ui.view;
/*
* #%L
* Sigmah
* %%
* Copyright (C) 2010 - 2016 URD
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import org.sigmah.client.i18n.I18N;
import org.sigmah.client.ui.presenter.CreditsPresenter;
import org.sigmah.client.ui.view.base.AbstractPopupView;
import org.sigmah.client.ui.widget.popup.PopupWidget;
import org.sigmah.client.util.ClientUtils;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasText;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.inject.Singleton;
/**
* Credits frame view.
*
* @author Tom Miette (tmiette@ideia.fr)
*/
@Singleton
public class CreditsView extends AbstractPopupView<PopupWidget> implements CreditsPresenter.View {
// CSS.
private static final String ID_CREDITS = "credits";
private static final String CSS_PROPS = "properties";
private static final String CSS_VERSION = "version";
private static final String CSS_VERSION_LOGO = "version-logo";
private static final String CSS_VERSION_NAME = "version-name";
private static final String CSS_VERSION_NUMBER = "version-number";
private static final String CSS_VERSION_REF = "version-ref";
private static final String CSS_TEAM = "team";
private static final String CSS_SCROLL = "team-scroll";
private static final String CSS_TEAM_LABEL = "team-label";
private static final String CSS_TIMELINE = "timeline";
private static final String CSS_TIMELINE_LABEL = "timeline-label";
private static final String CSS_TIMELINE_IMAGE = "timeline-image";
private Label versionNameLabel;
private Label versionNumberLabel;
private Label versionRefLabel;
private Panel managersPanel;
private Panel partnersPanel;
private Panel developersPanel;
private Panel contributorsPanel;
/**
* Builds the view.
*/
public CreditsView() {
super(new PopupWidget(true), 735);
}
/**
* {@inheritDoc}
*/
@Override
public void initialize() {
// Main panel.
final VerticalPanel mainPanel = new VerticalPanel();
mainPanel.getElement().setId(ID_CREDITS);
mainPanel.add(buildPropertiesPanel());
mainPanel.add(buildTimelinePanel());
initPopup(mainPanel);
}
/**
* {@inheritDoc}
*/
@Override
public HasText getVersionNameLabel() {
return versionNameLabel;
}
/**
* {@inheritDoc}
*/
@Override
public HasText getVersionNumberLabel() {
return versionNumberLabel;
}
/**
* {@inheritDoc}
*/
@Override
public HasText getVersionRefLabel() {
return versionRefLabel;
}
/**
* {@inheritDoc}
*/
@Override
public void clearManagers() {
managersPanel.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void addManager(final String name, final String url) {
final StringBuilder sb = new StringBuilder();
if (ClientUtils.isNotBlank(name)) {
sb.append(name);
sb.append(" ");
}
if (ClientUtils.isNotBlank(url)) {
sb.append("<a href=\"");
sb.append(url);
sb.append("\" target=\"_blank\">");
sb.append(url);
sb.append("</a>");
}
final HTML html = new HTML(ClientUtils.trimToEmpty(sb.toString()));
managersPanel.add(html);
}
/**
* {@inheritDoc}
*/
@Override
public void clearPartners() {
partnersPanel.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void addPartner(final String name, final String url, final String role) {
final StringBuilder sb = new StringBuilder();
if (ClientUtils.isNotBlank(name)) {
sb.append(name);
sb.append(" ");
}
if (ClientUtils.isNotBlank(role)) {
sb.append("(");
sb.append(role);
sb.append(") ");
}
if (ClientUtils.isNotBlank(url)) {
sb.append("<a href=\"");
sb.append(url);
sb.append("\" target=\"_blank\">");
sb.append(url);
sb.append("</a>");
}
final HTML html = new HTML(ClientUtils.trimToEmpty(sb.toString()));
partnersPanel.add(html);
}
/**
* {@inheritDoc}
*/
@Override
public void clearDevelopers() {
developersPanel.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void addDeveloper(final String name, final String email) {
final StringBuilder sb = new StringBuilder();
if (ClientUtils.isNotBlank(name)) {
sb.append(name);
sb.append(" ");
}
if (ClientUtils.isNotBlank(email)) {
sb.append("<<a href=\"mailto:");
sb.append(email);
sb.append("\" target=\"_blank\">");
sb.append(email);
sb.append("</a>>");
}
final HTML html = new HTML(ClientUtils.trimToEmpty(sb.toString()));
developersPanel.add(html);
}
/**
* {@inheritDoc}
*/
@Override
public void clearContributors() {
contributorsPanel.clear();
}
/**
* {@inheritDoc}
*/
@Override
public void addContributor(final String name, final String email) {
final StringBuilder sb = new StringBuilder();
if (ClientUtils.isNotBlank(name)) {
sb.append(name);
sb.append(" ");
}
if (ClientUtils.isNotBlank(email)) {
sb.append("<<a href=\"mailto:");
sb.append(email);
sb.append("\" target=\"_blank\">");
sb.append(email);
sb.append("</a>>");
}
final HTML html = new HTML(ClientUtils.trimToEmpty(sb.toString()));
contributorsPanel.add(html);
}
// -------------------------------------
// -- UI building methods.
// -------------------------------------
private Panel buildPropertiesPanel() {
// Team panel.
final ScrollPanel scrollTeamPanel = new ScrollPanel();
scrollTeamPanel.addStyleName(CSS_SCROLL);
scrollTeamPanel.add(buildTeamPanel());
// Main panel.
final HorizontalPanel panel = new HorizontalPanel();
panel.addStyleName(CSS_PROPS);
panel.add(buildVersionPanel());
panel.add(scrollTeamPanel);
return panel;
}
private Panel buildVersionPanel() {
// Logo.
final Label logo = new Label();
logo.addStyleName(CSS_VERSION_LOGO);
// Name.
versionNameLabel = new Label();
versionNameLabel.addStyleName(CSS_VERSION_NAME);
// Number.
versionNumberLabel = new Label();
versionNumberLabel.addStyleName(CSS_VERSION_NUMBER);
// Ref.
versionRefLabel = new Label();
versionRefLabel.addStyleName(CSS_VERSION_REF);
// Main panel.
final VerticalPanel panel = new VerticalPanel();
panel.addStyleName(CSS_VERSION);
panel.add(logo);
panel.add(versionNameLabel);
panel.add(versionNumberLabel);
panel.add(versionRefLabel);
return panel;
}
private Panel buildTeamPanel() {
// Managers.
final Label managersLabel = new Label(ClientUtils.colon(I18N.CONSTANTS.sigmah_managers()));
managersLabel.addStyleName(CSS_TEAM_LABEL);
managersPanel = new VerticalPanel();
// Partners.
final Label partnersLabel = new Label(ClientUtils.colon(I18N.CONSTANTS.sigmah_partners()));
partnersLabel.addStyleName(CSS_TEAM_LABEL);
partnersPanel = new VerticalPanel();
// Developers.
final Label developersLabel = new Label(ClientUtils.colon(I18N.CONSTANTS.sigmah_developers()));
developersLabel.addStyleName(CSS_TEAM_LABEL);
developersPanel = new VerticalPanel();
// Contributors.
final Label contributorsLabel = new Label(ClientUtils.colon(I18N.CONSTANTS.sigmah_contributors()));
contributorsLabel.addStyleName(CSS_TEAM_LABEL);
contributorsPanel = new VerticalPanel();
// Main panel.
final VerticalPanel panel = new VerticalPanel();
panel.addStyleName(CSS_TEAM);
panel.add(managersLabel);
panel.add(managersPanel);
panel.add(partnersLabel);
panel.add(partnersPanel);
panel.add(developersLabel);
panel.add(developersPanel);
panel.add(contributorsLabel);
panel.add(contributorsPanel);
return panel;
}
private Panel buildTimelinePanel() {
// Top label.
final Label label = new Label(I18N.CONSTANTS.sigmah_credits());
label.addStyleName(CSS_TIMELINE_LABEL);
// Timeline image.
final Label image = new Label();
image.addStyleName(CSS_TIMELINE_IMAGE);
// Main panel.
final VerticalPanel panel = new VerticalPanel();
panel.addStyleName(CSS_TIMELINE);
panel.add(label);
panel.add(image);
return panel;
}
}