You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2013/05/29 20:17:47 UTC
svn commit: r1487587 - in /ofbiz/trunk/framework/widget: dtd/
src/org/ofbiz/widget/fo/ src/org/ofbiz/widget/html/
src/org/ofbiz/widget/screen/ src/org/ofbiz/widget/text/ templates/
Author: adrianc
Date: Wed May 29 18:17:46 2013
New Revision: 1487587
URL: http://svn.apache.org/r1487587
Log:
New feature - Column screen widgets. This enables easy layout of multi-column screens/reports. The columns are rendered as <table> elements - so no more broken layouts caused by unpredictable floats, etc.
Modified:
ofbiz/trunk/framework/widget/dtd/widget-screen.xsd
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoScreenRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenStringRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/text/TextScreenRenderer.java
ofbiz/trunk/framework/widget/templates/csvScreenMacroLibrary.ftl
ofbiz/trunk/framework/widget/templates/foScreenMacroLibrary.ftl
ofbiz/trunk/framework/widget/templates/htmlScreenMacroLibrary.ftl
ofbiz/trunk/framework/widget/templates/textScreenMacroLibrary.ftl
Modified: ofbiz/trunk/framework/widget/dtd/widget-screen.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-screen.xsd?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-screen.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-screen.xsd Wed May 29 18:17:46 2013
@@ -697,6 +697,24 @@ under the License.
</xs:complexType>
</xs:element>
+ <xs:element name="column-container" substitutionGroup="AllWidgets">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="1" maxOccurs="unbounded" name="column">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="AllWidgets" />
+ </xs:sequence>
+ <xs:attribute type="xs:string" name="id" />
+ <xs:attribute type="xs:string" name="style" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute type="xs:string" name="id" />
+ <xs:attribute type="xs:string" name="style" />
+ </xs:complexType>
+ </xs:element>
+
<xs:element name="container" substitutionGroup="AllWidgets">
<xs:complexType>
<xs:sequence>
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoScreenRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoScreenRenderer.java?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoScreenRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/fo/FoScreenRenderer.java Wed May 29 18:17:46 2013
@@ -28,10 +28,12 @@ import org.ofbiz.widget.ModelWidget;
import org.ofbiz.widget.html.HtmlWidgetRenderer;
import org.ofbiz.widget.screen.ModelScreenWidget;
import org.ofbiz.widget.screen.ScreenStringRenderer;
+import org.ofbiz.widget.screen.ModelScreenWidget.ColumnContainer;
import org.ofbiz.entity.GenericValue;
/**
* Widget Library - HTML Form Renderer implementation
+ * @deprecated Use MacroScreenRenderer.
*/
public class FoScreenRenderer extends HtmlWidgetRenderer implements ScreenStringRenderer {
@@ -185,4 +187,9 @@ public class FoScreenRenderer extends Ht
public void renderPortalPagePortletBody(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPortlet) throws GeneralException, IOException {
// TODO: not implemented
}
+
+ @Override
+ public void renderColumnContainer(Appendable writer, Map<String, Object> context, ColumnContainer columnContainer) throws IOException {
+ // TODO: not implemented
+ }
}
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java Wed May 29 18:17:46 2013
@@ -53,9 +53,11 @@ import org.ofbiz.widget.menu.MenuStringR
import org.ofbiz.widget.menu.ModelMenu;
import org.ofbiz.widget.screen.ModelScreenWidget;
import org.ofbiz.widget.screen.ScreenStringRenderer;
+import org.ofbiz.widget.screen.ModelScreenWidget.ColumnContainer;
/**
* Widget Library - HTML Form Renderer implementation
+ * @deprecated Use MacroScreenRenderer.
*/
public class HtmlScreenRenderer extends HtmlWidgetRenderer implements ScreenStringRenderer {
@@ -903,4 +905,9 @@ public class HtmlScreenRenderer extends
public void renderPortalPagePortletBody(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPortlet) throws GeneralException, IOException {
// TODO: not implemented
}
+
+ @Override
+ public void renderColumnContainer(Appendable writer, Map<String, Object> context, ColumnContainer columnContainer) throws IOException {
+ // TODO: not implemented
+ }
}
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java Wed May 29 18:17:46 2013
@@ -59,6 +59,7 @@ import org.ofbiz.widget.form.MacroFormRe
import org.ofbiz.widget.form.ModelForm;
import org.ofbiz.widget.html.HtmlScreenRenderer.ScreenletMenuRenderer;
import org.ofbiz.widget.menu.MenuStringRenderer;
+import org.ofbiz.widget.screen.ModelScreenWidget.*;
import org.xml.sax.SAXException;
import freemarker.core.Environment;
@@ -1008,4 +1009,37 @@ public class MacroScreenRenderer impleme
}
modelScreen.renderScreenString(writer, context, this);
}
+
+ @Override
+ public void renderColumnContainer(Appendable writer, Map<String, Object> context, ColumnContainer columnContainer) throws IOException {
+ String id = columnContainer.getId(context);
+ String style = columnContainer.getStyle(context);
+ StringBuilder sb = new StringBuilder("<@renderColumnContainerBegin");
+ sb.append(" id=\"");
+ sb.append(id);
+ sb.append("\" style=\"");
+ sb.append(style);
+ sb.append("\" />");
+ executeMacro(writer, sb.toString());
+ for (Column column : columnContainer.getColumns()) {
+ id = column.getId(context);
+ style = column.getStyle(context);
+ sb = new StringBuilder("<@renderColumnBegin");
+ sb.append(" id=\"");
+ sb.append(id);
+ sb.append("\" style=\"");
+ sb.append(style);
+ sb.append("\" />");
+ executeMacro(writer, sb.toString());
+ for (ModelScreenWidget subWidget : column.getSubWidgets()) {
+ try {
+ subWidget.renderWidgetString(writer, context, this);
+ } catch (GeneralException e) {
+ throw new IOException(e);
+ }
+ }
+ executeMacro(writer, "<@renderColumnEnd />");
+ }
+ executeMacro(writer, "<@renderColumnContainerEnd />");
+ }
}
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Wed May 29 18:17:46 2013
@@ -20,8 +20,10 @@ package org.ofbiz.widget.screen;
import java.io.IOException;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.ArrayList;
import java.util.Map;
import java.util.ListIterator;
@@ -229,6 +231,78 @@ public abstract class ModelScreenWidget
}
}
+ public static class ColumnContainer extends ModelScreenWidget {
+ public static final String TAG_NAME = "column-container";
+ private final FlexibleStringExpander idExdr;
+ private final FlexibleStringExpander styleExdr;
+ private final List<Column> columns;
+
+ public ColumnContainer(ModelScreen modelScreen, Element containerElement) {
+ super(modelScreen, containerElement);
+ this.idExdr = FlexibleStringExpander.getInstance(containerElement.getAttribute("id"));
+ this.styleExdr = FlexibleStringExpander.getInstance(containerElement.getAttribute("style"));
+ List<? extends Element> subElementList = UtilXml.childElementList(containerElement, "column");
+ List<Column> columns = new ArrayList<Column>(subElementList.size());
+ for (Element element : subElementList) {
+ columns.add(new Column(modelScreen, element));
+ }
+ this.columns = Collections.unmodifiableList(columns);
+ }
+
+ @Override
+ public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) throws GeneralException, IOException {
+ try {
+ screenStringRenderer.renderColumnContainer(writer, context, this);
+ } catch (IOException e) {
+ String errMsg = "Error rendering container in screen named [" + this.modelScreen.getName() + "]: " + e.toString();
+ Debug.logError(e, errMsg, module);
+ throw new RuntimeException(errMsg);
+ }
+ }
+
+ public List<Column> getColumns() {
+ return this.columns;
+ }
+
+ public String getId(Map<String, Object> context) {
+ return this.idExdr.expandString(context);
+ }
+
+ public String getStyle(Map<String, Object> context) {
+ return this.styleExdr.expandString(context);
+ }
+
+ @Override
+ public String rawString() {
+ return "<column-container id=\"" + this.idExdr.getOriginal() + "\" style=\"" + this.styleExdr.getOriginal() + "\">";
+ }
+ }
+
+ public static class Column {
+ private final FlexibleStringExpander idExdr;
+ private final FlexibleStringExpander styleExdr;
+ private final List<ModelScreenWidget> subWidgets;
+
+ public Column(ModelScreen modelScreen, Element columnElement) {
+ this.idExdr = FlexibleStringExpander.getInstance(columnElement.getAttribute("id"));
+ this.styleExdr = FlexibleStringExpander.getInstance(columnElement.getAttribute("style"));
+ List<? extends Element> subElementList = UtilXml.childElementList(columnElement);
+ this.subWidgets = Collections.unmodifiableList(readSubWidgets(modelScreen, subElementList));
+ }
+
+ public List<ModelScreenWidget> getSubWidgets() {
+ return this.subWidgets;
+ }
+
+ public String getId(Map<String, Object> context) {
+ return this.idExdr.expandString(context);
+ }
+
+ public String getStyle(Map<String, Object> context) {
+ return this.styleExdr.expandString(context);
+ }
+ }
+
public static class Container extends ModelScreenWidget {
public static final String TAG_NAME = "container";
protected FlexibleStringExpander idExdr;
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenStringRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenStringRenderer.java?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenStringRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenStringRenderer.java Wed May 29 18:17:46 2013
@@ -33,6 +33,7 @@ public interface ScreenStringRenderer {
public void renderScreenEnd(Appendable writer, Map<String, Object> context) throws IOException;
public void renderSectionBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.Section section) throws IOException;
public void renderSectionEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.Section section) throws IOException;
+ public void renderColumnContainer(Appendable writer, Map<String, Object> context, ModelScreenWidget.ColumnContainer columnContainer) throws IOException;
public void renderContainerBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.Container container) throws IOException;
public void renderContainerEnd(Appendable writer, Map<String, Object> context, ModelScreenWidget.Container container) throws IOException;
public void renderContentBegin(Appendable writer, Map<String, Object> context, ModelScreenWidget.Content content) throws IOException;
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/text/TextScreenRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/text/TextScreenRenderer.java?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/text/TextScreenRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/text/TextScreenRenderer.java Wed May 29 18:17:46 2013
@@ -25,10 +25,12 @@ import org.ofbiz.base.util.GeneralExcept
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.widget.screen.ModelScreenWidget;
import org.ofbiz.widget.screen.ScreenStringRenderer;
+import org.ofbiz.widget.screen.ModelScreenWidget.ColumnContainer;
import org.ofbiz.entity.GenericValue;
/**
* Widget Library - Text Screen Renderer implementation
+ * @deprecated Use MacroScreenRenderer.
*/
public class TextScreenRenderer implements ScreenStringRenderer {
@@ -143,4 +145,9 @@ public class TextScreenRenderer implemen
public void renderPortalPagePortletBody(Appendable writer, Map<String, Object> context, ModelScreenWidget.PortalPage portalPage, GenericValue portalPortlet) throws GeneralException, IOException {
// TODO: not implemented
}
+
+ @Override
+ public void renderColumnContainer(Appendable writer, Map<String, Object> context, ColumnContainer columnContainer) throws IOException {
+ // TODO: not implemented
+ }
}
Modified: ofbiz/trunk/framework/widget/templates/csvScreenMacroLibrary.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/csvScreenMacroLibrary.ftl?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/csvScreenMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/csvScreenMacroLibrary.ftl Wed May 29 18:17:46 2013
@@ -53,3 +53,8 @@ under the License.
<#macro renderScreenletEnd></#macro>
<#macro renderScreenletPaginateMenu lowIndex actualPageSize ofLabel listSize paginateLastStyle lastLinkUrl paginateLastLabel paginateNextStyle nextLinkUrl paginateNextLabel paginatePreviousStyle paginatePreviousLabel previousLinkUrl paginateFirstStyle paginateFirstLabel firstLinkUrl></#macro>
+
+<#macro renderColumnContainerBegin id style></#macro>
+<#macro renderColumnContainerEnd></#macro>
+<#macro renderColumnBegin id style></#macro>
+<#macro renderColumnEnd></#macro>
Modified: ofbiz/trunk/framework/widget/templates/foScreenMacroLibrary.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/foScreenMacroLibrary.ftl?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/foScreenMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/foScreenMacroLibrary.ftl Wed May 29 18:17:46 2013
@@ -59,7 +59,7 @@ under the License.
<#macro renderSubContentEnd urlString editMode editContainerStyle editRequest enableEditValue></#macro>
<#macro renderHorizontalSeparator id style><fo:block><fo:leader leader-length="100%" leader-pattern="rule" rule-style="solid" rule-thickness="0.1mm" color="black"/></fo:block></#macro>
-<#macro renderLabel text id style><#if text?has_content><fo:block <#if style?has_content><@getFoStyle style/></#if>>${text}</fo:block></#if></#macro>
+<#macro renderLabel text id style><#if text?has_content><fo:block <#if id?has_content> id="${id}"</#if>>${text}</fo:block></#if></#macro>
<#macro renderLink parameterList targetWindow target uniqueItemName linkType actionUrl id style name linkUrl text imgStr></#macro>
<#macro renderImage src id style wid hgt border alt urlString></#macro>
@@ -69,5 +69,25 @@ under the License.
<#macro renderScreenletEnd></#macro>
<#macro renderScreenletPaginateMenu lowIndex actualPageSize ofLabel listSize paginateLastStyle lastLinkUrl paginateLastLabel paginateNextStyle nextLinkUrl paginateNextLabel paginatePreviousStyle paginatePreviousLabel previousLinkUrl paginateFirstStyle paginateFirstLabel firstLinkUrl></#macro>
-</#escape>
+<#macro renderColumnContainerBegin id style>
+ <fo:table width="100%"<#if id?has_content> id="${id}"</#if><#if style?has_content> <@getFoStyle style/></#if>>
+ <fo:table-body>
+ <fo:table-row>
+</#macro>
+
+<#macro renderColumnContainerEnd>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+</#macro>
+
+<#macro renderColumnBegin id style>
+ <fo:table-cell<#if id?has_content> id="${id}"</#if><#if style?has_content> <@getFoStyle style/></#if>>
+</#macro>
+
+<#macro renderColumnEnd>
+ </fo:table-cell>
+</#macro>
+
+</#escape>
Modified: ofbiz/trunk/framework/widget/templates/htmlScreenMacroLibrary.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/htmlScreenMacroLibrary.ftl?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/htmlScreenMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/htmlScreenMacroLibrary.ftl Wed May 29 18:17:46 2013
@@ -320,3 +320,21 @@ ${menuString}
</div>
</#if>
</#macro>
+
+<#macro renderColumnContainerBegin id style>
+ <table cellspacing="0"<#if id?has_content> id="${id}"</#if><#if style?has_content> class="${style}"</#if>>
+ <tr>
+</#macro>
+
+<#macro renderColumnContainerEnd>
+ </tr>
+ </table>
+</#macro>
+
+<#macro renderColumnBegin id style>
+ <td<#if id?has_content> id="${id}"</#if><#if style?has_content> class="${style}"</#if>>
+</#macro>
+
+<#macro renderColumnEnd>
+ </td>
+</#macro>
Modified: ofbiz/trunk/framework/widget/templates/textScreenMacroLibrary.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/textScreenMacroLibrary.ftl?rev=1487587&r1=1487586&r2=1487587&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/textScreenMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/textScreenMacroLibrary.ftl Wed May 29 18:17:46 2013
@@ -53,3 +53,8 @@ under the License.
<#macro renderScreenletEnd></#macro>
<#macro renderScreenletPaginateMenu lowIndex actualPageSize ofLabel listSize paginateLastStyle lastLinkUrl paginateLastLabel paginateNextStyle nextLinkUrl paginateNextLabel paginatePreviousStyle paginatePreviousLabel previousLinkUrl paginateFirstStyle paginateFirstLabel firstLinkUrl></#macro>
+
+<#macro renderColumnContainerBegin id style></#macro>
+<#macro renderColumnContainerEnd></#macro>
+<#macro renderColumnBegin id style></#macro>
+<#macro renderColumnEnd></#macro>