201 lines
4.9 KiB
C++
201 lines
4.9 KiB
C++
// Copyright (c) 1997-2001 Microsoft Corporation
|
|
//
|
|
// File: BeforeBeginPage.cpp
|
|
//
|
|
// Synopsis: Defines the Before You Begin Page for the CYS
|
|
// Wizard. Tells the user what they should do
|
|
// before running CYS.
|
|
//
|
|
// History: 03/14/2001 JeffJon Created
|
|
|
|
|
|
#include "pch.h"
|
|
#include "resource.h"
|
|
|
|
#include "InstallationUnitProvider.h"
|
|
#include "BeforeBeginPage.h"
|
|
#include "state.h"
|
|
|
|
|
|
static PCWSTR BEFORE_BEGIN_PAGE_HELP = L"cys.chm::/cys_topnode.htm";
|
|
static PCWSTR BEFORE_BEGIN_LINK_HELP = L"cys.chm::/cys_topnode.htm";
|
|
|
|
BeforeBeginPage::BeforeBeginPage()
|
|
:
|
|
bulletFont(0),
|
|
CYSWizardPage(
|
|
IDD_BEFORE_BEGIN_PAGE,
|
|
IDS_BEFORE_BEGIN_TITLE,
|
|
IDS_BEFORE_BEGIN_SUBTITLE,
|
|
BEFORE_BEGIN_PAGE_HELP)
|
|
{
|
|
LOG_CTOR(BeforeBeginPage);
|
|
}
|
|
|
|
|
|
|
|
BeforeBeginPage::~BeforeBeginPage()
|
|
{
|
|
LOG_DTOR(BeforeBeginPage);
|
|
|
|
if (bulletFont)
|
|
{
|
|
HRESULT hr = Win::DeleteObject(bulletFont);
|
|
ASSERT(SUCCEEDED(hr));
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
BeforeBeginPage::OnInit()
|
|
{
|
|
LOG_FUNCTION(BeforeBeginPage::OnInit);
|
|
|
|
InitializeBulletedList();
|
|
}
|
|
|
|
void
|
|
BeforeBeginPage::InitializeBulletedList()
|
|
{
|
|
LOG_FUNCTION(BeforeBeginPage::InitializeBulletedList);
|
|
|
|
bulletFont = CreateFont(
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
FW_NORMAL,
|
|
0,
|
|
0,
|
|
0,
|
|
SYMBOL_CHARSET,
|
|
OUT_CHARACTER_PRECIS,
|
|
CLIP_CHARACTER_PRECIS,
|
|
PROOF_QUALITY,
|
|
VARIABLE_PITCH|FF_DONTCARE,
|
|
L"Marlett");
|
|
|
|
if (bulletFont)
|
|
{
|
|
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET1), bulletFont, true);
|
|
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET2), bulletFont, true);
|
|
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET3), bulletFont, true);
|
|
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET4), bulletFont, true);
|
|
Win::SetWindowFont(Win::GetDlgItem(hwnd, IDC_BULLET5), bulletFont, true);
|
|
}
|
|
else
|
|
{
|
|
LOG(String::format(
|
|
L"Failed to create font for bullet list: hr = %1!x!",
|
|
GetLastError()));
|
|
}
|
|
|
|
}
|
|
|
|
bool
|
|
BeforeBeginPage::OnSetActive()
|
|
{
|
|
LOG_FUNCTION(BeforeBeginPage::OnSetActive);
|
|
|
|
Win::PropSheet_SetWizButtons(
|
|
Win::GetParent(hwnd),
|
|
PSWIZB_NEXT | PSWIZB_BACK);
|
|
|
|
return true;
|
|
}
|
|
|
|
bool
|
|
BeforeBeginPage::OnNotify(
|
|
HWND /*windowFrom*/,
|
|
unsigned controlIDFrom,
|
|
unsigned code,
|
|
LPARAM /*lParam*/)
|
|
{
|
|
// LOG_FUNCTION(BeforeBeginPage::OnCommand);
|
|
|
|
bool result = false;
|
|
|
|
if (IDC_LINK == controlIDFrom &&
|
|
(NM_CLICK == code ||
|
|
NM_RETURN == code))
|
|
{
|
|
Win::HtmlHelp(
|
|
hwnd,
|
|
BEFORE_BEGIN_LINK_HELP,
|
|
HH_DISPLAY_TOPIC,
|
|
0);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
int
|
|
BeforeBeginPage::Validate()
|
|
{
|
|
LOG_FUNCTION(BeforeBeginPage::Validate);
|
|
|
|
// Gather the machine network and role information
|
|
|
|
State& state = State::GetInstance();
|
|
|
|
if (!state.HasStateBeenRetrieved())
|
|
{
|
|
if (!state.RetrieveMachineConfigurationInformation(hwnd))
|
|
{
|
|
ASSERT(false);
|
|
LOG(L"The machine configuration could not be retrieved.");
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
int nextPage = IDD_DECISION_PAGE;
|
|
/* Just for testing the NIC selection page
|
|
|
|
int nextPage = IDD_CUSTOM_SERVER_PAGE;
|
|
|
|
// The decision page should be shown only if we are not a DC, not a DHCP server,
|
|
// not a DNS server, have only one or two NICs, and there is only one static
|
|
// IP address on the interfaces
|
|
|
|
if (!(state.IsDC() || state.IsUpgradeState()))
|
|
{
|
|
if (!InstallationUnitProvider::GetInstance().GetDHCPInstallationUnit().IsServiceInstalled() &&
|
|
!InstallationUnitProvider::GetInstance().GetDNSInstallationUnit().IsServiceInstalled())
|
|
{
|
|
if (state.GetNICCount() == 1)
|
|
{
|
|
if (!state.IsDHCPAvailableOnNIC(0))
|
|
{
|
|
nextPage = IDD_DECISION_PAGE;
|
|
}
|
|
}
|
|
else if (state.GetNICCount() == 2)
|
|
{
|
|
bool isDHCPAvailableOnNIC1 = state.IsDHCPAvailableOnNIC(0);
|
|
bool isDHCPAvailableOnNIC2 = state.IsDHCPAvailableOnNIC(1);
|
|
|
|
if ((!isDHCPAvailableOnNIC1 && isDHCPAvailableOnNIC2) ||
|
|
(isDHCPAvailableOnNIC1 && !isDHCPAvailableOnNIC2))
|
|
{
|
|
// As long as only one of the interfaces has a
|
|
// dynamically assigned IP address we can go
|
|
// through the Express path
|
|
|
|
nextPage = IDD_DECISION_PAGE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// If the machine doesn't have a NIC or
|
|
// has more than 2 NICs then there is either no
|
|
// reason to make this a network server or the
|
|
// user is considered more advanced and should
|
|
// run through the custom part of the wizard
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
LOG(String::format(L"nextPage = %1!d!", nextPage));
|
|
return nextPage;
|
|
}
|