ru.codeinside.gses.vaadin.client.VScrollableForm.java Source code

Java tutorial

Introduction

Here is the source code for ru.codeinside.gses.vaadin.client.VScrollableForm.java

Source

/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * Copyright (c) 2013, MPL CodeInside http://codeinside.ru
 */

package ru.codeinside.gses.vaadin.client;

import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.VForm;

public class VScrollableForm extends VForm {

    public static final String HIGHLIGHTED = "highlighted";
    public static final String SCROLL_TO = "scrollTo";

    @Override
    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
        super.updateFromUIDL(uidl, client);
        if (uidl.hasAttribute(SCROLL_TO)) {
            final Paintable paintable = uidl.getPaintableAttribute(SCROLL_TO, client);
            if (paintable != null) {
                final Widget widget = (Widget) paintable;
                final Widget parent = widget.getParent();
                parent.getElement().scrollIntoView();
                if (widget instanceof Focusable) {
                    ((Focusable) widget).setFocus(true);
                }
                parent.addStyleName(HIGHLIGHTED);
                new Timer() {
                    public void run() {
                        parent.removeStyleName(HIGHLIGHTED);
                    }
                }.schedule(1333);
            }
        }
    }
}