⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 html_formimpl.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    _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 + -