@Override
    public void render(final Context context, final Expander value, final SafeHtmlBuilder sb) {
        if (value != null) {
            final int depth = value.getDepth();
            final int padding = (depth * ICON_WIDTH) + initialOffset;
            final SafeStyles style = SafeStylesUtils.fromTrustedString("padding-left:" + padding + "px;");
            String className = "";
            final SvgImage expanderIcon;
            if (value.isLeaf()) {
                expanderIcon = SvgImage.DOT;
            } else if (value.isExpanded()) {
                expanderIcon = SvgImage.ARROW_DOWN;
                className += " active";
            } else {
                expanderIcon = SvgImage.ARROW_RIGHT;
                className += " active";
            }

            final SafeHtml iconSafeHtml = SvgImageUtil.toSafeHtml(
                    expanderIcon,
                    "expanderIcon" + className);
            sb.append(template.expander(
                    "expanderCell",
                    style,
                    iconSafeHtml));

        } else {
            sb.append(SafeHtmlUtils.fromSafeConstant("<br/>"));
        }
    }
Get the maximum column width required to fit expander icons for all levels
stroom-core-client-widget/src/main/java/stroom/cell/expander/client/ExpanderCell.java