windows-nt/Source/XPSP1/NT/net/ias/mmc/proxy/policypage.cpp
2020-09-26 16:20:57 +08:00

151 lines
3.6 KiB
C++

///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000, Microsoft Corp. All rights reserved.
//
// FILE
//
// policypage.cpp
//
// SYNOPSIS
//
// Defines the class ProxyPolicyPage.
//
// MODIFICATION HISTORY
//
// 03/01/2000 Original version.
// 04/19/2000 Marshall SDOs across apartments.
//
///////////////////////////////////////////////////////////////////////////////
#include <proxypch.h>
#include <policypage.h>
#include <profileprop.h>
ProxyPolicyPage::ProxyPolicyPage(
LONG_PTR notifyHandle,
LPARAM notifyParam,
Sdo& policySdo,
Sdo& profileSdo,
SdoConnection& connection,
bool useName
)
: SnapInPropertyPage(notifyHandle, notifyParam, true, IDD_PROXY_POLICY),
policyStream(policySdo),
profileStream(profileSdo),
cxn(connection)
{
if (useName) { policySdo.getName(name); }
}
BOOL ProxyPolicyPage::OnInitDialog()
{
// Unmarshal the interfaces.
policyStream.get(policy);
profileStream.get(profile);
// Get the conditions.
policy.getValue(PROPERTY_POLICY_CONDITIONS_COLLECTION, conditions);
SnapInPropertyPage::OnInitDialog();
initControl(IDC_LIST_POLICYPAGE1_CONDITIONS, listBox);
condList.finalConstruct(
m_hWnd,
cxn.getCIASAttrList(),
ALLOWEDINPROXYCONDITION,
cxn.getDictionary(),
conditions,
cxn.getMachineName(),
name
);
return condList.onInitDialog();
}
void ProxyPolicyPage::onAddCondition()
{
BOOL modified = FALSE;
condList.onAdd(modified);
if (modified) { SetModified(); }
}
void ProxyPolicyPage::onEditCondition()
{
BOOL handled, modified = FALSE;
condList.onEdit(modified, handled);
if (modified) { SetModified(); }
}
void ProxyPolicyPage::onRemoveCondition()
{
BOOL handled, modified = FALSE;
condList.onRemove(modified, handled);
if (modified) { SetModified(); }
}
void ProxyPolicyPage::onEditProfile()
{
ProxyProfileProperties sheet(profile, cxn);
if (sheet.DoModal() != IDCANCEL)
{
SetModified();
}
}
void ProxyPolicyPage::getData()
{
// There must be at least one condition.
if (listBox.GetCount() == 0)
{
fail(IDC_LIST_POLICYPAGE1_CONDITIONS, IDS_POLICY_E_NO_CONDITIONS, false);
}
getValue(IDC_EDIT_NAME, name);
// The user must specify a name ...
if (name.Length() == 0)
{
fail(IDC_EDIT_NAME, IDS_POLICY_E_NAME_EMPTY);
}
// The name must be unique.
if (!policy.setName(name))
{
fail(IDC_EDIT_NAME, IDS_POLICY_E_NOT_UNIQUE);
}
}
void ProxyPolicyPage::setData()
{
setValue(IDC_EDIT_NAME, name);
}
void ProxyPolicyPage::saveChanges()
{
if (!condList.onApply()) { AfxThrowUserException(); }
policy.setValue(PROPERTY_POLICY_PROFILE_NAME, name);
policy.apply();
profile.setName(name);
profile.apply();
}
void ProxyPolicyPage::discardChanges()
{
policy.restore();
profile.restore();
SdoCollection attributes;
profile.getValue(PROPERTY_PROFILE_ATTRIBUTES_COLLECTION, attributes);
attributes.reload();
}
BEGIN_MESSAGE_MAP(ProxyPolicyPage, SnapInPropertyPage)
ON_BN_CLICKED(IDC_BUTTON_CONDITION_ADD, onAddCondition)
ON_BN_CLICKED(IDC_BUTTON_CONDITION_EDIT, onEditCondition)
ON_BN_CLICKED(IDC_BUTTON_CONDITION_REMOVE, onRemoveCondition)
ON_BN_CLICKED(IDC_BUTTON_EDITPROFILE, onEditProfile)
ON_LBN_DBLCLK(IDC_LIST_CONDITIONS, onEditCondition)
ON_EN_CHANGE(IDC_EDIT_NAME, onChange)
END_MESSAGE_MAP()