/*
*
* Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under
* one or more contributor license agreements (see COPYRIGHT for details).
* The CA licenses this file to you under the GNU Affero General Public
* License version 3, (the "License"); you may not use this file except in
* compliance with the License. This file is part of kune.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package cc.kune.gspace.client.viewers;
import java.util.List;
import br.com.rpa.client._paperelements.PaperDialog;
import cc.kune.common.client.log.Log;
import cc.kune.core.client.events.NewUserRegisteredEvent;
import cc.kune.core.client.events.ToolChangedEvent;
import cc.kune.core.client.events.ToolChangedEvent.ToolChangedHandler;
import cc.kune.core.client.i18n.I18nUITranslationService;
import cc.kune.core.client.state.Session;
import cc.kune.core.client.state.StateManager;
import cc.kune.core.shared.FileConstants;
import cc.kune.gspace.client.actions.ShowHelpContainerEvent;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.web.bindery.event.shared.EventBus;
// TODO: Auto-generated Javadoc
/**
* The Class TutorialViewer.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
@Singleton
public class TutorialViewer extends Composite {
/**
* The Interface OnTutorialClose.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
public interface OnTutorialClose {
/**
* On close.
*/
void onClose();
}
/**
* The Interface TutorialViewerUiBinder.
*
* @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
*/
interface TutorialViewerUiBinder extends UiBinder<Widget, TutorialViewer> {
}
/** The Constant CLOSE_BTN_ID. */
public static final String CLOSE_BTN_ID = "k-tuto-view-close-btn";
/** The Constant IFRAME_ID. */
public static final String IFRAME_ID = "k-tuto-iframe";
private static final int SIZE_INT = 75;
private static final String SIZE_PERCENT = SIZE_INT + "%";
/** The ui binder. */
private static TutorialViewerUiBinder uiBinder = GWT.create(TutorialViewerUiBinder.class);
/** The def lang. */
private String defLang;
private final PaperDialog dialog;
// private final PaperButton dismissive;
/** The frame. */
@UiField
public Frame frame;
/** The i18n. */
private final I18nUITranslationService i18n;
/** The langs. */
private List<String> langs;
/** The on tutorial close. */
private OnTutorialClose onTutorialClose;
/** The session. */
private final Session session;
/**
* Instantiates a new tutorial viewer.
*
* @param i18n
* the i18n
* @param session
* the session
* @param eventBus
* the event bus
* @param stateManager
* the state manager
* @param gsArmor
* the gs armor
*/
@Inject
public TutorialViewer(final I18nUITranslationService i18n, final Session session,
final EventBus eventBus, final StateManager stateManager) {
this.i18n = i18n;
this.session = session;
dialog = new PaperDialog();
dialog.setLayered(true);
// dismissive = new PaperButton();
// dismissive.setText(I18n.t("Close"));
// dialog.addStyleName("k-tutorial");
// dismissive.addClickHandler(new ClickHandler() {
// @Override
// public void onClick(final ClickEvent event) {
// TutorialViewer.this.dialog.setOpened(false);
// NotifyUser.info("Close pulsado");
// onTutorialClose.onClose();
// }
// });
initWidget(uiBinder.createAndBindUi(this));
// frame.ensureDebugId(IFRAME_ID);
// frame.setWidth(SIZE_PERCENT);
// frame.setHeight(SIZE_PERCENT);
resizeTutorialFrame();
stateManager.onToolChanged(true, new ToolChangedHandler() {
@Override
public void onToolChanged(final ToolChangedEvent event) {
setTool(event.getNewTool());
}
});
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(final ResizeEvent event) {
// iframe height 100% does not work, so we have to do this kind of hacks
resizeTutorialFrame();
}
});
eventBus.addHandler(ShowHelpContainerEvent.getType(),
new ShowHelpContainerEvent.ShowHelpContainerHandler() {
@Override
public void onShowHelpContainer(final ShowHelpContainerEvent event) {
onTutorialClose = event.getOnTutorialClose();
setTool(event.getTool());
showTutorial();
}
});
eventBus.addHandler(NewUserRegisteredEvent.getType(),
new NewUserRegisteredEvent.NewUserRegisteredHandler() {
@Override
public void onNewUserRegistered(final NewUserRegisteredEvent event) {
new Timer() {
@Override
public void run() {
onTutorialClose = null;
showTutorial();
}
}.schedule(2000);
}
});
}
/**
* Gets the tutorial lang.
*
* @return the tutorial lang
*/
private String getTutorialLang() {
if (langs == null) {
langs = session.getInitData().getTutorialLanguages();
defLang = session.getInitData().getDefTutorialLanguage();
}
final String currentLang = i18n.getCurrentLanguage();
// We show the default tutorial lang is it's not translated (configured via
// kune.properties)
return langs.contains(currentLang) ? currentLang : defLang;
}
/**
* Resize tutorial frame.
*/
private void resizeTutorialFrame() {
int height = Window.getClientHeight();
int width = Window.getClientHeight();
height = (int) (((float) SIZE_INT * (float) height) / 100);
width = (int) (((float) SIZE_INT * (float) width) / 100);
final String hpercent = height + "px";
final String vpercent = width + "px";
// We rest the bottom are of buttons
frame.setHeight(height - 70 + "px");
frame.setWidth(width - 70 + "px");
dialog.setHeight(hpercent);
dialog.setWidth(vpercent);
Log.info("Resizing to h: " + hpercent + " w: " + vpercent);
}
/**
* Sets the tool.
*
* @param tool
* the new tool
*/
private void setTool(final String tool) {
final String currentLang = getTutorialLang();
frame.setUrl(FileConstants.TUTORIALS_PREFIX + tool + ".svg" + "#" + currentLang);
}
/**
* Show tutorial.
*/
private void showTutorial() {
if (!dialog.isAttached()) {
RootPanel.get().add(dialog);
}
dialog.setHTML(frame.getElement().getString());
// dialog.addActionButtons(dismissive, 0);
resizeTutorialFrame();
dialog.setOpened(true);
}
}