void WText::updateDom(DomElement& element, bool all) { if (flags_.test(BIT_TEXT_CHANGED) || all) { std::string text = formattedText(); if (flags_.test(BIT_TEXT_CHANGED) || !text.empty()) element.setProperty(Wt::PropertyInnerHTML, text); flags_.reset(BIT_TEXT_CHANGED); } if (flags_.test(BIT_WORD_WRAP_CHANGED) || all) { if (!all || !flags_.test(BIT_WORD_WRAP)) element.setProperty(Wt::PropertyStyleWhiteSpace, flags_.test(BIT_WORD_WRAP) ? "normal" : "nowrap"); flags_.reset(BIT_WORD_WRAP_CHANGED); } if (flags_.test(BIT_PADDINGS_CHANGED) || (all && padding_ && !(padding_[0].isAuto() && padding_[1].isAuto()))) { element.setProperty(PropertyStylePaddingRight, padding_[0].cssText()); element.setProperty(PropertyStylePaddingLeft, padding_[1].cssText()); flags_.reset(BIT_PADDINGS_CHANGED); } WInteractWidget::updateDom(element, all); }
void WComboBox::updateDom(DomElement& element, bool all) { if (itemsChanged_ || all) { if (!all) element.removeAllChildren(); for (unsigned i = 0; i < items_.size(); ++i) { DomElement *item = DomElement::createNew(DomElement::OPTION); item->setAttribute("value", boost::lexical_cast<std::string>(i)); item->setProperty(Wt::PropertyInnerHTML, toUTF8(escapeText(items_[i].value()))); if ((int)i == currentIndex_) item->setProperty(Wt::PropertySelected, "true"); element.addChild(item); } itemsChanged_ = false; } if (selectionChanged_) { element.setProperty(Wt::PropertySelectedIndex, boost::lexical_cast<std::string>(currentIndex_)); selectionChanged_ = false; } if (activated.isConnected() || sactivated.isConnected()) changed.connect(SLOT(this, WComboBox::propagateChange)); WFormWidget::updateDom(element, all); renderOk(); }
void WComboBox::updateDom(DomElement& element, bool all) { if (itemsChanged_ || all) { if (!all) element.removeAllChildren(); for (unsigned i = 0; i < items_.size(); ++i) { DomElement *item = DomElement::createNew(DomElement::OPTION); item->setAttribute("value", boost::lexical_cast<std::string>(i)); item->setProperty(Wt::PropertyInnerHTML, items_[i]); if ((int)i == currentIndex_) item->setProperty(Wt::PropertySelected, "true"); element.addChild(item); } itemsChanged_ = false; } if (selectionChanged_) { element.setProperty(Wt::PropertySelectedIndex, boost::lexical_cast<std::string>(currentIndex_)); selectionChanged_ = false; } const WSignalInstance_ *s1 = getSignal(SIGNAL(activated(int))); const WSignalInstance_ *s2 = getSignal(SIGNAL(activated(const std::string))); if (isConnected(s1) || isConnected(s2)) connect(this, SIGNAL(changed()), this, SLOT(propagateChanged())); WFormWidget::updateDom(element, all); renderOk(); }
void WWidgetVectorPainter::updateContents(std::vector<DomElement *>& result, WPaintDevice *device) { WVectorImage *vectorDevice = dynamic_cast<WVectorImage *>(device); if (widget_->repaintFlags_ & PaintUpdate) { DomElement *painter = DomElement::updateGiven (WT_CLASS ".getElement('p" + widget_->id()+ "').firstChild", DomElement_DIV); painter->setProperty(PropertyAddedInnerHTML, vectorDevice->rendered()); WApplication *app = WApplication::instance(); if (app->environment().agentIsOpera()) painter->callMethod("forceRedraw();"); result.push_back(painter); } else { DomElement *canvas = DomElement::getForUpdate ('p' + widget_->id(), DomElement_DIV); /* * In fact, we should use another property, since we could be using * document.importNode() instead of myImportNode() since the xml does not * need to be interpreted as HTML... */ canvas->setProperty(PropertyInnerHTML, vectorDevice->rendered()); result.push_back(canvas); } widget_->sizeChanged_ = false; delete device; }
void WWidgetCanvasPainter::createContents(DomElement *result, WPaintDevice *device) { std::string wstr = boost::lexical_cast<std::string>(widget_->renderWidth_); std::string hstr = boost::lexical_cast<std::string>(widget_->renderHeight_); result->setProperty(PropertyStylePosition, "relative"); result->setProperty(PropertyStyleOverflowX, "hidden"); DomElement *canvas = DomElement::createNew(DomElement_CANVAS); canvas->setId('c' + widget_->id()); canvas->setProperty(PropertyStyleDisplay, "block"); canvas->setAttribute("width", wstr); canvas->setAttribute("height", hstr); result->addChild(canvas); WCanvasPaintDevice *canvasDevice = dynamic_cast<WCanvasPaintDevice *>(device); DomElement *text = 0; if (canvasDevice->textMethod() == WCanvasPaintDevice::DomText) { text = DomElement::createNew(DomElement_DIV); text->setId('t' + widget_->id()); text->setProperty(PropertyStylePosition, "absolute"); text->setProperty(PropertyStyleZIndex, "1"); text->setProperty(PropertyStyleTop, "0px"); text->setProperty(PropertyStyleLeft, "0px"); } canvasDevice->render("c" + widget_->id(), text ? text : result); if (text) result->addChild(text); delete device; }
void WFormWidget::updateDom(DomElement& element, bool all) { const WEnvironment& env = WApplication::instance()->environment(); bool onChangeHandledElsewhere = dynamic_cast<WAbstractToggleButton *>(this); if (!onChangeHandledElsewhere) { EventSignal<> *s = voidEventSignal(CHANGE_SIGNAL, false); if (s) updateSignalConnection(element, *s, "change", all); } if (flags_.test(BIT_ENABLED_CHANGED) || all) { if (!all || !isEnabled()) element.setProperty(Wt::PropertyDisabled, isEnabled() ? "false" : "true"); if (!all && isEnabled() && env.agentIsIE()) { /* * FIXME: implement a workaround for IE, reenabling a checkbox makes * the input box loose interactivity. */ } flags_.reset(BIT_ENABLED_CHANGED); } if (flags_.test(BIT_READONLY_CHANGED) || all) { if (!all || isReadOnly()) element.setProperty(Wt::PropertyReadOnly, isReadOnly() ? "true" : "false"); flags_.reset(BIT_READONLY_CHANGED); } if (flags_.test(BIT_TABINDEX_CHANGED) || all) { if (!all || tabIndex_) element.setProperty(PropertyTabIndex, boost::lexical_cast<std::string>(tabIndex_)); flags_.reset(BIT_TABINDEX_CHANGED); } if (isEnabled()) { if (all && flags_.test(BIT_GOT_FOCUS)) flags_.set(BIT_INITIAL_FOCUS); if (flags_.test(BIT_GOT_FOCUS) || (all && flags_.test(BIT_INITIAL_FOCUS))) { element.callJavaScript("setTimeout(function() {" """var f = " + jsRef() + ";" """if (f) try { f.focus(); } catch (e) { } }, " + (env.agentIsIElt(9) ? "500" : "10") + ");"); flags_.reset(BIT_GOT_FOCUS); } } WInteractWidget::updateDom(element, all); }
void WWidgetCanvasPainter::createContents(DomElement *result, WPaintDevice *device) { std::string wstr = boost::lexical_cast<std::string>(widget_->renderWidth_); std::string hstr = boost::lexical_cast<std::string>(widget_->renderHeight_); result->setProperty(PropertyStylePosition, "relative"); result->setProperty(PropertyStyleOverflowX, "hidden"); result->setProperty(PropertyStyleOverflowY, "hidden"); DomElement *canvas = DomElement::createNew(DomElement_CANVAS); canvas->setId('c' + widget_->id()); canvas->setProperty(PropertyStyleDisplay, "block"); canvas->setAttribute("width", wstr); canvas->setAttribute("height", hstr); result->addChild(canvas); widget_->sizeChanged_ = false; WCanvasPaintDevice *canvasDevice = dynamic_cast<WCanvasPaintDevice *>(device); DomElement *text = 0; if (canvasDevice->textMethod() == WCanvasPaintDevice::DomText) { text = DomElement::createNew(DomElement_DIV); text->setId('t' + widget_->id()); text->setProperty(PropertyStylePosition, "absolute"); text->setProperty(PropertyStyleZIndex, "1"); text->setProperty(PropertyStyleTop, "0px"); text->setProperty(PropertyStyleLeft, "0px"); } DomElement *el = text ? text : result; bool hasJsObjects = widget_->jsObjects_.size() > 0; if (hasJsObjects) { WStringStream ss; WApplication *app = WApplication::instance(); ss << "new " WT_CLASS ".WPaintedWidget(" << app->javaScriptClass() << "," << widget_->jsRef() << ");"; widget_->jsObjects_.updateJs(ss); el->callJavaScript(ss.str()); } canvasDevice->render('c' + widget_->id(), el); if (hasJsObjects) { WStringStream ss; ss << widget_->objJsRef() << ".repaint=function(){"; ss << canvasDevice->recordedJs_.str(); ss << "};"; el->callJavaScript(ss.str()); } if (text) result->addChild(text); delete device; }
void WTableRow::updateDom(DomElement& element, bool all) { if (height_) element.setProperty(PropertyStyleHeight, height_->cssText()); if (!all || !styleClass_.empty()) element.setProperty(PropertyClass, styleClass_.toUTF8()); if ((all && hidden_) || (!all && hiddenChanged_)) { element.setProperty(PropertyStyleDisplay, hidden_ ? "none" : ""); hiddenChanged_ = false; } }
void WPushButton::updateDom(DomElement& element, bool all) { if (all && element.type() == DomElement_BUTTON) element.setAttribute("type", "button"); bool updateInnerHtml = !icon_.isNull() && flags_.test(BIT_TEXT_CHANGED); if (updateInnerHtml || flags_.test(BIT_ICON_CHANGED) || (all && !icon_.isNull())) { DomElement *image = DomElement::createNew(DomElement_IMG); image->setProperty(PropertySrc, icon_.resolveUrl(WApplication::instance())); image->setId("im" + formName()); element.insertChildAt(image, 0); flags_.set(BIT_ICON_RENDERED); flags_.reset(BIT_ICON_CHANGED); } if (flags_.test(BIT_TEXT_CHANGED) || all) { element.setProperty(Wt::PropertyInnerHTML, text_.formattedText()); flags_.reset(BIT_TEXT_CHANGED); } // bool needsUrlResolution = false; if (flags_.test(BIT_LINK_CHANGED) || all) { if (element.type() == DomElement_A) { /* needsUrlResolution = */ WAnchor::renderHRef(this, linkState_, element); WAnchor::renderHTarget(linkState_, element, all); } else renderHRef(element); flags_.reset(BIT_LINK_CHANGED); } if (isCheckable()) { if (flags_.test(BIT_CHECKED_CHANGED) || all) { if (!all || flags_.test(BIT_IS_CHECKED)) { toggleStyleClass("active", flags_.test(BIT_IS_CHECKED), true); } flags_.reset(BIT_CHECKED_CHANGED); } } if (!all) WApplication::instance()->theme()->apply(this, element, MainElementThemeRole); WFormWidget::updateDom(element, all); }
void WWidgetItemImpl::createComponent(DomElement *parentContainer) { DomElement *e = item_->widget()->createSDomElement(WApplication::instance()); e->setProperty(PropertyStyle, e->getProperty(PropertyStyle) + "position:absolute;left:-10000px;top:-10000px;" "visibility:hidden;"); Container *c = dynamic_cast<Container *>(item_->widget()); if (!c) { std::stringstream js; js << "var " << var_ << "=new Ext.BoxComponent({id:'" << id_ << "',applyTo:'" << item_->widget()->id() << "'"; addConfig(js); Container::setSizeConfig(js, item_->widget()); js << "});{var s=" << item_->widget()->jsRef() << ";s.style.position='';" "s.style.left='';" "s.style.top='';" "s.style.visibility='';}"; e->callJavaScript(js.str()); } parentContainer->addChild(e); }
void WSelectionBox::updateDom(DomElement& element, bool all) { if (configChanged_ || all) { element.setAttribute("size", std::to_string(verticalSize_)); if (!all || (selectionMode_ == SelectionMode::Extended)) { element.setProperty(Property::Multiple, selectionMode_ == SelectionMode::Extended ? "true" : "false"); if (!all) selectionChanged_ = true; } configChanged_ = false; } if (selectionMode_ == SelectionMode::Extended) { if (selectionChanged_ && !all) { for (int i = 0; i < count(); ++i) { element.callMethod("options[" + std::to_string(i) + "].selected=" + (isSelected(i) ? "true" : "false")); } } selectionChanged_ = false; } WComboBox::updateDom(element, all); }
void WSlider::updateDom(DomElement& element, bool all) { if (paintedSlider_) paintedSlider_->doUpdateDom(element, all); else { if (all || changed_) { element.setAttribute("type", "range"); element.setProperty(Wt::PropertyValue, boost::lexical_cast<std::string>(value_)); element.setAttribute("min", boost::lexical_cast<std::string>(minimum_)); element.setAttribute("max", boost::lexical_cast<std::string>(maximum_)); if (!changedConnected_ && (valueChanged_.isConnected() || sliderMoved_.isConnected())) { changedConnected_ = true; changed().connect(this, &WSlider::onChange); } changed_ = false; } } WFormWidget::updateDom(element, all); }
DomElement *StdWidgetItemImpl::createDomElement(bool fitWidth, bool fitHeight, WApplication *app) { WWidget *w = item_->widget(); w->setInline(false); DomElement *d = w->createSDomElement(app); DomElement *result = d; if (app->environment().agentIsIElt(9) && (d->type() == DomElement_TEXTAREA || d->type() == DomElement_SELECT || d->type() == DomElement_INPUT || d->type() == DomElement_BUTTON)) { d->removeProperty(PropertyStyleDisplay); } // FIXME IE9 does border-box perhaps ? if (!app->environment().agentIsIE() && w->javaScriptMember(WWidget::WT_RESIZE_JS).empty() && d->type() != DomElement_TABLE /* buggy in Chrome, see #1856 */ && app->theme()->canBorderBoxElement(*d)) d->setProperty(PropertyStyleBoxSizing, "border-box"); return result; }
void WLineEdit::updateDom(DomElement& element, bool all) { if (all || flags_.test(BIT_CONTENT_CHANGED)) { element.setProperty(Wt::PropertyValue, content_.toUTF8()); flags_.reset(BIT_CONTENT_CHANGED); } if (all || flags_.test(BIT_ECHO_MODE_CHANGED)) { element.setAttribute("type", echoMode_ == Normal ? "text" : "password"); flags_.reset(BIT_ECHO_MODE_CHANGED); } if (all || flags_.test(BIT_TEXT_SIZE_CHANGED)) { element.setAttribute("size", boost::lexical_cast<std::string>(textSize_)); flags_.reset(BIT_TEXT_SIZE_CHANGED); } if (all || flags_.test(BIT_MAX_LENGTH_CHANGED)) { if (!all || maxLength_ > 0) element.setAttribute("maxLength", boost::lexical_cast<std::string>(maxLength_)); flags_.reset(BIT_MAX_LENGTH_CHANGED); } WFormWidget::updateDom(element, all); }
void WFont::updateDomElement(DomElement& element, bool fontall, bool all) { if (familyChanged_ || fontall || all) { std::string family = cssFamily(fontall); if (!family.empty()) element.setProperty(PropertyStyleFontFamily, family); familyChanged_ = false; } if (styleChanged_ || fontall || all) { std::string style = cssStyle(fontall); if (!style.empty()) element.setProperty(PropertyStyleFontStyle, style); styleChanged_ = false; } if (variantChanged_ || fontall || all) { std::string variant = cssVariant(fontall); if (!variant.empty()) element.setProperty(PropertyStyleFontVariant, variant); variantChanged_ = false; } if (weightChanged_ || fontall || all) { std::string weight = cssWeight(fontall); if (!weight.empty()) element.setProperty(PropertyStyleFontWeight, weight); weightChanged_ = false; } if (sizeChanged_ || fontall || all) { std::string size = cssSize(fontall); if (!size.empty()) element.setProperty(PropertyStyleFontSize, size); sizeChanged_ = false; } }
void PaintedSlider::doUpdateDom(DomElement& element, bool all) { if (all) { WApplication *app = WApplication::instance(); element.addChild(createSDomElement(app)); element.addChild(((WWebWidget *)handle_)->createSDomElement(app)); DomElement *west = DomElement::createNew(DomElement_DIV); west->setProperty(PropertyClass, "Wt-w"); element.addChild(west); DomElement *east = DomElement::createNew(DomElement_DIV); east->setProperty(PropertyClass, "Wt-e"); element.addChild(east); } }
DomElement *StdGridLayoutImpl2::createElement(WLayoutItem *item, WApplication *app) { DomElement *c = getImpl(item)->createDomElement(true, true, app); c->setProperty(PropertyStyleVisibility, "hidden"); return c; }
void WPushButton::updateDom(DomElement& element, bool all) { if (textChanged_ || all) { element.setProperty(Wt::PropertyInnerHTML, text_); textChanged_ = false; } element.redict_ = redict_; WFormWidget::updateDom(element, all); }
void WScrollArea::updateDom(DomElement& element, bool all) { if (widgetChanged_ || all) { if (widget_) element.addChild(widget_->webWidget()->createDomElement()); widgetChanged_ = false; } if (scrollBarChanged_ || all) { if ((horizontalScrollBar_->tiesChanged_) || (verticalScrollBar_->tiesChanged_)) { horizontalScrollBar_->tiesChanged_ = true; verticalScrollBar_->tiesChanged_ = true; } horizontalScrollBar_->updateDom(element, all); verticalScrollBar_->updateDom(element, all); scrollBarChanged_ = false; } if (scrollBarPolicyChanged_ || all) { switch (scrollBarPolicy_) { case ScrollBarAsNeeded: element.setProperty(Wt::PropertyStyleOverflowX, "auto"); break; case ScrollBarAlwaysOff: element.setProperty(Wt::PropertyStyleOverflowX, "hidden"); break; case ScrollBarAlwaysOn: element.setProperty(Wt::PropertyStyleOverflowX, "scroll"); break; } //result->setProperty(Wt::PropertyStyleOverflowY, "auto"); scrollBarPolicyChanged_ = false; } WWebWidget::updateDom(element, all); renderOk(); }
void WProgressBar::updateDom(DomElement& element, bool all) { DomElement *bar = 0, *label = 0; if (all) { WApplication *app = WApplication::instance(); bar = DomElement::createNew(DomElement_DIV); bar->setId("bar" + id()); bar->setProperty(PropertyClass, valueStyleClass_); app->theme()->apply(this, *bar, ProgressBarBarRole); label = DomElement::createNew(DomElement_DIV); label->setId("lbl" + id()); app->theme()->apply(this, *label, ProgressBarLabelRole); } if (changed_ || all) { if (!bar) bar = DomElement::getForUpdate("bar" + id(), DomElement_DIV); if (!label) label = DomElement::getForUpdate("lbl" + id(), DomElement_DIV); bar->setProperty(PropertyStyleWidth, boost::lexical_cast<std::string>(percentage()) + "%"); WString s = text(); removeScript(s); label->setProperty(PropertyInnerHTML, s.toUTF8()); changed_ = false; } if (bar) element.addChild(bar); if (label) element.addChild(label); WInteractWidget::updateDom(element, all); }
void WImage::updateDom(DomElement& element, bool all) { DomElement *img = &element; if (all && element.type() == DomElement_SPAN) { DomElement *map = map_->createSDomElement(WApplication::instance()); element.addChild(map); img = DomElement::createNew(DomElement_IMG); img->setId("i" + id()); } if (flags_.test(BIT_IMAGE_LINK_CHANGED) || all) { if (!imageLink_.isNull()) { std::string url = resolveRelativeUrl(imageLink_.url()); WApplication *app = WApplication::instance(); url = app->encodeUntrustedUrl(url); img->setProperty(Wt::PropertySrc, url); } else img->setProperty(Wt::PropertySrc, "#"); flags_.reset(BIT_IMAGE_LINK_CHANGED); } if (flags_.test(BIT_ALT_TEXT_CHANGED) || all) { img->setAttribute("alt", altText_.toUTF8()); flags_.reset(BIT_ALT_TEXT_CHANGED); } if (flags_.test(BIT_MAP_CREATED) || (all && map_)) { img->setAttribute("usemap", '#' + map_->id()); flags_.reset(BIT_MAP_CREATED); } WInteractWidget::updateDom(*img, all); if (&element != img) element.addChild(img); }
void WComboBox::updateDom(DomElement& element, bool all) { if (itemsChanged_ || all) { if (!all) element.removeAllChildren(); for (int i = 0; i < count(); ++i) { DomElement *item = DomElement::createNew(DomElement_OPTION); item->setProperty(PropertyValue, boost::lexical_cast<std::string>(i)); item->setProperty(PropertyInnerHTML, escapeText(asString(model_->data(i, modelColumn_))) .toUTF8()); if (isSelected(i)) item->setProperty(PropertySelected, "true"); WString sc = asString(model_->data(i, modelColumn_, StyleClassRole)); if (!sc.empty()) item->setProperty(PropertyClass, sc.toUTF8()); element.addChild(item); } itemsChanged_ = false; selectionChanged_ = false; } if (selectionChanged_) { element.setProperty(PropertySelectedIndex, boost::lexical_cast<std::string>(currentIndex_)); selectionChanged_ = false; } if (!currentlyConnected_ && (activated_.isConnected() || sactivated_.isConnected())) { currentlyConnected_ = true; changed().connect(this, &WComboBox::propagateChange); } WFormWidget::updateDom(element, all); }
DomElement *WPaintedWidget::createDomElement(WApplication *app) { createPainter(); DomElement *result = DomElement::createNew(domElementType()); setId(result, app); DomElement *wrap = result; if (width().isAuto() && height().isAuto()) { result->setProperty(PropertyStylePosition, "relative"); wrap = DomElement::createNew(DomElement_DIV); wrap->setProperty(PropertyStylePosition, "absolute"); wrap->setProperty(PropertyStyleLeft, "0"); wrap->setProperty(PropertyStyleRight, "0"); } DomElement *canvas = DomElement::createNew(DomElement_DIV); if (!app->environment().agentIsSpiderBot()) canvas->setId('p' + id()); WPaintDevice *device = painter_->getPaintDevice(false); //handle the widget correctly when inline and using VML if (painter_->renderType() == WWidgetPainter::InlineVml && isInline()) { result->setProperty(PropertyStyle, "zoom: 1;"); canvas->setProperty(PropertyStyleDisplay, "inline"); canvas->setProperty(PropertyStyle, "zoom: 1;"); } if (renderWidth_ != 0 && renderHeight_ != 0) { paintEvent(device); #ifdef WT_TARGET_JAVA if (device->painter()) device->painter()->end(); #endif // WT_TARGET_JAVA } painter_->createContents(canvas, device); needRepaint_ = false; wrap->addChild(canvas); if (wrap != result) result->addChild(wrap); updateDom(*result, true); return result; }
void WGroupBox::updateDom(DomElement& element, bool all) { if (titleChanged_) { DomElement *legend = DomElement::getForUpdate(formName() + "l", DomElement::LEGEND); legend->setProperty(Wt::PropertyInnerHTML, toUTF8(escapeText(title_.value()))); titleChanged_ = false; } WContainerWidget::updateDom(element, all); renderOk(); }
void WFileUpload::updateDom(DomElement& element, bool all) { bool containsProgress = progressBar_ && progressBar_->parent() == this; DomElement *inputE = 0; if (element.type() != DomElement_INPUT && flags_.test(BIT_DO_UPLOAD) && containsProgress && !progressBar_->isRendered()) element.addChild(progressBar_->createSDomElement(WApplication::instance())); // upload() + disable() does not work. -- fix after this release, // change order of javaScript_ and properties rendering in DomElement if (fileUploadTarget_ && flags_.test(BIT_DO_UPLOAD)) { element.callMethod("submit()"); flags_.reset(BIT_DO_UPLOAD); if (containsProgress) { inputE = DomElement::getForUpdate("in" + id(), DomElement_INPUT); inputE->setProperty(PropertyStyleDisplay, "none"); } } if (flags_.test(BIT_ENABLED_CHANGED)) { if (!inputE) inputE = DomElement::getForUpdate("in" + id(), DomElement_INPUT); if (isDisabled()) inputE->callMethod("disabled=true"); else inputE->callMethod("disabled=false"); flags_.reset(BIT_ENABLED_CHANGED); } EventSignal<> *change = voidEventSignal(CHANGE_SIGNAL, false); if (change && change->needsUpdate(all)) { if (!inputE) inputE = DomElement::getForUpdate("in" + id(), DomElement_INPUT); updateSignalConnection(*inputE, *change, "change", all); } if (inputE) element.addChild(inputE); WWebWidget::updateDom(element, all); }
void WImage::updateDom(DomElement& element, bool all) { if (imageRefChanged_ || all) { element.setProperty(Wt::PropertySrc, imageRef_); imageRefChanged_ = false; } if (altTextChanged_ || all) { //element.setAttribute("alt", altText_.value()); altTextChanged_ = false; } WInteractWidget::updateDom(element, all); renderOk(); }
void WTemplate::updateDom(DomElement& element, bool all) { if (changed_ || all) { std::set<WWidget *> previouslyRendered; std::vector<WWidget *> newlyRendered; for (WidgetMap::const_iterator i = widgets_.begin(); i != widgets_.end(); ++i) { WWidget *w = i->second; if (w->isRendered() && w->webWidget()->domCanBeSaved()) { previouslyRendered.insert(w); } } bool saveWidgets = element.mode() == DomElement::ModeUpdate; previouslyRendered_ = saveWidgets ? &previouslyRendered : 0; newlyRendered_ = &newlyRendered; std::stringstream html; renderTemplate(html); previouslyRendered_ = 0; newlyRendered_ = 0; for (unsigned i = 0; i < newlyRendered.size(); ++i) { WWidget *w = newlyRendered[i]; if (previouslyRendered.find(w) != previouslyRendered.end()) { if (saveWidgets) element.saveChild(w->id()); previouslyRendered.erase(w); } } element.setProperty(Wt::PropertyInnerHTML, html.str()); changed_ = false; for (std::set<WWidget *>::const_iterator i = previouslyRendered.begin(); i != previouslyRendered.end(); ++i) { WWidget *w = *i; w->webWidget()->setRendered(false); } } WInteractWidget::updateDom(element, all); }
DomElement *WGroupBox::createDomElement() { DomElement *result = DomElement::createNew(DomElement::FIELDSET); result->setId(this); DomElement *legend = DomElement::createNew(DomElement::LEGEND); legend->setId(formName() + "l"); legend->setProperty(Wt::PropertyInnerHTML, toUTF8(escapeText(title_.value()))); result->addChild(legend); createDomChildren(*result); updateDom(*result, true); return result; }
void WGroupBox::updateDom(DomElement& element, bool all) { if (all || titleChanged_) { DomElement *legend; if (all) { legend = DomElement::createNew(DomElement_LEGEND); legend->setId(id() + "l"); } else legend = DomElement::getForUpdate(id() + "l", DomElement_LEGEND); legend->setProperty(Wt::PropertyInnerHTML, escapeText(title_).toUTF8()); element.addChild(legend); titleChanged_ = false; } WContainerWidget::updateDom(element, all); }
void WPushButton::getDomChanges(std::vector<DomElement *>& result, WApplication *app) { if (flags_.test(BIT_ICON_CHANGED) && flags_.test(BIT_ICON_RENDERED)) { DomElement *image = DomElement::getForUpdate("im" + formName(), DomElement_IMG); if (icon_.isNull()) { image->removeFromParent(); flags_.reset(BIT_ICON_RENDERED); } else image->setProperty(PropertySrc, icon_.resolveUrl(app)); result.push_back(image); flags_.reset(BIT_ICON_CHANGED); } WFormWidget::getDomChanges(result, app); }