/* * * 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.embed.client.panels; import org.gwtbootstrap3.client.ui.constants.Styles; import cc.kune.common.client.actions.ui.ActionFlowPanel; import cc.kune.core.client.events.UserSignInOrSignOutEvent; import cc.kune.core.client.events.UserSignInOrSignOutEvent.UserSignInOrSignOutHandler; import cc.kune.core.client.sitebar.EmbedSitebarParticipateLink; import cc.kune.core.client.sitebar.EmbedSitebarSignInLink; import cc.kune.core.client.sitebar.EmbedSitebarSignOutLink; import cc.kune.core.client.state.Session; import cc.kune.embed.client.conf.EmbedConfiguration; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.PopupPanel; import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton public class EmbedSitebar { private final EmbedSitebarParticipateLink participateLink; private final PopupPanel popup; private final EmbedSitebarSignInLink signInLink; private final EmbedSitebarSignOutLink signOutLink; private final ActionFlowPanel toolbar; @Inject public EmbedSitebar(final Session session, final ActionFlowPanel toolbar, final EmbedSitebarSignInLink signInLink, final EmbedSitebarSignOutLink signOutLink, final EmbedSitebarParticipateLink participateLink) { this.toolbar = toolbar; toolbar.setStyleName(Styles.BTN_GROUP); this.signOutLink = signOutLink; this.signInLink = signInLink; this.participateLink = participateLink; if (EmbedConfiguration.get().getShowSignIn()) { toolbar.add(signInLink); toolbar.add(participateLink); } if (EmbedConfiguration.get().getShowSignOut()) { toolbar.add(signOutLink); } popup = new PopupPanel(false, false); popup.setWidget(toolbar); centerAndShow(); popup.setAnimationEnabled(false); popup.setStyleName("oc-user-msg-popup"); popup.addStyleName("k-embed-sitebar"); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(final ResizeEvent event) { centerAndShow(); } }); session.onUserSignInOrSignOut(true, new UserSignInOrSignOutHandler() { @Override public void onUserSignInOrSignOut(final UserSignInOrSignOutEvent event) { centerAndShow(); } }); } private void centerAndShow() { // This is needed because the panel has different sizes depending on // the session Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { // We do this in deferred so we have the correct size of screen & // toolbar popup.setPopupPositionAndShow(new PopupPanel.PositionCallback() { @Override public void setPosition(final int offsetWidth, final int offsetHeight) { final Integer rightMargin = EmbedConfiguration.get().getSitebarRightMargin(); final int left = Window.getClientWidth() - toolbar.getOffsetWidth() - rightMargin; final int top = EmbedConfiguration.get().getSitebarTopMargin(); popup.setPopupPosition(left, top); } }); } }); } public void init(final String stateToken) { signInLink.setTarget(stateToken); participateLink.setTarget(stateToken); } }