/* * 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.client.utils.EscapeUtils; import org.cruxframework.crux.core.client.utils.StringUtils; import org.cruxframework.crux.core.rebind.AbstractProxyCreator.SourcePrinter; import org.cruxframework.crux.core.rebind.CruxGeneratorException; import org.cruxframework.crux.core.rebind.screen.widget.ViewFactoryCreator; import org.cruxframework.crux.core.rebind.screen.widget.WidgetCreatorContext; import org.cruxframework.crux.core.rebind.screen.widget.creator.HasHTMLFactory; import org.cruxframework.crux.core.rebind.screen.widget.creator.children.WidgetChildProcessor; import org.cruxframework.crux.core.rebind.screen.widget.creator.children.WidgetChildProcessor.HTMLTag; import org.cruxframework.crux.core.rebind.screen.widget.declarative.TagAttributeDeclaration; import org.cruxframework.crux.core.rebind.screen.widget.declarative.TagAttributesDeclaration; import org.cruxframework.crux.core.rebind.screen.widget.declarative.TagConstraints; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.Image; class CustomButtonContext extends WidgetCreatorContext { String face; } /** * * @author Thiago da Rosa de Bustamante */ public abstract class CustomButtonFactory extends FocusWidgetFactory<CustomButtonContext> implements HasHTMLFactory<CustomButtonContext> { @TagConstraints(tagName="up") abstract static class AbstractUpFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { context.face = "UpFace"; } } @TagConstraints(tagName="upDisabled") abstract static class AbstractUpDisabledFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { context.face = "UpDisabledFace"; } } @TagConstraints(tagName="upHovering") abstract static class AbstractUpHoveringFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { context.face = "UpHoveringFace"; } } @TagConstraints(tagName="down") abstract static class AbstractDownFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { context.face = "DownFace"; } } @TagConstraints(tagName="downDisabled") abstract static class AbstractDownDisabledFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { context.face = "DownDisabledFace"; } } @TagConstraints(tagName="downHovering") abstract static class AbstractDownHoveringFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { context.face = "DownHoveringFace"; } } @TagConstraints(tagName="textFace") @TagAttributesDeclaration({ @TagAttributeDeclaration(value="value", required=true) }) abstract static class AbstractTextFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { out.println(context.getWidget()+"get"+context.face+"().setText("+EscapeUtils.quote(context.readChildProperty("value"))+");"); } } @TagConstraints(tagName="htmlFace", type=HTMLTag.class) abstract static class AbstractHTMLFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { out.println(context.getWidget()+"get"+context.face+"().setHTML("+getWidgetCreator(). ensureHtmlChild(context.getChildElement(), true, context.getWidgetId(), context)+");"); } } @TagConstraints(tagName="imageFace") @TagAttributesDeclaration({ @TagAttributeDeclaration(value="url", required=true, supportsResources=true), @TagAttributeDeclaration("visibleRect") }) abstract static class AbstractImageFaceProcessor extends WidgetChildProcessor<CustomButtonContext> { @Override public void processChildren(SourcePrinter out, CustomButtonContext context) throws CruxGeneratorException { String visibleRect = context.readChildProperty("visibleRect"); String url = context.readChildProperty("url"); if (StringUtils.isEmpty(visibleRect)) { if (getWidgetCreator().isResourceReference(url)) { String resource = ViewFactoryCreator.createVariableName("resource"); out.println(ImageResource.class.getCanonicalName()+" "+resource+" = "+getWidgetCreator().getResourceAccessExpression(url)+";"); out.println(context.getWidget()+"get"+context.face+"().setImage(new "+Image.class.getCanonicalName()+ "("+resource+".getSafeUri().asString()), "+resource+".getLeft(), "+ resource+".getTop(), "+resource+".getWidth(), "+resource+".getHeight());"); } else { out.println(context.getWidget()+"get"+context.face+"().setImage(new "+Image.class.getCanonicalName()+ "("+EscapeUtils.quote(url)+"));"); } } else { String[] coord = visibleRect.split(","); if (coord != null && coord.length == 4) { out.println(context.getWidget()+"get"+context.face+"().setImage(new "+Image.class.getCanonicalName()+ "("+EscapeUtils.quote(url)+", "+ Integer.parseInt(coord[0].trim())+","+Integer.parseInt(coord[1].trim())+","+ Integer.parseInt(coord[2].trim())+","+Integer.parseInt(coord[3].trim())+"));"); } } } } @Override public CustomButtonContext instantiateContext() { return new CustomButtonContext(); } }