// Copyright (c) 2001 Microsoft Corporation // // File: FinishPage.cpp // // Synopsis: Defines the Finish Page for the CYS // wizard // // History: 02/03/2001 JeffJon Created #include "pch.h" #include "resource.h" #include "uiutil.h" #include "InstallationUnitProvider.h" #include "FinishPage.h" FinishPage::FinishPage() : WizardPage( IDD_FINISH_PAGE, // Title and subtitle are not needed on the finish page // so just set a bogus one that gives good logging spew IDS_FINISH_TITLE, IDS_FINISH_SUBTITLE, false, true) { LOG_CTOR(FinishPage); } FinishPage::~FinishPage() { LOG_DTOR(FinishPage); } void FinishPage::OnInit() { LOG_FUNCTION(FinishPage::OnInit); // Since this page can be started directly // we have to be sure to set the wizard title Win::PropSheet_SetTitle( Win::GetParent(hwnd), 0, String::load(IDS_WIZARD_TITLE)); SetLargeFont(hwnd, IDC_BIG_BOLD_TITLE); // Back should never be enabled Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_FINISH); // Disable the cancel button because // there is nothing to cancel once you // get here Win::EnableWindow( Win::GetDlgItem( Win::GetParent(hwnd), IDCANCEL), false); // Disable the X in the top right corner HMENU menu = GetSystemMenu(GetParent(hwnd), FALSE); if (menu) { EnableMenuItem( menu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); } // Get the current installation type InstallationUnit& currentInstallationUnit = InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit(); // Get the finish text from the installation unit and put it in the finish box String finishTitle = currentInstallationUnit.GetFinishTitle(); Win::SetDlgItemText( hwnd, IDC_BIG_BOLD_TITLE, finishTitle); String message = currentInstallationUnit.GetFinishText(); Win::SetDlgItemText( hwnd, IDC_FINISH_MESSAGE, message); } bool FinishPage::OnSetActive() { LOG_FUNCTION(FinishPage::OnSetActive); Win::PostMessage( Win::GetParent(hwnd), WM_NEXTDLGCTL, (WPARAM) Win::GetDlgItem(Win::GetParent(hwnd), Wizard::FINISH_BTN_ID), TRUE); return true; } bool FinishPage::OnHelp() { LOG_FUNCTION(FinishPage::OnHelp); InstallationUnit& currentInstallationUnit = InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit(); String helpTag = currentInstallationUnit.GetAfterFinishHelp(); if (currentInstallationUnit.Installing()) { InstallationReturnType result = currentInstallationUnit.GetInstallResult(); if (result != INSTALL_SUCCESS && result != INSTALL_SUCCESS_REBOOT && result != INSTALL_SUCCESS_PROMPT_REBOOT) { helpTag = currentInstallationUnit.GetFinishHelp(); } } else { helpTag = currentInstallationUnit.GetFinishHelp(); UnInstallReturnType result = currentInstallationUnit.GetUnInstallResult(); if (result == UNINSTALL_SUCCESS || result == UNINSTALL_SUCCESS_REBOOT || result == UNINSTALL_SUCCESS_PROMPT_REBOOT) { helpTag = L"cys.chm::/cys_topnode.htm"; } } LOG(String::format( L"helpTag = %1", helpTag.c_str())); ShowHelp(helpTag); return true; } bool FinishPage::OnWizFinish() { LOG_FUNCTION(FinishPage::OnWizFinish); Win::WaitCursor wait; bool result = false; // Run the post install actions if (InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit().Installing() || (State::GetInstance().IsRebootScenario() && State::GetInstance().ShouldRunMYS())) { InstallationUnitProvider::GetInstance(). GetCurrentInstallationUnit().DoPostInstallAction(hwnd); } LOG_BOOL(result); Win::SetWindowLongPtr(hwnd, DWLP_MSGRESULT, result ? TRUE : FALSE); if (!result) { // clean up the InstallationUnits so that all the data must be re-read if // if CYS automatically restarts InstallationUnitProvider::GetInstance().Destroy(); } return true; } bool FinishPage::OnQueryCancel() { LOG_FUNCTION(FinishPage::OnQueryCancel); bool result = false; // set the rerun state to false so the wizard doesn't // just restart itself // State::GetInstance().SetRerunWizard(false); Win::SetWindowLongPtr( hwnd, DWLP_MSGRESULT, result ? TRUE : FALSE); return true; } bool FinishPage::OnNotify( HWND /*windowFrom*/, UINT_PTR controlIDFrom, UINT code, LPARAM lParam) { // LOG_FUNCTION(FinishPage::OnCommand); bool result = false; if (controlIDFrom == IDC_FINISH_MESSAGE) { switch (code) { case NM_CLICK: case NM_RETURN: { int linkIndex = LinkIndexFromNotifyLPARAM(lParam); InstallationUnitProvider::GetInstance(). GetCurrentInstallationUnit().FinishLinkSelected(linkIndex, hwnd); } default: { // do nothing break; } } } else if (controlIDFrom == IDC_LOG_STATIC) { switch (code) { case NM_CLICK: case NM_RETURN: { ::OpenLogFile(); } default: break; } } return result; }