123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- #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
|