1// Commands.h : header file 2// 3 4#if !defined(AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED_) 5#define AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED_ 6 7#include "vsvtypes.h" 8 9class CCommands : 10 public CComDualImpl < ICommands, 11 &IID_ICommands, 12 &LIBID_VisVim >, 13 public CComObjectRoot, 14 public CComCoClass < CCommands, 15 &CLSID_Commands > 16{ 17 protected: 18 IApplication * m_pApplication; 19 20 public: 21 CCommands (); 22 ~CCommands (); 23 void SetApplicationObject (IApplication * m_pApplication); 24 IApplication *GetApplicationObject () 25 { 26 return m_pApplication; 27 } 28 void UnadviseFromEvents (); 29 30 BEGIN_COM_MAP (CCommands) 31 COM_INTERFACE_ENTRY (IDispatch) 32 COM_INTERFACE_ENTRY (ICommands) 33 END_COM_MAP () 34 DECLARE_NOT_AGGREGATABLE (CCommands) 35 36 protected: 37 // This class template is used as the base class for the Application 38 // event handler object and the Debugger event handler object, 39 // which are declared below. 40 template < class IEvents, 41 const IID * piidEvents, 42 const GUID * plibid, 43 class XEvents, 44 const CLSID * pClsidEvents > 45 class XEventHandler : 46 public CComDualImpl < IEvents, 47 piidEvents, 48 plibid >, 49 public CComObjectRoot, 50 public CComCoClass < XEvents, 51 pClsidEvents > 52 { 53 public: 54 BEGIN_COM_MAP (XEvents) 55 COM_INTERFACE_ENTRY (IDispatch) 56 COM_INTERFACE_ENTRY_IID (*piidEvents, IEvents) 57 END_COM_MAP () 58 DECLARE_NOT_AGGREGATABLE (XEvents) 59 void Connect (IUnknown * pUnk) 60 { 61 VERIFY (SUCCEEDED (AtlAdvise (pUnk, this, *piidEvents, 62 &m_dwAdvise))); 63 } 64 void Disconnect (IUnknown * pUnk) 65 { 66 AtlUnadvise (pUnk, *piidEvents, m_dwAdvise); 67 } 68 69 CCommands *m_pCommands; 70 71 protected: 72 DWORD m_dwAdvise; 73 }; 74 75 // This object handles events fired by the Application object 76 class XApplicationEvents : public XEventHandler < IApplicationEvents, 77 &IID_IApplicationEvents, 78 &LIBID_VisVim, 79 XApplicationEvents, 80 &CLSID_ApplicationEvents > 81 { 82 public: 83 // IApplicationEvents methods 84 STDMETHOD (BeforeBuildStart) (THIS); 85 STDMETHOD (BuildFinish) (THIS_ long nNumErrors, long nNumWarnings); 86 STDMETHOD (BeforeApplicationShutDown) (THIS); 87 STDMETHOD (DocumentOpen) (THIS_ IDispatch * theDocument); 88 STDMETHOD (BeforeDocumentClose) (THIS_ IDispatch * theDocument); 89 STDMETHOD (DocumentSave) (THIS_ IDispatch * theDocument); 90 STDMETHOD (NewDocument) (THIS_ IDispatch * theDocument); 91 STDMETHOD (WindowActivate) (THIS_ IDispatch * theWindow); 92 STDMETHOD (WindowDeactivate) (THIS_ IDispatch * theWindow); 93 STDMETHOD (WorkspaceOpen) (THIS); 94 STDMETHOD (WorkspaceClose) (THIS); 95 STDMETHOD (NewWorkspace) (THIS); 96 }; 97 typedef CComObject < XApplicationEvents > XApplicationEventsObj; 98 XApplicationEventsObj *m_pApplicationEventsObj; 99 100 // This object handles events fired by the Application object 101 class XDebuggerEvents : public XEventHandler < IDebuggerEvents, 102 &IID_IDebuggerEvents, 103 &LIBID_VisVim, 104 XDebuggerEvents, 105 &CLSID_DebuggerEvents > 106 { 107 public: 108 // IDebuggerEvents method 109 STDMETHOD (BreakpointHit) (THIS_ IDispatch * pBreakpoint); 110 }; 111 typedef CComObject < XDebuggerEvents > XDebuggerEventsObj; 112 XDebuggerEventsObj *m_pDebuggerEventsObj; 113 114 public: 115 // ICommands methods 116 STDMETHOD (VisVimDialog) (THIS); 117 STDMETHOD (VisVimEnable) (THIS); 118 STDMETHOD (VisVimDisable) (THIS); 119 STDMETHOD (VisVimToggle) (THIS); 120 STDMETHOD (VisVimLoad) (THIS); 121}; 122 123typedef CComObject < CCommands > CCommandsObj; 124 125//{{AFX_INSERT_LOCATION}} 126 127#endif // !defined(AFX_COMMANDS_H__AC726717_2977_11D1_B2F3_006008040780__INCLUDED) 128