aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wac/wac.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wac/wac.h')
-rw-r--r--Src/Wasabi/api/wac/wac.h266
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