summaryrefslogtreecommitdiff
path: root/plugins/Quotes/src/ModuleInfo.cpp
blob: 1cca7319e195a1dc570dbacbe3799c0b0b80218d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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;
}