/* * Copyright 2011 Vaadin Ltd. * * 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. */ package com.vaadin.terminal.gwt.client; import java.util.Iterator; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.vaadin.terminal.gwt.client.ui.VOverlay; public class VErrorMessage extends FlowPanel { public static final String CLASSNAME = "v-errormessage"; public VErrorMessage() { super(); setStyleName(CLASSNAME); } public void updateFromUIDL(UIDL uidl) { clear(); if (uidl.getChildCount() == 0) { add(new HTML(" ")); } else { for (final Iterator it = uidl.getChildIterator(); it.hasNext();) { final Object child = it.next(); if (child instanceof String) { final String errorMessage = (String) child; add(new HTML(errorMessage)); } else { try { final VErrorMessage childError = new VErrorMessage(); childError.updateFromUIDL((UIDL) child); add(childError); } catch (Exception e) { // TODO XML type error, check if this can even happen // anymore?? final UIDL.XML xml = (UIDL.XML) child; add(new HTML(xml.getXMLAsString())); } } } } } /** * Shows this error message next to given element. * * @param indicatorElement */ public void showAt(Element indicatorElement) { VOverlay errorContainer = (VOverlay) getParent(); if (errorContainer == null) { errorContainer = new VOverlay(); errorContainer.setWidget(this); } errorContainer.setPopupPosition( DOM.getAbsoluteLeft(indicatorElement) + 2 * DOM.getElementPropertyInt(indicatorElement, "offsetHeight"), DOM.getAbsoluteTop(indicatorElement) + 2 * DOM.getElementPropertyInt(indicatorElement, "offsetHeight")); errorContainer.show(); } public void hide() { final VOverlay errorContainer = (VOverlay) getParent(); if (errorContainer != null) { errorContainer.hide(); } } }