//----------------------------------------------------------------------------- // // File: _reporter.h // Copyright (C) 1994-1997 Microsoft Corporation // All rights reserved. // // // //----------------------------------------------------------------------------- #ifndef ESPUTIL__REPORTER_H #define ESPUTIL__REPORTER_H // // Throws away ALL messages. // class LTAPIENTRY CNullReporter : public CReporter { public: CNullReporter() {}; virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); }; #pragma warning (disable:4251) class LTAPIENTRY CBufferReporter : public CReporter { public: CBufferReporter(); void AssertValid(void) const; virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); void Clear(void); NOTHROW const MessageList & GetNotes(void) const; NOTHROW const MessageList & GetWarnings(void) const; NOTHROW const MessageList & GetErrors(void) const; NOTHROW const MessageList & GetAborts(void) const; NOTHROW const MessageList & GetMessages(void) const; void DumpTo(CReport *) const; ~CBufferReporter(); const CBufferReport & GetBufReport(void) const; private: CBufferReport m_bufReport; }; // // This reporter just send all its messages directly to a message box. // class LTAPIENTRY CMessageBoxReporter : public CReporter { public: CMessageBoxReporter(); void AssertValid(void) const; virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); private: CMessageBoxReport m_mbReport; }; // // This reporter is used to send all messages to a file. // class LTAPIENTRY CFileReporter : public CReporter { public: CFileReporter(); BOOL InitFileReporter(const CLString &strFileName); virtual void Clear(void); virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); ~CFileReporter(); private: CFileReport m_fReport; }; // // This reporter is used for command line utilities. Output goes to stdout // class LTAPIENTRY CStdOutReporter : public CReporter { public: virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); private: CStdOutReport m_stReport; }; // // This is used to 'redirect' messages to a single reporter. It's used // when several different reporters are required by the current // implementation, but the desired effect is that they all send their messages // to a common location. // // This class takes ownership of another Reporter, then uses reference // counting semantics to determine when to delete that reporter. // class LTAPIENTRY CRedirectReporter : public CReporter { public: CRedirectReporter(); virtual void Activate(void); virtual void Clear(void); virtual void SetConfidenceLevel(ConfidenceLevel); virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); // Used for initial attachment to a CReporter. NOTHROW void RedirectTo(CReport *pReport); // Used to share a single reporter among several CRedirectReporter's. NOTHROW void RedirectTo(CRedirectReporter *pReporter); private: CRedirectReport m_rdReport; }; // // // This class is used to re-direct output through a reporter. It will // automatically call Clear() and Activate() the first time output is sent // to the reporter. If the usre calls Activate first on this reporter, then // no action is taken when something is output. // // class LTAPIENTRY CActivateReporter : public CReporter { public: CActivateReporter(CReport *); virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto = NULL, CGotoHelp *pGotoHelp = NULL); void Activate(); void Clear(); private: CActivateReport m_actReport; }; // // Allows you to use a CReport as a CReporter. class LTAPIENTRY CReportReporter : public CReporter { public: CReportReporter(CReport *); virtual void IssueMessage(MessageSeverity, const CLString &strContext, const CLString &strMessage, CGoto *pGoto, CGotoHelp *pGotoHelp); virtual void Activate(); virtual void Clear(); virtual void SetConfidenceLevel(ConfidenceLevel); private: CReport *m_pReport; }; #pragma warning(default:4251) // // The following manage a global 'pool' of reporters that are used by // different components in the system. // Each reporter has to be distinct. Once the reporter has been 'added', // the global pool *owns* the reporter and will delete it. This is done by // ReleaseAllReporters(). // NOTHROW LTAPIENTRY void AddReporter(COutputTabs::OutputTabs idx, CReporter *pReporter); NOTHROW LTAPIENTRY CReporter * GetReporter(COutputTabs::OutputTabs); NOTHROW LTAPIENTRY void ReleaseAllReporters(); #if !defined(_DEBUG) || defined(IMPLEMENT) #include "_reporter.inl" #endif #endif