121 lines
2.8 KiB
C
121 lines
2.8 KiB
C
|
#ifndef _SVC_WNDCREATE_H
|
||
|
#define _SVC_WNDCREATE_H
|
||
|
|
||
|
#include <bfc/dispatch.h>
|
||
|
#include <api/service/services.h>
|
||
|
|
||
|
#define BUCKETITEM L"buck"
|
||
|
#define PLAYLISTSIDECAR L"plsc"
|
||
|
|
||
|
class ifc_window;
|
||
|
|
||
|
class NOVTABLE svc_windowCreate : public Dispatchable
|
||
|
{
|
||
|
public:
|
||
|
static FOURCC getServiceType() { return WaSvc::WINDOWCREATE; }
|
||
|
|
||
|
int testGuid(GUID g);
|
||
|
ifc_window *createWindowByGuid(GUID g, ifc_window *parent);
|
||
|
int testType(const wchar_t *windowtype);
|
||
|
ifc_window *createWindowOfType(const wchar_t *windowtype, ifc_window *parent, int n = 0);
|
||
|
int destroyWindow(ifc_window *w);
|
||
|
|
||
|
int refcount(); // how many windows created
|
||
|
|
||
|
enum {
|
||
|
TESTGUID = 100,
|
||
|
CREATEWINDOWBYGUID = 200,
|
||
|
TESTTYPE = 301,
|
||
|
CREATEWINDOWOFTYPE = 402,
|
||
|
DESTROYWINDOW = 500,
|
||
|
REFCOUNT = 600,
|
||
|
};
|
||
|
};
|
||
|
|
||
|
inline int svc_windowCreate::testGuid(GUID g)
|
||
|
{
|
||
|
return _call(TESTGUID, 0, g);
|
||
|
}
|
||
|
|
||
|
inline ifc_window *svc_windowCreate::createWindowByGuid(GUID g, ifc_window *parent)
|
||
|
{
|
||
|
return _call(CREATEWINDOWBYGUID, (ifc_window*)0, g, parent);
|
||
|
}
|
||
|
|
||
|
inline int svc_windowCreate::destroyWindow(ifc_window *w)
|
||
|
{
|
||
|
return _call(DESTROYWINDOW, 0, w);
|
||
|
}
|
||
|
|
||
|
inline int svc_windowCreate::testType(const wchar_t *windowtype)
|
||
|
{
|
||
|
return _call(TESTTYPE, 0, windowtype);
|
||
|
}
|
||
|
|
||
|
inline ifc_window *svc_windowCreate::createWindowOfType(const wchar_t * windowtype, ifc_window *parent, int n)
|
||
|
{
|
||
|
return _call(CREATEWINDOWOFTYPE, (ifc_window*)0, windowtype, parent, n);
|
||
|
}
|
||
|
|
||
|
inline int svc_windowCreate::refcount()
|
||
|
{
|
||
|
return _call(REFCOUNT, -1);
|
||
|
}
|
||
|
|
||
|
class NOVTABLE svc_windowCreateI : public svc_windowCreate
|
||
|
{
|
||
|
public:
|
||
|
virtual ~svc_windowCreateI() { }
|
||
|
virtual int testGuid(GUID g) { return 0; }
|
||
|
virtual ifc_window *createWindowByGuid(GUID g, ifc_window *parent) { return NULL; }
|
||
|
virtual int testType(const wchar_t *windowtype) { return 0; }
|
||
|
virtual ifc_window *createWindowOfType(const wchar_t *windowtype, ifc_window *parent, int n) { return NULL; }
|
||
|
virtual int destroyWindow(ifc_window *w) = 0;
|
||
|
|
||
|
virtual int refcount() { return -1; } // FUCKO: make pure abstract
|
||
|
|
||
|
protected:
|
||
|
RECVS_DISPATCH;
|
||
|
};
|
||
|
|
||
|
#include <api/service/servicei.h>
|
||
|
template <class T>
|
||
|
class WndCreateCreator : public waServiceFactoryT<svc_windowCreate, T> {};
|
||
|
|
||
|
template <class T>
|
||
|
class WndCreateCreatorSingle : public waServiceFactoryTSingle<svc_windowCreate, T> {};
|
||
|
|
||
|
#include <api/service/svc_enum.h>
|
||
|
#include <bfc/string/StringW.h>
|
||
|
|
||
|
class WindowCreateByGuidEnum : public SvcEnumT<svc_windowCreate>
|
||
|
{
|
||
|
public:
|
||
|
WindowCreateByGuidEnum(GUID _g) : targetguid(_g) { }
|
||
|
|
||
|
protected:
|
||
|
virtual int testService(svc_windowCreate *svc)
|
||
|
{
|
||
|
return svc->testGuid(targetguid);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
GUID targetguid;
|
||
|
};
|
||
|
|
||
|
class WindowCreateByTypeEnum : public SvcEnumT<svc_windowCreate>
|
||
|
{
|
||
|
public:
|
||
|
WindowCreateByTypeEnum(const wchar_t *_wtype) : wtype(_wtype) { }
|
||
|
|
||
|
protected:
|
||
|
virtual int testService(svc_windowCreate *svc)
|
||
|
{
|
||
|
return svc->testType(wtype);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
StringW wtype;
|
||
|
};
|
||
|
#endif
|