summaryrefslogtreecommitdiff
path: root/plugins/CurrencyRates/src/ModuleInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/CurrencyRates/src/ModuleInfo.cpp')
-rw-r--r--plugins/CurrencyRates/src/ModuleInfo.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/plugins/CurrencyRates/src/ModuleInfo.cpp b/plugins/CurrencyRates/src/ModuleInfo.cpp
new file mode 100644
index 0000000000..f5679630f6
--- /dev/null
+++ b/plugins/CurrencyRates/src/ModuleInfo.cpp
@@ -0,0 +1,99 @@
+#include "StdAfx.h"
+
+static CModuleInfo::TXMLEnginePtr g_pXMLEngine;
+static CModuleInfo::THTMLEnginePtr g_pHTMLEngine;
+static mir_cs g_lmParsers;
+
+CModuleInfo::CModuleInfo()
+{
+}
+
+CModuleInfo::~CModuleInfo()
+{
+}
+
+CModuleInfo& CModuleInfo::GetInstance()
+{
+ static CModuleInfo mi;
+ return mi;
+}
+
+MWindowList CModuleInfo::GetWindowList(const std::string& rsKey, bool bAllocateIfNonExist /*= true*/)
+{
+ MWindowList hResult = nullptr;
+ THandles::const_iterator i = m_ahWindowLists.find(rsKey);
+ if (i != m_ahWindowLists.end()) {
+ hResult = i->second;
+ }
+ else if (bAllocateIfNonExist) {
+ hResult = WindowList_Create();
+ 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);
+ }
+}
+
+CModuleInfo::TQuotesProvidersPtr CModuleInfo::GetQuoteProvidersPtr()
+{
+ static TQuotesProvidersPtr pProviders(new CQuotesProviders);
+ return pProviders;
+}
+
+CModuleInfo::TXMLEnginePtr CModuleInfo::GetXMLEnginePtr()
+{
+ if (!g_pXMLEngine) {
+ mir_cslock lck(g_lmParsers);
+ if (!g_pXMLEngine)
+ g_pXMLEngine = TXMLEnginePtr(new CXMLEngineMI);
+ }
+
+ return g_pXMLEngine;
+}
+
+CModuleInfo::THTMLEnginePtr CModuleInfo::GetHTMLEngine()
+{
+ if (!g_pHTMLEngine) {
+ mir_cslock lck(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(nullptr, 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(nullptr,
+ TranslateT("Miranda could not load Quotes plugin. Microsoft HTML parser is missing."),
+ MB_YESNO | MB_ICONQUESTION);
+ return false;
+ }
+
+ return true;
+} \ No newline at end of file