#pragma once
#pragma warning( disable : 4278 )
//The following #import imports DTE based on it's LIBID
#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids
#pragma warning( default : 4278 )
#pragma warning( disable : 4278 )
//The following #import imports the VC interface based on it's LIBID
#import "libid:6194e01d-71a1-419f-85e3-47ba6283dd1d" version("1.0") lcid("0") raw_interfaces_only named_guids
#pragma warning( default : 4278 )
class EventReceiver
{
public:
virtual void OnSolutionChange() { }
};
class SolutionEventsSink : public IDispEventImpl<1, SolutionEventsSink, &__uuidof(EnvDTE::_dispSolutionEvents), &EnvDTE::LIBID_EnvDTE, 7, 0>
{
public:
SolutionEventsSink(EventReceiver* pTarget) : m_pTarget(pTarget) { }
BEGIN_SINK_MAP(SolutionEventsSink)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispSolutionEvents), 1, Opened)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispSolutionEvents), 3, AfterClosing)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispSolutionEvents), 5, Renamed)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispSolutionEvents), 6, ProjectAdded)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispSolutionEvents), 7, ProjectRemoved)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispSolutionEvents), 8, ProjectRenamed)
END_SINK_MAP()
void __stdcall Opened() { m_pTarget->OnSolutionChange(); }
void __stdcall AfterClosing() { m_pTarget->OnSolutionChange(); }
void __stdcall Renamed(BSTR /*OldName*/) { m_pTarget->OnSolutionChange(); }
void __stdcall ProjectAdded(EnvDTE::Project* /*pProject*/) { m_pTarget->OnSolutionChange(); }
void __stdcall ProjectRemoved(EnvDTE::Project* /*pProject*/) { m_pTarget->OnSolutionChange(); }
void __stdcall ProjectRenamed(EnvDTE::Project* /*pProject*/, BSTR /*OldName*/) { m_pTarget->OnSolutionChange(); }
private:
EventReceiver* m_pTarget;
};
class ProjectItemsEventsSink : public IDispEventImpl<1, ProjectItemsEventsSink, &__uuidof(EnvDTE::_dispProjectItemsEvents), &EnvDTE::LIBID_EnvDTE, 7, 0>
{
public:
ProjectItemsEventsSink(EventReceiver* pTarget) : m_pTarget(pTarget) { }
BEGIN_SINK_MAP(ProjectItemsEventsSink)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispProjectItemsEvents), 1, ItemAdded)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispProjectItemsEvents), 2, ItemRemoved)
SINK_ENTRY_EX(1, __uuidof(EnvDTE::_dispProjectItemsEvents), 3, ItemRenamed)
END_SINK_MAP()
void __stdcall ItemAdded(EnvDTE::ProjectItem* /*pItem*/) { m_pTarget->OnSolutionChange(); }
void __stdcall ItemRemoved(EnvDTE::ProjectItem* /*pItem*/) { m_pTarget->OnSolutionChange(); }
void __stdcall ItemRenamed(EnvDTE::ProjectItem* /*pItem*/, BSTR /*OldName*/) { m_pTarget->OnSolutionChange(); }
private:
EventReceiver* m_pTarget;
};
class VCProjectItemsEventsSink : public IDispEventImpl<1, VCProjectItemsEventsSink, &__uuidof(VCProjectEngineLibrary::_dispVCProjectEngineEvents), &VCProjectEngineLibrary::LIBID_VCProjectEngineLibrary, 1, 0>
{
public:
VCProjectItemsEventsSink(EventReceiver* pTarget) : m_pTarget(pTarget) { }
BEGIN_SINK_MAP(VCProjectItemsEventsSink)
SINK_ENTRY_EX(1, __uuidof(VCProjectEngineLibrary::_dispVCProjectEngineEvents), 0x113, ItemAdded)
SINK_ENTRY_EX(1, __uuidof(VCProjectEngineLibrary::_dispVCProjectEngineEvents), 0x114, ItemRemoved)
SINK_ENTRY_EX(1, __uuidof(VCProjectEngineLibrary::_dispVCProjectEngineEvents), 0x115, ItemRenamed)
SINK_ENTRY_EX(1, __uuidof(VCProjectEngineLibrary::_dispVCProjectEngineEvents), 0x116, ItemMoved)
END_SINK_MAP()
HRESULT __stdcall ItemAdded(IDispatch* /*pItem*/, IDispatch* /*pItemParent*/) { m_pTarget->OnSolutionChange(); return S_OK; }
HRESULT __stdcall ItemRemoved(IDispatch* /*pItem*/, IDispatch* /*pItemParent*/) { m_pTarget->OnSolutionChange(); return S_OK; }
HRESULT __stdcall ItemRenamed(IDispatch* /*pItem*/, IDispatch* /*pItemParent*/, BSTR /*OldName*/) { m_pTarget->OnSolutionChange(); return S_OK; }
HRESULT __stdcall ItemMoved(IDispatch* /*pItem*/, IDispatch* /*pNewParent*/, IDispatch* /*pOldParent*/) { m_pTarget->OnSolutionChange(); return S_OK; }
private:
EventReceiver* m_pTarget;
};