Package com.googlecode.mgwt.ui.client.util.impl

Source Code of com.googlecode.mgwt.ui.client.util.impl.BaseOrientationHandler

package com.googlecode.mgwt.ui.client.util.impl;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Document;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.Window;
import com.google.web.bindery.event.shared.EventBus;

import com.googlecode.mgwt.dom.client.event.orientation.OrientationChangeEvent;
import com.googlecode.mgwt.dom.client.event.orientation.OrientationChangeEvent.ORIENTATION;
import com.googlecode.mgwt.ui.client.resource.MainResourceAppearance.UtilCss;
import com.googlecode.mgwt.ui.client.resource.MainResourceHolder;
import com.googlecode.mgwt.ui.client.util.OrientationHandler;

public abstract class BaseOrientationHandler implements OrientationHandler {
  private static native JavaScriptObject setupOrientation0(
      BaseOrientationHandler handler)/*-{
    var func = $entry(function() {
      handler.@com.googlecode.mgwt.ui.client.util.impl.BaseOrientationHandler::onorientationChange(I)($wnd.orientation);
    });
    $doc.body.onorientationchange = func;
    return func;
  }-*/;

  private static native void destroyOrientation(JavaScriptObject o)/*-{
    $doc.body.onorientationchange = null;
    $doc.removeEventListener("orientationChanged", o);
  }-*/;

  // update styles on body
    private static void setClasses(ORIENTATION o) {

      UtilCss utilCss = MainResourceHolder.getUtilCss();
      switch (o) {

      case PORTRAIT:
        Document.get().getBody().addClassName(utilCss.portrait());
        Document.get().getBody().removeClassName(utilCss.landscape());
        break;
      case LANDSCAPE:
        Document.get().getBody().addClassName(utilCss.landscape());
        Document.get().getBody().removeClassName(utilCss.portrait());
        break;

      default:
        break;
      }
    }

  protected static ORIENTATION currentOrientation;
  protected static boolean orientationInitialized;
  protected JavaScriptObject nativeJsFunction;

  private EventBus manager;

  @Override
  public final void maybeSetupOrientation(EventBus manager) {
    this.manager = manager;
    if (orientationInitialized)
      return;
    if (!GWT.isClient()) {
      return;
    }
    doSetupOrientation();
    orientationInitialized = true;
    setClasses(getOrientation());
  }

  protected abstract void doSetupOrientation();

  protected void setupNativeBrowerOrientationHandler() {
    nativeJsFunction = setupOrientation0(this);
    Window.addCloseHandler(new CloseHandler<Window>() {

      @Override
      public void onClose(CloseEvent<Window> event) {
        destroyOrientation(nativeJsFunction);
      }
    });
  }

  protected static native int getOrientation0()/*-{
    if (typeof ($wnd.orientation) == 'undefined') {
      return 0;
    }
    return $wnd.orientation;
  }-*/;

  protected static ORIENTATION getBrowserOrientation() {
    int orientation = getOrientation0();

    ORIENTATION o;
    switch (orientation) {
      case 0:
      case 180:
        o = ORIENTATION.PORTRAIT;
        break;

      case 90:
      case -90:
        o = ORIENTATION.LANDSCAPE;
        break;

      default:
        throw new IllegalStateException("this should not happen!?");
    }
    return o;
  }

  void fireOrientationChangedEvent(ORIENTATION orientation) {
    setClasses(orientation);
    manager.fireEvent(new OrientationChangeEvent(orientation));
  }

  private void onorientationChange(int orientation) {
    ORIENTATION o;
    switch (orientation) {
    case 0:
    case 180:
      o = ORIENTATION.PORTRAIT;
      break;
    case 90:
    case -90:
      o = ORIENTATION.LANDSCAPE;
      break;
    default:
      o = ORIENTATION.PORTRAIT;
      break;
    }
    currentOrientation = o;
    fireOrientationChangedEvent(o);
  }
}
TOP

Related Classes of com.googlecode.mgwt.ui.client.util.impl.BaseOrientationHandler

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.