This recipe discusses the issues in deciding whether to reuse existing renderers or to introduce a new one. Since this is not a question where you can decide on hard facts it also involves taste and is ultimately based on good judgement.
In the following we try to outline the basic line of thoughts you should consider when you have to decide about a new class.
So based on your knowledge, go through the list of the existing renderers and try them out. Maybe you don't know all that deep or you can combine several toghether to achieve the functionality and presentation you wish.
Caveat: With HTML-Templates you can virtually do everything needed, but it is not always the most performant solution. HTML-Templates are great in defining layouts (fixed tables) or in providing some snippets with dynamic data.
Beware of flag setting mania, too much conditional rendering is as bad as too much conditional code. Try to use polymorphism instead. Thats why the page configurations have some sort of inheritance.
There are several results possible regarding your first step.
HTML-Template for Layout Image Buttons, Anchors and fields with dynamic content
Dynamic Table with HTML-Templates and dynamic content Most templates contain conditional renderers triggered by flags that must be maintained by your code.
[[#wd DisplayAnythingRenderer { /AnythingInfo { "class MyNewRenderer : public Renderer {" "public:" " MyNewRenderer(const char *name);" " ~MyNewRenderer();" " " " virtual void RenderAll(ostream &reply, Context &c, const ROAnything &config);" "};" " " "//---- MyNewRenderer ----------------------------------------------------------------" " " "RegisterRenderer(MyNewRenderer);" " " "MyNewRenderer::MyNewRenderer(const char *name) : Renderer(name) { }" " " "MyNewRenderer::~MyNewRenderer() { }" " " "void MyNewRenderer::RenderAll(ostream &reply, Context &c, const ROAnything &config)" "{" " StartTrace(MyNewRenderer.RenderAll);" " // do some fancy stuff here" " ..." "}" } }]]