You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
607 lines
16 KiB
607 lines
16 KiB
/*
|
|
* This file is part of the DOM implementation for KDE.
|
|
*
|
|
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
|
|
* (C) 1999 Antti Koivisto (koivisto@kde.org)
|
|
* (C) 2000 Dirk Mueller (mueller@kde.org)
|
|
* (C) 2004, 2005, 2006 Apple Computer, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public License
|
|
* along with this library; see the file COPYING.LIB. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
#ifndef HTML_FORMIMPL_H
|
|
#define HTML_FORMIMPL_H
|
|
|
|
#include "html/html_elementimpl.h"
|
|
#include "html/html_imageimpl.h"
|
|
#include "dom/html_element.h"
|
|
|
|
#include <tqvaluelist.h>
|
|
#include <tqptrlist.h>
|
|
#include <tqcstring.h>
|
|
#include <tqmemarray.h>
|
|
|
|
class TDEHTMLView;
|
|
class TQTextCodec;
|
|
|
|
namespace tdehtml
|
|
{
|
|
class RenderFormElement;
|
|
class RenderTextArea;
|
|
class RenderSelect;
|
|
class RenderLineEdit;
|
|
class RenderRadioButton;
|
|
class RenderFileButton;
|
|
|
|
typedef TQValueList<TQCString> encodingList;
|
|
}
|
|
|
|
namespace KWallet {
|
|
class Wallet;
|
|
}
|
|
|
|
namespace DOM {
|
|
|
|
class HTMLFormElement;
|
|
class DOMString;
|
|
class HTMLGenericFormElementImpl;
|
|
class HTMLOptionElementImpl;
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLFormElementImpl : public HTMLElementImpl
|
|
{
|
|
public:
|
|
HTMLFormElementImpl(DocumentImpl *doc, bool implicit);
|
|
virtual ~HTMLFormElementImpl();
|
|
|
|
virtual Id id() const;
|
|
|
|
virtual void insertedIntoDocument();
|
|
virtual void removedFromDocument();
|
|
virtual void addId(const TQString& id);
|
|
virtual void removeId(const TQString& id);
|
|
|
|
|
|
long length() const;
|
|
|
|
TQByteArray formData(bool& ok);
|
|
|
|
DOMString enctype() const { return m_enctype; }
|
|
void setEnctype( const DOMString & );
|
|
|
|
bool autoComplete() const { return m_autocomplete; }
|
|
void doAutoFill();
|
|
void walletOpened(KWallet::Wallet *w);
|
|
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
|
|
void radioClicked( HTMLGenericFormElementImpl *caller );
|
|
|
|
void registerFormElement(HTMLGenericFormElementImpl *);
|
|
void removeFormElement(HTMLGenericFormElementImpl *);
|
|
void registerImgElement(HTMLImageElementImpl *);
|
|
void removeImgElement(HTMLImageElementImpl *);
|
|
|
|
void submitFromKeyboard();
|
|
bool prepareSubmit();
|
|
void submit();
|
|
void reset();
|
|
|
|
void setMalformed(bool malformed) { m_malformed = malformed; }
|
|
bool isMalformed() const { return m_malformed; }
|
|
|
|
friend class HTMLFormElement;
|
|
friend class HTMLFormCollectionImpl;
|
|
|
|
private:
|
|
void gatherWalletData();
|
|
TQPtrList<HTMLGenericFormElementImpl> formElements;
|
|
TQPtrList<HTMLImageElementImpl> imgElements;
|
|
DOMString m_target;
|
|
DOMString m_enctype;
|
|
TQString m_boundary;
|
|
DOMString m_acceptcharset;
|
|
TQString m_encCharset;
|
|
bool m_post : 1;
|
|
bool m_multipart : 1;
|
|
bool m_autocomplete : 1;
|
|
bool m_insubmit : 1;
|
|
bool m_doingsubmit : 1;
|
|
bool m_inreset : 1;
|
|
bool m_malformed : 1;
|
|
bool m_haveTextarea : 1; // for wallet storage
|
|
bool m_havePassword : 1; // for wallet storage
|
|
DOMString m_name; // our name
|
|
TQMap<TQString, TQString> m_walletMap; // for wallet storage
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLGenericFormElementImpl : public HTMLElementImpl
|
|
{
|
|
friend class HTMLFormElementImpl;
|
|
friend class tdehtml::RenderFormElement;
|
|
|
|
public:
|
|
HTMLGenericFormElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
virtual ~HTMLGenericFormElementImpl();
|
|
|
|
HTMLFormElementImpl *form() { return m_form; }
|
|
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
virtual void attach();
|
|
virtual void reset() {}
|
|
|
|
virtual void insertedIntoDocument();
|
|
virtual void removedFromDocument();
|
|
|
|
void onSelect();
|
|
void onChange();
|
|
|
|
bool disabled() const { return m_disabled; }
|
|
void setDisabled(bool _disabled);
|
|
|
|
virtual bool isFocusable() const;
|
|
virtual bool isEnumeratable() const { return false; }
|
|
|
|
bool readOnly() const { return m_readOnly; }
|
|
void setReadOnly(bool _readOnly) { m_readOnly = _readOnly; }
|
|
|
|
DOMString name() const;
|
|
void setName(const DOMString& name);
|
|
|
|
virtual bool isGenericFormElement() const { return true; }
|
|
|
|
/*
|
|
* override in derived classes to get the encoded name=value pair
|
|
* for submitting
|
|
* return true for a successful control (see HTML4-17.13.2)
|
|
*/
|
|
virtual bool encoding(const TQTextCodec*, tdehtml::encodingList&, bool) { return false; }
|
|
|
|
virtual void defaultEventHandler(EventImpl *evt);
|
|
virtual bool isEditable();
|
|
|
|
protected:
|
|
HTMLFormElementImpl *getForm() const;
|
|
|
|
DOMStringImpl* m_name;
|
|
HTMLFormElementImpl *m_form;
|
|
bool m_disabled, m_readOnly;
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLButtonElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
public:
|
|
HTMLButtonElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
|
|
virtual ~HTMLButtonElementImpl();
|
|
|
|
enum typeEnum {
|
|
SUBMIT,
|
|
RESET,
|
|
BUTTON
|
|
};
|
|
|
|
virtual Id id() const;
|
|
virtual bool isEnumeratable() const { return true; }
|
|
|
|
DOMString type() const;
|
|
typeEnum buttonType() const { return m_type; }
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
virtual void defaultEventHandler(EventImpl *evt);
|
|
virtual bool encoding(const TQTextCodec*, tdehtml::encodingList&, bool);
|
|
void activate();
|
|
virtual void attach();
|
|
void click();
|
|
void blur();
|
|
void focus();
|
|
|
|
protected:
|
|
DOMString m_value;
|
|
TQString m_currValue;
|
|
typeEnum m_type : 2;
|
|
bool m_dirty : 1;
|
|
bool m_clicked : 1;
|
|
bool m_activeSubmit : 1;
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLFieldSetElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
public:
|
|
HTMLFieldSetElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
|
|
virtual ~HTMLFieldSetElementImpl();
|
|
|
|
virtual Id id() const;
|
|
virtual void attach();
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLInputElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
friend class tdehtml::RenderLineEdit;
|
|
friend class tdehtml::RenderRadioButton;
|
|
friend class tdehtml::RenderFileButton;
|
|
|
|
public:
|
|
// do not change the order!
|
|
enum typeEnum {
|
|
TEXT,
|
|
PASSWORD,
|
|
ISINDEX,
|
|
CHECKBOX,
|
|
RADIO,
|
|
SUBMIT,
|
|
RESET,
|
|
FILE,
|
|
HIDDEN,
|
|
IMAGE,
|
|
BUTTON
|
|
};
|
|
|
|
HTMLInputElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
virtual ~HTMLInputElementImpl();
|
|
|
|
virtual Id id() const;
|
|
|
|
virtual bool isEnumeratable() const { return inputType() != IMAGE; }
|
|
|
|
bool autoComplete() const { return m_autocomplete; }
|
|
|
|
bool checked() const { return m_useDefaultChecked ? m_defaultChecked : m_checked; }
|
|
void setChecked(bool);
|
|
bool indeterminate() const { return m_indeterminate; }
|
|
void setIndeterminate(bool);
|
|
long maxLength() const { return m_maxLen; }
|
|
int size() const { return m_size; }
|
|
DOMString type() const;
|
|
void setType(const DOMString& t);
|
|
|
|
DOMString value() const;
|
|
void setValue(DOMString val);
|
|
|
|
DOMString valueWithDefault() const;
|
|
|
|
void blur();
|
|
void focus();
|
|
|
|
virtual bool maintainsState() { return true; }
|
|
virtual TQString state();
|
|
virtual void restoreState(const TQString &state);
|
|
|
|
void select();
|
|
void click();
|
|
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
|
|
virtual void attach();
|
|
virtual bool encoding(const TQTextCodec*, tdehtml::encodingList&, bool);
|
|
|
|
typeEnum inputType() const { return m_type; }
|
|
virtual void reset();
|
|
|
|
// used in case input type=image was clicked.
|
|
int clickX() const { return xPos; }
|
|
int clickY() const { return yPos; }
|
|
|
|
virtual void defaultEventHandler(EventImpl *evt);
|
|
virtual bool isEditable();
|
|
|
|
DOMString altText() const;
|
|
void activate();
|
|
|
|
void setUnsubmittedFormChange(bool unsubmitted) { m_unsubmittedFormChange = unsubmitted; }
|
|
|
|
//Mozilla extensions.
|
|
long selectionStart();
|
|
long selectionEnd();
|
|
void setSelectionStart(long pos);
|
|
void setSelectionEnd (long pos);
|
|
void setSelectionRange(long start, long end);
|
|
protected:
|
|
void parseType(const DOMString& t);
|
|
|
|
DOMString m_value;
|
|
int xPos;
|
|
short m_maxLen;
|
|
short m_size;
|
|
short yPos;
|
|
|
|
typeEnum m_type : 4;
|
|
bool m_clicked : 1 ;
|
|
bool m_checked : 1;
|
|
bool m_defaultChecked : 1; // could do without by checking ATTR_CHECKED
|
|
bool m_useDefaultChecked : 1;
|
|
bool m_indeterminate : 1;
|
|
bool m_haveType : 1;
|
|
bool m_activeSubmit : 1;
|
|
bool m_autocomplete : 1;
|
|
bool m_inited : 1;
|
|
bool m_unsubmittedFormChange : 1;
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLLabelElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
public:
|
|
HTMLLabelElementImpl(DocumentImpl *doc);
|
|
virtual ~HTMLLabelElementImpl();
|
|
|
|
virtual Id id() const;
|
|
virtual void attach();
|
|
virtual void defaultEventHandler(EventImpl *evt);
|
|
virtual bool isFocusable() const { return true; };
|
|
virtual bool isTabFocusable() const { return false; };
|
|
NodeImpl* getFormElement();
|
|
|
|
private:
|
|
DOMString m_formElementID;
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLLegendElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
public:
|
|
HTMLLegendElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
virtual ~HTMLLegendElementImpl();
|
|
|
|
virtual Id id() const;
|
|
virtual void attach();
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
};
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLSelectElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
friend class tdehtml::RenderSelect;
|
|
|
|
public:
|
|
HTMLSelectElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
~HTMLSelectElementImpl();
|
|
|
|
virtual Id id() const;
|
|
|
|
DOMString type() const;
|
|
|
|
long selectedIndex() const;
|
|
void setSelectedIndex( long index );
|
|
|
|
virtual bool isEnumeratable() const { return true; }
|
|
|
|
long length() const;
|
|
|
|
long minWidth() const { return m_minwidth; }
|
|
|
|
long size() const { return m_size; }
|
|
|
|
bool multiple() const { return m_multiple; }
|
|
|
|
void add ( const HTMLElement &element, const HTMLElement &before, int& exceptioncode );
|
|
void remove ( long index );
|
|
void blur();
|
|
void focus();
|
|
|
|
DOMString value() const;
|
|
void setValue(DOMStringImpl* value);
|
|
|
|
virtual bool maintainsState() { return true; }
|
|
virtual TQString state();
|
|
virtual void restoreState(const TQString &state);
|
|
|
|
virtual NodeImpl *insertBefore ( NodeImpl *newChild, NodeImpl *refChild, int &exceptioncode );
|
|
virtual void replaceChild ( NodeImpl *newChild, NodeImpl *oldChild, int &exceptioncode );
|
|
virtual void removeChild ( NodeImpl *oldChild, int &exceptioncode );
|
|
virtual NodeImpl *appendChild ( NodeImpl *newChild, int &exceptioncode );
|
|
virtual NodeImpl *addChild( NodeImpl* newChild );
|
|
|
|
virtual void childrenChanged();
|
|
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
|
|
virtual void attach();
|
|
virtual bool encoding(const TQTextCodec*, tdehtml::encodingList&, bool);
|
|
|
|
// get the actual listbox index of the optionIndexth option
|
|
int optionToListIndex(int optionIndex) const;
|
|
// reverse of optionToListIndex - get optionIndex from listboxIndex
|
|
int listToOptionIndex(int listIndex) const;
|
|
|
|
void setRecalcListItems();
|
|
|
|
TQMemArray<HTMLGenericFormElementImpl*> listItems() const
|
|
{
|
|
if (m_recalcListItems) const_cast<HTMLSelectElementImpl*>(this)->recalcListItems();
|
|
return m_listItems;
|
|
}
|
|
virtual void reset();
|
|
void notifyOptionSelected(HTMLOptionElementImpl *selectedOption, bool selected);
|
|
|
|
private:
|
|
void recalcListItems() const;
|
|
|
|
protected:
|
|
mutable TQMemArray<HTMLGenericFormElementImpl*> m_listItems;
|
|
short m_minwidth;
|
|
signed short m_size : 15;
|
|
bool m_multiple : 1;
|
|
mutable bool m_recalcListItems :1;
|
|
mutable unsigned int m_length:31;
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLKeygenElementImpl : public HTMLSelectElementImpl
|
|
{
|
|
public:
|
|
HTMLKeygenElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
|
|
virtual Id id() const;
|
|
|
|
DOMString type() const;
|
|
|
|
long selectedIndex() const;
|
|
void setSelectedIndex( long index );
|
|
|
|
// ### this is just a rough guess
|
|
virtual bool isEnumeratable() const { return false; }
|
|
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
virtual bool encoding(const TQTextCodec*, tdehtml::encodingList&, bool);
|
|
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLOptGroupElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
public:
|
|
HTMLOptGroupElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0)
|
|
: HTMLGenericFormElementImpl(doc, f) {}
|
|
|
|
virtual Id id() const;
|
|
};
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
class HTMLOptionElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
friend class tdehtml::RenderSelect;
|
|
friend class DOM::HTMLSelectElementImpl;
|
|
|
|
public:
|
|
HTMLOptionElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
|
|
virtual Id id() const;
|
|
|
|
DOMString text() const;
|
|
|
|
long index() const;
|
|
void setIndex( long );
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
DOMString value() const;
|
|
void setValue(DOMStringImpl* value);
|
|
|
|
bool selected() const { return m_selected; }
|
|
void setSelected(bool _selected);
|
|
|
|
HTMLSelectElementImpl *getSelect() const;
|
|
|
|
protected:
|
|
DOMString m_value;
|
|
bool m_selected;
|
|
};
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLTextAreaElementImpl : public HTMLGenericFormElementImpl
|
|
{
|
|
friend class tdehtml::RenderTextArea;
|
|
|
|
public:
|
|
enum WrapMethod {
|
|
ta_NoWrap,
|
|
ta_Virtual,
|
|
ta_Physical
|
|
};
|
|
|
|
HTMLTextAreaElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
~HTMLTextAreaElementImpl();
|
|
|
|
virtual Id id() const;
|
|
|
|
long cols() const { return m_cols; }
|
|
|
|
long rows() const { return m_rows; }
|
|
|
|
WrapMethod wrap() const { return m_wrap; }
|
|
|
|
virtual bool isEnumeratable() const { return true; }
|
|
|
|
DOMString type() const;
|
|
|
|
virtual bool maintainsState() { return true; }
|
|
virtual TQString state();
|
|
virtual void restoreState(const TQString &state);
|
|
|
|
void select ( );
|
|
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
virtual void attach();
|
|
virtual bool encoding(const TQTextCodec*, tdehtml::encodingList&, bool);
|
|
virtual void reset();
|
|
DOMString value();
|
|
void setValue(DOMString _value);
|
|
DOMString defaultValue();
|
|
void setDefaultValue(DOMString _defaultValue);
|
|
void blur();
|
|
void focus();
|
|
|
|
virtual bool isEditable();
|
|
void setUnsubmittedFormChange(bool unsubmitted) { m_unsubmittedFormChange = unsubmitted; }
|
|
|
|
//Mozilla extensions.
|
|
long selectionStart();
|
|
long selectionEnd();
|
|
void setSelectionStart(long pos);
|
|
void setSelectionEnd (long pos);
|
|
void setSelectionRange(long start, long end);
|
|
long textLength();
|
|
protected:
|
|
int m_rows;
|
|
int m_cols;
|
|
WrapMethod m_wrap;
|
|
TQString m_value;
|
|
bool m_changed: 1; //States whether the contents has been editted
|
|
bool m_dirtyvalue: 1; //States whether m_value is out-of-date compared to the renderer or default
|
|
bool m_unsubmittedFormChange: 1;
|
|
bool m_initialized: 1;
|
|
};
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
class HTMLIsIndexElementImpl : public HTMLInputElementImpl
|
|
{
|
|
public:
|
|
HTMLIsIndexElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = 0);
|
|
~HTMLIsIndexElementImpl();
|
|
|
|
virtual Id id() const;
|
|
virtual void parseAttribute(AttributeImpl *attr);
|
|
|
|
DOMString prompt() const;
|
|
void setPrompt(const DOMString& _value);
|
|
};
|
|
|
|
|
|
} //namespace
|
|
|
|
#endif
|