|
|
//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1994 **
//*********************************************************************
//
// INTRO.C - Functions for introductory Wizard pages
//
// HISTORY:
//
// 05/13/98 donaldm Created.
//
//*********************************************************************
#include "pre.h"
#include "windowsx.h"
#include "tutor.h"
#include "icwcfg.h"
#include "icwextsn.h"
extern UINT GetDlgIDFromIndex(UINT uPageIndex);
extern CICWTutorApp* g_pICWTutorApp; extern BOOL g_bNewIspPath; extern BOOL g_bAutoConfigPath; extern BOOL g_bManualPath; extern BOOL g_bLanPath; extern BOOL g_bSkipIntro; extern BOOL MyIsSmartStartEx(LPTSTR lpszConnectionName, DWORD dwBufLen);
BOOL g_bExistConnect = FALSE; BOOL g_bCheckForOEM = FALSE; TCHAR g_szAnsiName [ICW_MAX_RASNAME + 1] = TEXT("\0");
/*******************************************************************
NAME: ReadOEMOffline
SYNOPSIS: Read OfflineOffers flag from the oeminfo.ini file
ENTRY: None
RETURN: True if OEM offline is read
********************************************************************/ BOOL ReadOEMOffline(BOOL *bOEMOffline) { // OEM code
//
TCHAR szOeminfoPath[MAX_PATH + 1]; TCHAR *lpszTerminator = NULL; TCHAR *lpszLastChar = NULL; BOOL bRet = FALSE;
// If we already checked, don't do it again
if (!g_bCheckForOEM) { if( 0 != GetSystemDirectory( szOeminfoPath, MAX_PATH + 1 ) ) { lpszTerminator = &(szOeminfoPath[ lstrlen(szOeminfoPath) ]); lpszLastChar = CharPrev( szOeminfoPath, lpszTerminator );
if( TEXT('\\') != *lpszLastChar ) { lpszLastChar = CharNext( lpszLastChar ); *lpszLastChar = '\\'; lpszLastChar = CharNext( lpszLastChar ); *lpszLastChar = '\0'; }
lstrcat( szOeminfoPath, ICW_OEMINFO_FILENAME );
//Default oem code must be NULL if it doesn't exist in oeminfo.ini
if (1 == GetPrivateProfileInt(ICW_OEMINFO_ICWSECTION, ICW_OEMINFO_OFFLINEOFFERS, 0, szOeminfoPath)) { // Check if file already exists
if (0xFFFFFFFF != GetFileAttributes(ICW_OEMINFOPath)) { bRet = TRUE; } } } *bOEMOffline = bRet; g_bCheckForOEM = TRUE; } return TRUE; }
/*******************************************************************
NAME: SetNextPage
SYNOPSIS: Determine whether we should proceed to icwconn.dll
********************************************************************/ BOOL SetNextPage(HWND hDlg, UINT* puNextPage, BOOL *pfKeepHistory) { BOOL bRetVal = FALSE; // If we have switched path, then redownload
if (gpWizardState->bDoneRefServDownload) { if ( (DWORD) (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_AUTOCONFIG) != (DWORD) (gpWizardState->dwLastSelection & ICW_CFGFLAG_AUTOCONFIG) ) { gpWizardState->bDoneRefServDownload = FALSE; } }
// Read OEM offline flag
ReadOEMOffline(&gpWizardState->cmnStateData.bOEMOffline);
//
// Make sure we are not in autoconfig
//
if (!(gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_AUTOCONFIG)) { if (gpWizardState->cmnStateData.bOEMOffline && gpWizardState->cmnStateData.bOEMEntryPt) gpWizardState->bDoneRefServDownload = TRUE; } gpWizardState->dwLastSelection = gpWizardState->cmnStateData.dwFlags;
// If we have completed the download, then list just jump to the next page
if (gpWizardState->bDoneRefServDownload) //if (TRUE)
{ int iReturnPage = 0;
if (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_BRANDED) iReturnPage = gpWizardState->uPageHistory[gpWizardState->uPagesCompleted]; else { if (gpWizardState->uPagesCompleted > 0) { iReturnPage = gpWizardState->uPageHistory[gpWizardState->uPagesCompleted-1]; } else { iReturnPage = gpWizardState->uCurrentPage; } }
if (LoadICWCONNUI(GetParent(hDlg), GetDlgIDFromIndex(iReturnPage), IDD_PAGE_DEFAULT, gpWizardState->cmnStateData.dwFlags)) { if( DialogIDAlreadyInUse( g_uICWCONNUIFirst) ) { // we're about to jump into the external apprentice, and we don't want
// this page to show up in our history list
*puNextPage = g_uICWCONNUIFirst; // Backup 1 in the history list, since we the external pages navigate back
// we want this history list to be in the correct spot. Normally
// pressing back would back up the history list, and figure out where to
// go, but in this case, the external DLL just jumps right back in.
// We also don't want to keep histroy.
if (!(gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_BRANDED)) { if (gpWizardState->uPagesCompleted > 0) { gpWizardState->uPagesCompleted--; } else { if (pfKeepHistory) { *pfKeepHistory = FALSE; } } } bRetVal = TRUE; } } } return bRetVal;
}
/*******************************************************************
NAME: SetIntroNextPage
SYNOPSIS: Determine whether we what is the next page of intro page
********************************************************************/ void SetIntroNextPage(HWND hDlg, UINT* puNextPage, BOOL *pfKeepHistory) { short wNumLocations; long lCurrLocIndex; BOOL bRetVal;
*puNextPage = ORD_PAGE_AREACODE; // Check dialing location here to prevent flashing of areacode page
gpWizardState->pTapiLocationInfo->GetTapiLocationInfo(&bRetVal); gpWizardState->pTapiLocationInfo->get_wNumberOfLocations(&wNumLocations, &lCurrLocIndex); if (1 >= wNumLocations) { BSTR bstrAreaCode = NULL; DWORD dwCountryCode;
*puNextPage = ORD_PAGE_REFSERVDIAL; gpWizardState->pTapiLocationInfo->get_lCountryCode((long *)&dwCountryCode); gpWizardState->pTapiLocationInfo->get_bstrAreaCode(&bstrAreaCode); gpWizardState->cmnStateData.dwCountryCode = dwCountryCode; lstrcpy(gpWizardState->cmnStateData.szAreaCode, W2A(bstrAreaCode)); SysFreeString(bstrAreaCode);
// we can skip area code page
*puNextPage = ORD_PAGE_REFSERVDIAL; SetNextPage(hDlg, puNextPage, pfKeepHistory); } }
INT_PTR CALLBACK ExistingConnectionCmdProc ( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: { // put the dialog in the center of the screen
RECT rc; TCHAR szFmt [MAX_MESSAGE_LEN]; TCHAR *args [1]; LPVOID pszIntro = NULL;
GetWindowRect(hDlg, &rc); SetWindowPos(hDlg, NULL, ((GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2), ((GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 2), 0, 0, SWP_NOSIZE | SWP_NOACTIVATE);
args[0] = (LPTSTR) lParam; LoadString(g_hInstance, IDS_EXIT_CONN, szFmt, ARRAYSIZE(szFmt)); if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY, szFmt, 0, 0, (LPTSTR)&pszIntro, 0, (va_list*)args)) { SetWindowText(GetDlgItem(hDlg, IDC_EXIT_CONN), (LPTSTR) pszIntro); }
if (pszIntro) { LocalFree(pszIntro); } break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hDlg,TRUE); break;
case IDCANCEL: EndDialog(hDlg,FALSE); break; } break; }
return FALSE; }
/*******************************************************************
NAME: IntroInitProc
SYNOPSIS: Called when "Intro" page is displayed
ENTRY: hDlg - dialog window fFirstInit - TRUE if this is the first time the dialog is initialized, FALSE if this InitProc has been called before (e.g. went past this page and backed up)
********************************************************************/ BOOL CALLBACK IntroInitProc ( HWND hDlg, BOOL fFirstInit, UINT *puNextPage ) { if (!(gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_BRANDED) &&!(gpWizardState->cmnStateData.bOEMCustom) ) { // This is the very first page, so do not allow back
PropSheet_SetWizButtons(GetParent(hDlg),PSWIZB_NEXT); } if (fFirstInit) { //#ifdef NON_NT5
// Hide the manual option when running in run once
if (g_bRunOnce) { ShowWindow(GetDlgItem(hDlg, IDC_ICWMAN), SW_HIDE); EnableWindow(GetDlgItem(hDlg, IDC_ICWMAN), FALSE); } // initialize radio buttons
Button_SetCheck(GetDlgItem(hDlg, IDC_RUNNEW), g_bNewIspPath); Button_SetCheck(GetDlgItem(hDlg, IDC_RUNAUTO), g_bAutoConfigPath); Button_SetCheck(GetDlgItem(hDlg, IDC_ICWMAN), g_bManualPath || g_bLanPath);
if (SMART_QUITICW == MyIsSmartStartEx(g_szAnsiName, ARRAYSIZE(g_szAnsiName))) g_bExistConnect = TRUE; /* #else
//We only support manual path for NT5 for NT5 beta3 release.
EnableWindow(GetDlgItem(hDlg, IDC_RUNNEW), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_RUNAUTO), FALSE); Button_SetCheck(GetDlgItem(hDlg, IDC_ICWMAN), TRUE); #endif */
} else { // If branded, then our template is intro2
if ((gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_BRANDED) || (gpWizardState->cmnStateData.bOEMCustom) ) { gpWizardState->uCurrentPage = ORD_PAGE_INTRO2; } else { gpWizardState->uCurrentPage = ORD_PAGE_INTRO; } // If it is reboot from manual wiz, advance to the manual option page
if (g_bManualPath || g_bLanPath) { gpWizardState->uPageHistory[gpWizardState->uPagesCompleted] = gpWizardState->uCurrentPage; gpWizardState->uPagesCompleted++; TCHAR szTitle[MAX_TITLE]; LoadString(g_hInstance, IDS_APPNAME, szTitle, ARRAYSIZE(szTitle)); SetWindowText(GetParent(hDlg), szTitle);
*puNextPage = ORD_PAGE_MANUALOPTIONS; }
if (g_bSkipIntro) { PropSheet_PressButton(GetParent(hDlg), PSBTN_NEXT); g_bSkipIntro = FALSE; } } return TRUE; }
/*******************************************************************
NAME: IntroOKProc
SYNOPSIS: Called when Next or Back btns pressed from "Intro" page
ENTRY: hDlg - dialog window fForward - TRUE if 'Next' was pressed, FALSE if 'Back' puNextPage - if 'Next' was pressed, proc can fill this in with next page to go to. This parameter is ingored if 'Back' was pressed. pfKeepHistory - page will not be kept in history if proc fills this in with FALSE.
EXIT: returns TRUE to allow page to be turned, FALSE to keep the same page.
********************************************************************/ BOOL CALLBACK IntroOKProc ( HWND hDlg, BOOL fForward, UINT *puNextPage, BOOL *pfKeepHistory ) { ASSERT(puNextPage);
if (fForward) { gpWizardState->lRefDialTerminateStatus = ERROR_SUCCESS; gpWizardState->cmnStateData.dwFlags &= ~(DWORD)ICW_CFGFLAG_AUTOCONFIG; gpWizardState->cmnStateData.dwFlags &= ~(DWORD)ICW_CFGFLAG_SMARTREBOOT_NEWISP; gpWizardState->cmnStateData.dwFlags &= ~(DWORD)ICW_CFGFLAG_SMARTREBOOT_AUTOCONFIG; // this is seperate from ICW_CFGFLAG_AUTOCONFIG so as not to confuse function of flag
gpWizardState->cmnStateData.dwFlags &= ~(DWORD)ICW_CFGFLAG_SMARTREBOOT_MANUAL; gpWizardState->cmnStateData.dwFlags &= ~(DWORD)ICW_CFGFLAG_SMARTREBOOT_LAN;
// read radio button state
if( IsDlgButtonChecked(hDlg, IDC_RUNNEW) ) { gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_SMARTREBOOT_NEWISP; if (g_bExistConnect) { if (!DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_EXISTINGCONNECTION),hDlg, ExistingConnectionCmdProc, (LPARAM)g_szAnsiName)) { gfQuitWizard = TRUE; // Quit the wizard
return FALSE; } } // Do the system config checks
if (!gpWizardState->cmnStateData.bSystemChecked && !ConfigureSystem(hDlg)) { // gfQuitWizard will be set in ConfigureSystem if we need to quit
return FALSE; } // OK, give me the next page
SetIntroNextPage(hDlg, puNextPage, pfKeepHistory); } else if( IsDlgButtonChecked(hDlg, IDC_RUNAUTO) ) { gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_SMARTREBOOT_AUTOCONFIG;
// Do the system config checks
if (!gpWizardState->cmnStateData.bSystemChecked && !ConfigureSystem(hDlg)) { // gfQuitWizard will be set in ConfigureSystem if we need to quit
return FALSE; } // The system config check is done in Inetcfg
gpWizardState->cmnStateData.dwFlags |= ICW_CFGFLAG_AUTOCONFIG;
SetIntroNextPage(hDlg, puNextPage, pfKeepHistory); } else if( IsDlgButtonChecked(hDlg, IDC_ICWMAN) ) { *puNextPage = ORD_PAGE_MANUALOPTIONS; } } else if (!(gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_BRANDED)) { // Were are out of here, since we cannot go back from the first page
gpWizardState->uPagesCompleted = 1; gfUserBackedOut = TRUE; gfQuitWizard = TRUE; } else if (gpWizardState->cmnStateData.dwFlags & ICW_CFGFLAG_BRANDED) gpWizardState->uPagesCompleted = 1;
return TRUE; }
BOOL CALLBACK IntroCmdProc(HWND hDlg, WPARAM wParam, LPARAM lParam) { switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case BN_CLICKED: { if (GET_WM_COMMAND_ID(wParam, lParam) == IDC_TUTORIAL) g_pICWTutorApp->LaunchTutorApp(); break; } case BN_DBLCLK: { switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_RUNNEW: case IDC_RUNAUTO: case IDC_ICWMAN: { // somebody double-clicked a radio button
// auto-advance to the next page
PropSheet_PressButton(GetParent(hDlg), PSBTN_NEXT); break; } } break; } }
return TRUE; }
|