aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/skin/xmlobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/skin/xmlobject.h')
-rw-r--r--Src/Wasabi/api/skin/xmlobject.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/xmlobject.h b/Src/Wasabi/api/skin/xmlobject.h
new file mode 100644
index 00000000..1a45797f
--- /dev/null
+++ b/Src/Wasabi/api/skin/xmlobject.h
@@ -0,0 +1,132 @@
+#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 &param, 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