//------------------------------------------------------------------------------
// $Workfile: VirtualReg.cpp $
// $Header: /SbjDev/SbjCore/VirtualReg.cpp 2 11/12/08 2:22p Steve $
//
// Copyright � 2008 SbjCat
// All rights reserved.
//
//
// *** Authors ***
// Steve Johnson
//
// $Revision: 2 $
//
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "VirtualReg.h"
#include "XMLUtils.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
namespace SbjCore
{
namespace Sys
{
struct VirtualRegImpl
{
CString sPathName;
CString sSubKey;
MSXML2::IXMLDOMElementPtr spTheElement;
VirtualRegImpl(LPCTSTR lpszPathName, LPCTSTR lpszSubKey) :
sPathName(lpszPathName),
sSubKey(lpszSubKey),
spTheElement(NULL)
{
MSXML2::IXMLDOMElementPtr spDocElement = SbjCore::Utils::Xml::LoadFile(lpszPathName);
if (spDocElement != NULL)
{
spTheElement = spDocElement->selectSingleNode(lpszSubKey);
}
}
virtual ~VirtualRegImpl()
{
if (spTheElement != NULL)
{
MSXML2::IXMLDOMDocument2Ptr spDoc = spTheElement->GetownerDocument();
if (spDoc != NULL)
{
spDoc->save((LPCTSTR)sPathName);
}
}
}
bool GetRegValue( LPCTSTR lpszValue, CString& sData, const LPCTSTR lpszDefault /*= NULL*/ )
{
_bstr_t bstr;
CString s;
bool bRslt = (S_OK == SbjCore::Utils::Xml::GetAttribute(spTheElement, lpszValue, s));
if (bRslt)
{
sData = (LPCTSTR)bstr;
}
else
{
if (lpszDefault != NULL)
{
sData = lpszDefault;
}
}
return bRslt;
}
bool GetRegValue( LPCTSTR lpszValue, DWORD& dwData, const DWORD dwDefault /*= -1*/ )
{
dwData = dwDefault;
bool bRslt = (S_OK == SbjCore::Utils::Xml::GetAttribute(spTheElement, lpszValue, dwData));
return bRslt;
}
bool SetRegValue( LPCTSTR lpszValue, LPCTSTR lpszData )
{
return (S_OK == SbjCore::Utils::Xml::SetAttribute(spTheElement, lpszValue, lpszData));
}
bool SetRegValue( LPCTSTR lpszValue, const DWORD dwData )
{
return (S_OK == SbjCore::Utils::Xml::SetAttribute(spTheElement, lpszValue, dwData));
}
};
/////////////////////////////////////////////////////////////////
VirtualReg::VirtualReg(LPCTSTR lpszPathName, LPCTSTR lpszSubKey) :
m_pImpl(new VirtualRegImpl(lpszPathName, lpszSubKey))
{
}
VirtualReg::~VirtualReg()
{
try
{
delete m_pImpl;
}
catch (...)
{
ASSERT(FALSE);
}
}
bool VirtualReg::GetRegValue( LPCTSTR lpszValue, CString& sData, const LPCTSTR lpszDefault /*= NULL*/ )
{
return m_pImpl->GetRegValue(lpszValue, sData, lpszDefault);
}
bool VirtualReg::GetRegValue( LPCTSTR lpszValue, DWORD& dwData, const DWORD dwDefault /*= -1*/ )
{
return m_pImpl->GetRegValue(lpszValue, dwData, dwDefault);
}
bool VirtualReg::SetRegValue( LPCTSTR lpszValue, LPCTSTR lpszData )
{
return m_pImpl->SetRegValue(lpszValue, lpszData);
}
bool VirtualReg::SetRegValue( LPCTSTR lpszValue, const DWORD dwData )
{
return m_pImpl->SetRegValue(lpszValue, dwData);
}
}
}
//*** Modification History ***
// $Log: /SbjDev/SbjCore/VirtualReg.cpp $
//
// 2 11/12/08 2:22p Steve
// Finished Generalization of Model v2.0.1