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