|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: locdesc.cpp
//
// Contents: implementation of CSetLocationDescription
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "wsecmgr.h"
#include "snapmgr.h"
#include "cookie.h"
#include "LocDesc.h"
#include "util.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CSetLocationDescription dialog
CSetLocationDescription::CSetLocationDescription(CWnd* pParent /*=NULL*/) : CHelpDialog(a218HelpIDs, IDD, pParent) { //{{AFX_DATA_INIT(CSetLocationDescription)
m_strDesc = _T(""); //}}AFX_DATA_INIT
}
void CSetLocationDescription::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSetLocationDescription)
DDX_Text(pDX, IDC_DESCRIPTION, m_strDesc); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSetLocationDescription, CHelpDialog) //{{AFX_MSG_MAP(CSetLocationDescription)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CSetLocationDescription::Initialize(CFolder *pFolder, CComponentDataImpl *pCDI) { m_pFolder = pFolder; m_pCDI = pCDI; m_strDesc = pFolder->GetDesc(); }
/////////////////////////////////////////////////////////////////////////////
// CSetLocationDescription message handlers
DWORD SetDescHelper(HKEY hKey,CFolder *pFolder,CString strDesc) { DWORD status = RegSetValueEx(hKey, L"Description", // Value name (not localized)
0, // Reserved
REG_SZ, (CONST BYTE *)(LPCTSTR)strDesc, (strDesc.GetLength()+1)*sizeof(TCHAR)); if (NO_ERROR == status) { pFolder->SetDesc(strDesc); } else { // Couldn't set a value
}
RegCloseKey(hKey); return status; }
void CSetLocationDescription::OnOK() { DWORD status = 0; HKEY hKey = 0; CString strLocKey; CString strErr; LPTSTR szName = 0; LPTSTR sz = 0;
UpdateData(TRUE);
strLocKey.LoadString(IDS_TEMPLATE_LOCATION_KEY); strLocKey += L'\\'; szName = m_pFolder->GetName(); // replace '\' with '/' because Registry does not
// take '/' in a single key
//
sz = wcschr(szName, L'\\'); while (sz) { *sz = L'/'; sz = wcschr(sz, L'\\'); } strLocKey += szName;
if( !m_strDesc.IsEmpty() ) //Raid #482845, Yanggao
{ m_strDesc.Replace(L"\r\n", NULL); } PCWSTR szInvalidCharSet = INVALID_DESC_CHARS; if( m_strDesc.FindOneOf(szInvalidCharSet) != -1 ) { CString text; text.FormatMessage (IDS_INVALID_DESC, szInvalidCharSet); AfxMessageBox(text); GetDlgItem(IDC_DESCRIPTION)->SetFocus(); return; }
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strLocKey, 0, KEY_SET_VALUE, &hKey);
if (NO_ERROR == status) { status = SetDescHelper(hKey,m_pFolder,m_strDesc); } else { //
// Only display an error if we can read (and thus displayed)
// this key
//
if (NO_ERROR == RegOpenKeyEx(HKEY_LOCAL_MACHINE, strLocKey, 0, KEY_READ, &hKey)) { strErr.LoadString(IDS_ERR_GLOBAL_LOC_DESC); MessageBox(strErr); RegCloseKey(hKey); } }
if (NO_ERROR != status) { //
// Bug 375324: if we can't succeed under HKLM try under HKCU
//
status = RegOpenKeyEx(HKEY_CURRENT_USER, strLocKey, 0, KEY_SET_VALUE, &hKey); if (NO_ERROR == status) { status = SetDescHelper(hKey,m_pFolder,m_strDesc); } else { //
// Only display an error if we can read (and thus displayed)
// this key
//
if (NO_ERROR == RegOpenKeyEx(HKEY_CURRENT_USER, strLocKey, 0, KEY_READ, &hKey)) { strErr.LoadString(IDS_ERR_LOCAL_LOC_DESC); MessageBox(strErr); RegCloseKey(hKey); } } }
szName = m_pFolder->GetName(); // replace '/' with '\' because Registry does not
sz = wcschr(szName, L'/'); while (sz) { *sz = L'\\'; sz = wcschr(sz, L'/'); }
LPCONSOLENAMESPACE tempnamespace = m_pCDI->GetNameSpace(); //Raid #252638, 5/2/2001
if( tempnamespace ) { tempnamespace->SetItem(m_pFolder->GetScopeItem()); }
DestroyWindow(); }
void CSetLocationDescription::OnCancel() { DestroyWindow(); }
|