From 11b7d55d90176db9b9dd99b5a3ccd82e91abd9b6 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Tue, 7 Jun 2011 13:28:22 +0000 Subject: [PATCH] shadow visibility now controllable outside constructor phase svn changeset:19265/svn branch:6.6 --- .../terminal/gwt/client/ui/VOverlay.java | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java b/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java index f9e8aa1f6b..ae8b2dd9c3 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java @@ -22,7 +22,7 @@ import com.vaadin.terminal.gwt.client.Util; * temporary float over other components like context menus etc. This is to deal * stacking order correctly with VWindow objects. */ -public class VOverlay extends PopupPanel { +public class VOverlay extends PopupPanel implements CloseHandler { /* * The z-index value from where all overlays live. This can be overridden in @@ -84,21 +84,36 @@ public class VOverlay extends PopupPanel { public VOverlay(boolean autoHide, boolean modal, boolean showShadow) { super(autoHide, modal); - if (showShadow) { - shadow = DOM.createDiv(); - shadow.setClassName(CLASSNAME_SHADOW); - shadow.setInnerHTML(SHADOW_HTML); - DOM.setStyleAttribute(shadow, "position", "absolute"); - - addCloseHandler(new CloseHandler() { - public void onClose(CloseEvent event) { - removeShadowIfPresent(); - } - }); - } + setShadowEnabled(showShadow); adjustZIndex(); } + /** + * Method to controle whether DOM elements for shadow are added. With this + * method subclasses can control displaying of shadow also after the + * constructor. + * + * @param enabled true if shadow should be displayed + */ + protected void setShadowEnabled(boolean enabled) { + if (enabled != isShadowEnabled()) { + if (enabled) { + shadow = DOM.createDiv(); + shadow.setClassName(CLASSNAME_SHADOW); + shadow.setInnerHTML(SHADOW_HTML); + DOM.setStyleAttribute(shadow, "position", "absolute"); + addCloseHandler(this); + } else { + removeShadowIfPresent(); + shadow = null; + } + } + } + + protected boolean isShadowEnabled() { + return shadow != null; + } + private void removeShadowIfPresent() { if (shadow != null && shadow.getParentElement() != null) { shadow.getParentElement().removeChild(shadow); @@ -354,4 +369,8 @@ public class VOverlay extends PopupPanel { } } } + + public void onClose(CloseEvent event) { + removeShadowIfPresent(); + } } -- 2.39.5