All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.client.ui.VFlash Maven / Gradle / Ivy

Go to download

Vaadin is a web application framework for Rich Internet Applications (RIA). Vaadin enables easy development and maintenance of fast and secure rich web applications with a stunning look and feel and a wide browser support. It features a server-side architecture with the majority of the logic running on the server. Ajax technology is used at the browser-side to ensure a rich and interactive user experience.

There is a newer version: 8.27.1
Show newest version
/*
 * 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.HashMap;
import java.util.Map;

import com.google.gwt.user.client.ui.HTML;
import com.vaadin.client.WidgetUtil;

public class VFlash extends HTML {

    public static final String CLASSNAME = "v-flash";

    protected String source;
    protected String altText;
    protected String classId;
    protected String codebase;
    protected String codetype;
    protected String standby;
    protected String archive;
    protected Map embedParams = new HashMap<>();
    protected boolean needsRebuild = false;
    protected String width;
    protected String height;

    private int slotOffsetHeight = -1;
    private int slotOffsetWidth = -1;

    public VFlash() {
        setStyleName(CLASSNAME);
    }

    public void setSource(String source) {
        if (this.source != source) {
            this.source = source;
            needsRebuild = true;
        }
    }

    public void setAlternateText(String altText) {
        if (this.altText != altText) {
            this.altText = altText;
            needsRebuild = true;
        }
    }

    public void setClassId(String classId) {
        if (this.classId != classId) {
            this.classId = classId;
            needsRebuild = true;
        }
    }

    public void setCodebase(String codebase) {
        if (this.codebase != codebase) {
            this.codebase = codebase;
            needsRebuild = true;
        }
    }

    public void setCodetype(String codetype) {
        if (this.codetype != codetype) {
            this.codetype = codetype;
            needsRebuild = true;
        }
    }

    public void setStandby(String standby) {
        if (this.standby != standby) {
            this.standby = standby;
            needsRebuild = true;
        }
    }

    public void setArchive(String archive) {
        if (this.archive != archive) {
            this.archive = archive;
            needsRebuild = true;
        }
    }

    /**
     * Call this after changing values of widget. It will rebuild embedding
     * structure if needed.
     */
    public void rebuildIfNeeded() {
        if (needsRebuild) {
            needsRebuild = false;
            this.setHTML(createFlashEmbed());
        }
    }

    @Override
    public void setWidth(String width) {
        // explicitly not calling super here
        if (this.width != width) {
            this.width = width;
            needsRebuild = true;
        }
    }

    @Override
    public void setHeight(String height) {
        // explicitly not calling super here
        if (this.height != height) {
            this.height = height;
            needsRebuild = true;
        }
    }

    public void setEmbedParams(Map params) {
        if (params == null) {
            if (!embedParams.isEmpty()) {
                embedParams.clear();
                needsRebuild = true;
            }
            return;
        }

        if (!embedParams.equals(params)) {
            embedParams = new HashMap<>(params);
            needsRebuild = true;
        }
    }

    /**
     * Set dimensions of the containing layout slot so that the size of the
     * embed object can be calculated from percentages if needed.
     *
     * Triggers embed resizing if percentage sizes are in use.
     *
     * @param slotOffsetHeight
     *            offset height of the layout slot
     * @param slotOffsetWidth
     *            offset width of the layout slot
     * @since 7.7.8
     */
    public void setSlotHeightAndWidth(int slotOffsetHeight,
            int slotOffsetWidth) {
        this.slotOffsetHeight = slotOffsetHeight;
        this.slotOffsetWidth = slotOffsetWidth;
        if (hasPercentageHeight() || hasPercentageWidth()) {
            resizeEmbedElement();
        }

    }

    protected String createFlashEmbed() {
        /*
         * To ensure cross-browser compatibility we are using the twice-cooked
         * method to embed flash i.e. we add a OBJECT tag for IE ActiveX and
         * inside it a EMBED for all other browsers.
         */
        StringBuilder html = new StringBuilder();

        // Start the object tag
        html.append("");

        // Ensure we have an movie parameter
        if (embedParams.get("movie") == null) {
            embedParams.put("movie", source);
        }

        // Add parameters to OBJECT
        for (String name : embedParams.keySet()) {
            html.append("");
        }

        // Build inner EMBED tag
        html.append("= 0) {
            html.append("width=\"" + getRelativePixelWidth() + "\" ");
        } else {
            html.append("width=\"" + WidgetUtil.escapeAttribute(width) + "\" ");
        }

        if (hasPercentageHeight() && slotOffsetHeight >= 0) {
            html.append("height=\"" + getRelativePixelHeight() + "px\" ");
        } else {
            html.append(
                    "height=\"" + WidgetUtil.escapeAttribute(height) + "\" ");
        }

        html.append("type=\"application/x-shockwave-flash\" ");

        // Add the parameters to the Embed
        for (String name : embedParams.keySet()) {
            html.append(WidgetUtil.escapeAttribute(name));
            html.append("=");
            html.append("\"" + WidgetUtil.escapeAttribute(embedParams.get(name))
                    + "\"");
        }

        // End embed tag
        html.append(">");

        if (altText != null) {
            html.append("");
            html.append(altText);
            html.append("");
        }

        // End object tag
        html.append("");

        return html.toString();
    }

    private void resizeEmbedElement() {
        // find  element
        com.google.gwt.dom.client.Element objectElem = getElement()
                .getFirstChildElement();
        com.google.gwt.dom.client.Element objectChild = objectElem
                .getFirstChildElement();
        while (!"EMBED".equalsIgnoreCase(objectChild.getTagName())) {
            objectChild = objectChild.getNextSiblingElement();
            if (objectChild == null) {
                return;
            }
        }
        // update height & width from slot offset, if percentage size is given
        if (hasPercentageHeight() && slotOffsetHeight >= 0) {
            objectChild.setAttribute("height", getRelativePixelHeight());
        }
        if (hasPercentageWidth() && slotOffsetWidth >= 0) {
            objectChild.setAttribute("width", getRelativePixelWidth());
        }

    }

    private String getRelativePixelWidth() {
        float relative = WidgetUtil.parseRelativeSize(width);
        int widthInPixels = (int) (relative / 100) * slotOffsetWidth;
        return widthInPixels + "px";
    }

    private String getRelativePixelHeight() {
        float relative = WidgetUtil.parseRelativeSize(height);
        int heightInPixels = (int) (relative / 100) * slotOffsetHeight;
        return heightInPixels + "px";
    }

    private boolean hasPercentageHeight() {
        return ((height != null) && (height.indexOf('%') > 0));
    }

    private boolean hasPercentageWidth() {
        return ((width != null) && (width.indexOf('%') > 0));
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy