diff options
Diffstat (limited to 'Src/Wasabi/api/skin/skinparse.h')
-rw-r--r-- | Src/Wasabi/api/skin/skinparse.h | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/skinparse.h b/Src/Wasabi/api/skin/skinparse.h new file mode 100644 index 00000000..b232e92d --- /dev/null +++ b/Src/Wasabi/api/skin/skinparse.h @@ -0,0 +1,337 @@ +#ifndef __SKINPARSER_H +#define __SKINPARSER_H + +#include <bfc/wasabi_std.h> +#include <api/wnd/basewnd.h> +#include <api/service/svccache.h> + +#ifdef WASABI_COMPILE_WNDMGR +#include <api/wndmgr/layout.h> +#include <api/wndmgr/container.h> +#else +class Container; +class Layout; +#endif + +#ifdef WASABI_COMPILE_FONTS +#include <api/font/skinfont.h> +#endif + +#ifdef WASABI_COMPILE_XMLPARSER +#include <api/xml/xmlreader.h> +#else +class skin_xmlreaderparams; +#endif + +#ifdef WASABI_COMPILE_SKIN +#include <api/skin/group.h> +#else +class Group; +class SkinItem; +#endif + +class XmlObject; + +enum { + PARSETYPE_RESIZE=0, + PARSETYPE_COLOR, + PARSETYPE_COLORALPHA, + PARSETYPE_REGIONOP, + PARSETYPE_INTERNALACTION, + PARSETYPE_GROUPINHERITANCE, +} ; + +enum { + XML_TAG_CONTAINER, + XML_TAG_GROUP, + XML_TAG_CFGGROUP, + XML_TAG_GROUPDEF, + XML_TAG_LAYOUT, + XML_TAG_ACCELERATORS, + XML_TAG_ACCELERATOR, + XML_TAG_ELEMENTS, + XML_TAG_STRINGTABLE, + XML_TAG_STRINGENTRY, + XML_TAG_SCRIPTS, + XML_TAG_SNAPPOINT, + XML_TAG_TRUETYPEFONT, + XML_TAG_BITMAPFONT, + XML_TAG_SCRIPT, + XML_TAG_UNKNOWN, +}; + +#define GROUP_INHERIT_NOTHING 0 +#define GROUP_INHERIT_XUIOBJECTS 1 +#define GROUP_INHERIT_SCRIPTS 2 +#define GROUP_INHERIT_PARAMS 4 +#define GROUP_INHERIT_ALL GROUP_INHERIT_XUIOBJECTS | GROUP_INHERIT_SCRIPTS | GROUP_INHERIT_PARAMS +#define GROUP_INHERIT_ALLCONTENT GROUP_INHERIT_XUIOBJECTS | GROUP_INHERIT_SCRIPTS + +#define GROUP_GROUP 0 +#define GROUP_CFGGROUP 1 + +#ifdef WASABI_COMPILE_WNDMGR +#define GROUP_LAYOUTGROUP 2 +#endif + +enum { + ACTION_NONE, + ACTION_UNIMPLEMENTED=0x1000, + ACTION_MINIMIZE, + ACTION_MAXIMIZE, + ACTION_CLOSE, + ACTION_ABOUT, + ACTION_SWITCH, + ACTION_TOGGLE, + ACTION_SYSMENU, + ACTION_CONTROLMENU, + ACTION_REPORT_BUGS, + ACTION_MB_BACK, //FG + ACTION_MB_FORWARD, //FG + ACTION_MB_URL, //FG + ACTION_MB_STOP, //FG + ACTION_MB_REFRESH, //FG + ACTION_MB_HOME, //FG + ACTION_CB_NEXT, //FG + ACTION_CB_PREV, //FG + ACTION_CB_NEXTPAGE, + ACTION_CB_PREVPAGE, + ACTION_SCALE_50, //FG + ACTION_SCALE_75, //FG + ACTION_SCALE_100, //FG + ACTION_SCALE_125, //FG + ACTION_SCALE_150, //FG + ACTION_SCALE_200, //FG + ACTION_SCALE_400, //BU :) + ACTION_RELOAD_SKIN, + ACTION_TEXT_LARGER, + ACTION_TEXT_SMALLER, + ACTION_PREFERENCES, + ACTION_REGISTRY, + ACTION_ALPHA_10, //FG + ACTION_ALPHA_20, //FG + ACTION_ALPHA_30, //FG + ACTION_ALPHA_40, //FG + ACTION_ALPHA_50, //FG + ACTION_ALPHA_60, //FG + ACTION_ALPHA_70, //FG + ACTION_ALPHA_80, //FG + ACTION_ALPHA_90, //FG + ACTION_ALPHA_100, //FG + ACTION_AOT, //BU always-on-top for this window only + ACTION_TOGGLE_ALWAYS_ON_TOP, + ACTION_MENU, + ACTION_VIEW_FILE_INFO, + ACTION_ADD_BOOKMARK, + ACTION_EDIT_BOOKMARKS, + ACTION_ENDMODAL, + ACTION_ENFORCEMINMAX, + ACTION_DOUBLESIZE, + ACTION_CLOSE_WINDOW, + ACTION_WINDOWMENU, + ACTION_EQ_TOGGLE, + ACTION_AUTOOPACIFY, +}; + +enum { + DISPLAY_NONE, + DISPLAY_SONGNAME, + DISPLAY_SONGINFO, + DISPLAY_SONGTITLE, //BU + DISPLAY_SONGARTIST, + DISPLAY_SONGALBUM, + DISPLAY_SONGLENGTH, + DISPLAY_TIME, + DISPLAY_CB, //FG + DISPLAY_SONGBITRATE, + DISPLAY_SONGSAMPLERATE, + DISPLAY_SERVICE, + DISPLAY_SONGINFO_TRANSLATED, +}; + +enum { + ORIENTATION_HORIZONTAL, + ORIENTATION_VERTICAL +}; + +enum { + ALIGN_TOP, + ALIGN_BOTTOM, +}; + +typedef struct +{ + const wchar_t *tagname; + int id; + int needclosetag; +} xml_tag; + +class XmlTagComp +{ +public: + static int compareItem(void *p1, void *p2) + { + return WCSICMP(((xml_tag *)p1)->tagname, ((xml_tag *)p2)->tagname); + } + static int compareAttrib(const wchar_t *attrib, void *item) + { + return WCSICMP(attrib, ((xml_tag *)item)->tagname); + } +}; + +typedef struct { + int staticloading; + int recording_container; + int recording_groupdef; + Group *curGroup; + int inElements; + int inAccelerators; + int inStringTable; + int inGroupDef; + int inGroup; + StringW includepath; + skin_xmlreaderparams *groupparams; + int instantiatinggroup; + int scriptid; + int allowscripts; +#ifdef WASABI_COMPILE_WNDMGR + Container *curContainer; + Layout *curLayout; + int inContainer; + int inLayout; + int transcientcontainer; +#endif +} parser_status; + +class SkinParser { + +public: + static void initialize(); + static void shutdown(); + + static void setInitialFocus(); + + static GuiObject *newDynamicGroup(const wchar_t *groupid, int grouptype=GROUP_GROUP, SkinItem *item=NULL, int specific_scriptid=-1, int scripts_enabled=1); + static void parseGroup(SkinItem *groupitem, PtrList<ifc_xmlreaderparams> *ancestor_param_list, int params_only=0, int content_flags=GROUP_INHERIT_ALL); + static void loadScriptXml(const wchar_t *filename, int scriptid); + + static void xmlReaderCallback(int start, const wchar_t *xmltag, skin_xmlreaderparams *params); + static void onXmlStartElement(const wchar_t *name, skin_xmlreaderparams *params); + static void onXmlEndElement(const wchar_t *name); + + static void _onXmlStartElement(int object_type, const wchar_t *object_name, ifc_xmlreaderparams *params); + static void _onXmlEndElement(int object_type, const wchar_t *object_name); + +#ifdef WASABI_COMPILE_WNDMGR + static GUID *getComponentGuid(const wchar_t *id); + static int getComponentGuid(GUID *g, const wchar_t *p); +#endif + +#ifdef WASABI_COMPILE_WNDMGR + static int loadContainers(const wchar_t *skin); // todo: change name + static void startupContainers(int scriptid=-1); // todo: change name + static Container *loadContainerForWindowHolder(const wchar_t *groupid=NULL, GUID g=INVALID_GUID, int initit=1, int transcient=0, const wchar_t *containerid=NULL/*any*/, int container_flag=0/*dontcare*/); + static Container *newDynamicContainer(const wchar_t *containerid, int transcient=0); + static Container *getContainer(const wchar_t *name); + static Layout *getLayout(const wchar_t *container_layout_pair); + static Container *script_getContainer(const wchar_t *name); + static Container *instantiateDynamicContainer(SkinItem *containeritem, int initit=1); + static void componentToggled(GUID *g, int visible); + static void sendNotifyToAllContainers(int notifymsg, int param1=0, int param2=0); + static void toggleContainer(const wchar_t *); + static void toggleContainer(int); + static void showContainer(int num, int show); + static void showContainer(const wchar_t *, int show); + static PtrList<Container> containers; + //static PtrList<Container> script_containers; + static int getNumContainers(); + static Container *enumContainer(int n); + static int script_getNumContainers(); + static Container *script_enumContainer(int id); + static int isContainer(Container *c); + static int verifyContainer(Container *); + static void unloadAllContainers(); + static const wchar_t *getCurrentContainerId(); +#endif + + static void cleanupScript(int scriptid); + static void cleanUp(); +#ifdef WA3COMPATIBILITY + static void emmergencyReloadDefaultSkin(); +#endif + static void initGuiObject(GuiObject *o, Group *pgroup); + static void initXmlObject(XmlObject *x, ifc_xmlreaderparams *params, int no_id=0); + static void initLayout(Layout *l, Container *c); + + static int getAction(const wchar_t *action, const wchar_t **name=NULL); + static int getDisplay(const wchar_t *display); + static int getAlign(const wchar_t *align); + static int getOrientation(const wchar_t *orient); + static int parse(const wchar_t *str, const wchar_t *how); + static int parseResize(const wchar_t *r); + static int parseRegionOp(const wchar_t *r); + static int parseGroupInheritance(const wchar_t *str); + static ARGB32 parseColor(const wchar_t *color, int *error=NULL); // 1 for bitmap colors please + static ARGB32 parseColorAlpha(const wchar_t *color); // 1 for bitmap colors please + static const wchar_t *getXmlRootPath(); + static void pushParserState(); + static void popParserState(); + +#ifdef WASABI_COMPILE_WNDMGR + static void noCenterSkin() { centerskin=0; } +#endif + static const wchar_t *getCurrentGroupId(); + static void destroyGuiObject(GuiObject *o); + static void fillGroup(Group *group, const wchar_t *groupid, SkinItem *specific_item=NULL, int params_only=0, int no_params=0, int scripts_enabled=1); + + static int getSkinRect(RECT *r, ifc_window *exclude=NULL); + static void centerSkin(); + static void focusFirst(); + + static GuiObject *xui_new(const wchar_t *classname); + static void xui_delete(GuiObject *o); + + static double getSkinVersion(); + + static void setAllLayoutsRatio(double ra); + static void setAllLayoutsTransparency(int v); +// static void setAllLayoutsAutoOpacify(int v, int force=0); +// static void setAllLayoutsOverrideAlpha(int oa); + static Layout *getMainLayout(); + +private: + static GuiObject *createExternalGuiObject(const wchar_t *object_name, XmlObject **x, ifc_xmlreaderparams *params); + + static int getHex(const wchar_t *p,int size=-1); + + // xml parser handlers + static Group *curGroup, *lastCreatedGroup; + static int inScripts; + static int inElements, inAccelerators, inStringTable; + static int inGroupDef, inGroup; + static StringW includepath; + static int recording_container; + static int recording_groupdef; + static int staticloading; + static PtrList<parser_status> statusstack; + static int instantiatinggroup; + static int scriptId; + static int allowscripts; + static skin_xmlreaderparams *groupparams; + +#ifdef WASABI_COMPILE_WNDMGR + static Container *curContainer, *lastCreatedContainer; + static Layout *curLayout; + static int centerskin; + static int transcientcontainer; + static int inContainer; + static int inLayout; +#endif + static double skinversion; + static int loading_main_skinfile; + + static PtrListQuickSorted<xml_tag,XmlTagComp> quickxmltaglist; + static SvcCacheT<svc_xuiObject> *xuiCache; +}; + +#endif
\ No newline at end of file |