#ifndef PRESENTER_H #define PRESENTER_H #include #include #include #include #include "view.h" #include "paramChecker.h" #include "xmlObjectLoader.h" class Presenter : public virtual IntrusivePtrBase { public: Presenter(); virtual ~Presenter() = 0; virtual void declareNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const = 0; virtual void pushSub(const Glib::ustring & name) const; virtual void pushSub(const Glib::ustring & name, const Glib::ustring & ns) const = 0; virtual void setNamespace(const Glib::ustring & prefix, const Glib::ustring & ns) const = 0; virtual void addAttr(const Glib::ustring & name, const VariableType & value) const; virtual void addAttr(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const; virtual void addField(const Glib::ustring & name, const VariableType & value) const; virtual void addField(const Glib::ustring & name, const Glib::ustring & ns, const VariableType & value) const; virtual void addText(const VariableType & value) const = 0; virtual void popSub() const = 0; }; class ContentPresenter : public Presenter { public: ContentPresenter(const Glib::ustring & contentType); const Glib::ustring contentType; }; typedef boost::intrusive_ptr PresenterCPtr; typedef boost::intrusive_ptr PresenterPtr; /// Base class to implement presenter modules class PresenterLoader : public ComponentLoader { public: virtual PresenterPtr createFrom(const xmlpp::Element * e) const = 0; }; /// Helper implemention for specific presenters template class PresenterLoaderImpl : public PresenterLoader { public: virtual PresenterPtr createFrom(const xmlpp::Element * e) const { return new PresenterType(e); } }; #endif