18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2000 Dirk Mueller (mueller@kde.org) 65af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserved. 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Google Inc. All rights reserved. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef HTMLSelectElement_h 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define HTMLSelectElement_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "CollectionCache.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLFormControlElement.h" 315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "SelectElement.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HTMLOptionElement; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HTMLOptionsCollection; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianclass HTMLSelectElement : public HTMLFormControlElementWithState, public SelectElement { 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 405af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke static PassRefPtr<HTMLSelectElement> create(const QualifiedName&, Document*, HTMLFormElement*); 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual int selectedIndex() const; 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void setSelectedIndex(int index, bool deselect = true); 445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual void setSelectedIndexByUser(int index, bool deselect = true, bool fireOnChangeNow = false, bool allowMultipleSelection = false); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // For ValidityState 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool valueMissing() const; 48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned length() const; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual int size() const { return m_data.size(); } 525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool multiple() const { return m_data.multiple(); } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54cad810f21b803229eb11403f9209855525a25d57Steve Block void add(HTMLElement*, HTMLElement* beforeElement, ExceptionCode&); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void remove(int index); 56cad810f21b803229eb11403f9209855525a25d57Steve Block void remove(HTMLOptionElement*); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block String value() const; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setValue(const String&); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian PassRefPtr<HTMLOptionsCollection> options(); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setRecalcListItems(); 66d0825bca7fe65beaee391d30da42e937db621564Steve Block void recalcListItemsIfNeeded(); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual const Vector<Element*>& listItems() const { return m_data.listItems(this); } 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void accessKeyAction(bool sendToAnyElement); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void accessKeySetSelectedIndex(int); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setMultiple(bool); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setSize(int); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setOption(unsigned index, HTMLOptionElement*, ExceptionCode&); 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setLength(unsigned, ExceptionCode&); 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Node* namedItem(const AtomicString& name); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* item(unsigned index); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 83d0825bca7fe65beaee391d30da42e937db621564Steve Block CollectionCache* collectionInfo() { m_collectionInfo.checkConsistency(); return &m_collectionInfo; } 845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void scrollToSelection(); 865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void listBoxSelectItem(int listIndex, bool allowMultiplySelections, bool shift, bool fireOnChangeNow = true); 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 89f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void updateValidity() { setNeedsValidityCheck(); } 90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprotected: 925af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke HTMLSelectElement(const QualifiedName&, Document*, HTMLFormElement*); 935af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianprivate: 955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual const AtomicString& formControlType() const; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool isKeyboardFocusable(KeyboardEvent*) const; 985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool isMouseFocusable() const; 995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool canSelectAll() const; 1005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void selectAll(); 1015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void recalcStyle(StyleChange); 1035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void dispatchFocusEvent(); 1055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void dispatchBlurEvent(); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool canStartSelection() const { return false; } 1085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool isEnumeratable() const { return true; } 1105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool saveFormControlState(String& value) const; 1125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void restoreFormControlState(const String&); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 114e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block virtual void parseMappedAttribute(Attribute*); 1155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual RenderObject* createRenderer(RenderArena*, RenderStyle *); 1175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool appendFormData(FormDataList&, bool); 1185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual int optionToListIndex(int optionIndex) const; 120bc7b84de3fd863c500a8169fd00dca3811cadbb3Steve Block virtual int listToOptionIndex(int listIndex) const; 1215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void reset(); 1235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void defaultEventHandler(Event*); 1255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void setActiveSelectionAnchorIndex(int index); 1275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void setActiveSelectionEndIndex(int index); 1285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void updateListBoxSelection(bool deselectOtherOptions); 1295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void listBoxOnChange(); 1305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void menuListOnChange(); 1315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual int activeSelectionStartListIndex() const; 1335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual int activeSelectionEndListIndex() const; 1345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void recalcListItems(bool updateSelectedStates = true) const; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void deselectItems(HTMLOptionElement* excludeElement = 0); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void typeAheadFind(KeyboardEvent*); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void saveLastSelection(); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void insertedIntoTree(bool); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 143f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isOptionalFormControl() const { return !isRequiredFormControl(); } 144f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isRequiredFormControl() const; 145f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool hasPlaceholderLabelOption() const; 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian SelectElementData m_data; 1495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian CollectionCache m_collectionInfo; 1505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}; 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 155