/* * 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); } } } }