1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/** 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version. 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful, 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details. 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA. 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML) 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLOptGroupElement.h" 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "Attribute.h" 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Document.h" 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "HTMLNames.h" 298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "NodeRenderStyle.h" 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RenderStyle.h" 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLNames.h" 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "WMLSelectElement.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace WMLNames; 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLOptGroupElement::WMLOptGroupElement(const QualifiedName& tagName, Document* doc) 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : WMLFormControlElement(tagName, doc) 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenPassRefPtr<WMLOptGroupElement> WMLOptGroupElement::create(const QualifiedName& tagName, Document* document) 445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return adoptRef(new WMLOptGroupElement(tagName, document)); 465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLOptGroupElement::~WMLOptGroupElement() 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianconst AtomicString& WMLOptGroupElement::formControlType() const 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(const AtomicString, optgroup, ("optgroup")); 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return optgroup; 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianstatic inline WMLSelectElement* ownerSelectElement(Element* element) 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 60a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch ContainerNode* select = element->parentNode(); 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project while (select && !select->hasTagName(selectTag)) 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project select = select->parentNode(); 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!select) 65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return static_cast<WMLSelectElement*>(select); 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLOptGroupElement::accessKeyAction(bool) 71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian WMLSelectElement* select = ownerSelectElement(this); 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!select || select->focused()) 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // send to the parent to bring focus to the list box 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project select->accessKeyAction(false); 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLOptGroupElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta) 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project recalcSelectOptions(); 835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian WMLFormControlElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta); 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 86e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid WMLOptGroupElement::parseMappedAttribute(Attribute* attr) 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian WMLFormControlElement::parseMappedAttribute(attr); 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project recalcSelectOptions(); 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLOptGroupElement::attach() 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (parentNode()->renderStyle()) 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project setRenderStyle(styleForRenderer()); 965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian WMLFormControlElement::attach(); 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLOptGroupElement::detach() 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_style.clear(); 1025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian WMLFormControlElement::detach(); 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLOptGroupElement::setRenderStyle(PassRefPtr<RenderStyle> style) 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_style = style; 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectRenderStyle* WMLOptGroupElement::nonRendererRenderStyle() const 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_style.get(); 113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectString WMLOptGroupElement::groupLabelText() const 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch String itemText = document()->displayStringModifiedByEncoding(title()); 118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // In WinIE, leading and trailing whitespace is ignored in options and optgroups. We match this behavior. 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project itemText = itemText.stripWhiteSpace(); 121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // We want to collapse our whitespace too. This will match other browsers. 122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project itemText = itemText.simplifyWhiteSpace(); 123635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return itemText; 125635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 127635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLOptGroupElement::recalcSelectOptions() 128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (WMLSelectElement* select = ownerSelectElement(this)) 130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project select->setRecalcListItems(); 131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 135635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 136