📄 html_formimpl.cpp
字号:
_form = getForm(); if (_form) _form->registerFormElement(this); view = 0; m_disabled = m_readOnly = false;}HTMLGenericFormElementImpl::~HTMLGenericFormElementImpl(){ if (_form) _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; 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(MGHTMLView *_view){ view = _view; HTMLElementImpl::attach(_view);}void HTMLGenericFormElementImpl::detach(){ view = 0; HTMLElementImpl::detach();}void HTMLGenericFormElementImpl::onBlur(){#ifdef JAVASCRIPT_ENABLE DOMString script = getAttribute(ATTR_ONBLUR); if (!script.isEmpty() && view->part()->jScriptEnabled()) // view->part()->executeScript(Node(this), script.string()); view->part()->executeScript((HTMLElementImpl*)this, script.string());#endif}void HTMLGenericFormElementImpl::onFocus(){#ifdef JAVASCRIPT_ENABLE // ###:-| this is called from JS _and_ from event handlers. // Split into two functions (BIC) //view->setLinkCursor(this); DOMString script = getAttribute(ATTR_ONFOCUS); if (!script.isEmpty() && view->part()->jScriptEnabled()) // view->part()->executeScript(Node(this), script.string()); view->part()->executeScript((HTMLElementImpl*)this, script.string());#endif}void HTMLGenericFormElementImpl::onSelect(){#ifdef JAVASCRIPT_ENABLE DOMString script = getAttribute(ATTR_ONSELECT); if (!script.isEmpty() && view->part()->jScriptEnabled()) // view->part()->executeScript(Node(this), script.string()); view->part()->executeScript((HTMLElementImpl*)this, script.string());#endif}void HTMLGenericFormElementImpl::onChange(){#ifdef JAVASCRIPT_ENABLE DOMString script = getAttribute(ATTR_ONCHANGE); if (!script.isEmpty() && view->part()->jScriptEnabled()) // view->part()->executeScript(Node(this), script.string()); view->part()->executeScript((HTMLElementImpl*)this, script.string());#endif}void HTMLGenericFormElementImpl::blur(){ if(m_render) static_cast<RenderFormElement*>(m_render)->blur(); onBlur();}void HTMLGenericFormElementImpl::focus(){ if(m_render) static_cast<RenderFormElement*>(m_render)->focus(); onFocus();}// -------------------------------------------------------------------------HTMLButtonElementImpl::HTMLButtonElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f) : HTMLGenericFormElementImpl(doc, f){ _clicked = false; _type = SUBMIT; dirty = true;}HTMLButtonElementImpl::HTMLButtonElementImpl(DocumentImpl *doc) : HTMLGenericFormElementImpl(doc){ _clicked = false; _type = SUBMIT; dirty = true;}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 ) _type = SUBMIT; else if ( strcasecmp( attr->value(), "reset" ) == 0 ) _type = RESET; else if ( strcasecmp( attr->value(), "button" ) == 0 ) _type = BUTTON; break; case ATTR_VALUE: _value = attr->value(); currValue = _value.string(); break; case ATTR_ACCESSKEY: case ATTR_ONFOCUS: case ATTR_ONBLUR: // ignore for the moment break; default: HTMLGenericFormElementImpl::parseAttribute(attr); }}void HTMLButtonElementImpl::attach(MGHTMLView *_view){ view = _view; HTMLElementImpl::attach(_view);}// -------------------------------------------------------------------------HTMLFieldSetElementImpl::HTMLFieldSetElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f) : HTMLGenericFormElementImpl(doc, f){}HTMLFieldSetElementImpl::HTMLFieldSetElementImpl(DocumentImpl *doc) : HTMLGenericFormElementImpl(doc){}HTMLFieldSetElementImpl::~HTMLFieldSetElementImpl(){}const DOMString HTMLFieldSetElementImpl::nodeName() const{ return "FIELDSET";}ushort HTMLFieldSetElementImpl::id() const{ return ID_FIELDSET;}// -------------------------------------------------------------------------HTMLInputElementImpl::HTMLInputElementImpl(DocumentImpl *doc) : HTMLGenericFormElementImpl(doc){ _type = TEXT; m_checked = false; _maxLen = -1; _size = 20; _clicked = false; m_filename = ""; m_haveType = false; view = 0;}HTMLInputElementImpl::HTMLInputElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f) : HTMLGenericFormElementImpl(doc, f){ _type = TEXT; m_checked = false; _maxLen = -1; _size = 20; _clicked = false; m_filename = ""; m_haveType = false; view = 0;}HTMLInputElementImpl::~HTMLInputElementImpl(){}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 (_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 (_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 (_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::blur( ){ if (_type != IMAGE) HTMLGenericFormElementImpl::blur();}void HTMLInputElementImpl::focus( ){ if (_type != IMAGE) HTMLGenericFormElementImpl::focus();}void HTMLInputElementImpl::select( ){ /* if(!m_render) return; if (_type == TEXT || _type == PASSWORD) static_cast<RenderLineEdit*>(m_render)->select(); else if (_type == FILE) static_cast<RenderFileButton*>(m_render)->select(); */}void HTMLInputElementImpl::click( ){#if DEBUG_BY_XHTANG fprintf(stderr,"HTMLInputElementImpl::click.\n");#endif // ####ifdef FORMS_DEBUG kdDebug( 6030 ) << " HTMLInputElementImpl::click( )" << endl;#endif}void HTMLInputElementImpl::parseAttribute(AttrImpl *attr){ // ### IMPORTANT: check that the type can't be changed after the first time // otherwise a javascript programmer may be able to set a text field's value // to something like /etc/passwd and then change it to a file field // ### also check that input defaults to something - text perhaps? switch(attr->attrId) { case ATTR_TYPE: { typeEnum newType; if ( strcasecmp( attr->value(), "text" ) == 0 ) newType = TEXT; else if ( strcasecmp( attr->value(), "password" ) == 0 ) newType = PASSWORD; else if ( strcasecmp( attr->value(), "checkbox" ) == 0 ) newType = CHECKBOX; else if ( strcasecmp( attr->value(), "radio" ) == 0 ) newType = RADIO; else if ( strcasecmp( attr->value(), "submit" ) == 0 ) newType = SUBMIT; else if ( strcasecmp( attr->value(), "reset" ) == 0 ) newType = RESET; else if ( strcasecmp( attr->value(), "file" ) == 0 ) newType = FILE; else if ( strcasecmp( attr->value(), "hidden" ) == 0 ) newType = HIDDEN; else if ( strcasecmp( attr->value(), "image" ) == 0 ) newType = IMAGE; else if ( strcasecmp( attr->value(), "button" ) == 0 ) newType = BUTTON; else newType = TEXT; if (!m_haveType) { _type = newType; m_haveType = true; } else if (_type != newType) { setAttribute(ATTR_TYPE,type()); } } break; case ATTR_VALUE: m_value = attr->value(); break; case ATTR_CHECKED: setChecked(attr->val() != 0); break; case ATTR_MAXLENGTH: _maxLen = attr->val() ? attr->val()->toInt() : -1; break; case ATTR_SIZE: _size = attr->val() ? attr->val()->toInt() : 20; break; case ATTR_SRC: _src = attr->value(); break; case ATTR_ALT: case ATTR_USEMAP: case ATTR_ACCESSKEY: // ### ignore for the moment break; case ATTR_ALIGN: addCSSProperty(CSS_PROP_TEXT_ALIGN, attr->value(), false); break; case ATTR_WIDTH: addCSSProperty(CSS_PROP_WIDTH, attr->value(), false); break; case ATTR_HEIGHT: addCSSProperty(CSS_PROP_HEIGHT, attr->value(), false); break; default: HTMLGenericFormElementImpl::parseAttribute(attr); }}void HTMLInputElementImpl::attach(MGHTMLView *_view){ m_style = document->styleSelector()->styleForElement(this, _view->part()); view = _view; khtml::RenderObject *r = _parent ? _parent->renderer() : 0; if(r) { switch(_type) { case TEXT: m_render = new RenderLineEdit(view, this); break; case PASSWORD: m_render = new RenderLineEdit(view, this); break; case CHECKBOX: m_render = new RenderCheckBox(view, this); break; case RADIO: m_render = new RenderRadioButton(view, this); break; case SUBMIT:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -