windows-nt/Source/XPSP1/NT/admin/snapin/wsecmgr/cret.cpp
2020-09-26 16:20:57 +08:00

211 lines
4.7 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: cret.cpp
//
// Contents: implementation of CConfigRet
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "wsecmgr.h"
#include "resource.h"
#include "snapmgr.h"
#include "attr.h"
#include "CRet.h"
#include "util.h"
#include "DDWarn.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CConfigRet dialog
CConfigRet::CConfigRet(UINT nTemplateID)
: CAttribute(nTemplateID ? nTemplateID : IDD)
{
//{{AFX_DATA_INIT(CConfigRet)
m_strAttrName = _T("");
m_StartIds = IDS_AS_NEEDED;
m_rabRetention = -1;
//}}AFX_DATA_INIT
m_pHelpIDs = (DWORD_PTR) a190HelpIDs;
m_uTemplateResID = IDD;
}
void CConfigRet::DoDataExchange(CDataExchange* pDX)
{
CAttribute::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CConfigRet)
// DDX_Text(pDX, IDC_ATTRIBUTE_NAME, m_strAttrName);
DDX_Radio(pDX, IDC_RETENTION, m_rabRetention);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConfigRet, CAttribute)
//{{AFX_MSG_MAP(CConfigRet)
ON_BN_CLICKED(IDC_RETENTION, OnRetention)
ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConfigRet message handlers
BOOL CConfigRet::OnApply()
{
if ( !m_bReadOnly )
{
LONG_PTR dw = 0;
UpdateData(TRUE);
if (!m_bConfigure)
dw = (LONG_PTR)ULongToPtr(SCE_NO_VALUE);
else
{
switch(m_rabRetention)
{
case RADIO_RETAIN_BY_DAYS:
dw = SCE_RETAIN_BY_DAYS;
break;
case RADIO_RETAIN_AS_NEEDED:
dw = SCE_RETAIN_AS_NEEDED;
break;
case RADIO_RETAIN_MANUALLY:
dw = SCE_RETAIN_MANUALLY;
break;
}
}
CEditTemplate *petSave = m_pData->GetBaseProfile();
//
// Check dependecies for this item.
//
if(DDWarn.CheckDependencies(
(DWORD)dw) == ERROR_MORE_DATA )
{
//
// If it fails and the user presses cancel then we will exit and do nothing.
//
CThemeContextActivator activator;
if( DDWarn.DoModal() != IDOK)
return FALSE;
//
// If the user presses autoset then we set the item and update the result panes.
//
for(int i = 0; i < DDWarn.GetFailedCount(); i++)
{
PDEPENDENCYFAILED pItem = DDWarn.GetFailedInfo(i);
if(pItem && pItem->pResult )
{
pItem->pResult->SetBase( pItem->dwSuggested );
SetProfileInfo(
pItem->pResult->GetID(),
pItem->dwSuggested,
pItem->pResult->GetBaseProfile()
);
pItem->pResult->Update(m_pSnapin, FALSE);
}
}
}
//
// Update this items profile.
//
m_pData->SetBase(dw);
SetProfileInfo(m_pData->GetID(),dw,m_pData->GetBaseProfile());
m_pData->Update(m_pSnapin, false);
}
return CAttribute::OnApply();
}
BOOL CConfigRet::OnInitDialog()
{
CAttribute::OnInitDialog();
AddUserControl(IDC_RETENTION);
AddUserControl(IDC_RADIO2);
AddUserControl(IDC_RADIO3);
EnableUserControls(m_bConfigure);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConfigRet::Initialize(CResult * pResult)
{
CAttribute::Initialize(pResult);
DDWarn.InitializeDependencies(m_pSnapin,pResult);
m_StartIds = IDS_AS_NEEDED;
LONG_PTR dw = pResult->GetBase();
if ((LONG_PTR)ULongToPtr(SCE_NO_VALUE) == dw)
{
m_bConfigure = FALSE;
}
else
{
m_bConfigure = TRUE;
SetInitialValue((DWORD_PTR)dw);
}
}
void CConfigRet::SetInitialValue(DWORD_PTR dw)
{
if (-1 == m_rabRetention &&
SCE_NO_VALUE != dw)
{
switch (dw)
{
case SCE_RETAIN_BY_DAYS:
m_rabRetention = RADIO_RETAIN_BY_DAYS;
break;
case SCE_RETAIN_AS_NEEDED:
m_rabRetention = RADIO_RETAIN_AS_NEEDED;
break;
case SCE_RETAIN_MANUALLY:
m_rabRetention = RADIO_RETAIN_MANUALLY;
break;
}
}
}
void CConfigRet::OnRetention()
{
SetModified(TRUE);
}
void CConfigRet::OnRadio2()
{
SetModified(TRUE);
}
void CConfigRet::OnRadio3()
{
SetModified(TRUE);
}