/*
@VaadinApache2LicenseForJavaFiles@
*/
package com.vaadin.ui;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.shared.communication.URLReference;
import com.vaadin.shared.ui.AbstractMediaState;
import com.vaadin.shared.ui.MediaControl;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.gwt.server.ResourceReference;
/**
* Abstract base class for the HTML5 media components.
*
* @author Vaadin Ltd
*/
public abstract class AbstractMedia extends AbstractComponent {
@Override
public AbstractMediaState getState() {
return (AbstractMediaState) super.getState();
}
/**
* Sets a single media file as the source of the media component.
*
* @param source
*/
public void setSource(Resource source) {
clearSources();
addSource(source);
}
private void clearSources() {
getState().getSources().clear();
getState().getSourceTypes().clear();
}
/**
* Adds an alternative media file to the sources list. Which of the sources
* is used is selected by the browser depending on which file formats it
* supports. See wikipedia for a
* table of formats supported by different browsers.
*
* @param source
*/
public void addSource(Resource source) {
if (source != null) {
getState().getSources().add(new ResourceReference(source));
getState().getSourceTypes().add(source.getMIMEType());
requestRepaint();
}
}
/**
* Set multiple sources at once. Which of the sources is used is selected by
* the browser depending on which file formats it supports. See wikipedia for a
* table of formats supported by different browsers.
*
* @param sources
*/
public void setSources(Resource... sources) {
clearSources();
for (Resource source : sources) {
addSource(source);
}
}
/**
* @return The sources pointed to in this media.
*/
public List getSources() {
ArrayList sources = new ArrayList();
for (URLReference ref : getState().getSources()) {
sources.add(((ResourceReference) ref).getResource());
}
return sources;
}
/**
* Sets whether or not the browser should show native media controls.
*
* @param showControls
*/
public void setShowControls(boolean showControls) {
getState().setShowControls(showControls);
requestRepaint();
}
/**
* @return true if the browser is to show native media controls.
*/
public boolean isShowControls() {
return getState().isShowControls();
}
/**
* Sets the alternative text to be displayed if the browser does not support
* HTML5. This text is rendered as HTML if
* {@link #setHtmlContentAllowed(boolean)} is set to true. With HTML
* rendering, this method can also be used to implement fallback to a
* flash-based player, see the Mozilla Developer Network for details.
*
* @param altText
*/
public void setAltText(String altText) {
getState().setAltText(altText);
requestRepaint();
}
/**
* @return The text/html that is displayed when a browser doesn't support
* HTML5.
*/
public String getAltText() {
return getState().getAltText();
}
/**
* Set whether the alternative text ({@link #setAltText(String)}) is
* rendered as HTML or not.
*
* @param htmlContentAllowed
*/
public void setHtmlContentAllowed(boolean htmlContentAllowed) {
getState().setHtmlContentAllowed(htmlContentAllowed);
requestRepaint();
}
/**
* @return true if the alternative text ({@link #setAltText(String)}) is to
* be rendered as HTML.
*/
public boolean isHtmlContentAllowed() {
return getState().isHtmlContentAllowed();
}
/**
* Sets whether the media is to automatically start playback when enough
* data has been loaded.
*
* @param autoplay
*/
public void setAutoplay(boolean autoplay) {
getState().setAutoplay(autoplay);
requestRepaint();
}
/**
* @return true if the media is set to automatically start playback.
*/
public boolean isAutoplay() {
return getState().isAutoplay();
}
/**
* Set whether to mute the audio or not.
*
* @param muted
*/
public void setMuted(boolean muted) {
getState().setMuted(muted);
requestRepaint();
}
/**
* @return true if the audio is muted.
*/
public boolean isMuted() {
return getState().isMuted();
}
/**
* Pauses the media.
*/
public void pause() {
getRpcProxy(MediaControl.class).pause();
}
/**
* Starts playback of the media.
*/
public void play() {
getRpcProxy(MediaControl.class).play();
}
}