📄 render_form.cpp
字号:
// -----------------------------------------------------------------------------------------------------------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 + -