Martin, why not put something like this in minis?

2009/12/4 Martin Makundi <[email protected]>

> Free4U
>
> public class DropDownChoiceWithStylingOptions<T> extends DropDownChoice<T>
> {
>  private String previouslyAppendedOptGroupLabel;
>  private int choices;
>
>  /**
>   * @param id
>   * @param choices
>   * @param renderer
>   */
>  public DropDownChoiceWithStylingOptions(String id,
>      IModel<? extends List<? extends T>> choices,
>      IChoiceRenderer<? super T> renderer) {
>    super(id, choices, renderer);
>  }
>
>  /**
>   * @param id
>   * @param choices
>   */
>  public DropDownChoiceWithStylingOptions(String id,
>      IModel<? extends List<? extends T>> choices) {
>    super(id, choices);
>  }
>
>  /**
>   * @param id
>   * @param model
>   * @param choices
>   * @param renderer
>   */
>  public DropDownChoiceWithStylingOptions(String id, IModel<T> model,
>      IModel<? extends List<? extends T>> choices,
>      IChoiceRenderer<? super T> renderer) {
>    super(id, model, choices, renderer);
>  }
>
>  /**
>   * @param id
>   * @param model
>   * @param choices
>   */
>  public DropDownChoiceWithStylingOptions(String id, IModel<T> model,
>      IModel<? extends List<? extends T>> choices) {
>    super(id, model, choices);
>  }
>
>  /**
>   * @param id
>   * @param model
>   * @param data
>   * @param renderer
>   */
>  public DropDownChoiceWithStylingOptions(String id, IModel<T> model,
>      List<? extends T> data, IChoiceRenderer<? super T> renderer) {
>    super(id, model, data, renderer);
>  }
>
>  /**
>   * @param id
>   * @param model
>   * @param choices
>   */
>  public DropDownChoiceWithStylingOptions(String id, IModel<T> model,
>      List<? extends T> choices) {
>    super(id, model, choices);
>  }
>
>  /**
>   * @param id
>   * @param data
>   * @param renderer
>   */
>  public DropDownChoiceWithStylingOptions(String id, List<? extends T> data,
>      IChoiceRenderer<? super T> renderer) {
>    super(id, data, renderer);
>  }
>
>  /**
>   * @param id
>   * @param choices
>   */
>  public DropDownChoiceWithStylingOptions(String id, List<? extends T>
> choices) {
>    super(id, choices);
>  }
>
>  /**
>   * @param id
>   */
>  public DropDownChoiceWithStylingOptions(String id) {
>    super(id);
>  }
>
>  /**
>   * @see
> org.apache.wicket.markup.html.form.AbstractChoice#onComponentTagBody(org.apache.wicket.markup.MarkupStream,
> org.apache.wicket.markup.ComponentTag)
>   */
>  @Override
>  protected void onComponentTagBody(MarkupStream markupStream,
>      ComponentTag openTag) {
>    previouslyAppendedOptGroupLabel = null;
>    choices = getChoices().size();
>    super.onComponentTagBody(markupStream, openTag);
>  }
>
>  /**
>   * @see
> org.apache.wicket.markup.html.form.AbstractChoice#appendOptionHtml(org.apache.wicket.util.string.AppendingStringBuffer,
> java.lang.Object, int, java.lang.String)
>   */
>  @Override
>  protected void appendOptionHtml(AppendingStringBuffer buffer, T choice,
>      int index, String selected) {
>    AppendingStringBuffer tmp = new AppendingStringBuffer(50);
>    super.appendOptionHtml(tmp, choice, index, selected);
>
>    if (getChoiceRenderer() instanceof IStyledChoiceRenderer) {
>      IStyledChoiceRenderer<T> styledChoiceRenderer =
> (IStyledChoiceRenderer<T>) getChoiceRenderer();
>
>      String currentOptGroupLabel =
> styledChoiceRenderer.getOptGroupLabel(choice);
>
>      if (!Utils.equalsOrNull(currentOptGroupLabel,
> previouslyAppendedOptGroupLabel)) {
>        // OptGroup changed
>        if (previouslyAppendedOptGroupLabel != null) {
>          endOptGroup(tmp);
>        }
>        if (currentOptGroupLabel != null) {
>          // OptGroup started
>          int start = tmp.indexOf("<option");
>          StringBuilder label = new
> StringBuilder(currentOptGroupLabel.length() + 19);
>          label.append("<optgroup
> label=\"").append(currentOptGroupLabel).append("\">");
>          tmp.insert(start, label);
>        }
>      }
>
>      if ((currentOptGroupLabel != null) && (index == (choices-1))) {
>        // Last option group must end too
>        endOptGroup(tmp);
>      }
>
>      {
>        String cssClass =
> styledChoiceRenderer.getOptionCssClassName(choice);
>        if (cssClass != null) {
>          int start = tmp.indexOf("<option");
>          tmp.insert(start + 7, new StringBuilder("
> class=\"").append(cssClass).append("\""));
>        }
>      }
>
>      previouslyAppendedOptGroupLabel = currentOptGroupLabel;
>    }
>
>    buffer.append(tmp);
>  }
>
>  /**
>   * @param tmp
>   */
>  private void endOptGroup(AppendingStringBuffer tmp) {
>    // OptGroup ended
>    int start = tmp.indexOf("</option>");
>    tmp.insert(start + 9, "</optgroup>");
>  }
> }
>
>
>
> public interface IStyledChoiceRenderer<T> extends IChoiceRenderer<T> {
>  /**
>   * @param t
>   * @return String
>   */
>  public String getOptGroupLabel(T t);
>
>  /**
>   * @param t
>   * @return String
>   */
>  public String getOptionCssClassName(T t);
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to