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

📄 html_formimpl.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void HTMLGenericFormElementImpl::removedFromDocument(){    HTMLElementImpl::removedFromDocument();    if (m_form)        m_form->removeFormElement(this);    m_form = 0;}HTMLGenericFormElementImpl::~HTMLGenericFormElementImpl(){    if (m_form)        m_form->removeFormElement(this);    if (m_name) m_name->deref();}void HTMLGenericFormElementImpl::parseAttribute(AttributeImpl *attr){    switch(attr->id())    {    case ATTR_DISABLED:        setDisabled( attr->val() != 0 );        break;    case ATTR_READONLY:    {        const bool m_oldreadOnly = m_readOnly;        m_readOnly = attr->val() != 0;        if (m_oldreadOnly != m_readOnly) setChanged();        break;    }    default:        HTMLElementImpl::parseAttribute(attr);    }}void HTMLGenericFormElementImpl::attach(){    assert(!attached());    if (m_render) {        assert(m_render->style());        parentNode()->renderer()->addChild(m_render, nextRenderer());    }    // FIXME: This handles the case of a new form element being created by    // JavaScript and inserted inside a form. What it does not handle is    // a form element being moved from inside a form to outside, or from one    // inside one form to another. The reason this other case is hard to fix    // is that during parsing, we may have been passed a form that we are not    // inside, DOM-tree-wise. If so, it's hard for us to know when we should    // be removed from that form's element list.    if (!m_form) {	m_form = getForm();	if (m_form)	    m_form->registerFormElement(this);    }    NodeBaseImpl::attach();    // The call to updateFromElement() needs to go after the call through    // to the base class's attach() because that can sometimes do a close    // on the renderer.    if (m_render)        m_render->updateFromElement();}HTMLFormElementImpl *HTMLGenericFormElementImpl::getForm() const{    NodeImpl *p = parentNode();    while(p)    {        if( p->id() == ID_FORM )            return static_cast<HTMLFormElementImpl *>(p);        NodeImpl *s = p->previousSibling();        if (!s)            p = p->parentNode();        else            p = s;    }#ifdef FORMS_DEBUG    kdDebug( 6030 ) << "couldn't find form!" << endl;    kdDebug( 6030 ) << kdBacktrace() << endl;#endif    return 0;}DOMString HTMLGenericFormElementImpl::name() const{    if (m_name) return m_name;// ###//     DOMString n = getDocument()->htmlMode() != DocumentImpl::XHtml ?//                   getAttribute(ATTR_NAME) : getAttribute(ATTR_ID);    const DOMString n = getAttribute(ATTR_NAME);    if (n.isNull())        return new DOMStringImpl("");    return n;}void HTMLGenericFormElementImpl::setName(const DOMString& name){    if (m_name) m_name->deref();    m_name = name.implementation();    setAttribute( ATTR_NAME, name );    if (m_name) m_name->ref();}void HTMLGenericFormElementImpl::onSelect(){    // ### make this work with new form events architecture    dispatchHTMLEvent(EventImpl::SELECT_EVENT,true,false);}void HTMLGenericFormElementImpl::onChange(){    // ### make this work with new form events architecture    dispatchHTMLEvent(EventImpl::CHANGE_EVENT,true,false);}void HTMLGenericFormElementImpl::setDisabled( bool _disabled ){    if ( m_disabled != _disabled ) {        m_disabled = _disabled;        setChanged();    }}bool HTMLGenericFormElementImpl::isFocusable() const{    return (!disabled() && m_render && m_render->isWidget() &&        static_cast<RenderWidget*>(m_render)->widget() &&        static_cast<RenderWidget*>(m_render)->widget()->focusPolicy() >= QWidget::TabFocus) ||		/* INPUT TYPE="image" supports focus too */		(			id() == ID_INPUT &&			static_cast<const HTMLInputElementImpl *>(this)->inputType() == HTMLInputElementImpl::IMAGE		);}class FocusHandleWidget : public QWidget{public:    void focusNextPrev(bool n) {        if (!focusNextPrevChild(n) && inherits("QTextEdit"))            QWidget::focusNextPrevChild(n);    }};void HTMLGenericFormElementImpl::defaultEventHandler(EventImpl *evt){    if (evt->target() == this && renderer() && renderer()->isWidget()) {        switch(evt->id())  {        case EventImpl::MOUSEDOWN_EVENT:        case EventImpl::MOUSEUP_EVENT:        case EventImpl::MOUSEMOVE_EVENT:        case EventImpl::MOUSEOUT_EVENT:        case EventImpl::MOUSEOVER_EVENT:        case EventImpl::KEYDOWN_EVENT:        case EventImpl::KEYUP_EVENT:        case EventImpl::KEYPRESS_EVENT:            if (static_cast<RenderWidget*>(renderer())->handleEvent(*evt))		evt->setDefaultHandled();        default:            break;        }    }    if (evt->target()==this && !m_disabled)    {        // Report focus in/out changes to the browser extension (editable widgets only)        KHTMLView* const view = getDocument()->view();        if (view && evt->id() == EventImpl::DOMFOCUSIN_EVENT && isEditable() && m_render && m_render->isWidget()) {            KHTMLPartBrowserExtension *ext = static_cast<KHTMLPartBrowserExtension *>(view->part()->browserExtension());            QWidget* const widget = static_cast<RenderWidget*>(m_render)->widget();            if (ext)                ext->editableWidgetFocused(widget);        }        if (evt->id()==EventImpl::MOUSEDOWN_EVENT || evt->id()==EventImpl::KEYDOWN_EVENT)        {            setActive();        }        else if (evt->id() == EventImpl::MOUSEUP_EVENT || evt->id()==EventImpl::KEYUP_EVENT)        {	    if (m_active)	    {		setActive(false);		setFocus();	    }	    else {                setActive(false);            }        }	if (!evt->defaultHandled() && m_render && m_render->isWidget()) {	    // handle tabbing out, either from a single or repeated key event.	    if ( evt->id() == EventImpl::KEYPRESS_EVENT ) {	        QKeyEvent* const k = static_cast<TextEventImpl *>(evt)->qKeyEvent();	        if ( k && (k->key() == Qt::Key_Tab || k->key() == Qt::Key_BackTab) ) {		    QWidget* const widget = static_cast<RenderWidget*>(m_render)->widget();		    QFocusEvent::setReason( k->key() == Qt::Key_Tab ? QFocusEvent::Tab : QFocusEvent::Backtab );		    if (widget)                        static_cast<FocusHandleWidget *>(widget)			    ->focusNextPrev(k->key() == Qt::Key_Tab);		    QFocusEvent::resetReason();                    evt->setDefaultHandled();	        }            }	}	if (view && evt->id() == EventImpl::DOMFOCUSOUT_EVENT && isEditable() && m_render && m_render->isWidget()) {	    KHTMLPartBrowserExtension* const ext = static_cast<KHTMLPartBrowserExtension *>(view->part()->browserExtension());	    QWidget* const widget = static_cast<RenderWidget*>(m_render)->widget();	    if (ext)		ext->editableWidgetBlurred(widget);	    // ### Don't count popup as a valid reason for losing the focus (example: opening the options of a select	    // combobox shouldn't emit onblur)	}    }    if (evt->target() == this && evt->isMouseEvent() && renderer())        evt->setDefaultHandled();    HTMLElementImpl::defaultEventHandler(evt);}bool HTMLGenericFormElementImpl::isEditable(){    return false;}// -------------------------------------------------------------------------HTMLButtonElementImpl::HTMLButtonElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f)    : HTMLGenericFormElementImpl(doc, f){    m_clicked = false;    m_type = SUBMIT;    m_dirty = true;    m_activeSubmit = false;}HTMLButtonElementImpl::~HTMLButtonElementImpl(){}NodeImpl::Id HTMLButtonElementImpl::id() const{    return ID_BUTTON;}DOMString HTMLButtonElementImpl::type() const{    return getAttribute(ATTR_TYPE);}void HTMLButtonElementImpl::blur(){    if(getDocument()->focusNode() == this)        getDocument()->setFocusNode(0);}void HTMLButtonElementImpl::focus(){    getDocument()->setFocusNode(this);}void HTMLButtonElementImpl::parseAttribute(AttributeImpl *attr){    switch(attr->id())    {    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_ALIGN:        break;    default:        HTMLGenericFormElementImpl::parseAttribute(attr);    }}void HTMLButtonElementImpl::defaultEventHandler(EventImpl *evt){    if (m_type != BUTTON && !m_disabled) {	bool act = (evt->id() == EventImpl::DOMACTIVATE_EVENT);	if (!act && evt->id()==EventImpl::KEYUP_EVENT) {	    QKeyEvent* const ke = static_cast<TextEventImpl *>(evt)->qKeyEvent();	    if (ke && active() && (ke->key() == Qt::Key_Return || ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Space))		act = true;	}	if (act)	    activate();    }    HTMLGenericFormElementImpl::defaultEventHandler(evt);}void HTMLButtonElementImpl::activate(){    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::click(){    QMouseEvent me(QEvent::MouseButtonRelease, QPoint(0,0),Qt::LeftButton, 0);    dispatchMouseEvent(&me,EventImpl::CLICK_EVENT, 1);}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());    const QString enc_str = m_currValue.isNull() ? QString("") : m_currValue;    encoding += fixUpfromUnicode(codec, enc_str);    return true;}void HTMLButtonElementImpl::attach(){    // skip the generic handler    HTMLElementImpl::attach();}// -------------------------------------------------------------------------HTMLFieldSetElementImpl::HTMLFieldSetElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f)    : HTMLGenericFormElementImpl(doc, f){}HTMLFieldSetElementImpl::~HTMLFieldSetElementImpl(){}NodeImpl::Id HTMLFieldSetElementImpl::id() const{    return ID_FIELDSET;}void HTMLFieldSetElementImpl::attach(){    assert(!attached());    assert(!m_render);    assert(parentNode());    RenderStyle* const _style = getDocument()->styleSelector()->styleForElement(this);    _style->ref();    if (parentNode()->renderer() && _style->display() != NONE) {        m_render = new (getDocument()->renderArena()) RenderFieldset(this);        m_render->setStyle(_style);    }    HTMLGenericFormElementImpl::attach();    _style->deref();}void HTMLFieldSetElementImpl::parseAttribute(AttributeImpl *attr){    HTMLElementImpl::parseAttribute(attr);}// -------------------------------------------------------------------------HTMLInputElementImpl::HTMLInputElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f)    : HTMLGenericFormElementImpl(doc, f){    m_type = TEXT;    m_maxLen = -1;    m_size = 20;    m_clicked = false;    m_checked = false;    m_haveType = false;    m_activeSubmit = false;    m_autocomplete = true;    m_inited = false;    m_unsubmittedFormChange = false;    xPos = 0;    yPos = 0;    if ( m_form )        m_autocomplete = f->autoComplete();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -