#ifndef __XMLOBJECT_H #define __XMLOBJECT_H #include #include #include #include #include #define XML_ATTRIBUTE_IMPLIED 0 #define XML_ATTRIBUTE_REQUIRED 1 class XmlObject : public Dispatchable { public: int setXmlParam(const wchar_t *name, const wchar_t *strvalue); const wchar_t *getXmlParamValue(int n); int getXmlParam(const wchar_t *paramname); enum { SETXMLPARAM=10, GETXMLPARAMVALUE=40, GETXMLPARAM=50, }; }; inline int XmlObject::setXmlParam(const wchar_t *name, const wchar_t *strvalue) { return _call(SETXMLPARAM, 0, name, strvalue); } inline const wchar_t *XmlObject::getXmlParamValue(int n) { return _call(GETXMLPARAMVALUE, (const wchar_t *)0, n); } inline int XmlObject::getXmlParam(const wchar_t *paramname) { return _call(GETXMLPARAM, 0, paramname); } class XmlObjectParam { public: XmlObjectParam(int xmlhandle, wchar_t *xmlattribute, int xmlattributeid); virtual ~XmlObjectParam() {} const wchar_t *getXmlAttribute() { return xmlattributename; } int getXmlAttributeId() { return attributeid; } int getXmlHandle() { return handle; } void setLastValue(const wchar_t *val) { lastvalue = val; } const wchar_t *getLastValue() { return lastvalue; } private: const wchar_t *xmlattributename; StringW lastvalue; int attributeid; int handle; }; class XmlObjectParamSort { public: static inline int compareItem(XmlObjectParam *p1, XmlObjectParam*p2) { return wcscmp(p1->getXmlAttribute(), p2->getXmlAttribute()); } static inline int compareAttrib(const wchar_t *attrib, XmlObjectParam *item) { return WCSICMP(attrib, item->getXmlAttribute()); } }; struct XMLParamPair { int id; wchar_t name[64]; }; class XmlObjectI : public XmlObject { public: XmlObjectI(); virtual ~XmlObjectI(); virtual int setXmlParam(const wchar_t *name, const wchar_t *strvalue); // receives from system virtual int setXmlParamById(int xmlhandle, int xmlattributeid, const wchar_t *name, const wchar_t *strvalue); // distributes to inheritors virtual const wchar_t *getXmlParamValue(int n); virtual int getXmlParam(const wchar_t *paramname); const wchar_t *getXmlParamByName(const wchar_t *paramname); void addParam(int xmlhandle, XMLParamPair ¶m, int unused=0); //void addXmlParam(int xmlhandle, const wchar_t *xmlattribute, int xmlattributeid); protected: virtual int onUnknownXmlParam(const wchar_t *param, const wchar_t *value); int newXmlHandle(); void hintNumberOfParams(int xmlhandle, int params); private: XmlObjectParam *enumParam(int n) { return params[n]; } PtrListInsertSorted params; int handlepos; protected: RECVS_DISPATCH; }; #endif