/* * 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; 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) { // super.setWidth(height); if (this.width != width) { this.width = width; needsRebuild = true; } } @Override public void setHeight(String height) { // super.setHeight(height); 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; } } 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(""); if (altText != null) { html.append(""); html.append(altText); html.append(""); } // End object tag html.append(""); return html.toString(); } }