diff options
Diffstat (limited to 'Src/Wasabi/api/wac/wac.h')
-rw-r--r-- | Src/Wasabi/api/wac/wac.h | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wac/wac.h b/Src/Wasabi/api/wac/wac.h new file mode 100644 index 00000000..d19f5615 --- /dev/null +++ b/Src/Wasabi/api/wac/wac.h @@ -0,0 +1,266 @@ +#ifndef _WAC_H +#define _WAC_H + +#include <api/wac/compdb.h>//CUT +#include <bfc/ptrlist.h> +#include <api/config/items/cfgitemi.h> + +class ifc_canvas; // see canvas.h +class CfgItem; // see cfgitem +class CfgItemI; +class ComponentAPI; // see api.h +class api_window; // see rootwnd.h +class LoadableResource; // see below + +// this tells wasabi what version of the SDK we're compiled with +// this number will be incremented every once in a while. when it is, you'll +// have to recompile +// 5 -> build #471 +// 6 -> build rc1 +// 7 -> build 484 (rc5) +// 8 -> Winamp 5.23 (build 608) +// 9 -> Winamp 5.4 +#define WA_COMPONENT_VERSION 9 + +#define DB_DENY 0 +#define DB_ALLOW 1 + +// commands for onNotify below + +#define WAC_NOTIFY_NOP 0 + +#define WAC_NOTIFY_ACTIVATE 10 +#define WAC_NOTIFY_DEACTIVATE 20 + +#define WAC_NOTIFY_FULLSCREEN 30 +#define WAC_NOTIFY_RESTORE 40 + +#define WAC_NOTIFY_ENTERRESIZE 50 +#define WAC_NOTIFY_LEAVERESIZE 51 + +#define WAC_NOTIFY_SYSTRAYDONE 60 +#define WAC_NOTIFY_POPUPDONE 61 + +#define WAC_NOTIFY_BASETEXTUREWINDOW 78 + +#define WAC_NOTIFY_LOADEARLY 90 + +#define WAC_NOTIFY_MENU_COMMAND 10000 + +// this message is sent when service runlevel notifies are sent +// param1 = msg +// param2 = param1 +// param3 = param2 +#define WAC_NOTIFY_SERVICE_NOTIFY 100 + +#define WAC_NOTIFY_SKINUNLOADING 0xE300 // before unloading current skin +#define WAC_NOTIFY_SWITCHINGSKIN 0xE301 // right after unloading current skin and right before loading new one, getSkinName/Path points to new skin +#define WAC_NOTIFY_SKINELEMENTSLOADED 0xE302 // after skin elements definitions are loaded +#define WAC_NOTIFY_BEFORELOADINGSKINELEMENTS 0xE303 // before skin elements definitions are loaded, trap this to load your elements/groups and let people override them +#define WAC_NOTIFY_SKINGUILOADED 0xE304 // after skin GUI objects are loaded from xml +#define WAC_NOTIFY_SKINLOADED 0xE305 // after skin is fully loaded + +enum { + RSF_STATIC=0, + RSF_RELATIVETOWAC=1, + RSF_RELATIVETOTHEME=2, +}; + +// ----------- + +#include <bfc/dispatch.h> + +class NOVTABLE WaComponent : public Dispatchable { +public: + // provide your component name & other info here + const wchar_t *getName() { return _call(GETNAME, (wchar_t *)NULL); } + GUID getGUID() { return _call(GETGUID, INVALID_GUID); } + +#ifdef WASABINOMAINAPI + void registerServices(api_service *a) { _voidcall(REGISTERSERVICES2, a); } +#else + void registerServices(ComponentAPI *a) { _voidcall(REGISTERSERVICES, a); } +#endif + void deregisterServices() { _voidcall(DEREGISTERSERVICES); } + + void onCreate() { _voidcall(ONCREATE); } + void onDestroy() { _voidcall(ONDESTROY); } +//DEPRECATED: will go away + api_window *createWindow(int n, api_window *parentWnd) { return _call(CREATEWINDOW, (api_window*)NULL, n, parentWnd); } + + int onNotify(int cmd, int param1=0, int param2=0, int param3=0, int param4=0){ + return _call(ONNOTIFY, 0, cmd, param1, param2, param3, param4); + } + // everything after cmd is for future expansion + int onCommand(const wchar_t *cmd, int param1, int param2, void *ptr, int ptrlen){ + return _call(ONCOMMAND, 0, cmd, param1, param2, ptr, ptrlen); + } + + // gets the CfgItem * from WAComponentClient + CfgItem *getCfgInterface(int n) { + return _call(GETCFGINTERFACE, (CfgItem*)NULL, n); + } + + // saves the OSMODULEHANDLE of your WAC for you + void setOSModuleHandle(OSMODULEHANDLE modulehandle) { + _voidcall(SETOSMODULEHANDLE, modulehandle); + } + OSMODULEHANDLE getOSModuleHandle() { + return _call(GETOSMODULEHANDLE, (OSMODULEHANDLE)0); + } + // saves the path of your WAC for you + void setComponentPath(const wchar_t *path) { + _voidcall(SETPATH, path); + } + const wchar_t *getComponentPath() { + return _call(GETPATH, (const wchar_t *)NULL); + } + + enum { + GETNAME=100, + GETGUID=120, + REGISTERSERVICES=200, + REGISTERSERVICES2=210, + ONCREATE=400, + ONDESTROY=410, + CREATEWINDOW=420, + ONNOTIFY=500, + ONCOMMAND=600, + GETCFGINTERFACE=800, + SETHINSTANCE=900, SETOSMODULEHANDLE=900, // note dups for back-compat + GETHINSTANCE=910, GETOSMODULEHANDLE=910, // note dups for back-compat + DEREGISTERSERVICES=1000, + SETPATH=1100, + GETPATH=1200, + }; +}; + +// hides the dispatchable interface +class NOVTABLE WaComponentI : public WaComponent { +protected: + WaComponentI() {} // protect constructor +public: + virtual const wchar_t *getName()=0; + virtual GUID getGUID()=0; + +#ifdef WASABINOMAINAPI + virtual void registerServices(api_service *)=0; +#else + virtual void registerServices(ComponentAPI *)=0; +#endif + virtual int RegisterServicesSafeModeOk()=0; + virtual void deregisterServices()=0; + + virtual void onCreate()=0; + virtual void onDestroy()=0; + + virtual api_window *createWindow(int n, api_window *parentWnd)=0; //DEPRECATED + + virtual int onNotify(int cmd, int param1, int param2, int param3, int param4)=0; + virtual int onCommand(const wchar_t *cmd, int param1, int param2, void *ptr, int ptrlen)=0; + + virtual CfgItem *getCfgInterface(int n)=0; + + virtual void setOSModuleHandle(OSMODULEHANDLE moduleHandle)=0; + virtual OSMODULEHANDLE getOSModuleHandle()=0; + virtual void setComponentPath(const wchar_t *path)=0; + virtual const wchar_t *getComponentPath()=0; + +private: + virtual void internal_onDestroy()=0; + virtual int internal_onNotify(int cmd, int param1, int param2, int param3, int param4)=0; // calls thru to onNotify after processing + RECVS_DISPATCH; +}; + +class waServiceFactoryI; + +/** +*/ +class NOVTABLE WAComponentClient : public WaComponentI, public CfgItemI +{ +protected: + WAComponentClient(const wchar_t *name=NULL); +public: + virtual ~WAComponentClient() {} + + // provide your component name & other info here + virtual const wchar_t *getName(); //OVERRIDE ME (or just set name in constructor) + virtual GUID getGUID()=0; // be sure to override this one //OVERRIDE ME + +#ifdef WASABINOMAINAPI + void registerServices(api_service *); // don't override +#else + void registerServices(ComponentAPI *); // don't override +#endif + int RegisterServicesSafeModeOk(); + void deregisterServices(); // don't override + + // override these to receive notifications + virtual void onRegisterServices() {}// register extra services here + virtual void onCreate() {} // init stuff + virtual void onDestroy() {} // destroy everything here, not in ~ +//DEPRECATED: will go away +// this is moving to svc_wndcreate + virtual api_window *createWindow(int n, api_window *parentWnd) { return NULL; } + + // OVERRIDE ME for various events + virtual int onNotify(int cmd, int param1, int param2, int param3, int param4) { return 0; } + // everything after cmd is for future expansion + virtual int onCommand(const wchar_t *cmd, int param1, int param2, void *ptr, int ptrlen) { return 0; } + + // config ptr... you can override this and provide a different * + // otherwise 'this' will be returned + virtual CfgItem *getCfgInterface(int n); + + // saves the OSMODULEHANDLE of your WAC for you + void setOSModuleHandle(OSMODULEHANDLE moduleHandle) { OSModuleHandle = moduleHandle; }; + OSMODULEHANDLE getOSModuleHandle() { return OSModuleHandle; } + void setComponentPath(const wchar_t *path) { componentpath = path; }; + const wchar_t *getComponentPath() { return componentpath; } + OSMODULEHANDLE gethInstance() { return getOSModuleHandle(); } //DEPRECATED + + // various options to register during your constructor, like services, + // skin parts, and autopop guids. just register them and forget them + + void registerService(waServiceFactoryI* service); + void registerSkinFile(const wchar_t *filename, int relative=RSF_RELATIVETOWAC); + + /* benski> cut + void registerAutoPopup(GUID guid, const wchar_t *description, const wchar_t *prefered_container=NULL, int container_required=FALSE); + void registerAutoPopup(const wchar_t *groupid, const wchar_t *description, const wchar_t *container_layout=NULL, int container_required=FALSE); + void registerCfgItem(CfgItemI *cfgitem, int autodelete=FALSE); + void registerExtension(const wchar_t *extension, const wchar_t *description, const wchar_t *family=NULL); + void registerCallback(SysCallback *_callback, void *_param = NULL); + void registerPrefGroup(const wchar_t *groupname, const wchar_t *dest, GUID pref_guid, GUID pref_guid_parent=INVALID_GUID);*/ + // or register your own resource types here + void registerResource(LoadableResource *res); + + virtual void onSkinLoaded() {} + +private: + virtual void internal_onDestroy(); + virtual int internal_onNotify(int cmd, int param1, int param2, int param3, int param4); + OSMODULEHANDLE OSModuleHandle; + int postregisterservices; // if 1, onRegisterServices has been called + PtrList<LoadableResource> resources; + StringW componentpath; +}; + +extern "C" { + typedef void (*WACINIT)(OSMODULEHANDLE); + typedef UINT (*WACGETVERSION)(void); // returns the interface version component was compiled with + typedef WaComponent *(*WACENUMCOMPONENT)(int n); +}; + +class LoadableResource { +public: + virtual ~LoadableResource() {} + + virtual int deleteOnShutdown() { return TRUE; } // return FALSE if you're static + + virtual void onRegisterServices() {} + virtual void onDeregisterServices() {} // unload during this one + virtual void beforeLoadingSkinElements() {} +}; + +#endif |