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

📄 render_form.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// -----------------------------------------------------------------------------------------------------------FileButtonRenderFileButton::RenderFileButton(MGHTMLView *view, HTMLInputElementImpl *element)    : RenderFormElement(view, element){      MGWidget *w = new MGWidgetParent(view->getHwnd(), this);    setQWidget(w, false);    m_haveFocus = false;}RenderFileButton::~RenderFileButton(){}void RenderFileButton::slotClicked(){    FILEDLGDATA myWinFileData;    int choise=0;    strcpy (myWinFileData.filepath, "/");    myWinFileData.IsSave = FALSE;    choise = OpenFileDialog ( m_view->getHwnd(), FALSE, &myWinFileData);//    kdDebug(0) << "................................OpenFileDialog END" << endl;    if(choise == IDOK){//    kdDebug(0) << "................................"<< myWinFileData.filefullname << endl;        QString file_name( myWinFileData.filefullname );        if (!file_name.isNull()) {            // ### truncate if > maxLength            static_cast<HTMLInputElementImpl*>(m_element)->setFilename(DOMString(file_name));            static_cast<MGWidgetParent*>(m_widget) -> getEdit() ->setText(file_name);        }    }}void RenderFileButton::layout( ){    MGSize s;    if ( m_widget )        s = m_widget -> sizeHint();    applyLayout(s.width(), s.height());    setLayouted();}void RenderFileButton::slotReturnPressed(){    if (m_element->form())        m_element->form()->maybeSubmit();}void RenderFileButton::slotTextChanged(const QString &string){     static_cast<HTMLInputElementImpl*>(m_element)->setFilename(DOMString(string));}void RenderFileButton::slotBlurred(){/*    if (sender() != m_edit && sender() != m_button)        return;    if ((sender() == m_edit && m_button->hasFocus()) ||        (sender() == m_button && m_edit->hasFocus()))        m_haveFocus = true;    else {        m_haveFocus = false;        RenderFormElement::slotBlurred();    }*/}void RenderFileButton::slotFocused(){/*    if (sender() != m_edit && sender() != m_button)        return;    if (!m_haveFocus)        RenderFormElement::slotFocused();    m_haveFocus = true;*/}void RenderFileButton::select(){    //m_edit->selectAll();}// -------------------------------------------------------------------------------------------------------RenderSelectRenderSelect::RenderSelect(MGHTMLView *view, HTMLSelectElementImpl *element)    : RenderFormElement(view, element){#if FOMR_DEBUG    fprintf(stderr, "RenderSelect::RenderSelect\n");#endif        m_multiple = element->multiple();    m_size = element->size();    m_listBox = (m_multiple || m_size > 1);    if(m_listBox) {        MGWidgetList *w = new MGWidgetList(view -> getHwnd(), this);        m_size = 1;        setQWidget(w, false);        }    else {        MGWidgetComboBox *w = new MGWidgetComboBox(view -> getHwnd(), this);        m_size = 1;        setQWidget(w, false);    }        m_ignoreSelectEvents = false;    }void RenderSelect::layout( ){    // ### maintain selection properly between type/size changes, and work    // out how to handle multiselect->singleselect (probably just select    // first selected one)    HTMLSelectElementImpl* f = static_cast<HTMLSelectElementImpl*>(m_element);    m_ignoreSelectEvents = true;    // change widget type//    bool oldMultiple = m_multiple;//    unsigned oldSize = m_size;//    bool oldListbox = m_listBox;    m_multiple = f->multiple();    m_size = f->size();    m_listBox = (m_multiple || m_size > 1);    HTMLSelectElementImpl *select = static_cast<HTMLSelectElementImpl*>(m_element);    // update contents listbox/combobox based on options in m_element    // ### check if we actually need to do this    QArray<HTMLGenericFormElementImpl*> listItems = select->listItems();    int listIndex;    if ( m_listBox )        static_cast<MGWidgetList *>(m_widget)->clear();                else        static_cast<MGWidgetComboBox *>(m_widget)->clear();    for (listIndex = 0; listIndex < int(listItems.size()); listIndex++) {        if (listItems[listIndex]->id() == ID_OPTGROUP) {            DOMString text = listItems[listIndex]->getAttribute(ATTR_LABEL);            if (text.isNull())                text = "";                        QString qstr(text.implementation()->s, text.implementation()->l);                        qstr = "--" + qstr + "--";                        if ( m_listBox)                    static_cast<MGWidgetList *>(m_widget)                            ->insertItem( qstr.visual(), listIndex);                        else                    static_cast<MGWidgetComboBox *>(m_widget)                    ->insertItem( qstr.visual(), listIndex);                 }        else if (listItems[listIndex]->id() == ID_OPTION) {            DOMString text = static_cast<HTMLOptionElementImpl*>(listItems[listIndex])->text();            if (text.isNull())                text = "";                        if ( m_listBox)                    static_cast<MGWidgetList *>(m_widget)                            ->insertItem(QString(text.implementation()->s, text.implementation()->l).visual(), listIndex);                        else                    static_cast<MGWidgetComboBox *>(m_widget)                    ->insertItem(QString(text.implementation()->s, text.implementation()->l).visual(), listIndex);        }        else            assert(false);        m_selectionChanged = true;    }    // update selection    if (m_selectionChanged)        updateSelection();    m_selectionChanged = false;    MGSize s;    if ( m_widget ){        s = m_widget->sizeHint();        applyLayout(s.width(), s.height());            setLayouted();    }        m_ignoreSelectEvents = false;}void RenderSelect::close(){    HTMLSelectElementImpl* f = static_cast<HTMLSelectElementImpl*>(m_element);    // Restore state    QString state = f->ownerDocument()->registerElement(f);    if ( !state.isEmpty())    {        restoreState( state );    }    setLayouted(false);    static_cast<HTMLSelectElementImpl*>(m_element)->recalcListItems();    RenderFormElement::close();}QString RenderSelect::state(){    QString state;    if(m_listBox) {        MGWidgetList * w = static_cast<MGWidgetList *>(m_widget);        HTMLSelectElementImpl* f = static_cast<HTMLSelectElementImpl*>(m_element);        NodeImpl* current = f->firstChild();        int i = 0;        while(current) {            if (current->id() == ID_OPTION)            {                if( w->isSelected(i))                    state += 'X';                else                    state += 'O';            }            current = current->nextSibling();            i++;        }    }    else    {        MGWidgetComboBox * w = static_cast<MGWidgetComboBox *>(m_widget);        HTMLSelectElementImpl* f = static_cast<HTMLSelectElementImpl*>(m_element);        NodeImpl* current = f->firstChild();        int i = 0;        while(current) {            if (current->id() == ID_OPTION )            {                if( i == w->currentItem())                    state += 'X';                else                    state += 'O';            }            current = current->nextSibling();            i++;        }    }#if FOMR_DEBUG        fprintf(stderr, state.visual());        #endif    return state;}void RenderSelect::restoreState(const QString &state){#if FOMR_DEBUG        fprintf(stderr, "RenderSelect::restoreState\n");#endif    if (m_listBox) {        MGWidgetList* w = static_cast<MGWidgetList*>(m_widget);        HTMLSelectElementImpl* f = static_cast<HTMLSelectElementImpl*>(m_element);        NodeImpl* current = f->firstChild();        int i = 0;        while(current) {            if (current->id() == ID_OPTION)            {                w->setSelected(i, (state[i] == 'X'));            }            current = current->nextSibling();            i++;        }    }    else    {        MGWidgetComboBox * w = static_cast<MGWidgetComboBox*>(m_widget);        HTMLSelectElementImpl* f = static_cast<HTMLSelectElementImpl*>(m_element);        NodeImpl* current = f->firstChild();        int i = 0;        while(current) {            if (current->id() == ID_OPTION )            {                if (state[i] == 'X')                    w->setCurrentItem(i);            }            current = current->nextSibling();            i++;        }    }}void RenderSelect::slotActivated(int index){    if (m_ignoreSelectEvents)        return;    m_ignoreSelectEvents = true;    QArray<HTMLGenericFormElementImpl*> listItems = static_cast<HTMLSelectElementImpl*>(m_element)->listItems();    if (index < 0 || index >= int(listItems.size()))        return;    if (listItems[index]->id() == ID_OPTION) {        if (m_listBox)            static_cast<HTMLOptionElementImpl*>(listItems[index])->setSelected(static_cast<MGWidgetList *>(m_widget)->isSelected(index));        else            static_cast<HTMLOptionElementImpl*>(listItems[index])->setSelected(true);    }/*    else {        // nope, sorry, can't select this        if (m_listBox)            static_cast<MGWidgetList*>(m_widget)->setCurrentItem(-1);        else {            // ###        }    }*/    m_ignoreSelectEvents = false;    static_cast<HTMLSelectElementImpl*>(m_element)->onChange();}void RenderSelect::setOptionsChanged(bool /*ptionsChanged*/){        // void in khtml    //m_optionsChanged = _optionsChanged;}void RenderSelect::updateSelection(){    QArray<HTMLGenericFormElementImpl*> listItems = static_cast<HTMLSelectElementImpl*>(m_element)->listItems();    int i;    if (m_listBox) {        // if multi-select, we select only the new selected index        MGWidgetList *listBox = static_cast<MGWidgetList *>(m_widget);        for (i = 0; i < int(listItems.size()); i++)            listBox->setSelected(i,listItems[i]->id() == ID_OPTION &&                                static_cast<HTMLOptionElementImpl*>(listItems[i])->selected());    }    else {        for (i = 0; i < int(listItems.size()); i++)            if (listItems[i]->id() == ID_OPTION && static_cast<HTMLOptionElementImpl*>(listItems[i])->selected()) {                static_cast<MGWidgetComboBox*>(m_widget)->setCurrentItem(i);                return;            }        static_cast<MGWidgetComboBox*>(m_widget)->setCurrentItem(0); // ### wrong if item 0 is an optgroup    }}// ----------------------------------------------------------------------------------------------------------RenderTextArea// ### allow contents to be manipulated via DOM - will require updating// of text node childRenderTextArea::RenderTextArea(MGHTMLView *view, HTMLTextAreaElementImpl *element)    : RenderFormElement(view, element){    MGWidgetTextArea *edit = new MGWidgetTextArea(view -> getHwnd(), this);    setQWidget(edit, false);}void RenderTextArea::layout( ){    HTMLTextAreaElementImpl* f = static_cast<HTMLTextAreaElementImpl*>(m_element);        MGSize size;    if ( m_widget )    size = MGSize( (int)((f -> cols()) * 6.2), (int)( (f -> rows() * 12.5) ) );    applyLayout(size.width(), size.height());    setLayouted();}void RenderTextArea::close( ){    HTMLTextAreaElementImpl *f = static_cast<HTMLTextAreaElementImpl*>(m_element);    if(f->firstChild() && f->firstChild()->id() == ID_TEXT)        f->setValue(static_cast<TextImpl*>(f->firstChild())->string());    layout();    RenderFormElement::close();}QString RenderTextArea::text(){    return static_cast<MGWidgetTextArea *>(m_widget)->text();}void RenderTextArea::slotTextChanged(){    static_cast<HTMLTextAreaElementImpl*>(m_element)->setValue(static_cast<MGWidgetTextArea *>(m_widget)->text());}void RenderTextArea::select(){    //static_cast<MGWidgetTextArea *>(m_widget)->selectAll();}// ------------------------------------------------------------------------------------------------------------ImageButtonRenderImageButton::RenderImageButton(HTMLInputElementImpl *element)    : RenderImage(){    m_element = element;}RenderImageButton::~RenderImageButton(){}//#include "render_form.moc"

⌨️ 快捷键说明

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