Package fing.satode.com.reveregroup.carousel.client

Source Code of fing.satode.com.reveregroup.carousel.client.FocusBehavior

package fing.satode.com.reveregroup.carousel.client;

import com.google.gwt.dom.client.Element;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.DockPanel.DockLayoutConstant;
import fing.satode.com.reveregroup.carousel.client.events.PhotoClickEvent;
import fing.satode.com.reveregroup.carousel.client.events.PhotoClickHandler;
import fing.satode.com.reveregroup.carousel.client.events.PhotoFocusEvent;
import fing.satode.com.reveregroup.carousel.client.events.PhotoFocusHandler;
import fing.satode.com.reveregroup.carousel.client.events.PhotoUnfocusEvent;
import fing.satode.com.reveregroup.carousel.client.events.PhotoUnfocusHandler;

public class FocusBehavior {
  protected Carousel target;
  protected HandlerManager handlerManager;

  protected Element lightbox;
  protected PopupPanel popup;
  protected DockPanel dockPanel = new DockPanel();
  protected Image popupImage;

  protected Widget focusDecoratorWidget = null;
 
  protected PhotoFocusEvent lastFocusEvent = null;

  public FocusBehavior(Carousel carousel) {
    this.target = carousel;
    handlerManager = new HandlerManager(this);
   
    carousel.addPhotoClickHandler(new PhotoClickHandler() {
      public void photoClicked(PhotoClickEvent event) {
        if (event.getPhotoIndex() == target.getCurrentPhotoIndex()) {
          PhotoFocusEvent evt = new PhotoFocusEvent();
          evt.setPhoto(event.getPhoto());
          evt.setPhotoIndex(event.getPhotoIndex());
          lastFocusEvent = evt;
          handlerManager.fireEvent(evt);
        }
      }
    });
   
    addPhotoFocusHandler(new PhotoFocusHandler() {
      public void photoFocused(PhotoFocusEvent event) {
         
        if (popup == null) {
          lightbox = DOM.createDiv();
            lightbox.setClassName("lightbox");
            if (getUserAgent().contains("msie")) {
              lightbox.setClassName("lightbox lightboxIE");
            }
            lightbox.getStyle().setProperty("zIndex", "100");
            RootPanel.getBodyElement().appendChild(lightbox);
            popup = new PopupPanel(true,true);
          popupImage = new Image();
          dockPanel.add(popupImage, DockPanel.CENTER);
            popup.add(dockPanel);
            popup.getElement().getStyle().setProperty("zIndex", "150");
          popup.addCloseHandler(new CloseHandler<PopupPanel>(){
            public void onClose(CloseEvent<PopupPanel> event) {
              popup.hide();
              lightbox.getStyle().setProperty("display", "none");
              PhotoUnfocusEvent evt = new PhotoUnfocusEvent();
              evt.setPhotoIndex(lastFocusEvent.getPhotoIndex());
              evt.setPhoto(lastFocusEvent.getPhoto());
              handlerManager.fireEvent(evt);
            }
          });
        }
       
        popupImage.setUrl(event.getPhoto().getUrl());
        lightbox.getStyle().setProperty("display", "block");
        popup.center();
      }
    });
  }
 
  public HandlerRegistration addPhotoFocusHandler(PhotoFocusHandler handler) {
    return handlerManager.addHandler(PhotoFocusEvent.getType(), handler);
  }
 
  public HandlerRegistration addPhotoUnfocusHandler(PhotoUnfocusHandler handler) {
    return handlerManager.addHandler(PhotoUnfocusEvent.getType(), handler);
  }
 
  public void setFocusDecoratorWidget(Widget widget, DockLayoutConstant position) {
    if (focusDecoratorWidget != null && focusDecoratorWidget.getParent() == dockPanel) {
      focusDecoratorWidget.removeFromParent();
    }
    focusDecoratorWidget = widget;
    dockPanel.add(widget, position);
  }
 
  private static native String getUserAgent() /*-{
    return navigator.userAgent.toLowerCase();
  }-*/;
}
 
TOP

Related Classes of fing.satode.com.reveregroup.carousel.client.FocusBehavior

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.