///////////////////////////////////////////////////////////////////// // CtrlEvents.h // // Written by Dmitriy Oshchepkov aka DmitrO, mailto: dmitro-75@mail.ru // Copyright (c) 2006-2009. All Rights Reserved. // ////////////////////////////////////////////////////////////////////// /* sample to use: firstly call SetEvents and pass array of stCtrlEvents structure, last item must have nulled members ////////////////////////////////////////////////////////////////////////// if (CtrlEventManager.IsAppointed(MyEvent)) //this check not requed, only for optimal performance { //setup params CtrlEventManager.Invoke(MyEvent, p1, p2); //when the call is successful, returns TRUE, also if event is not appointed } */ #pragma once #include "blptr.h" struct stCtrlEvents { LPCSTR szRusName; LPCSTR szEngName; int nParamCount; }; class CCtrlEventManager { public: CCtrlEventManager(); ~CCtrlEventManager(); void SetEvents(stCtrlEvents* pCtrlEvents, int nCount, const char* szCodeName, CBLModule* pFormModule, CBLContext* pCtrlObject, CBLContext* pDerivedObject); void SetEvents(stCtrlEvents* pCtrlEvents, int nCount, CControlID* pControlID, CBLModule* pFormModule, CBLContext* pCtrlObject, CBLContext* pDerivedObject) { SetEvents(pCtrlEvents, nCount, pControlID->m_CodeName, pFormModule, pCtrlObject, pDerivedObject); }; BOOL IsAppointed(int nEventIndex); BOOL Invoke(int nEventIndex, ...); BOOL Invoke0(int nEventIndex); BOOL Invoke1(int nEventIndex, CValue& vP1); BOOL Invoke2(int nEventIndex, CValue& vP1, CValue& vP2); BOOL Invoke3(int nEventIndex, CValue& vP1, CValue& vP2, CValue& vP3); BOOL Invoke4(int nEventIndex, CValue& vP1, CValue& vP2, CValue& vP3, CValue& vP4); BOOL Invoke5(int nEventIndex, CValue& vP1, CValue& vP2, CValue& vP3, CValue& vP4, CValue& vP5); BOOL Invoke6(int nEventIndex, CValue& vP1, CValue& vP2, CValue& vP3, CValue& vP4, CValue& vP5, CValue& vP6); CBLContext* GetCtrlObject() const; void SetCtrlObject(CBLContext*); CBLContext* GetDerivedObject() const; private: BOOL InvokeEvent(int nEventIndex, CValue** ppValuesParams); stCtrlEvents* m_pCtrlEvents; CBLModule* m_pModule; CBLContext* m_pCtrlObject; CBLContext* m_pDerivedObject; struct stEvent { int nFormEvent; int nObjEvent; }; CArray m_events; }; class CExecBatchHelper { public: CExecBatchHelper(CGetDoc7* pDoc, BOOL bWithRefresh): m_pDoc(pDoc),m_bWithRefresh(bWithRefresh),m_bStartWithHelper(FALSE) { if (m_pDoc) { if (m_pDoc->m_pFormContext) { m_bStartWithHelper = !m_pDoc->IsBatchStarted(); if (m_bStartWithHelper) m_pDoc->OnStartBatch(); } } }; ~CExecBatchHelper() { if (m_bStartWithHelper) m_pDoc->OnEndBatch(m_bWithRefresh); }; private: CGetDoc7* m_pDoc; BOOL m_bStartWithHelper; BOOL m_bWithRefresh; };