123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- * Copyright 2000-2016 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.client.ui;
-
- import java.util.logging.Logger;
-
- import com.google.gwt.aria.client.Roles;
- import com.google.gwt.core.client.GWT;
- import com.google.gwt.dom.client.Element;
- import com.google.gwt.user.client.DOM;
- import com.google.gwt.user.client.ui.RootPanel;
- import com.vaadin.client.ApplicationConnection;
- import com.vaadin.client.ComponentConnector;
- import com.vaadin.client.Util;
- import com.vaadin.client.widgets.Overlay;
-
- /**
- * In Vaadin UI this VOverlay should always be used for all elements that
- * temporary float over other components like context menus etc. This is to deal
- * stacking order correctly with VWindow objects.
- * <p>
- * To use this correctly, use {@link GWT#create(Class)} to create the
- * {@link Overlay} superclass and the default widgetset will replace it with
- * this. The widget will not be dependent on this Vaadin specific widget and can
- * be used in a pure GWT environment.
- *
- * @deprecated as this is specifically for Vaadin only, it should not be used
- * directly.
- */
- @Deprecated
- public class VOverlay extends Overlay {
-
- /*
- * ApplicationConnection that this overlay belongs to, which is needed to
- * create the overlay in the correct container so that the correct styles
- * are applied. If not given, owner will be used to figure out, and as a
- * last fallback, the overlay is created w/o container, potentially missing
- * styles.
- */
- protected ApplicationConnection ac;
-
- public VOverlay() {
- super();
- }
-
- public VOverlay(boolean autoHide) {
- super(autoHide);
- }
-
- public VOverlay(boolean autoHide, boolean modal) {
- super(autoHide, modal);
- }
-
- /*
- * A "thread local" of sorts, set temporarily so that VOverlayImpl knows
- * which VOverlay is using it, so that it can be attached to the correct
- * overlay container.
- *
- * TODO this is a strange pattern that we should get rid of when possible.
- */
- protected static VOverlay current;
-
- /**
- * Get the {@link ApplicationConnection} that this overlay belongs to. If
- * it's not set, {@link #getOwner()} is used to figure it out.
- *
- * @return
- */
- protected ApplicationConnection getApplicationConnection() {
- if (ac != null) {
- return ac;
- } else if (getOwner() != null) {
- ComponentConnector c = Util.findConnectorFor(getOwner());
- if (c != null) {
- ac = c.getConnection();
- }
- return ac;
- } else {
- return null;
- }
- }
-
- /**
- * Gets the 'overlay container' element. Tries to find the current
- * {@link ApplicationConnection} using {@link #getApplicationConnection()}.
- *
- * @return the overlay container element for the current
- * {@link ApplicationConnection} or another element if the current
- * {@link ApplicationConnection} cannot be determined.
- */
- @Override
- public com.google.gwt.user.client.Element getOverlayContainer() {
- ApplicationConnection ac = getApplicationConnection();
- if (ac == null) {
- // could not figure out which one we belong to, styling will
- // probably fail
- Logger.getLogger(getClass().getSimpleName()).warning(
- "Could not determine ApplicationConnection for Overlay. Overlay will be attached directly to the root panel");
- return super.getOverlayContainer();
- } else {
- return getOverlayContainer(ac);
- }
- }
-
- /**
- * Gets the 'overlay container' element pertaining to the given
- * {@link ApplicationConnection}. Each overlay should be created in a
- * overlay container element, so that the correct theme and styles can be
- * applied.
- *
- * @param ac
- * A reference to {@link ApplicationConnection}
- * @return The overlay container
- */
- public static com.google.gwt.user.client.Element getOverlayContainer(
- ApplicationConnection ac) {
- String id = ac.getConfiguration().getRootPanelId();
- id = id += "-overlays";
- Element container = DOM.getElementById(id);
- if (container == null) {
- container = DOM.createDiv();
- container.setId(id);
- String styles = ac.getUIConnector().getWidget().getParent()
- .getStyleName();
- if (styles != null && !styles.isEmpty()) {
- container.addClassName(styles);
- }
- container.addClassName(CLASSNAME_CONTAINER);
- RootPanel.get().getElement().appendChild(container);
- }
- return DOM.asOld(container);
- }
-
- /**
- * Set the label of the container element, where tooltip, notification and
- * dialogs are added to.
- *
- * @param applicationConnection
- * the application connection for which to change the label
- * @param overlayContainerLabel
- * label for the container
- */
- public static void setOverlayContainerLabel(
- ApplicationConnection applicationConnection,
- String overlayContainerLabel) {
- Roles.getAlertRole().setAriaLabelProperty(
- VOverlay.getOverlayContainer(applicationConnection),
- overlayContainerLabel);
- }
-
- }
|