/////////////////////////////////////////////////////////////////////////////// // // 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 #include #include 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()