void WTemplate::resolveString(const std::string& varName, const std::vector<WString>& args, std::ostream& result) { /* * FIXME: have an extra result parameter which indicates whether the * widget is view-only. Better to do that in resolveValue() and * provide a utility method that converts a widget to XHTML ? */ StringMap::const_iterator i = strings_.find(varName); if (i != strings_.end()) result << i->second; else { WWidget *w = resolveWidget(varName); if (w) { w->setParentWidget(this); if (previouslyRendered_ && previouslyRendered_->find(w) != previouslyRendered_->end()) { result << "<span id=\"" << w->id() << "\"> </span>"; } else { applyArguments(w, args); w->htmlText(result); } if (newlyRendered_) newlyRendered_->push_back(w); } else handleUnresolvedVariable(varName, args, result); } }
void WTemplateFormView::updateModelField(WFormModel *model, WFormModel::Field field) { WWidget *edit = resolveWidget(field); WFormWidget *fedit = dynamic_cast<WFormWidget *>(edit); if (fedit) updateModelValue(model, field, fedit); else updateModelValue(model, field, edit); }
void WTemplateFormView::updateViewField(WFormModel *model, WFormModel::Field field) { const std::string var = field; if (model->isVisible(field)) { setCondition("if:" + var, true); WWidget *edit = resolveWidget(var); if (!edit) { edit = createFormWidget(field); if (!edit) { LOG_ERROR("updateViewField: createFormWidget('" << field << "') returned 0"); return; } bindWidget(var, edit); } WFormWidget *fedit = dynamic_cast<WFormWidget *>(edit); if (fedit) { if (fedit->validator() != model->validator(field) && model->validator(field)) fedit->setValidator(model->validator(field)); updateViewValue(model, field, fedit); } else updateViewValue(model, field, edit); WText *info = resolve<WText *>(var + "-info"); if (!info) { info = new WText(); bindWidget(var + "-info", info); } bindString(var + "-label", model->label(field)); const WValidator::Result& v = model->validation(field); info->setText(v.message()); indicateValidation(field, model->isValidated(field), info, edit, v); edit->setDisabled(model->isReadOnly(field)); } else { setCondition("if:" + var, false); bindEmpty(var); bindEmpty(var + "-info"); } }
void WTemplate::bindString(const std::string& varName, const WString& value, TextFormat textFormat) { WWidget *w = resolveWidget(varName); if (w) bindWidget(varName, 0); WString v = value; if (textFormat == XHTMLText && v.literal()) { if (!removeScript(v)) v = escapeText(v, true); } else if (textFormat == PlainText) v = escapeText(v, true); StringMap::const_iterator i = strings_.find(varName); if (i == strings_.end() || i->second != v.toUTF8()) { strings_[varName] = v.toUTF8(); changed_ = true; repaint(RepaintInnerHtml); } }