]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merge commit '33e3d'
authorJohannes Dahlström <johannesd@vaadin.com>
Mon, 11 Jun 2012 10:07:37 +0000 (13:07 +0300)
committerJohannes Dahlström <johannesd@vaadin.com>
Mon, 11 Jun 2012 10:07:37 +0000 (13:07 +0300)
Conflicts:
src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java

1  2 
src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java

index e2d3d443a09ed1edb1e2410a22367ca187c495a9,0000000000000000000000000000000000000000..c6c46f1be9cc89028fba00d56e8ff31c377f6baa
mode 100644,000000..100644
--- /dev/null
@@@ -1,189 -1,0 +1,179 @@@
- import com.google.gwt.event.dom.client.TouchStartEvent;
- import com.google.gwt.event.dom.client.TouchStartHandler;
 +/*
 +@VaadinApache2LicenseForJavaFiles@
 + */
 +
 +package com.vaadin.terminal.gwt.client.ui.panel;
 +
 +import com.google.gwt.dom.client.DivElement;
 +import com.google.gwt.dom.client.Document;
-     private TouchScrollDelegate touchScrollDelegate;
 +import com.google.gwt.user.client.DOM;
 +import com.google.gwt.user.client.Element;
 +import com.google.gwt.user.client.Event;
 +import com.google.gwt.user.client.ui.SimplePanel;
 +import com.vaadin.terminal.gwt.client.ApplicationConnection;
 +import com.vaadin.terminal.gwt.client.Focusable;
 +import com.vaadin.terminal.gwt.client.ui.Icon;
 +import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
 +import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner;
 +import com.vaadin.terminal.gwt.client.ui.TouchScrollDelegate;
 +
 +public class VPanel extends SimplePanel implements ShortcutActionHandlerOwner,
 +        Focusable {
 +
 +    public static final String CLASSNAME = "v-panel";
 +
 +    ApplicationConnection client;
 +
 +    String id;
 +
 +    final Element captionNode = DOM.createDiv();
 +
 +    private final Element captionText = DOM.createSpan();
 +
 +    private Icon icon;
 +
 +    final Element bottomDecoration = DOM.createDiv();
 +
 +    final Element contentNode = DOM.createDiv();
 +
 +    private Element errorIndicatorElement;
 +
 +    ShortcutActionHandler shortcutHandler;
 +
 +    int scrollTop;
 +
 +    int scrollLeft;
 +
-         addHandler(new TouchStartHandler() {
-             public void onTouchStart(TouchStartEvent event) {
-                 getTouchScrollDelegate().onTouchStart(event);
-             }
-         }, TouchStartEvent.getType());
 +    public VPanel() {
 +        super();
 +        DivElement captionWrap = Document.get().createDivElement();
 +        captionWrap.appendChild(captionNode);
 +        captionNode.appendChild(captionText);
 +
 +        captionWrap.setClassName(CLASSNAME + "-captionwrap");
 +        captionNode.setClassName(CLASSNAME + "-caption");
 +        contentNode.setClassName(CLASSNAME + "-content");
 +        bottomDecoration.setClassName(CLASSNAME + "-deco");
 +
 +        getElement().appendChild(captionWrap);
 +
 +        /*
 +         * Make contentNode focusable only by using the setFocus() method. This
 +         * behaviour can be changed by invoking setTabIndex() in the serverside
 +         * implementation
 +         */
 +        contentNode.setTabIndex(-1);
 +
 +        getElement().appendChild(contentNode);
 +
 +        getElement().appendChild(bottomDecoration);
 +        setStyleName(CLASSNAME);
 +        DOM.sinkEvents(getElement(), Event.ONKEYDOWN);
 +        DOM.sinkEvents(contentNode, Event.ONSCROLL | Event.TOUCHEVENTS);
-     protected TouchScrollDelegate getTouchScrollDelegate() {
-         if (touchScrollDelegate == null) {
-             touchScrollDelegate = new TouchScrollDelegate(contentNode);
-         }
-         return touchScrollDelegate;
-     }
++
++        contentNode.getStyle().setProperty("position", "relative");
++        getElement().getStyle().setProperty("overflow", "hidden");
++
++        TouchScrollDelegate.enableTouchScrolling(this, contentNode);
 +    }
 +
 +    /**
 +     * Sets the keyboard focus on the Panel
 +     * 
 +     * @param focus
 +     *            Should the panel have focus or not.
 +     */
 +    public void setFocus(boolean focus) {
 +        if (focus) {
 +            getContainerElement().focus();
 +        } else {
 +            getContainerElement().blur();
 +        }
 +    }
 +
 +    /*
 +     * (non-Javadoc)
 +     * 
 +     * @see com.vaadin.terminal.gwt.client.Focusable#focus()
 +     */
++    @Override
 +    public void focus() {
 +        setFocus(true);
 +
 +    }
 +
 +    @Override
 +    protected Element getContainerElement() {
 +        return contentNode;
 +    }
 +
 +    void setCaption(String text) {
 +        DOM.setInnerHTML(captionText, text);
 +    }
 +
 +    void setErrorIndicatorVisible(boolean showError) {
 +        if (showError) {
 +            if (errorIndicatorElement == null) {
 +                errorIndicatorElement = DOM.createSpan();
 +                DOM.setElementProperty(errorIndicatorElement, "className",
 +                        "v-errorindicator");
 +                DOM.sinkEvents(errorIndicatorElement, Event.MOUSEEVENTS);
 +                sinkEvents(Event.MOUSEEVENTS);
 +            }
 +            DOM.insertBefore(captionNode, errorIndicatorElement, captionText);
 +        } else if (errorIndicatorElement != null) {
 +            DOM.removeChild(captionNode, errorIndicatorElement);
 +            errorIndicatorElement = null;
 +        }
 +    }
 +
 +    void setIconUri(String iconUri, ApplicationConnection client) {
 +        if (iconUri == null) {
 +            if (icon != null) {
 +                DOM.removeChild(captionNode, icon.getElement());
 +                icon = null;
 +            }
 +        } else {
 +            if (icon == null) {
 +                icon = new Icon(client);
 +                DOM.insertChild(captionNode, icon.getElement(), 0);
 +            }
 +            icon.setUri(iconUri);
 +        }
 +    }
 +
 +    @Override
 +    public void onBrowserEvent(Event event) {
 +        super.onBrowserEvent(event);
 +
 +        final Element target = DOM.eventGetTarget(event);
 +        final int type = DOM.eventGetType(event);
 +        if (type == Event.ONKEYDOWN && shortcutHandler != null) {
 +            shortcutHandler.handleKeyboardEvent(event);
 +            return;
 +        }
 +        if (type == Event.ONSCROLL) {
 +            int newscrollTop = DOM.getElementPropertyInt(contentNode,
 +                    "scrollTop");
 +            int newscrollLeft = DOM.getElementPropertyInt(contentNode,
 +                    "scrollLeft");
 +            if (client != null
 +                    && (newscrollLeft != scrollLeft || newscrollTop != scrollTop)) {
 +                scrollLeft = newscrollLeft;
 +                scrollTop = newscrollTop;
 +                client.updateVariable(id, "scrollTop", scrollTop, false);
 +                client.updateVariable(id, "scrollLeft", scrollLeft, false);
 +            }
 +        } else if (captionNode.isOrHasChild(target)) {
 +            if (client != null) {
 +                client.handleTooltipEvent(event, this);
 +            }
 +        }
 +    }
 +
++    @Override
 +    public ShortcutActionHandler getShortcutActionHandler() {
 +        return shortcutHandler;
 +    }
 +
 +}