#include "StdAfx.h" #include "ModuleInfo.h" #include "QuotesProviders.h" #include "HTMLParserMS.h" #include "LightMutex.h" #include "WinCtrlHelper.h" #include "EconomicRateInfo.h" #include "XMLEngineMI.h" namespace { HINSTANCE g_hInstance = NULL; CModuleInfo::TXMLEnginePtr g_pXMLEngine; CModuleInfo::THTMLEnginePtr g_pHTMLEngine; CLightMutex g_lmParsers; } CModuleInfo::CModuleInfo() : m_bExtendedStatusInfo(1 == DBGetContactSettingByte(NULL,QUOTES_MODULE_NAME,"ExtendedStatus",false)) { } CModuleInfo::~CModuleInfo() { } CModuleInfo& CModuleInfo::GetInstance() { static CModuleInfo mi; return mi; } HANDLE CModuleInfo::GetWindowList(const std::string& rsKey,bool bAllocateIfNonExist /*= true*/) { HANDLE hResult = NULL; THandles::const_iterator i = m_ahWindowLists.find(rsKey); if(i != m_ahWindowLists.end()) { hResult = i->second; } else if(bAllocateIfNonExist) { hResult = reinterpret_cast(CallService(MS_UTILS_ALLOCWINDOWLIST,0,0)); if(hResult) { m_ahWindowLists.insert(std::make_pair(rsKey,hResult)); } } return hResult; } void CModuleInfo::OnMirandaShutdown() { BOOST_FOREACH(THandles::value_type p,m_ahWindowLists) { WindowList_Broadcast(p.second,WM_CLOSE,0,0); } } void CModuleInfo::SetModuleHandle(HINSTANCE hInstance) { assert(NULL == g_hInstance); assert(NULL != hInstance); g_hInstance = hInstance; } HINSTANCE CModuleInfo::GetModuleHandle() { assert(NULL != g_hInstance); return g_hInstance; } CModuleInfo::TQuotesProvidersPtr CModuleInfo::GetQuoteProvidersPtr() { static TQuotesProvidersPtr pProviders(new CQuotesProviders); return pProviders; } CModuleInfo::TXMLEnginePtr CModuleInfo::GetXMLEnginePtr() { if(!g_pXMLEngine) { CGuard cs(g_lmParsers); if(!g_pXMLEngine) { mir_getXI(&xi); g_pXMLEngine = TXMLEnginePtr(new CXMLEngineMI); } } return g_pXMLEngine; } // void CModuleInfo::SetXMLEnginePtr(TXMLEnginePtr pEngine) // { // g_pXMLEngine = pEngine; // } CModuleInfo::THTMLEnginePtr CModuleInfo::GetHTMLEngine() { if(!g_pHTMLEngine) { CGuard cs(g_lmParsers); if(!g_pHTMLEngine) { g_pHTMLEngine = THTMLEnginePtr(new CHTMLEngineMS); } } return g_pHTMLEngine; } void CModuleInfo::SetHTMLEngine(THTMLEnginePtr pEngine) { g_pHTMLEngine = pEngine; } bool CModuleInfo::Verify() { INITCOMMONCONTROLSEX icc = {0}; icc.dwSize = sizeof(icc); icc.dwICC = ICC_WIN95_CLASSES|ICC_LINK_CLASS; if(FALSE == ::InitCommonControlsEx(&icc)) { return false; } if(!GetXMLEnginePtr()) { Quotes_MessageBox(NULL,TranslateT("Miranda could not load Quotes plugin. XML parser is missing."),MB_OK|MB_ICONERROR); return false; } if(!g_pHTMLEngine && (false == CHTMLParserMS::IsInstalled())) { Quotes_MessageBox(NULL, TranslateT("Miranda could not load Quotes plugin. Microsoft HTML parser is missing."), MB_YESNO|MB_ICONQUESTION); return false; } return true; } bool CModuleInfo::GetExtendedStatusFlag()const { return m_bExtendedStatusInfo; }