/* * Copyright 2011 cruxframework.org. * * 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 org.cruxframework.crux.gwt.rebind; import org.cruxframework.crux.core.rebind.AbstractProxyCreator.SourcePrinter; import org.cruxframework.crux.core.rebind.CruxGeneratorException; import org.cruxframework.crux.core.rebind.screen.widget.AttributeProcessor; import org.cruxframework.crux.core.rebind.screen.widget.WidgetCreator; import org.cruxframework.crux.core.rebind.screen.widget.WidgetCreatorContext; import org.cruxframework.crux.core.rebind.screen.widget.declarative.DeclarativeFactory; import org.cruxframework.crux.core.rebind.screen.widget.declarative.TagAttribute; import org.cruxframework.crux.core.rebind.screen.widget.declarative.TagAttributes; import com.google.gwt.dom.client.MediaElement; import com.google.gwt.media.client.Audio; /** * Factory for Audio Widgets * @author Thiago da Rosa de Bustamante */ @DeclarativeFactory(id="audio", library="gwt", targetWidget=Audio.class) @TagAttributes({ @TagAttribute(value="autoplay", type=Boolean.class, property="audioElement.autoplay"), @TagAttribute(value="showControls", type=Boolean.class, property="audioElement.controls"), @TagAttribute(value="currentTime", type=Double.class, property="audioElement.currentTime"), @TagAttribute(value="defaultPlaybackRate", type=Double.class, property="audioElement.defaultPlaybackRate"), @TagAttribute(value="loop", type=Boolean.class, property="audioElement.loop"), @TagAttribute(value="muted", type=Boolean.class, property="audioElement.muted"), @TagAttribute(value="playbackRate", type=Double.class, property="audioElement.playbackRate"), @TagAttribute(value="preload", type=AudioFactory.PreLoadType.class, processor=AudioFactory.PreLoadAttributeProcessor.class, supportsDataBinding=false), @TagAttribute(value="src", type=String.class, property="audioElement.src", supportsResources=true), @TagAttribute(value="volume", type=Double.class, property="audioElement.volume") }) public class AudioFactory extends FocusWidgetFactory<WidgetCreatorContext> { /** * @author Thiago da Rosa de Bustamante * */ public static enum PreLoadType{auto, metadata, none} /** * @author Thiago da Rosa de Bustamante * */ public static class PreLoadAttributeProcessor extends AttributeProcessor<WidgetCreatorContext> { public PreLoadAttributeProcessor(WidgetCreator<?> widgetCreator) { super(widgetCreator); } @Override public void processAttribute(SourcePrinter out, WidgetCreatorContext context, String attributeValue) { PreLoadType preLoadType = PreLoadType.valueOf(attributeValue); String mediaElementClass = MediaElement.class.getCanonicalName(); switch (preLoadType) { case auto: out.println(context.getWidget()+".getAudioElement().setPreload("+mediaElementClass+".PRELOAD_AUTO);"); break; case metadata: out.println(context.getWidget()+".getAudioElement().setPreload("+mediaElementClass+".PRELOAD_METADATA);"); break; case none: out.println(context.getWidget()+".getAudioElement().setPreload("+mediaElementClass+".PRELOAD_NONE);"); break; } } } @Override public WidgetCreatorContext instantiateContext() { return new WidgetCreatorContext(); } @Override public void instantiateWidget(SourcePrinter out, WidgetCreatorContext context) throws CruxGeneratorException { String className = getWidgetClassName(); out.println("final "+className + " " + context.getWidget()+" = "+className+".createIfSupported();"); } }