133 lines
2.7 KiB
C
133 lines
2.7 KiB
C
|
#ifndef __XMLOBJECT_H
|
||
|
#define __XMLOBJECT_H
|
||
|
|
||
|
#include <bfc/nsguid.h>
|
||
|
#include <bfc/ptrlist.h>
|
||
|
#include <bfc/dispatch.h>
|
||
|
#include <bfc/string/StringW.h>
|
||
|
#include <bfc/wasabi_std.h>
|
||
|
|
||
|
#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<XmlObjectParam, XmlObjectParamSort> params;
|
||
|
int handlepos;
|
||
|
|
||
|
protected:
|
||
|
|
||
|
RECVS_DISPATCH;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif
|