001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 1999,2000 The Apache Software Foundation. All rights
006: * reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by the
023: * Apache Software Foundation (http://www.apache.org/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. The names "Xerces" and "Apache Software Foundation" must
028: * not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation and was
052: * originally based on software copyright (c) 1999, International
053: * Business Machines, Inc., http://www.apache.org. For more
054: * information on the Apache Software Foundation, please see
055: * <http://www.apache.org/>.
056: */
057: package org.apache.html.dom;
058:
059: import org.w3c.dom.*;
060: import org.w3c.dom.html.*;
061:
062: /**
063: * @version $Revision: 1.5 $ $Date: 2001/01/30 23:58:03 $
064: * @author <a href="mailto:arkin@exoffice.com">Assaf Arkin</a>
065: * @see org.w3c.dom.html.HTMLSelectElement
066: * @see ElementImpl
067: */
068: public class HTMLSelectElementImpl extends HTMLElementImpl implements
069: HTMLSelectElement, HTMLFormControl {
070:
071: public String getType() {
072: return getAttribute("type");
073: }
074:
075: public String getValue() {
076: return getAttribute("value");
077: }
078:
079: public void setValue(String value) {
080: setAttribute("value", value);
081: }
082:
083: public int getSelectedIndex() {
084: NodeList options;
085: int i;
086:
087: // Use getElementsByTagName() which creates a snapshot of all the
088: // OPTION elements under this SELECT. Access to the returned NodeList
089: // is very fast and the snapshot solves many synchronization problems.
090: // Locate the first selected OPTION and return its index. Note that
091: // the OPTION might be under an OPTGROUP.
092: options = getElementsByTagName("OPTION");
093: for (i = 0; i < options.getLength(); ++i)
094: if (((HTMLOptionElement) options.item(i)).getSelected())
095: return i;
096: return -1;
097: }
098:
099: public void setSelectedIndex(int selectedIndex) {
100: NodeList options;
101: int i;
102:
103: // Use getElementsByTagName() which creates a snapshot of all the
104: // OPTION elements under this SELECT. Access to the returned NodeList
105: // is very fast and the snapshot solves many synchronization problems.
106: // Change the select so all OPTIONs are off, except for the
107: // selectIndex-th one.
108: options = getElementsByTagName("OPTION");
109: for (i = 0; i < options.getLength(); ++i)
110: ((HTMLOptionElementImpl) options.item(i))
111: .setSelected(i == selectedIndex);
112: }
113:
114: public HTMLCollection getOptions() {
115: if (_options == null)
116: _options = new HTMLCollectionImpl(this ,
117: HTMLCollectionImpl.OPTION);
118: return _options;
119: }
120:
121: public int getLength() {
122: return getOptions().getLength();
123: }
124:
125: public boolean getDisabled() {
126: return getBinary("disabled");
127: }
128:
129: public void setDisabled(boolean disabled) {
130: setAttribute("disabled", disabled);
131: }
132:
133: public boolean getMultiple() {
134: return getBinary("multiple");
135: }
136:
137: public void setMultiple(boolean multiple) {
138: setAttribute("multiple", multiple);
139: }
140:
141: public String getName() {
142: return getAttribute("name");
143: }
144:
145: public void setName(String name) {
146: setAttribute("name", name);
147: }
148:
149: public int getSize() {
150: return getInteger(getAttribute("size"));
151: }
152:
153: public void setSize(int size) {
154: setAttribute("size", String.valueOf(size));
155: }
156:
157: public int getTabIndex() {
158: return getInteger(getAttribute("tabindex"));
159: }
160:
161: public void setTabIndex(int tabIndex) {
162: setAttribute("tabindex", String.valueOf(tabIndex));
163: }
164:
165: public void add(HTMLElement element, HTMLElement before) {
166: insertBefore(element, before);
167: }
168:
169: public void remove(int index) {
170: NodeList options;
171: Node removed;
172:
173: // Use getElementsByTagName() which creates a snapshot of all the
174: // OPTION elements under this SELECT. Access to the returned NodeList
175: // is very fast and the snapshot solves many synchronization problems.
176: // Remove the indexed OPTION from it's parent, this might be this
177: // SELECT or an OPTGROUP.
178: options = getElementsByTagName("OPTION");
179: removed = options.item(index);
180: if (removed != null)
181: removed.getParentNode().removeChild(removed);
182: }
183:
184: public void blur() {
185: // No scripting in server-side DOM. This method is moot.
186: }
187:
188: public void focus() {
189: // No scripting in server-side DOM. This method is moot.
190: }
191:
192: /*
193: * Explicit implementation of getChildNodes() to avoid problems with
194: * overriding the getLength() method hidden in the super class.
195: */
196: public NodeList getChildNodes() {
197: return getChildNodesUnoptimized();
198: }
199:
200: /**
201: * Constructor requires owner document.
202: *
203: * @param owner The owner HTML document
204: */
205: public HTMLSelectElementImpl(HTMLDocumentImpl owner, String name) {
206: super (owner, name);
207: }
208:
209: private HTMLCollection _options;
210:
211: }
|