Search in sources :

Example 6 with ColumnLayout

use of com.github.bordertech.wcomponents.layout.ColumnLayout in project wcomponents by BorderTech.

the class ColumnLayoutRenderer method doRender.

/**
 * Paints the given WPanel's children.
 *
 * @param component the container to paint.
 * @param renderContext the RenderContext to paint to.
 */
@Override
public void doRender(final WComponent component, final WebXmlRenderContext renderContext) {
    WPanel panel = (WPanel) component;
    XmlStringBuilder xml = renderContext.getWriter();
    ColumnLayout layout = (ColumnLayout) panel.getLayout();
    int childCount = panel.getChildCount();
    Size hgap = layout.getHorizontalGap();
    String hgapString = hgap == null ? null : hgap.toString();
    Size vgap = layout.getVerticalGap();
    String vgapString = vgap == null ? null : vgap.toString();
    int cols = layout.getColumnCount();
    xml.appendTagOpen("ui:columnlayout");
    xml.appendOptionalAttribute("hgap", hgapString);
    xml.appendOptionalAttribute("vgap", vgapString);
    xml.appendClose();
    // Column Definitions
    for (int col = 0; col < cols; col++) {
        xml.appendTagOpen("ui:column");
        int width = layout.getColumnWidth(col);
        xml.appendOptionalAttribute("width", width > 0, width);
        switch(layout.getColumnAlignment(col)) {
            case LEFT:
                // left is assumed if omitted
                break;
            case RIGHT:
                xml.appendAttribute("align", "right");
                break;
            case CENTER:
                xml.appendAttribute("align", "center");
                break;
            default:
                throw new IllegalArgumentException("Invalid alignment: " + layout.getColumnAlignment(col));
        }
        xml.appendEnd();
    }
    for (int i = 0; i < childCount; i++) {
        xml.appendTag("ui:cell");
        WComponent child = panel.getChildAt(i);
        child.paint(renderContext);
        xml.appendEndTag("ui:cell");
    }
    xml.appendEndTag("ui:columnlayout");
}
Also used : WComponent(com.github.bordertech.wcomponents.WComponent) Size(com.github.bordertech.wcomponents.Size) WPanel(com.github.bordertech.wcomponents.WPanel) ColumnLayout(com.github.bordertech.wcomponents.layout.ColumnLayout) XmlStringBuilder(com.github.bordertech.wcomponents.XmlStringBuilder)

Example 7 with ColumnLayout

use of com.github.bordertech.wcomponents.layout.ColumnLayout in project wcomponents by BorderTech.

the class ColumnLayoutExample method addHgapVGapExample.

/**
 * Build an example using hgap and vgap.
 *
 * @param hgap the hgap width
 * @param vgap the vgap width
 */
private void addHgapVGapExample(final Size hgap, final Size vgap) {
    add(new WHeading(HeadingLevel.H2, "Column Layout: hgap=" + hgap.toString() + " vgap=" + vgap.toString()));
    WPanel panel = new WPanel();
    panel.setLayout(new ColumnLayout(new int[] { 25, 25, 25, 25 }, hgap, vgap));
    add(panel);
    for (int i = 0; i < 8; i++) {
        panel.add(new BoxComponent("25%"));
    }
    add(new WHorizontalRule());
}
Also used : WPanel(com.github.bordertech.wcomponents.WPanel) ColumnLayout(com.github.bordertech.wcomponents.layout.ColumnLayout) WHeading(com.github.bordertech.wcomponents.WHeading) WHorizontalRule(com.github.bordertech.wcomponents.WHorizontalRule)

Example 8 with ColumnLayout

use of com.github.bordertech.wcomponents.layout.ColumnLayout in project wcomponents by BorderTech.

the class ColumnLayoutExample method addResponsiveExample.

/**
 * Add a column layout which will change its rendering on small screens.
 */
private void addResponsiveExample() {
    add(new WHeading(HeadingLevel.H2, "Default responsive design"));
    add(new ExplanatoryText("This example applies the theme's default responsive design rules for ColumnLayout.\n " + "The columns have width and alignment and there is also a hgap and a vgap."));
    WPanel panel = new WPanel();
    panel.setLayout(new ColumnLayout(new int[] { 33, 33, 33 }, new Alignment[] { Alignment.LEFT, Alignment.CENTER, Alignment.RIGHT }, 12, 18));
    panel.setHtmlClass(HtmlClassProperties.RESPOND);
    add(panel);
    panel.add(new BoxComponent("Left"));
    panel.add(new BoxComponent("Center"));
    panel.add(new BoxComponent("Right"));
    panel.add(new BoxComponent("Left"));
    panel.add(new BoxComponent("Center"));
    panel.add(new BoxComponent("Right"));
}
Also used : Alignment(com.github.bordertech.wcomponents.layout.ColumnLayout.Alignment) WPanel(com.github.bordertech.wcomponents.WPanel) ColumnLayout(com.github.bordertech.wcomponents.layout.ColumnLayout) ExplanatoryText(com.github.bordertech.wcomponents.examples.common.ExplanatoryText) WHeading(com.github.bordertech.wcomponents.WHeading)

Example 9 with ColumnLayout

use of com.github.bordertech.wcomponents.layout.ColumnLayout in project wcomponents by BorderTech.

the class ColumnLayoutExample method addAutoWidthExample.

/**
 * This example shows a column which does not have widths set in Java. This is a "good thing": widths should be set in CSS.
 */
private void addAutoWidthExample() {
    add(new WHeading(HeadingLevel.H2, "Automatic (app defined) widths"));
    add(new ExplanatoryText("This example shows what happens if you use undefined (0) column width and do not then define them in CSS."));
    WPanel panel = new WPanel();
    panel.setLayout(new ColumnLayout(new int[] { 0, 0, 0 }, new Alignment[] { Alignment.LEFT, Alignment.CENTER, Alignment.RIGHT }));
    add(panel);
    panel.add(new BoxComponent("Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..."));
    panel.add(new BoxComponent("Praesent eu turpis convallis, fringilla elit nec, ullamcorper purus. Proin dictum ac nunc rhoncus fringilla. " + "Pellentesque habitant morbi tristique senectus et netus et malesuada fames."));
    panel.add(new BoxComponent("Vestibulum vehicula a turpis et efficitur. Integer maximus enim a orci posuere, id fermentum magna dignissim. " + "Sed condimentum, dui et condimentum faucibus, quam erat pharetra."));
    panel.add(new BoxComponent("Left"));
    panel.add(new BoxComponent("Center"));
    panel.add(new BoxComponent("Right"));
    add(new WHorizontalRule());
}
Also used : Alignment(com.github.bordertech.wcomponents.layout.ColumnLayout.Alignment) WPanel(com.github.bordertech.wcomponents.WPanel) ColumnLayout(com.github.bordertech.wcomponents.layout.ColumnLayout) ExplanatoryText(com.github.bordertech.wcomponents.examples.common.ExplanatoryText) WHeading(com.github.bordertech.wcomponents.WHeading) WHorizontalRule(com.github.bordertech.wcomponents.WHorizontalRule)

Example 10 with ColumnLayout

use of com.github.bordertech.wcomponents.layout.ColumnLayout in project wcomponents by BorderTech.

the class ColumnLayoutRenderer_Test method testDoRender.

@Test
public void testDoRender() throws IOException, SAXException, XpathException {
    final int[] cols = new int[] { 1, 100 };
    final Alignment[] aligns = new Alignment[] { Alignment.RIGHT, Alignment.CENTER };
    final String text1 = "ColumnRenderer_Test.testPaint.text1";
    final String text2 = "ColumnRenderer_Test.testPaint.text2";
    WPanel container = new WPanel();
    container.setLayout(new ColumnLayout(cols));
    // One element -> 1 row, 2 cols (one empty)
    container.add(new WText(text1));
    assertSchemaMatch(container);
    assertXpathEvaluatesTo("1", "count(//ui:panel/ui:columnlayout)", container);
    assertXpathEvaluatesTo(String.valueOf(cols.length), "count(//ui:panel/ui:columnlayout/ui:column)", container);
    assertXpathEvaluatesTo(text1, "normalize-space(//ui:panel/ui:columnlayout/ui:cell[1])", container);
    assertXpathEvaluatesTo("", "normalize-space(//ui:panel/ui:columnlayout/ui:cell[2])", container);
    // Two elements -> 1 row, 2 cols
    container.add(new WText(text2));
    assertSchemaMatch(container);
    assertXpathEvaluatesTo("1", "count(//ui:panel/ui:columnlayout)", container);
    assertXpathEvaluatesTo(String.valueOf(cols.length), "count(//ui:panel/ui:columnlayout/ui:column)", container);
    assertXpathEvaluatesTo(String.valueOf(cols[0]), "//ui:panel/ui:columnlayout/ui:column[1]/@width", container);
    assertXpathEvaluatesTo(String.valueOf(cols[1]), "//ui:panel/ui:columnlayout/ui:column[2]/@width", container);
    assertXpathEvaluatesTo(text1, "normalize-space(//ui:panel/ui:columnlayout/ui:cell[1])", container);
    assertXpathEvaluatesTo(text2, "normalize-space(//ui:panel/ui:columnlayout/ui:cell[2])", container);
    assertXpathEvaluatesTo("", "//ui:panel/ui:columnlayout/@hgap", container);
    assertXpathEvaluatesTo("", "//ui:panel/ui:columnlayout/@vgap", container);
    // Test hgap, vgap
    container.setLayout(new ColumnLayout(cols, GAP, BIG_GAP));
    assertSchemaMatch(container);
    assertXpathEvaluatesTo(GAP.toString(), "//ui:panel/ui:columnlayout/@hgap", container);
    assertXpathEvaluatesTo(BIG_GAP.toString(), "//ui:panel/ui:columnlayout/@vgap", container);
    // Test Alignment
    container.setLayout(new ColumnLayout(cols, aligns));
    assertSchemaMatch(container);
    assertXpathEvaluatesTo("", "//ui:panel/ui:columnlayout/@hgap", container);
    assertXpathEvaluatesTo("", "//ui:panel/ui:columnlayout/@vgap", container);
    assertXpathEvaluatesTo("right", "//ui:panel/ui:columnlayout/ui:column[1]/@align", container);
    assertXpathEvaluatesTo("center", "//ui:panel/ui:columnlayout/ui:column[2]/@align", container);
    // Test Alignment, hgap, vgap
    container.setLayout(new ColumnLayout(cols, aligns, GAP, BIG_GAP));
    assertSchemaMatch(container);
    assertXpathEvaluatesTo(GAP.toString(), "//ui:panel/ui:columnlayout/@hgap", container);
    assertXpathEvaluatesTo(BIG_GAP.toString(), "//ui:panel/ui:columnlayout/@vgap", container);
    assertXpathEvaluatesTo("right", "//ui:panel/ui:columnlayout/ui:column[1]/@align", container);
    assertXpathEvaluatesTo("center", "//ui:panel/ui:columnlayout/ui:column[2]/@align", container);
}
Also used : Alignment(com.github.bordertech.wcomponents.layout.ColumnLayout.Alignment) WText(com.github.bordertech.wcomponents.WText) WPanel(com.github.bordertech.wcomponents.WPanel) ColumnLayout(com.github.bordertech.wcomponents.layout.ColumnLayout) Test(org.junit.Test)

Aggregations

WPanel (com.github.bordertech.wcomponents.WPanel)10 ColumnLayout (com.github.bordertech.wcomponents.layout.ColumnLayout)10 WHeading (com.github.bordertech.wcomponents.WHeading)7 Alignment (com.github.bordertech.wcomponents.layout.ColumnLayout.Alignment)5 WHorizontalRule (com.github.bordertech.wcomponents.WHorizontalRule)4 ExplanatoryText (com.github.bordertech.wcomponents.examples.common.ExplanatoryText)4 WText (com.github.bordertech.wcomponents.WText)2 Test (org.junit.Test)2 Size (com.github.bordertech.wcomponents.Size)1 WCheckBox (com.github.bordertech.wcomponents.WCheckBox)1 WCheckBoxSelect (com.github.bordertech.wcomponents.WCheckBoxSelect)1 WComponent (com.github.bordertech.wcomponents.WComponent)1 WDateField (com.github.bordertech.wcomponents.WDateField)1 WFieldLayout (com.github.bordertech.wcomponents.WFieldLayout)1 WLabel (com.github.bordertech.wcomponents.WLabel)1 WTextArea (com.github.bordertech.wcomponents.WTextArea)1 WTextField (com.github.bordertech.wcomponents.WTextField)1 XmlStringBuilder (com.github.bordertech.wcomponents.XmlStringBuilder)1 FlowLayout (com.github.bordertech.wcomponents.layout.FlowLayout)1