public class SelectManyShuttleRenderer extends SelectManyRendererBase {
@Override
public void encodeEnd(FacesContext facesContext, UIComponent component) throws IOException {
UISelectManyShuttle select = (UISelectManyShuttle) component;
TobagoResponseWriter writer = HtmlRendererUtils.getTobagoResponseWriter(facesContext);
writer.startElement(HtmlElements.DIV, select);
Style style = new Style(facesContext, select);
writer.writeStyleAttribute(style);
writer.writeClassAttribute(Classes.create(select));
HtmlRendererUtils.writeDataAttributes(facesContext, writer, select);
String title = HtmlRendererUtils.getTitleFromTipAndMessages(facesContext, select);
if (title != null) {
writer.writeAttribute(HtmlAttributes.TITLE, title, true);
}
boolean hasLabel = select.hasLabel();
// TODO get buttonWidth and label Height from theme
Measure buttonWidth = Measure.valueOf(50);
Measure labelHeight = Measure.valueOf(18);
style.setTop(Measure.valueOf(0));
style.setLeft(Measure.valueOf(0));
Measure width = style.getWidth();
Measure selectWidth = width.subtract(buttonWidth).divide(2);
style.setWidth(selectWidth);
Style labelStyle = null;
if (hasLabel) {
labelStyle = new Style(style);
labelStyle.setHeight(labelHeight);
style.setHeight(style.getHeight().subtract(labelHeight));
style.setTop(style.getTop().add(labelHeight));
}
String clientId = select.getClientId(facesContext);
List<SelectItem> items = RenderUtils.getSelectItems(select);
boolean disabled = items.size() == 0 || select.isDisabled() || select.isReadonly();
String unselectedLabel = select.getUnselectedLabel();
if (unselectedLabel != null) {
writer.startElement(HtmlElements.DIV, null);
writer.writeStyleAttribute(labelStyle);
writer.writeClassAttribute(Classes.create(select, "unselectedLabel"));
writer.flush(); // is needed in some cases, e. g. TOBAGO-1094
writer.write(unselectedLabel);
writer.endElement(HtmlElements.DIV);
}
writer.startElement(HtmlElements.SELECT, null);
String unselectedClientId = clientId + ComponentUtils.SUB_SEPARATOR + "unselected";
writer.writeIdAttribute(unselectedClientId);
writer.writeAttribute(HtmlAttributes.DISABLED, disabled);
// TODO tabIndex
Integer tabIndex = select.getTabIndex();
if (tabIndex != null) {
writer.writeAttribute(HtmlAttributes.TABINDEX, tabIndex);
}
writer.writeStyleAttribute(style);
writer.writeClassAttribute(Classes.create(select, "unselected"));
writer.writeAttribute(HtmlAttributes.MULTIPLE, HtmlAttributes.MULTIPLE, false);
Object[] values = select.getSelectedValues();
HtmlRendererUtils.renderSelectItems(select, items, values, false, writer, facesContext);
writer.endElement(HtmlElements.SELECT);
writer.startElement(HtmlElements.DIV, null);
style.setLeft(style.getLeft().add(selectWidth));
style.setWidth(buttonWidth);
writer.writeStyleAttribute(style);
writer.startElement(HtmlElements.DIV, null);
writer.writeClassAttribute(Classes.create(select, "toolBar"));
createButton(facesContext, component, writer, disabled, ">>", "addAll");
createButton(facesContext, component, writer, disabled, ">", "add");
createButton(facesContext, component, writer, disabled, "<", "remove");
createButton(facesContext, component, writer, disabled, "<<", "removeAll");
writer.endElement(HtmlElements.DIV);
writer.endElement(HtmlElements.DIV);
String selectedLabel = select.getSelectedLabel();
if (selectedLabel != null) {
writer.startElement(HtmlElements.DIV, null);
labelStyle.setLeft(labelStyle.getLeft().add(selectWidth).add(buttonWidth));
writer.writeStyleAttribute(labelStyle);
writer.writeClassAttribute(Classes.create(select, "selectedLabel"));