It turned out to be that I had two setID's, time for new glasses, but that is now a reported bug by Alex: http://redmine.webtoolkit.eu/issues/3531
Thanks On Fri, 2014-08-01 at 13:12 +0200, Koen Deforche wrote: > Hey Jeffrey, > > > > 2014-07-27 22:54 GMT+02:00 Jeffrey Scott Flesher Gmail > <jeffrey.scott.fles...@gmail.com>: > > I have a temple like this: > > <?xml version="1.0" encoding="UTF-8" ?> > <messages> > <message id="x-template"> > <wt id='audio1' class='audio' type='audio/mpeg' > width='640' height='360' src='/resources/audio.mp3'></wt> > ${audio1} > <wt id='audio2' class='audio' type='audio/mpeg' > width='640' height='360' src='/resources/audio.mp3'></wt> > ${audio2} > </message> > </messages> > > > > You can do this if you change your template like this: > > > ${widget:audio id='audio1' type='audio/mpeg' width='640' > height='360' src='/resources/audio.mp3'} > ${widget:audio id='audio2' type='audio/mpeg' width='640' > height='360' src='/resources/audio.mp3'} > > > > This would then use a 'widget' function that you add to the template, > and which is implemented below: > > > class WidgetFunction > { > public: > typedef boost::function<Wt::WWidget *(const > std::vector<Wt::WString>&)> > InstatiateWidget; > > > bool operator()(Wt::WTemplate *t, const std::vector<Wt::WString>& > args, > std::ostream& result); > > > void registerType(const std::string& name, InstatiateWidget > instatiate); > > > private: > typedef std::map<std::string, InstatiateWidget> RegistryMap; > RegistryMap registeredTypes_; > > > static std::string getArg(const std::string& name, > const std::vector<Wt::WString>& args); > }; > > > bool WidgetFunction::operator()(Wt::WTemplate *t, > const std::vector<Wt::WString>& args, > std::ostream& result) > { > std::string name = args[0].toUTF8(); > > > RegistryMap::const_iterator i = registeredTypes_.find(name); > if (i == registeredTypes_.end()) { > result << "?? WidgetFunction: no type registered: " << name << > "??"; > } else { > std::string id = getArg("id", args); > > > Wt::WWidget *w = 0; > if (!id.empty()) > w = t->resolveWidget(id); > > > if (!w) { > w = i->second(args); > > > std::string cl = getArg("class", args); > if (!cl.empty()) > w->addStyleClass(cl); > } > > > if (!w) { > result << "?? WidgetFunction: could not create instance of type > " > << name << "??"; > } else { > if (id.empty()) > id = w->id(); > } > > > t->bindWidget(id, w); > > > Wt::WString text = Wt::WString::fromUTF8("${" + id + "}"); > t->renderTemplateText(result, text); > } > > > return true; > } > > > void WidgetFunction::registerType(const std::string& name, > InstatiateWidget instantiate) > { > registeredTypes_[name] = instantiate; > } > > > std::string WidgetFunction::getArg(const std::string& name, > const std::vector<Wt::WString>& args) > { > for (unsigned i = 0; i < args.size(); ++i) { > std::string s = args[i].toUTF8(); > if (boost::starts_with(s, name + "=")) > return s.substr(name.length()+1); > } > > > return std::string(); > } > > > To register a new 'type', for example 'line-edit' you can then use: > > > Wt::WWidget *createLineEdit(const std::vector<Wt::WString>& args) > { > return new Wt::WLineEdit(); // could also process the arguments... > } > > > WidgetFunction widgetFunction; > widgetFunction.registerType("line-edit", createLineEdit); > > > Using it, for example: > > > Wt::WTemplate *t = new Wt::WTemplate("${widget:line-edit}"); > > t->addFunction("widget", widgetFunction); > > > Regards, > koen > > ------------------------------------------------------------------------------ > Want fast and easy access to all the code in your enterprise? Index and > search up to 200,000 lines of code with a free copy of Black Duck > Code Sight - the same software that powers the world's largest code > search on Ohloh, the Black Duck Open Hub! Try it now. > http://p.sf.net/sfu/bds > _______________________________________________ witty-interest mailing list > witty-interest@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/witty-interest
------------------------------------------------------------------------------
_______________________________________________ witty-interest mailing list witty-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/witty-interest