267 lines
9.0 KiB
C++
267 lines
9.0 KiB
C++
#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
|