DomElement *WFileUpload::createDomElement() { if (methodIframe_) { DomElement *form = DomElement::createNew(DomElement::FORM); form->setId(this, true); form->setAttribute("method", "post"); form->setAttribute("action", generateUrl()); form->setAttribute("enctype", "multipart/form-data"); form->setAttribute("style", "margin:0;padding:0;display:inline"); DomElement *input = DomElement::createNew(DomElement::INPUT); input->setAttribute("type", "file"); input->setAttribute("name", "data"); input->setAttribute("size", boost::lexical_cast<std::string>(textSize_)); input->setId("in" + formName()); updateSignalConnection(*input, changed, "change", true); form->addChild(input); updateDom(*form, true); return form; } else { DomElement *result = DomElement::createNew(DomElement::INPUT); result->setAttribute("type", "file"); result->setAttribute("size", boost::lexical_cast<std::string>(textSize_)); result->setId(this, true); updateSignalConnection(*result, changed, "change", true); updateDom(*result, true); return result; } }
void WTextEdit::getDomChanges(std::vector<DomElement *>& result, WApplication *app) { /* * We apply changes directly to the table element, except of the textarea * contents. Therefore we first update the TABLE element, then collect * the contentChange to the TEXTAREA element, but reverse the order in * which they get applied since the load() statement expects the contents * to be set in the textarea first. */ /* * Problem! ed.render() returns before the element is actually rendered, * and therefore, the _tbl element may not yet be available. * * This causes fail when a text edit is progressively enhanced. The solution * is to listen for the onInit() event -> we should be able to add a * wrapping ... .onInit(function(ed) { .... }) around the changes */ DomElement *e = DomElement::getForUpdate(formName() + "_tbl", DomElement_TABLE); updateDom(*e, false); WTextArea::getDomChanges(result, app); result.push_back(e); }
void WTable::printDebug() { std::cerr << "Table: " << formName() << " " << numRows() << "x" << numColumns() << std::endl; for (int i = 0; i < numRows(); ++i) { for (int j = 0; j < numColumns(); ++j) { std::cerr << "(" << i << "," << j << "): " << itemAt(i, j).cell << std::endl; } } }
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 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(); }
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 operator()(Mint& interp, bool is_active, const MintArgList& args) { MintString ret; const MintString& s = args[1].getValue(); std::string fn(s.begin(), s.end()); #ifdef _VERBOSE_DEBUG std::cerr << "llPrim: Loading library file " << fn << std::endl; #endif int fd = open(fn.c_str(), O_RDONLY | FILE_MODE); if (fd >= 0) { std::vector<mintchar_t> buf; off_t file_off = lseek(fd, 0, SEEK_END); if (file_off != -1) { lseek(fd, 0, SEEK_SET); mintcount_t file_len = static_cast<mintcount_t>(file_off); buf.resize(file_len); if (read(fd, reinterpret_cast<char *>(&(buf[0])), file_off) == file_off) { const mintchar_t *p = &(buf[0]); while (file_len > sizeof(LibHdr)) { const LibHdr *phdr = reinterpret_cast<const LibHdr *>(p); p += sizeof(LibHdr) / sizeof(mintchar_t); file_len -= sizeof(LibHdr); mintcount_t name_size = phdr->name_length; mintcount_t data_size = phdr->data_length; if (file_len >= (name_size + data_size)) { MintString formName(p, name_size); MintString formValue(p + name_size, data_size); p += (name_size + data_size) / sizeof(mintchar_t); file_len -= name_size + data_size; interp.setFormValue(formName, formValue); interp.setFormPos(formName, phdr->form_pos); } // if } // while } // if } // if close(fd); } else { #ifdef _VERBOSE_DEBUG std::cerr << "llPrim: Error opening file " << fn << ": " << strerror(errno) << std::endl; interp.print(); #endif ret = strerror(errno); } // else interp.returnString(is_active, ret); } // operator()
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); }
void WAbstractToggleButton::getFormObjects(FormObjectsMap& formObjects) { formObjects[formName()] = this; }
QString NewFormWidget::itemToTemplate(const QTreeWidgetItem *item, QString *errorMessage) const { const QSize size = templateSize(); // file name or string contents? const QVariant templateFileName = item->data(0, TemplateNameRole); if (templateFileName.type() == QVariant::String) { const QString fileName = templateFileName.toString(); // No fixed size: just open. if (size.isNull()) return readAll(fileName, errorMessage); // try to find a file matching the size, like "../640x480/xx.ui" const QFileInfo fiBase(fileName); QString sizeFileName; QTextStream(&sizeFileName) << fiBase.path() << QDir::separator() << size.width() << QLatin1Char('x') << size.height() << QDir::separator() << fiBase.fileName(); if (QFileInfo(sizeFileName).isFile()) return readAll(sizeFileName, errorMessage); // Nothing found, scale via DOM/temporary file QString contents = readAll(fileName, errorMessage); if (!contents.isEmpty()) contents = qdesigner_internal::WidgetDataBase::scaleFormTemplate(contents, size, false); return contents; } // Content. const QString className = item->data(0, ClassNameRole).toString(); QString contents = qdesigner_internal::WidgetDataBase::formTemplate(m_core, className, formName(className)); if (!size.isNull()) contents = qdesigner_internal::WidgetDataBase::scaleFormTemplate(contents, size, false); return contents; }
QPixmap NewFormWidget::formPreviewPixmap(const QTreeWidgetItem *item) { // Cache pixmaps per item/device profile const ItemPixmapCacheKey cacheKey(item, profileComboIndex()); ItemPixmapCache::iterator it = m_itemPixmapCache.find(cacheKey); if (it == m_itemPixmapCache.end()) { // file or string? const QVariant fileName = item->data(0, TemplateNameRole); QPixmap rc; if (fileName.type() == QVariant::String) { rc = formPreviewPixmap(fileName.toString()); } else { const QVariant classNameV = item->data(0, ClassNameRole); Q_ASSERT(classNameV.type() == QVariant::String); const QString className = classNameV.toString(); QByteArray data = qdesigner_internal::WidgetDataBase::formTemplate(m_core, className, formName(className)).toUtf8(); QBuffer buffer(&data); buffer.open(QIODevice::ReadOnly); rc = formPreviewPixmap(buffer); } if (rc.isNull()) // Retry invalid ones return rc; it = m_itemPixmapCache.insert(cacheKey, rc); } return it.value(); }
void WPushButton::updateDom(DomElement& element, bool all) { if (all) { element.setAttribute("type", "button"); element.setProperty(PropertyClass, "Wt-btn"); } if (flags_.test(BIT_ICON_CHANGED) || (all && !icon_.isNull())) { DomElement *image = DomElement::createNew(DomElement_IMG); image->setProperty(PropertySrc, icon_.url()); image->setId("im" + formName()); element.insertChildAt(image, 0); flags_.set(BIT_ICON_RENDERED); } if (flags_.test(BIT_TEXT_CHANGED) || all) { element .setProperty(Wt::PropertyInnerHTML, text_.literal() ? escapeText(text_, true).toUTF8() : text_.toUTF8()); flags_.reset(BIT_TEXT_CHANGED); } if (flags_.test(BIT_LINK_CHANGED) || (all && !link_.isNull())) { if (!link_.isNull()) { WApplication *app = WApplication::instance(); if (!redirectJS_) { redirectJS_ = new JSlot(); clicked().connect(*redirectJS_); if (!app->environment().ajax()) clicked().connect(this, &WPushButton::doRedirect); } if (link_.type() == WLink::InternalPath) redirectJS_->setJavaScript ("function(){" WT_CLASS ".history.navigate(" + jsStringLiteral(link_.internalPath()) + ",true);" "}"); else if (linkTarget_ == TargetNewWindow) redirectJS_->setJavaScript ("function(){" "window.open(" + jsStringLiteral(link_.url()) + ");" "}"); else redirectJS_->setJavaScript ("function(){" "window.location=" + jsStringLiteral(link_.url()) + ";" "}"); clicked().senderRepaint(); // XXX only for Java port necessary } else { delete redirectJS_; redirectJS_ = 0; } } WFormWidget::updateDom(element, all); }