|
|
// Copyright (c) 1997-1999 Microsoft Corporation
//
// "More" dialog (spawned from IDChanges)
//
// 3-11-98 sburns
#include "headers.hxx"
#include "moredlg.hpp"
#include "resource.h"
#include "helpids.h"
#include "state.hpp"
#include "iddlg.hpp" // showAndEnableWindow
// the max length of a DNS name is 255 utf-8 bytes. The hostname must be
// at least 1 byte. Then there's the dot between the hostname and the
// suffix. So 255 - 1 - 1 = 253.
// note that this is *not* Dns::MAX_NAME_LENGTH
static const int MAX_SUFFIX_LEN = DNS_MAX_NAME_LENGTH - 1 - 1;
static const DWORD HELP_MAP[] = { IDC_DNS, IDH_IDENT_NAMES_DNS_NAME, IDC_CHANGE, IDH_IDENT_NAMES_CHANGE_DNS_CHECKBOX, IDC_NETBIOS, IDH_IDENT_NAMES_NETBIOS_NAME, 0, 0 };
MoreChangesDialog::MoreChangesDialog(bool isPersonal) : Dialog(IDD_MORE, HELP_MAP), startingSyncDnsNames(false), fIsPersonal(isPersonal) { LOG_CTOR(MoreChangesDialog); }
MoreChangesDialog::~MoreChangesDialog() { LOG_DTOR(MoreChangesDialog); }
void MoreChangesDialog::enable() { bool enabled = WasChanged(IDC_DNS);
if (WasChanged(IDC_CHANGE)) { if ( startingSyncDnsNames != Win::IsDlgButtonChecked(hwnd, IDC_CHANGE)) { enabled = true; } }
Win::EnableWindow(Win::GetDlgItem(hwnd, IDOK), enabled); }
void MoreChangesDialog::OnInit() { LOG_FUNCTION(MoreChangesDialog::OnInit);
State& state = State::GetInstance();
Win::Edit_LimitText( Win::GetDlgItem(hwnd, IDC_DNS), MAX_SUFFIX_LEN);
Win::SetDlgItemText( hwnd, IDC_DNS, state.GetComputerDomainDnsName()); Win::SetDlgItemText(hwnd, IDC_NETBIOS, state.GetNetbiosComputerName());
startingSyncDnsNames = state.GetSyncDNSNames(); Win::CheckDlgButton( hwnd, IDC_CHANGE, startingSyncDnsNames ? BST_CHECKED : BST_UNCHECKED); if (fIsPersonal) // JonN 10/4/00
showAndEnableWindow( hwnd, IDC_CHANGE, SW_HIDE );
ClearChanges(); enable(); }
MoreChangesDialog::ExecuteResult MoreChangesDialog::ModalExecute(HWND parent) { if (Dialog::ModalExecute(parent)) { return CHANGES_MADE; }
return NO_CHANGES; }
// returns
// -1 if a validation error has occurred
// 1 if a change was made
// 0 if no change was made
int MoreChangesDialog::OnOkButton() { int endCode = 0; State& state = State::GetInstance();
String preconditionErrorMessage = CheckPreconditions(); if (!preconditionErrorMessage.empty()) { popup.Error( hwnd, preconditionErrorMessage); return -1; }
if (WasChanged(IDC_CHANGE)) { state.SetSyncDNSNames( Win::IsDlgButtonChecked(hwnd, IDC_CHANGE)); endCode = 1; } if (WasChanged(IDC_DNS)) { // compare the new value to the old one. If they're different,
// validate and save the new value
String newDomain = Win::GetTrimmedDlgItemText(hwnd, IDC_DNS);
if (newDomain.empty()) { state.SetComputerDomainDnsName(newDomain); return 1; }
String oldDomain = state.GetComputerDomainDnsName();
if (newDomain.icompare(oldDomain) != 0) { switch ( Dns::ValidateDnsNameSyntax( newDomain, MAX_SUFFIX_LEN, MAX_SUFFIX_LEN)) { case Dns::NON_RFC: { Win::MessageBox( hwnd, String::format(IDS_NON_RFC_NAME, newDomain.c_str()), String::load(IDS_APP_TITLE), MB_OK | MB_ICONWARNING);
//lint -e(616) fall-thru
} case Dns::VALID: { state.SetComputerDomainDnsName(newDomain); endCode = 1; break; } case Dns::TOO_LONG: { endCode = -1; popup.Gripe( hwnd, IDC_DNS, String::format( IDS_DNS_NAME_TOO_LONG, newDomain.c_str(), MAX_SUFFIX_LEN)); break; } case Dns::NUMERIC: { endCode = -1; popup.Gripe( hwnd, IDC_DNS, String::format(IDS_NUMERIC_DNS_NAME, newDomain.c_str())); break; } case Dns::BAD_CHARS: { endCode = -1; popup.Gripe( hwnd, IDC_DNS, String::format(IDS_BAD_DNS_CHARS, newDomain.c_str())); break; } case Dns::INVALID: default: { endCode = -1; popup.Gripe( hwnd, IDC_DNS, String::format( IDS_BAD_DNS_SYNTAX, newDomain.c_str(), Dns::MAX_LABEL_LENGTH)); break; } } } }
return endCode; }
bool MoreChangesDialog::OnCommand( HWND /* windowFrom */ , unsigned controlIDFrom, unsigned code) { switch (controlIDFrom) { case IDOK: { if (code == BN_CLICKED) { int endCode = OnOkButton(); if (endCode != -1) { HRESULT unused = Win::EndDialog(hwnd, endCode);
ASSERT(SUCCEEDED(unused)); } } break; } case IDCANCEL: { if (code == BN_CLICKED) { // 0 => no changes made
HRESULT unused = Win::EndDialog(hwnd, 0);
ASSERT(SUCCEEDED(unused)); } break; } case IDC_CHANGE: { if (code == BN_CLICKED) { SetChanged(controlIDFrom); enable(); } break; } case IDC_DNS: { if (code == EN_CHANGE) { SetChanged(controlIDFrom); enable(); } break; } default: { break; } }
return true; }
|