summaryrefslogtreecommitdiff
path: root/protocols/Quotes/src/Locale.cpp
blob: c01f67148a32730482e5a20bef9f551f0a3ae3aa (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
#include "StdAfx.h"
#include "Locale.h"

const std::locale GetSystemLocale()
{
	return std::locale("");
}

namespace
{
	tstring get_int_registry_value(LPCTSTR pszValueName)
	{
		tstring sResult;
		HKEY hKey = NULL;
		LONG lResult = ::RegOpenKeyEx(HKEY_CURRENT_USER,
			_T("Control Panel\\International"),0,KEY_QUERY_VALUE,&hKey);
		if ((ERROR_SUCCESS == lResult) && (NULL != hKey))
		{
			DWORD dwType = 0;
			DWORD dwSize = 0;
			lResult = ::RegQueryValueEx(hKey,pszValueName,nullptr,&dwType,nullptr,&dwSize);
			if ((ERROR_SUCCESS == lResult) && ((REG_SZ == dwType) || (REG_EXPAND_SZ == dwType)))
			{
				std::vector<TCHAR> aBuffer(dwSize);
				lResult = ::RegQueryValueEx(hKey,pszValueName,nullptr,nullptr,reinterpret_cast<LPBYTE>(&*aBuffer.begin()),&dwSize);
				if(ERROR_SUCCESS == lResult)
				{
					std::copy(aBuffer.begin(),aBuffer.end(),std::back_inserter(sResult));
				}
			}
		}

		if(NULL != hKey)
		{
			lResult = ::RegCloseKey(hKey);
			assert(ERROR_SUCCESS == lResult);
		}

		return sResult;
	}

	tstring date_win_2_boost(const tstring& sFrmt)
	{
		tstring sResult(_T("%d.%m.%y"));
		if(sFrmt == _T("dd/MM/yy"))
		{
			sResult = _T("%d/%m/%y");
		}
		else if(sFrmt == _T("yyyy-MM-dd"))
		{
			sResult = _T("%y-%m-%d");
		}
		return sResult;
	}

	tstring time_win_2_boost(const tstring& sFrmt)
	{
		tstring sResult = _T("%H:%M:%S");
		if(sFrmt == _T("H:mm") || sFrmt == _T("HH:mm"))
		{
			sResult = _T("%H:%M");
		}
		return sResult;
	}
}

tstring Quotes_GetDateFormat(bool bShort)
{
	return date_win_2_boost(get_int_registry_value(bShort ? _T("sShortDate") : _T("sLongDate")));
}

tstring Quotes_GetTimeFormat(bool bShort)
{
	return time_win_2_boost(get_int_registry_value(bShort ? _T("sShortTime") : _T("sTimeFormat")));
}