#ifndef __AGCEventIDRange_h__
#define __AGCEventIDRange_h__
#include <AGC.h>
#include "resource.h"
#include "IAGCRangeImpl.h"
#include "AGCEventDef.h"
class ATL_NO_VTABLE CAGCEventIDRange :
public IAGCRangeImpl<CAGCEventIDRange, AGCEventID, VT_I4, IAGCEventIDRange, &LIBID_AGCLib>,
public AGCObjectSafetyImpl<CAGCEventIDRange>,
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CAGCEventIDRange, &CLSID_AGCEventIDRange>
{
public:
DECLARE_REGISTRY_RESOURCEID(IDR_AGCEventIDRange)
DECLARE_PROTECT_FINAL_CONSTRUCT()
DECLARE_GET_CONTROLLING_UNKNOWN()
public:
BEGIN_COM_MAP(CAGCEventIDRange)
COM_INTERFACE_ENTRY(IAGCEventIDRange)
COM_INTERFACE_ENTRIES_IAGCRangeImpl()
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
public:
BEGIN_CATEGORY_MAP(CAGCEventIDRange)
IMPLEMENTED_CATEGORY(CATID_AGC)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
public:
AGCEventID GetVariantValue(VARIANT* pvar)
{
assert(VT_I4 == V_VT(pvar));
return static_cast<AGCEventID>(V_I4(pvar));
}
void GetPrefixString(LPOLESTR pszPrefix)
{
wcscpy(pszPrefix, L"[");
}
void GetSuffixString(LPOLESTR pszSuffix)
{
wcscpy(pszSuffix, L")");
}
void GetValueDelimiter(LPOLESTR pszDelim)
{
wcscpy(pszDelim, L",");
}
void FormatValueString(const AGCEventID& value, LPOLESTR pszOut)
{
const CAGCEventDef::XEventDef* it = CAGCEventDef::find(value);
if (it != CAGCEventDef::end())
swprintf(pszOut, L"%ls", it->m_pszName);
else
swprintf(pszOut, L"%d", value);
}
bool ReadValueString(LPCOLESTR pszValue, AGCEventID& value)
{
if (CAGCEventDef::IDFromName(pszValue, value))
return true;
return 1 == swscanf(pszValue, L"%d", &value);
}
};
#endif