currentValue,
blockSize,
maxValue,
null);
MarlinBean rangeLabel = new MarlinBean(STYLED_TEXT_NAME);
rangeLabel.setAttributeValue(TEXT_ATTR, rangeString);
rangeLabel.setAttributeValue(STYLE_CLASS_ATTR, NAV_BAR_VIEW_STYLE_CLASS);
rangeNode = rangeLabel;
}
else
{
// we know the size, so use the choice control
MarlinBean choice = new MarlinBean(CHOICE_NAME);
choice.setAttributeValue(SHORT_DESC_ATTR,
getTranslatedValue(context, _CHOICE_TIP_KEY));
String onChange = null;
int selectedIndex;
if (form == null)
{
// Bug #1765747: if we're trying to render a choice,
// Netscape will get very unhappy if there isn't a form,
// and render wacky output that pretty much trashes the
// navbar.
// If a client was _directly_ adding a choice, then this
// would be their fault, and we wouldn't try to work around
// it. But the NavigationBar implicitly adds the choice
// for them, and the Back/Next buttons are still useable
// even without the choice. So, the nice thing to do
// is just make the choice read-only.
if (requiresForm(context))
{
if (getParentFormName(context) == null)
{
// No form - turn on read-only
choice.setAttributeValue(READ_ONLY_ATTR, Boolean.TRUE);
}
}
// create each of the choice options for parameterized URLs
selectedIndex = _addNavigationOptions(context, navBar, choice, false,
minValue, maxValue, currentValue,
blockSize, sizeKey);
int count = choice.getIndexedChildCount(context);
if (count > 1)
{
onChange = _getChoiceOnChange(context,
destination,
sourceKey,
eventKey,
name,
partialTargets,
partialTargetsKey);
}
else
{
choice.setAttributeValue(READ_ONLY_ATTR, Boolean.TRUE);
}
}
else
{
// create each of the choice options for form submit
selectedIndex = _addNavigationOptions(context, navBar, choice, true,
minValue, maxValue, currentValue,
blockSize, sizeKey);
int count = choice.getIndexedChildCount(context);
if (count > 1)
{
onChange = _getChoiceOnChangeFormSubmitted(
context,
navBar,
form,
eventKey,
sourceKey,
name,
partialTargetsKey,
partialTargets);
}
else
{
choice.setAttributeValue(READ_ONLY_ATTR, Boolean.TRUE);
}
}
if (onChange != null)
{
// set the onchange handler
choice.setAttributeValue(ON_CHANGE_ATTR, onChange);
// set the onfocus handler to save the initial value
choice.setAttributeValue(ON_FOCUS_ATTR, _CHOICE_FORM_ON_FOCUS);
}
if (supportsID(context) &&
(selectedIndex >= 0) &&
!Boolean.TRUE.equals(choice.getAttributeValue(READ_ONLY_ATTR)))
{
String choiceId = XhtmlLafUtils.generateUniqueID(context);
choice.setID(choiceId);
StringBuffer text = new StringBuffer(26 + choiceId.length());
text.append("_setSelectIndexById(\"");
text.append(choiceId);
text.append("\",");
text.append(IntegerUtils.getString(selectedIndex));
text.append(")");
MarlinBean sb = new MarlinBean(SCRIPT_NAME);
sb.setAttributeValue(TEXT_ATTR, text.toString());
MarlinBean flb = new MarlinBean(FLOW_LAYOUT_NAME);
flb.addIndexedChild(choice);
flb.addIndexedChild(sb);
rangeNode = flb;
}
else
{