ch.unifr.pai.twice.mousecontrol.client.MobileKeyboard.java Source code

Java tutorial

Introduction

Here is the source code for ch.unifr.pai.twice.mousecontrol.client.MobileKeyboard.java

Source

package ch.unifr.pai.twice.mousecontrol.client;

/*
 * Copyright 2013 Oliver Schmid
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.util.Date;

import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.dom.client.Style.VerticalAlign;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.google.gwt.user.client.ui.TextBox;

/**
 * Implementation for triggering the keyboard through a "button".
 * 
 * @author Oliver Schmid
 * 
 */
public class MobileKeyboard extends TextBox {

    private StringBuilder log = new StringBuilder();

    private HandlerRegistration registration;

    /**
     * Add information to the log
     * 
     * @param name
     * @param message
     * @param attributes
     */
    private void addToLog(String name, String message, String attributes) {
        log.append("<").append(name);
        log.append(" time=\"");
        log.append(new Date().getTime());
        log.append("\">");
        if (message != null)
            log.append(message);
        log.append("</").append(name).append(">");
    }

    /**
     * Event handler listening for key events
     */
    private final NativePreviewHandler handler = new NativePreviewHandler() {

        @Override
        public void onPreviewNativeEvent(NativePreviewEvent event) {
            switch (event.getTypeInt()) {
            case Event.ONKEYDOWN:
                addToLog("keydown", null, null);
                break;
            case Event.ONKEYUP:
                addToLog("keyup", null, null);
                break;
            case Event.ONKEYPRESS:
                addToLog("keypress", null, null);
                break;
            }
        }
    };

    public MobileKeyboard() {
        this(null, null);
    }

    /**
     * The mobile keyboard widget
     * 
     * @param openKeyboardText
     *            - the text for the open keyboard button
     * @param closeKeyboardText
     *            - the text for the close keyboard button
     */
    public MobileKeyboard(String openKeyboardText, String closeKeyboardText) {
        super();
        // Prevent IPhone and IPad to write everything in upper case
        getElement().setAttribute("autocapitalize", "off");
        setWidth("100%");
        setHeight("100%");
        getElement().getStyle().setFontSize(200, Unit.PCT);
        setAlignment(TextAlignment.CENTER);
        getElement().getStyle().setVerticalAlign(VerticalAlign.TOP);
        addFocusHandler(new FocusHandler() {

            /**
             * If the text box gets focus, add the handler
             * 
             * @see com.google.gwt.event.dom.client.FocusHandler#onFocus(com.google.gwt.event.dom.client.FocusEvent)
             */
            @Override
            public void onFocus(FocusEvent event) {
                getElement().getStyle().setZIndex(-1);
                registration = Event.addNativePreviewHandler(handler);
                // Scheduler.get().scheduleDeferred(new ScheduledCommand() {
                //
                // @Override
                // public void execute() {
                // Window.scrollTo(0, 1);
                // Document.get().setScrollTop(0);
                // RootLayoutPanel.get().onResize();
                // }
                // });
            }
        });
        addBlurHandler(new BlurHandler() {

            /**
             * If the text box looses focus, hide the keyboard
             * 
             * @see com.google.gwt.event.dom.client.BlurHandler#onBlur(com.google.gwt.event.dom.client.BlurEvent)
             */
            @Override
            public void onBlur(BlurEvent event) {
                hide();
            }
        });
        setValue(openKeyboardText);
        getElement().getStyle().setZIndex(2);
    }

    /**
     * Stop the execution of the keyboard
     */
    public void stop() {
        log = new StringBuilder();
        hide();
    }

    /**
     * Hide the keyboard (and remove the handlers)
     */
    private void hide() {
        getElement().getStyle().setZIndex(2);
        if (registration != null)
            registration.removeHandler();
        registration = null;
    }

    /**
     * Start the execution of the keyboard (which is in hidden mode)
     */
    public void start() {
        hide();
    }

}