// XTPShellSettings.cpp: implementation of the CXTPShellSettings class.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Common/XTPSystemHelpers.h"
#include "XTPShellSettings.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

const TCHAR COLORKEY[] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer");

//////////////////////////////////////////////////////////////////////
// CXTPShellSettings

CXTPShellSettings::CXTPShellSettings()
{
	RefreshSettings();
}

CXTPShellSettings::~CXTPShellSettings()
{
}

//////////////////////////////////////////////////////////////////////
//

void CXTPShellSettings::RefreshSettings()
{
	::ZeroMemory((SHELLFLAGSTATE*)this, sizeof(SHELLFLAGSTATE));

	typedef void (WINAPI* SHGETSETTINGSPROC)(LPSHELLFLAGSTATE lpSFS, DWORD dwMask);
	SHGETSETTINGSPROC SHGetSettings = NULL;

	if (CXTPModuleHandle(_T("shell32.dll")).GetProcAddress((FARPROC*)&SHGetSettings, "SHGetSettings"))
	{
		SHGetSettings((SHELLFLAGSTATE*)this,
			SSF_DESKTOPHTML |
			SSF_DONTPRETTYPATH |
			SSF_DOUBLECLICKINWEBVIEW |
			SSF_HIDEICONS |
			SSF_MAPNETDRVBUTTON |
			SSF_NOCONFIRMRECYCLE |
			SSF_SHOWALLOBJECTS |
			SSF_SHOWATTRIBCOL |
			SSF_SHOWCOMPCOLOR |
			SSF_SHOWEXTENSIONS |
			SSF_SHOWINFOTIP |
			SSF_SHOWSYSFILES |
			SSF_WIN95CLASSIC);
	}

	m_crCompColor = RGB(0x00, 0x00, 0xff); // default blue color.
	m_crEncrColor = RGB(0x13, 0x92, 0x0d); // default green color.

	HKEY hKey = NULL;
	if (::RegOpenKeyEx(HKEY_CURRENT_USER, COLORKEY, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
	{
		DWORD uBytes = sizeof(COLORREF);
		DWORD dwType = REG_BINARY;
		COLORREF crCompColor;
		COLORREF crEncrColor;

		// try to locate user defined compressed file color.
		if (::RegQueryValueEx(hKey, _T("AltColor"), NULL, &dwType, (LPBYTE)&crCompColor, &uBytes) == ERROR_SUCCESS)
		{
			m_crCompColor = crCompColor;
		}

		uBytes = sizeof(COLORREF);
		// try to locate user defined encrypted file color.
		if (::RegQueryValueEx(hKey, _T("AltEncryptionColor"), NULL, &dwType, (LPBYTE)&crEncrColor, &uBytes) == ERROR_SUCCESS)
		{
			m_crEncrColor = crEncrColor;
		}

		::RegCloseKey(hKey);
	}
}