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

📄 html_formimpl.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void HTMLInputElementImpl::reset(){    setValue(getAttribute(ATTR_VALUE));    setChecked(getAttribute(ATTR_CHECKED) != 0);}void HTMLInputElementImpl::setChecked(bool _checked){    if (m_form && m_type == RADIO && _checked && !name().isEmpty())        m_form->radioClicked(this);    if (m_checked == _checked) return;    m_checked = _checked;    setChanged();}DOMString HTMLInputElementImpl::value() const{    if (m_type == CHECKBOX || m_type == RADIO) {        const DOMString val = getAttribute(ATTR_VALUE);        // If no attribute exists, then just use "on" or "" based off the checked() state        // of the control.        if (val.isNull()) {            if (checked())                return DOMString("on");            else                return DOMString("");        }        return val;    }    DOMString val = m_value;    // It's important *not* to fall back to the value attribute for file inputs,    // because that would allow a malicious web page to upload files by setting the    // value attribute in markup.    if (val.isNull() && m_type != FILE)        val = getAttribute(ATTR_VALUE);    return val.isNull() ? DOMString("") : val;}void HTMLInputElementImpl::setValue(DOMString val){    if (m_type == FILE) return;    m_value = (val.isNull() ? DOMString("") : val);    setChanged();}void HTMLInputElementImpl::blur(){    if(getDocument()->focusNode() == this)	getDocument()->setFocusNode(0);}void HTMLInputElementImpl::focus(){    getDocument()->setFocusNode(this);}void HTMLInputElementImpl::defaultEventHandler(EventImpl *evt){    if ( !m_disabled )    {        if (evt->isMouseEvent()) {	    MouseEventImpl* const me = static_cast<MouseEventImpl*>(evt);            if ((m_type == RADIO || m_type == CHECKBOX)		&& me->id() == EventImpl::MOUSEUP_EVENT && me->detail() > 0) {		// click will follow		setChecked(m_type == RADIO ? true : !checked());	    }            if (evt->id() == EventImpl::CLICK_EVENT && m_type == IMAGE && m_render) {		// record the mouse position for when we get the DOMActivate event		int offsetX, offsetY;		m_render->absolutePosition(offsetX,offsetY);		xPos = me->clientX()-offsetX;		yPos = me->clientY()-offsetY;                KHTMLView* v = getDocument()->view();                if ( v ) {                    xPos += v->contentsX();                    yPos += v->contentsY();                }	    }	}        if (m_type == RADIO || m_type == CHECKBOX || m_type == SUBMIT || m_type == RESET || m_type == BUTTON ) {	    bool check = false;	    if (active() && ( evt->id() == EventImpl::KEYUP_EVENT ||	                      evt->id() == EventImpl::KEYPRESS_EVENT ) ) {		TextEventImpl* const te = static_cast<TextEventImpl *>(evt);		if (te->keyVal() == ' ')		    check = true;		else if (te->keyVal() == '\r' && (m_type == BUTTON || m_type == RESET || m_type == SUBMIT))		    check = true;	    }	    if (check) {	        if (evt->id() == EventImpl::KEYUP_EVENT)		    click();	        // Tell the parent that we handle this key (keyup and keydown), even though only keyup activates (#70478)	        evt->setDefaultHandled();	    }        }        // DOMActivate events cause the input to be "activated" - in the case of image and submit inputs, this means        // actually submitting the form. For reset inputs, the form is reset. These events are sent when the user clicks        // on the element, or presses enter while it is the active element. Javascript code wishing to activate the element        // must dispatch a DOMActivate event - a click event will not do the job.        if (m_type == IMAGE || m_type == SUBMIT || m_type == RESET) {	    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 HTMLInputElementImpl::activate(){    if (!m_form)        return;    m_clicked = true;    if (m_type == RESET) {        m_form->reset();    }    else {        m_activeSubmit = true;        if (!m_form->prepareSubmit()) {            xPos = 0;            yPos = 0;        }        m_activeSubmit = false;    }}bool HTMLInputElementImpl::isEditable(){    return ((m_type == TEXT) || (m_type == PASSWORD) || (m_type == ISINDEX) || (m_type == FILE));}// -------------------------------------------------------------------------HTMLLabelElementImpl::HTMLLabelElementImpl(DocumentPtr *doc)    : HTMLGenericFormElementImpl(doc){}HTMLLabelElementImpl::~HTMLLabelElementImpl(){}NodeImpl::Id HTMLLabelElementImpl::id() const{    return ID_LABEL;}void HTMLLabelElementImpl::attach(){    // skip the generic handler    HTMLElementImpl::attach();}NodeImpl* HTMLLabelElementImpl::getFormElement(){	    const DOMString formElementId = getAttribute(ATTR_FOR);	    NodeImpl *newNode=0L;    	    if (!formElementId.isEmpty())	        newNode=getDocument()->getElementById(formElementId);    	    if (!newNode){    		const uint children=childNodeCount();    		if (children>1)    		    for (unsigned int i=0;i<children;++i){			const uint nodeId=childNode(i)->id();			if (nodeId==ID_INPUT || nodeId==ID_SELECT || nodeId==ID_TEXTAREA){			    newNode=childNode(i);			    break;			}		    }		}return newNode;}void HTMLLabelElementImpl::defaultEventHandler(EventImpl *evt){    if ( !m_disabled ) {	bool act = false;	if ( evt->id() == EventImpl::CLICK_EVENT ) {	    act = true;	}	else if ( evt->id() == EventImpl::KEYUP_EVENT ||	                      evt->id() == EventImpl::KEYPRESS_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) {	    NodeImpl* const formNode=getFormElement();	    if (formNode) {		getDocument()->setFocusNode(formNode);		if (formNode->id()==ID_INPUT)		    static_cast<DOM::HTMLInputElementImpl*>(formNode)->click();	    }	    evt->setDefaultHandled();	}    }    HTMLGenericFormElementImpl::defaultEventHandler(evt);}// -------------------------------------------------------------------------HTMLLegendElementImpl::HTMLLegendElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f)    : HTMLGenericFormElementImpl(doc, f){}HTMLLegendElementImpl::~HTMLLegendElementImpl(){}NodeImpl::Id HTMLLegendElementImpl::id() const{    return ID_LEGEND;}void HTMLLegendElementImpl::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()) RenderLegend(this);        m_render->setStyle(_style);    }    HTMLGenericFormElementImpl::attach();    _style->deref();}void HTMLLegendElementImpl::parseAttribute(AttributeImpl *attr){    switch(attr->id())    {    case ATTR_ACCESSKEY:        break;    default:        HTMLElementImpl::parseAttribute(attr);    }}// -------------------------------------------------------------------------HTMLSelectElementImpl::HTMLSelectElementImpl(DocumentPtr *doc, HTMLFormElementImpl *f)    : HTMLGenericFormElementImpl(doc, f){    m_multiple = false;    m_recalcListItems = false;    // 0 means invalid (i.e. not set)    m_size = 0;    m_minwidth = 0;    m_length   = 0;}HTMLSelectElementImpl::~HTMLSelectElementImpl(){    if (getDocument()) getDocument()->deregisterMaintainsState(this);}NodeImpl::Id HTMLSelectElementImpl::id() const{    return ID_SELECT;}DOMString HTMLSelectElementImpl::type() const{    return (m_multiple ? "select-multiple" : "select-one");}long HTMLSelectElementImpl::selectedIndex() const{    // return the number of the first option selected    uint o = 0;    QMemArray<HTMLGenericFormElementImpl*> items = listItems();    const unsigned int itemsSize = items.size();    for (unsigned int i = 0; i < itemsSize; ++i) {        if (items[i]->id() == ID_OPTION) {            if (static_cast<HTMLOptionElementImpl*>(items[i])->selected())                return o;            o++;        }    }    Q_ASSERT(m_multiple || items.isEmpty());    return -1;}void HTMLSelectElementImpl::setSelectedIndex( long  index ){    // deselect all other options and select only the new one    QMemArray<HTMLGenericFormElementImpl*> items = listItems();    int listIndex;    const int itemsSize = int(items.size());    for (listIndex = 0; listIndex < itemsSize; ++listIndex) {        if (items[listIndex]->id() == ID_OPTION)            static_cast<HTMLOptionElementImpl*>(items[listIndex])->setSelected(false);    }    listIndex = optionToListIndex(index);    if (listIndex >= 0)        static_cast<HTMLOptionElementImpl*>(items[listIndex])->setSelected(true);    setChanged(true);}long HTMLSelectElementImpl::length() const{    if (m_recalcListItems)        recalcListItems();    return m_length;}void HTMLSelectElementImpl::add( const HTMLElement &element, const HTMLElement &before, int& exceptioncode ){    if(element.isNull() || element.handle()->id() != ID_OPTION)        return;    HTMLOptionElementImpl* option = static_cast<HTMLOptionElementImpl*>(element.handle());;    //Fast path for appending an item. Can't be done if it is selected and     //we're single-select, since we may need to drop an implicitly-selected item    bool fastAppendLast = false;    if (before.handle() == 0 && (m_multiple || !option->selected()) && !m_recalcListItems)        fastAppendLast = true;    insertBefore(option, before.handle(), exceptioncode );    if (fastAppendLast) {        m_listItems.resize(m_listItems.size() + 1);        m_listItems[m_listItems.size() - 1] = option;        ++m_length;        m_recalcListItems = false;    } else if (!exceptioncode)        setRecalcListItems();}void HTMLSelectElementImpl::remove( long index ){    int exceptioncode = 0;    const int listIndex = optionToListIndex(index);    QMemArray<HTMLGenericFormElementImpl*> items = listItems();    if(listIndex < 0 || index >= int(items.size()))        return; // ### what should we do ? remove the last item?    //Fast path for last element, for e.g. clearing the box    //Note that if this is a single-select, we may have to recompute    //anyway if the item was selected, since we may want to set     //a different one    bool fastRemoveLast = false;    if ((listIndex == items.size() - 1) && !m_recalcListItems &&         (m_multiple || !static_cast<HTMLOptionElementImpl*>(items[listIndex])->selected()))            fastRemoveLast = true;    removeChild(items[listIndex], exceptioncode);    if (fastRemoveLast) {        m_listItems.resize(m_listItems.size() - 1);        --m_length;        m_recalcListItems = false;    } else if( !exceptioncode)        setRecalcListItems();}void HTMLSelectElementImpl::blur(){    if(getDocument()->focusNode() == this)	getDocument()->setFocusNode(0);}void HTMLSelectElementImpl::focus(){    getDocument()->setFocusNode(this);}DOMString HTMLInputElementImpl::valueWithDefault() const{    DOMString v = value();    if (v.isEmpty()) {        switch (m_type) {            case RESET:#ifdef APPLE_CHANGES                v = resetButtonDefaultLabel();#else                v = i18n("Reset");#endif

⌨️ 快捷键说明

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