📄 html_formimpl.cpp
字号:
case ATTR_ONSUBMIT: setHTMLEventListener(EventImpl::SUBMIT_EVENT, ownerDocument()->createHTMLEventListener(attr->value().string())); break; case ATTR_ONRESET: setHTMLEventListener(EventImpl::RESET_EVENT, ownerDocument()->createHTMLEventListener(attr->value().string())); break; case ATTR_NAME: break; default: HTMLElementImpl::parseAttribute(attr); }}void HTMLFormElementImpl::attach(){ view = ownerDocument()->view(); HTMLElementImpl::attach();}void HTMLFormElementImpl::detach(){ view = 0; HTMLElementImpl::detach();}void HTMLFormElementImpl::radioClicked( HTMLGenericFormElementImpl *caller ){ HTMLGenericFormElementImpl *current; for (current = formElements.first(); current; current = formElements.next()) { if (current->id() == ID_INPUT && static_cast<HTMLInputElementImpl*>(current)->inputType() == HTMLInputElementImpl::RADIO && current != caller && current->name() == caller->name()) { static_cast<HTMLInputElementImpl*>(current)->setChecked(false); } }}void HTMLFormElementImpl::registerFormElement(HTMLGenericFormElementImpl *e){ formElements.append(e);}void HTMLFormElementImpl::removeFormElement(HTMLGenericFormElementImpl *e){ formElements.remove(e);}// -------------------------------------------------------------------------HTMLGenericFormElementImpl::HTMLGenericFormElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f) : HTMLElementImpl(doc){ m_form = f; if (m_form) m_form->registerFormElement(this); view = 0; m_disabled = m_readOnly = false;}HTMLGenericFormElementImpl::HTMLGenericFormElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc){ m_form = getForm(); if (m_form) m_form->registerFormElement(this); view = 0; m_disabled = m_readOnly = false;}HTMLGenericFormElementImpl::~HTMLGenericFormElementImpl(){ if (m_form) m_form->removeFormElement(this);}void HTMLGenericFormElementImpl::parseAttribute(AttrImpl *attr){ switch(attr->attrId) { case ATTR_NAME: _name = attr->value(); break; case ATTR_DISABLED: m_disabled = attr->val() != 0; break; case ATTR_READONLY: m_readOnly = attr->val() != 0; break; default: HTMLElementImpl::parseAttribute(attr); }}HTMLFormElementImpl *HTMLGenericFormElementImpl::getForm() const{ NodeImpl *p = parentNode(); while(p) { if( p->id() == ID_FORM ) return static_cast<HTMLFormElementImpl *>(p); p = p->parentNode(); }#ifdef FORMS_DEBUG kdDebug( 6030 ) << "couldn't find form!" << endl;#endif return 0;}void HTMLGenericFormElementImpl::attach(){ view = ownerDocument()->view(); HTMLElementImpl::attach();}void HTMLGenericFormElementImpl::detach(){ view = 0; HTMLElementImpl::detach();}void HTMLGenericFormElementImpl::onBlur(){ dispatchHTMLEvent(EventImpl::BLUR_EVENT,false,false);}void HTMLGenericFormElementImpl::onFocus(){ // ###:-| this is called from JS _and_ from event handlers. // Split into two functions (BIC) dispatchHTMLEvent(EventImpl::FOCUS_EVENT,false,false);}void HTMLGenericFormElementImpl::onSelect(){ dispatchHTMLEvent(EventImpl::SELECT_EVENT,true,false);}void HTMLGenericFormElementImpl::onChange(){ dispatchHTMLEvent(EventImpl::CHANGE_EVENT,true,false);}void HTMLGenericFormElementImpl::setFocus(bool received){ HTMLElementImpl::setFocus(received); // ### support focus for buttons & images if (received) { if(m_render && m_render->isFormElement()) static_cast<RenderFormElement*>(m_render)->focus(); // will call onFocus() onFocus(); } else { if(m_render && m_render->isFormElement()) static_cast<RenderFormElement*>(m_render)->blur(); // will call onBlur() else onBlur(); }}void HTMLGenericFormElementImpl::setParent(NodeImpl *parent){ if (_parent) { // false on initial insert, we use the form given by the parser if (m_form) m_form->removeFormElement(this); m_form = 0; } HTMLElementImpl::setParent(parent); if (!m_form) { m_form = getForm(); if (m_form) m_form->registerFormElement(this); }}bool HTMLGenericFormElementImpl::isSelectable() const{ if (m_disabled) return false; return renderer()!=0;}// -------------------------------------------------------------------------HTMLButtonElementImpl::HTMLButtonElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f) : HTMLGenericFormElementImpl(doc, f){ m_clicked = false; m_type = SUBMIT; m_dirty = true; m_activeSubmit = false;}HTMLButtonElementImpl::HTMLButtonElementImpl(DocumentPtr *doc) : HTMLGenericFormElementImpl(doc){ m_clicked = false; m_type = BUTTON; m_dirty = true; m_activeSubmit = false;}HTMLButtonElementImpl::~HTMLButtonElementImpl(){}const DOMString HTMLButtonElementImpl::nodeName() const{ return "BUTTON";}ushort HTMLButtonElementImpl::id() const{ return ID_BUTTON;}DOMString HTMLButtonElementImpl::type() const{ return getAttribute(ATTR_TYPE);}void HTMLButtonElementImpl::parseAttribute(AttrImpl *attr){ switch(attr->attrId) { case ATTR_TYPE: if ( strcasecmp( attr->value(), "submit" ) == 0 ) m_type = SUBMIT; else if ( strcasecmp( attr->value(), "reset" ) == 0 ) m_type = RESET; else if ( strcasecmp( attr->value(), "button" ) == 0 ) m_type = BUTTON; break; case ATTR_VALUE: m_value = attr->value(); m_currValue = m_value.string(); break; case ATTR_ACCESSKEY: break; case ATTR_ONFOCUS: setHTMLEventListener(EventImpl::FOCUS_EVENT, ownerDocument()->createHTMLEventListener(attr->value().string())); break; case ATTR_ONBLUR: setHTMLEventListener(EventImpl::BLUR_EVENT, ownerDocument()->createHTMLEventListener(attr->value().string())); break; default: HTMLGenericFormElementImpl::parseAttribute(attr); }}void HTMLButtonElementImpl::defaultEventHandler(EventImpl *evt){ if (m_type != BUTTON && (evt->id() == EventImpl::DOMACTIVATE_EVENT)) { m_clicked = true; if(m_form && m_type == SUBMIT) { m_activeSubmit = true; m_form->prepareSubmit(); m_activeSubmit = false; // in case we were canceled } if(m_form && m_type == RESET) m_form->reset(); }}void HTMLButtonElementImpl::attach(){ HTMLElementImpl::attach();}bool HTMLButtonElementImpl::encoding(const QTextCodec* codec, khtml::encodingList& encoding, bool /*multipart*/){ if (m_type != SUBMIT || _name.isEmpty() || !m_activeSubmit) return false; encoding += fixUpfromUnicode(codec, _name.string().stripWhiteSpace()); QString enc_str = m_currValue.isNull() ? QString("") : m_currValue; encoding += fixUpfromUnicode(codec, enc_str); return true;}// -------------------------------------------------------------------------HTMLFieldSetElementImpl::HTMLFieldSetElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f) : HTMLGenericFormElementImpl(doc, f){}HTMLFieldSetElementImpl::HTMLFieldSetElementImpl(DocumentPtr *doc) : HTMLGenericFormElementImpl(doc){}HTMLFieldSetElementImpl::~HTMLFieldSetElementImpl(){}const DOMString HTMLFieldSetElementImpl::nodeName() const{ return "FIELDSET";}ushort HTMLFieldSetElementImpl::id() const{ return ID_FIELDSET;}// -------------------------------------------------------------------------HTMLInputElementImpl::HTMLInputElementImpl(DocumentPtr *doc) : HTMLGenericFormElementImpl(doc){ init();}HTMLInputElementImpl::HTMLInputElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f) : HTMLGenericFormElementImpl(doc, f){ init(); if ( f ) m_autocomplete = f->autoComplete();}void HTMLInputElementImpl::init(){ m_type = TEXT; m_maxLen = -1; m_size = 20; m_clicked = false; m_defaultChecked = false; m_checked = false; m_filename = ""; m_haveType = false; m_firstAttach = true; m_activeSubmit = false; m_autocomplete = true; xPos = 0; yPos = 0; view = 0;}HTMLInputElementImpl::~HTMLInputElementImpl(){ if ( ownerDocument() ) ownerDocument()->removeElement(this);}const DOMString HTMLInputElementImpl::nodeName() const{ return "INPUT";}ushort HTMLInputElementImpl::id() const{ return ID_INPUT;}DOMString HTMLInputElementImpl::type() const{ // needs to be lowercase according to DOM spec switch (m_type) { case TEXT: return "text"; case PASSWORD: return "password"; case CHECKBOX: return "checkbox"; case RADIO: return "radio"; case SUBMIT: return "submit"; case RESET: return "reset"; case FILE: return "file"; case HIDDEN: return "hidden"; case IMAGE: return "image"; case BUTTON: return "button"; default: return ""; }}QString HTMLInputElementImpl::state( ){ switch (m_type) { case TEXT: case PASSWORD: return m_value.string()+'.'; // Make sure the string is not empty! case CHECKBOX: return QString::fromLatin1(m_checked ? "on" : "off"); case RADIO: return QString::fromLatin1(m_checked ? "on" : "off"); case FILE: return m_filename.string()+'.'; default: return QString::null; }}void HTMLInputElementImpl::restoreState(const QString &state){ switch (m_type) { case TEXT: case PASSWORD: m_value = DOMString(state.left(state.length()-1)); break; case CHECKBOX: case RADIO: m_checked = state == QString::fromLatin1("on"); break; case FILE: m_value = m_filename = DOMString(state.left(state.length()-1)); break; default: break; } setChanged(true);}void HTMLInputElementImpl::select( ){ if(!m_render) return; if (m_type == TEXT || m_type == PASSWORD)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -