#include "precomp.h"
#include // for html help calls
#include
#include "wizard.rcv" // for VER_PRODUCTVERSION_STR only
#include "adjustui.h"
#include "ieaklite.h"
#include "ie4comp.h"
CCabMappings g_cmCabMappings;
REVIEWINFO g_rvInfo; // a structure containing the review information
HWND g_hWizard;
TCHAR g_szCustIns[MAX_PATH] = TEXT("");
TCHAR g_szSrcRoot[MAX_PATH] = TEXT(""); //Batch mode only: use settings in g_szSrcRoot to build package in g_szBuildRoot.
TCHAR g_szBuildRoot[MAX_PATH] = TEXT("");
TCHAR g_szBuildTemp[MAX_PATH] = TEXT("");
TCHAR g_szWizPath[MAX_PATH];
TCHAR g_szWizRoot[MAX_PATH];
TCHAR g_szTitle[MAX_PATH];
TCHAR g_szLogFile[MAX_PATH] = TEXT("");
HANDLE g_hLogFile = NULL; //Logfile handle;
extern TCHAR g_szDefInf[];
extern TCHAR g_szTempSign[];
BOOL g_fDownload = TRUE;
BOOL g_fCD = FALSE;
BOOL g_fLAN = FALSE;
BOOL g_fBrandingOnly = FALSE;
BOOL g_fBranded = FALSE;
BOOL g_fIntranet = FALSE;
BOOL g_fMailNews95 = FALSE;
BOOL g_fLangInit = FALSE;
BOOL g_fSrcDirChanged = TRUE;
static BOOL s_fDestDirChanged = TRUE;
BOOL g_fDisableIMAPPage = FALSE;
extern TCHAR g_szDeskTemp[];
extern int g_iInstallOpt;
extern TCHAR g_szInstallFolder[];
extern TCHAR s_szBannerText[MAX_PATH];
HANDLE g_hThread = NULL; // handle to DownloadSiteThreadProc
extern HANDLE g_hAVSThread;
extern BOOL g_fOptCompInit;
BOOL g_fCancelled = FALSE;
BOOL g_fDone = FALSE;
BOOL g_fKeyGood = FALSE;
static BOOL s_fNT5;
int g_iKeyType = KEY_TYPE_STANDARD;
TCHAR g_szKey[16] ;
extern int MakeKey(TCHAR *, int);
PROPSHEETPAGE g_psp[NUM_PAGES];
static HPROPSHEETPAGE s_ahPsp[NUM_PAGES];
static BOOL s_fPageEnabled[NUM_PAGES] =
{
TRUE, TRUE, TRUE, TRUE
};
int g_iCurPage;
RECT g_dtRect;
TCHAR g_szLanguage[16];
extern TCHAR g_szActLang[];
TCHAR g_aszLang[NUMLANG][16];
DWORD g_aLangId[NUMLANG];
BOOL g_fDemo = FALSE;
#define MAX_STDOPT 5
#define MIN_CUSTOPT 6
#define MAX_CUSTOPT 7
#define OPT_CUST1 6
#define OPT_CUST2 7
extern BOOL CheckKey(LPTSTR szKey);
static HKEY s_hkIEAKUser;
BOOL g_fUseIEWelcomePage = FALSE;
static TCHAR s_szSourceDir[MAX_PATH] = TEXT("");
TCHAR g_szLoadedIns[MAX_PATH] = TEXT("");
static BOOL s_fLoadIns;
static BOOL s_fAppendLang;
BOOL g_fBatch = FALSE;
BOOL g_fBatch2 = FALSE; //The second batch mode
static TCHAR s_szType[16];
int s_iType;
extern BOOL g_fServerICW;
extern BOOL g_fServerKiosk;
extern BOOL g_fServerless;
extern BOOL g_fNoSignup;
extern BOOL g_fSkipServerIsps;
extern BOOL g_fSkipIspIns;
extern HANDLE g_hDownloadEvent;
int g_iDownloadState = 0, g_nLangs = 0;
HWND g_hDlg = 0;
extern void IE4BatchSetup(void);
extern BOOL InitList(HWND hwnd, UINT id);
extern BOOL g_fSilent, g_fStealth;
extern BOOL g_fUrlsInit;
extern BOOL g_fLocalMode;
extern BOOL g_fInteg, g_fImportConnect;
extern PCOMPONENT g_paComp;
extern UINT g_uiNumCabs;
extern PCOMP_VERSION g_rgCompVer;
extern HFONT g_hFont;
DWORD g_dwPlatformId = PLATFORM_WIN32;
// new cif format stuff
CCifFile_t *g_lpCifFileNew = NULL;
CCifRWFile_t *g_lpCifRWFile = NULL;
CCifRWFile_t *g_lpCifRWFileDest = NULL;
CCifRWFile_t *g_lpCifRWFileVer = NULL;
// g_hBaseDllHandle is used by DelayLoadFailureHook() -- defined in ieakutil.lib
// for more info, read the Notes section in ieak5\ieakutil\dload.cpp
HANDLE g_hBaseDllHandle;
//OCW specific
BOOL g_fOCW = FALSE;
BOOL g_fOCWCancel = FALSE;
TCHAR g_szParentWindowName[MAX_PATH];
BOOL ParseCmdLine(LPSTR lpCmdLine);
void PositionWindow(HWND hWnd);
//
extern TCHAR g_szIEAKProg[MAX_PATH];
void GetIEAKDir(LPTSTR szDir);
extern HBITMAP g_hBannerBmp;
extern HWND g_hWait;
extern LPTSTR GetOutputPlatformDir();
void GenerateCustomIns();
extern void WriteMSTrustKey(BOOL bSet);
DWORD g_wCurLang;
static HWND s_hWndHelp = NULL;
void CleanUp()
{
if (g_hAVSThread != NULL)
{
while ((MsgWaitForMultipleObjects(1, &g_hAVSThread, FALSE, INFINITE, QS_ALLINPUT)) != WAIT_OBJECT_0)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CloseHandle(g_hAVSThread);
}
if (g_hThread != NULL)
{
while ((MsgWaitForMultipleObjects(1, &g_hThread, FALSE, INFINITE, QS_ALLINPUT)) != WAIT_OBJECT_0)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CloseHandle(g_hThread);
}
if (g_paComp != NULL)
{
for (PCOMPONENT pComp = g_paComp; ISNONNULL(pComp->szSection); pComp++)
{
if (pComp->pszAVSDupeSections != NULL)
CoTaskMemFree(pComp->pszAVSDupeSections);
}
LocalFree(g_paComp);
}
if (g_rgCompVer)
{
LocalFree(g_rgCompVer);
}
if (g_hFont != NULL) DeleteObject(g_hFont);
if (g_lpCifRWFile != NULL)
{
delete g_lpCifRWFile;
g_lpCifRWFile = NULL;
}
if (g_lpCifFileNew != NULL)
{
delete g_lpCifFileNew;
g_lpCifFileNew = NULL;
}
if (g_lpCifRWFileDest != NULL)
{
delete g_lpCifRWFileDest;
g_lpCifRWFileDest = NULL;
}
if (g_lpCifRWFileVer != NULL)
{
delete g_lpCifRWFileVer;
g_lpCifRWFileVer = NULL;
}
if (g_hBannerBmp != NULL)
DeleteObject(g_hBannerBmp);
if (ISNONNULL(g_szDeskTemp))
PathRemovePath(g_szDeskTemp);
}
int _stdcall ModuleEntry(void)
{
int i;
STARTUPINFOA si;
LPSTR pszCmdLine = GetCommandLineA();
if ( *pszCmdLine == '\"' ) {
/*
* Scan, and skip over, subsequent characters until
* another double-quote or a null is encountered.
*/
while ( *++pszCmdLine && (*pszCmdLine != '\"') )
;
/*
* If we stopped on a double-quote (usual case), skip
* over it.
*/
if ( *pszCmdLine == '\"' )
pszCmdLine++;
}
else {
while (*pszCmdLine > ' ')
pszCmdLine++;
}
/*
* Skip past any white space preceeding the second token.
*/
while (*pszCmdLine && (*pszCmdLine <= ' ')) {
pszCmdLine++;
}
si.dwFlags = 0;
GetStartupInfoA(&si);
i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine,
si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT);
ExitProcess(i);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, int)
{
MSG msg;
HANDLE hMutex;
HRESULT hrOle;
int iRetVal;
// initialize g_hBaseDllHandle which is used by DelayLoadFailureHook()
// in ieak5\ieakutil\dload.cpp
g_hBaseDllHandle = hInstance;
hMutex = NULL;
// allow only one instance running at a time, except for build lab batch mode
// also if ie6 is not installed, bail out
if (lpCmdLine == NULL ||
*lpCmdLine == '\0' ||
StrCmpNIA(lpCmdLine, "/o", 2) == 0 ||
StrCmpNIA(lpCmdLine, "/p", 2) == 0)
{
DWORD dwIEVer;
hMutex = CreateMutex(NULL, TRUE, TEXT("IEAK6Wizard.Mutex"));
if (hMutex != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
ErrorMessageBox(NULL, IDS_ERROR_MULTWIZ);
return ERROR_CANCELLED;
}
dwIEVer = GetIEVersion();
if (HIWORD(dwIEVer) < 6)
{
ErrorMessageBox(NULL, IDS_NOIE);
return ERROR_CANCELLED;
}
}
ZeroMemory(&g_rvInfo, sizeof(g_rvInfo));
g_rvInfo.hinstExe = hInstance;
g_rvInfo.hInst = LoadLibrary(TEXT("ieakui.dll"));
if (g_rvInfo.hInst == NULL)
return ERROR_CANCELLED;
// if the class registration fails, return.
if (!InitApplication(hInstance))
{
FreeLibrary(g_rvInfo.hInst);
return ERROR_CANCELLED;
}
SHCreateKeyHKCU(RK_IEAK_SERVER_MAIN, KEY_ALL_ACCESS, &s_hkIEAKUser);
g_wCurLang = GetUserDefaultLCID() & 0xFFFF;
s_fNT5 = IsOS(OS_NT5);
hrOle = CoInitialize(NULL);
GetIEAKDir(g_szWizPath);
StrCpy(g_szWizRoot, g_szWizPath);
CharUpper(g_szWizRoot);
LoadString(g_rvInfo.hInst, IDS_TITLE, g_szTitle, countof(g_szTitle));
//get the mode -- NOTE: THIS MUST COME BEFORE PARSECMDLINE SO THAT COMMANDLINE OPTIONS OVERRIDE THE REG ENTRY!!!
DWORD dwSize = sizeof(DWORD);
if (SHGetValue(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\IEAK"), TEXT("Mode"), NULL, &s_iType, &dwSize) != ERROR_SUCCESS)
s_iType = INTRANET; //if there is no reg entry, default to corp mode
switch (s_iType)
{
case REDIST://icp
StrCpy(s_szType, TEXT("REDIST"));
g_fBranded = FALSE;
g_iKeyType = KEY_TYPE_SUPER;
g_fIntranet = g_fSilent = FALSE;
break;
case BRANDED://isp
StrCpy(s_szType, TEXT("BRANDED"));
g_fBranded = TRUE;
g_iKeyType = KEY_TYPE_SUPER;
g_fIntranet = g_fSilent = FALSE;
break;
case INTRANET:
default:
StrCpy(s_szType, TEXT("INTRANET"));
g_iKeyType = KEY_TYPE_SUPERCORP;
g_fBranded = TRUE;
g_fIntranet = TRUE;
break;
}
*g_szKey = TEXT('\0');
if (lpCmdLine != NULL && *lpCmdLine)
if (!ParseCmdLine(lpCmdLine))
{
FreeLibrary(g_rvInfo.hInst);
return ERROR_CANCELLED;
}
if (*g_szLogFile != 0 && (g_hLogFile = CreateFile(g_szLogFile, GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL)) == NULL)
{
MessageBox(NULL, TEXT("Cannot open log file"), NULL, MB_OK);
return ERROR_CANCELLED;
}
// Perform initializations that apply to a specific instance
if (!InitInstance(hInstance))
{
FreeLibrary(g_rvInfo.hInst);
return ERROR_CANCELLED;
}
// Acquire and dispatch messages until a WM_QUIT message is received.
iRetVal = GetMessage(&msg, NULL, 0, 0);
while (iRetVal != -1 && iRetVal != 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
iRetVal = GetMessage(&msg, NULL, 0, 0);
}
CleanUp();
if (S_OK == hrOle)
CoUninitialize();
if (g_hLogFile)
CloseHandle(g_hLogFile);
#ifdef DBG
if (g_fBatch || g_fBatch2 || MessageBox(NULL, TEXT("OK to Delete Temp Files"), TEXT("Wizard Complete"), MB_YESNO) == IDYES)
#endif
if (lstrlen(g_szBuildTemp))
PathRemovePath(g_szBuildTemp);
RegCloseKey(s_hkIEAKUser);
WriteMSTrustKey(FALSE); // Mark MS as a trusted provider
if (s_hWndHelp != NULL)
SendMessage(s_hWndHelp, WM_CLOSE, 0, 0L);
FreeLibrary(g_rvInfo.hInst);
if (hMutex != NULL)
CloseHandle(hMutex);
if (g_fOCWCancel)
return ERROR_CANCELLED;
return (int) msg.wParam;
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wcSample;
wcSample.style = 0;
wcSample.lpfnWndProc = MainWndProc;
wcSample.cbClsExtra = 0;
wcSample.cbWndExtra = 0;
wcSample.hInstance = hInstance;
wcSample.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIZARD));
wcSample.hCursor = LoadCursor(NULL, IDC_ARROW);
wcSample.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);
wcSample.lpszMenuName = NULL;
wcSample.lpszClassName = TEXT("SampleWClass");
return RegisterClass(&wcSample);
}
BOOL ParseCmdLine(LPSTR lpCmdLine)
{
TCHAR szCmdLine[MAX_PATH];
LPTSTR pParam;
TCHAR szWrkLang[8] = TEXT("en");
HKEY hKey;
DWORD dwSize;
TCHAR szType[16]; //Mode: CORP(INTRANET), ICP(RETAIL) or ISP(BRANDED)
*szType = TEXT('\0');
A2Tbux(lpCmdLine, szCmdLine);
CharUpper(szCmdLine);
pParam = szCmdLine;
while (pParam != NULL)
{
pParam = StrChr(pParam, TEXT('/'));
if (pParam == NULL)
break;
switch (*++pParam)
{
case TEXT('S'): // srcpath
if ( *(pParam+2) == '\"' )
{
pParam++; //skip the first quote, we don't want the quotes
StrCpyN(g_szSrcRoot, pParam + 2, countof(g_szSrcRoot));
StrTok(g_szSrcRoot, TEXT("\"\n\r\t")); //instead of stopping w/ a space, stop w/ "
}
else
{
StrCpyN(g_szSrcRoot, pParam + 2, countof(g_szSrcRoot));
StrTok(g_szSrcRoot, TEXT(" \n\r\t"));
}
pParam += StrLen(g_szSrcRoot);
break;
case TEXT('I'):
case TEXT('D'):
if ( *(pParam+2) == '\"' )
{
pParam++; //skip the first quote, we don't want the quotes
StrCpyN(g_szBuildRoot, pParam + 2, countof(g_szBuildRoot));
StrTok(g_szBuildRoot, TEXT("\"\n\r\t")); //instead of stopping w/ a space, stop w/ "
}
else
{
StrCpyN(g_szBuildRoot, pParam + 2, countof(g_szBuildRoot));
StrTok(g_szBuildRoot, TEXT(" \n\r\t"));
}
pParam += StrLen(g_szBuildRoot);
break;
case TEXT('K'):
StrCpyN(g_szKey, pParam + 2, countof(g_szKey));
StrTok(g_szKey, TEXT(" \n\r\t"));
pParam += StrLen(g_szKey);
break;
case TEXT('M'): // Mode: corp, isp or icp
StrCpyN(szType, pParam + 2, countof(szType));
StrTok(szType, TEXT(" \n\r\t"));
pParam += StrLen(szType);
break;
case TEXT('Q'): // logfile
if ( *(pParam+2) == '\"' )
{
pParam++; //skip the first quote, we don't want the quotes
StrCpyN(g_szLogFile, pParam + 2, countof(g_szLogFile));
StrTok(g_szLogFile, TEXT("\"\n\r\t")); //instead of stopping w/ a space, stop w/ "
}
else
{
StrCpyN(g_szLogFile, pParam + 2, countof(g_szLogFile));
StrTok(g_szLogFile, TEXT(" \n\r\t"));
}
pParam += StrLen(g_szLogFile);
break;
case TEXT('L'):
StrCpyN(szWrkLang, pParam + 2, 3);
pParam += 3;
break;
case TEXT('O'):
g_fOCW = TRUE;
g_dwPlatformId = PLATFORM_WIN32;
// (a-saship) read all the data from the registry from HKCU\Software\Microsoft\IEAK since
// office reads/writes data from/to this location. This is due to the fact that IEAK5_5
// changed the registry location to HKCU\Software\Microsoft\IEAK5_5 and office is not aware
// of it. These values is only used by Office and hence we are safe here.
if (RegOpenKeyEx(HKEY_CURRENT_USER, RK_IEAK, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
dwSize = sizeof(g_szKey);
SHQueryValueEx(hKey, TEXT("KeyCode"), NULL, NULL, (LPVOID) g_szKey, &dwSize);
dwSize = sizeof(g_szIEAKProg);
SHQueryValueEx(hKey, TEXT("SourceDir"), NULL, NULL, (LPVOID) g_szIEAKProg, &dwSize);
if (*g_szIEAKProg)
{
PathAddBackslash(g_szIEAKProg);
StrCpy(s_szSourceDir, g_szIEAKProg);
}
dwSize = sizeof(g_szBuildRoot);
SHQueryValueEx(hKey, TEXT("TargetDir"), NULL, NULL, (LPVOID) g_szBuildRoot, &dwSize);
if (*g_szBuildRoot == TEXT('\0'))
StrCpy(g_szBuildRoot, g_szIEAKProg);
if (*g_szBuildRoot)
PathRemoveBackslash(g_szBuildRoot);
s_fAppendLang = TRUE;
dwSize = sizeof(g_szParentWindowName);
SHQueryValueEx(hKey, TEXT("ParentWindowName"), NULL, NULL, (LPVOID) g_szParentWindowName, &dwSize);
RegCloseKey(hKey);
}
break;
}
}
*g_szLanguage = TEXT('\\');
StrCpy(&g_szLanguage[1], szWrkLang);
g_szLanguage[3] = TEXT('\\');
g_szLanguage[4] = TEXT('\0');
StrCpy(g_szActLang, szWrkLang);
if ((*g_szKey != TEXT('\0')) && (!szType[0])) //if they set a key, we should override the mode
{
CheckKey(g_szKey);
if (g_iKeyType == KEY_TYPE_SUPERCORP)
{
StrCpy(s_szType, TEXT("INTRANET"));
StrCpy(szType, TEXT("CORP"));
}
else StrCpy(szType, TEXT("ICP"));
}
/* removed--this is really crappy validation code and also makes it impossible to have spaces in paths
if (StrCmpN(g_szBuildRoot, TEXT("\\\\"), 2) &&
StrCmpN(&g_szBuildRoot[1], TEXT(":\\"), 2))
{
ErrorMessageBox(NULL, IDS_NEEDPATH);
return FALSE;
}
*/
if (StrLen(g_szBuildRoot) <= 3)
{
ErrorMessageBox(NULL, IDS_ROOTILLEGAL);
return FALSE;
}
if ((!PathIsDirectory(g_szBuildRoot)) && (!CreateDirectory(g_szBuildRoot,NULL)))
{
TCHAR szMsg[MAX_PATH];
TCHAR szTemp[2 * MAX_PATH];
LoadString(g_rvInfo.hInst, IDS_BADDIR, szMsg, countof(szMsg));
wnsprintf(szTemp, countof(szTemp), szMsg, g_szBuildRoot);
MessageBox(NULL, szTemp, g_szTitle, MB_OK | MB_SETFOREGROUND | MB_ICONEXCLAMATION);
return FALSE;
}
GetTempPath(MAX_PATH, g_szBuildTemp);
PathAppend(g_szBuildTemp, TEXT("iedktemp"));
PathRemovePath(g_szBuildTemp);
PathCreatePath(g_szBuildTemp);
GenerateCustomIns();
if (g_szSrcRoot[0])
g_fBatch2 = TRUE;
else
g_fBatch = TRUE;
if (szType[0])
{
if ( 0 == StrCmpI(szType, TEXT("CORP")))
{
// if type CORP, set CorpMode=1; this allows the Profile Manager to run
DWORD dwVal = 1;
RegSetValueEx(s_hkIEAKUser, TEXT("CorpMode"), 0, REG_DWORD, (CONST BYTE *) &dwVal, sizeof(dwVal));
s_iType = INTRANET;
}
else if ( 0 == StrCmpI(szType, TEXT("ISP")))
{
RegDeleteValue(s_hkIEAKUser, TEXT("CorpMode"));
s_iType = BRANDED;
}
else if ( 0 == StrCmpI(szType, TEXT("ICP")))
{
RegDeleteValue(s_hkIEAKUser, TEXT("CorpMode"));
s_iType = REDIST;
}
else
{
if(g_hLogFile)
{
TCHAR szError[MAX_PATH];
DWORD dwNumWritten;
LoadString(g_rvInfo.hInst,IDS_ERROR_INVALIDMODE,szError,MAX_PATH);
FormatString(szError,szType);
WriteFile(g_hLogFile,szError,StrLen(szError),&dwNumWritten,NULL);
}
return FALSE;
}
}
else
s_iType = GetPrivateProfileInt( IS_BRANDING, TEXT("Type"), REDIST, g_szCustIns );
switch (s_iType)
{
case REDIST:
g_fBranded = g_fIntranet = g_fSilent = FALSE;
break;
case BRANDED:
case BRANDEDPROXY:
g_fBranded = TRUE;
g_fIntranet = g_fSilent = FALSE;
break;
case INTRANET:
g_fIntranet = g_fBranded = TRUE;
break;
}
if (g_fOCW)
{
// set to corp mode
g_fIntranet = g_fBranded = TRUE;
s_iType = INTRANET;
// set to flat install
g_fDownload = g_fCD = g_fBrandingOnly = FALSE;
g_fLAN = TRUE;
return TRUE;
}
IE4BatchSetup();
return TRUE;
}
//
//
// FUNCTION: InitInstance(HANDLE)
//
// PURPOSE: Creates the main window.
//
// COMMENTS: N/A
//
//
HWND g_hWndCent;
BOOL InitInstance(HINSTANCE hInstance)
{
InitCommonControls();
GetWindowRect(GetDesktopWindow(), &g_dtRect);
g_hWndCent = CreateWindow(
TEXT("SampleWClass"),
TEXT("IEAK"),
WS_POPUPWINDOW | WS_CAPTION,
g_dtRect.right/2, g_dtRect.bottom/2, 0, 0,
HWND_DESKTOP,
NULL,
hInstance,
(HINSTANCE) NULL);
ShowWindow(g_hWndCent, SW_SHOWNORMAL);
UpdateWindow(g_hWndCent);
PostMessage(g_hWndCent, WM_COMMAND, IDM_WIZARD, (LPARAM) 0);
return (TRUE);
}
IEAKLITEINFO g_IEAKLiteArray[NUM_GROUPS] = {
{IDS_IL_ACTIVESETUP, IDS_IL_ACTIVESETUPDESC, IDS_IL_ACTIVESETUPDESC, IDS_IL_ACTIVESETUPDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_CORPINSTALL, IDS_IL_CORPINSTALLDESC, IDS_IL_CORPINSTALLDESC, IDS_IL_CORPINSTALLDESC, -2, FALSE, FALSE, TRUE, TRUE},
{IDS_IL_CABSIGN, IDS_IL_CABSIGNDESC, IDS_IL_CABSIGNDESC, IDS_IL_CABSIGNDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_ICM, IDS_IL_ICMDESC, IDS_IL_ICMDESC, IDS_IL_ICMDESC, -2, FALSE, TRUE, TRUE, TRUE},
{IDS_IL_BROWSER, IDS_IL_BROWSERDESC, IDS_IL_BROWSERDESC, IDS_IL_BROWSERDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_URL, IDS_IL_URLDESC, IDS_IL_URLDESC, IDS_IL_URLDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_FAV, IDS_IL_FAVDESC, IDS_IL_FAVDESC, IDS_IL_FAVDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_UASTR, IDS_IL_UASTRDESC, IDS_IL_UASTRDESC, IDS_IL_UASTRDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_CONNECT, IDS_IL_CONNECTDESC, IDS_IL_CONNECTDESC, IDS_IL_CONNECTDESC, -2, FALSE, TRUE, TRUE, TRUE},
{IDS_IL_SIGNUP, IDS_IL_SIGNUPDESC, IDS_IL_SIGNUPDESC, IDS_IL_SIGNUPDESC, -2, FALSE, TRUE, FALSE, TRUE},
{IDS_IL_CERT, IDS_IL_CERTDESC, IDS_IL_CERTDESC, IDS_IL_CERTDESC, -2, FALSE, TRUE, TRUE, TRUE},
{IDS_IL_ZONES, IDS_IL_ZONESDESC, IDS_IL_ZONESDESC, IDS_IL_ZONESDESC, -2, FALSE, FALSE, TRUE, TRUE},
{IDS_IL_PROGRAMS, IDS_IL_PROGRAMSDESC, IDS_IL_PROGRAMSDESC, IDS_IL_PROGRAMSDESC, -2, TRUE, TRUE, TRUE, TRUE},
{IDS_IL_MAILNEWS, IDS_IL_MAILNEWSDESC, IDS_IL_MAILNEWSDESC, IDS_IL_MAILNEWSDESC, -2, FALSE, TRUE, TRUE, TRUE},
{IDS_IL_ADM, IDS_IL_ADMDESC, IDS_IL_ADMDESC, IDS_IL_ADMDESC, -2, TRUE, TRUE, TRUE, TRUE}
};
void DisableIEAKLiteGroups()
{
TCHAR szIspFile[MAX_PATH];
if (!g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled)
{
s_fPageEnabled[PPAGE_SETUPWIZARD] = s_fPageEnabled[PPAGE_COMPSEL] = s_fPageEnabled[PPAGE_ISKBACK] = s_fPageEnabled[PPAGE_CDINFO] =
s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = s_fPageEnabled[PPAGE_COPYCOMP] = s_fPageEnabled[PPAGE_COMPURLS] =
s_fPageEnabled[PPAGE_CUSTCOMP] = FALSE;
}
if (!g_IEAKLiteArray[IL_CORPINSTALL].fEnabled)
{
s_fPageEnabled[PPAGE_CORPCUSTOM] = s_fPageEnabled[PPAGE_INSTALLDIR] = s_fPageEnabled[PPAGE_SILENTINSTALL] = FALSE;
}
if (!g_IEAKLiteArray[IL_CABSIGN].fEnabled)
{
s_fPageEnabled[PPAGE_CABSIGN] = FALSE;
}
if (!g_IEAKLiteArray[IL_ICM].fEnabled)
{
s_fPageEnabled[PPAGE_ICM] = FALSE;
}
if (!g_IEAKLiteArray[IL_BROWSER].fEnabled)
{
s_fPageEnabled[PPAGE_TITLE] = s_fPageEnabled[PPAGE_CUSTICON] =
s_fPageEnabled[PPAGE_BTOOLBARS] = FALSE;
}
if (!g_IEAKLiteArray[IL_URL].fEnabled)
{
s_fPageEnabled[PPAGE_STARTSEARCH] = s_fPageEnabled[PPAGE_WELCOMEMSGS] =
s_fPageEnabled[PPAGE_ADDON] = FALSE;
}
if (!g_IEAKLiteArray[IL_FAV].fEnabled)
{
s_fPageEnabled[PPAGE_FAVORITES] = FALSE;
}
if (!g_IEAKLiteArray[IL_UASTR].fEnabled)
{
s_fPageEnabled[PPAGE_UASTRDLG] = FALSE;
}
if (!g_IEAKLiteArray[IL_CONNECT].fEnabled)
{
s_fPageEnabled[PPAGE_PROXY] = s_fPageEnabled[PPAGE_CONNECTSET] = s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] = FALSE;
}
if (!g_IEAKLiteArray[IL_SIGNUP].fEnabled)
{
s_fPageEnabled[PPAGE_QUERYSIGNUP] =
s_fPageEnabled[PPAGE_SIGNUPFILES] =
s_fPageEnabled[PPAGE_SERVERISPS] =
s_fPageEnabled[PPAGE_ICW] = s_fPageEnabled[PPAGE_ISPINS] = FALSE;
}
if (!g_IEAKLiteArray[IL_CERT].fEnabled)
{
s_fPageEnabled[PPAGE_ADDROOT] = s_fPageEnabled[PPAGE_SECURITYCERT] = FALSE;
}
if (!g_IEAKLiteArray[IL_ZONES].fEnabled)
{
s_fPageEnabled[PPAGE_SECURITY] = FALSE;
}
if (!g_IEAKLiteArray[IL_PROGRAMS].fEnabled)
{
s_fPageEnabled[PPAGE_PROGRAMS] = FALSE;
}
if (!g_IEAKLiteArray[IL_MAILNEWS].fEnabled)
{
s_fPageEnabled[PPAGE_MAIL] = s_fPageEnabled[PPAGE_IMAP] = s_fPageEnabled[PPAGE_LDAP] =
s_fPageEnabled[PPAGE_OE] = s_fPageEnabled[PPAGE_SIG] = s_fPageEnabled[PPAGE_PRECONFIG] =
s_fPageEnabled[PPAGE_OEVIEW] = FALSE;
}
if (!g_IEAKLiteArray[IL_ADM].fEnabled)
{
s_fPageEnabled[PPAGE_ADMDESC] = FALSE;
s_fPageEnabled[PPAGE_ADM] = FALSE;
}
// do not show stage 4 page if nothing has been left on in the stage
if (!(g_IEAKLiteArray[IL_BROWSER].fEnabled || g_IEAKLiteArray[IL_URL].fEnabled
|| g_IEAKLiteArray[IL_FAV].fEnabled || g_IEAKLiteArray[IL_UASTR].fEnabled ||
(g_IEAKLiteArray[IL_CONNECT].fEnabled && g_fBranded) || (g_IEAKLiteArray[IL_SIGNUP].fEnabled && !g_fIntranet && g_fBranded) ||
((g_IEAKLiteArray[IL_CERT].fEnabled || g_IEAKLiteArray[IL_ZONES].fEnabled) && g_fIntranet)))
s_fPageEnabled[PPAGE_STAGE4] = FALSE;
if (!(g_IEAKLiteArray[IL_PROGRAMS].fEnabled || (g_IEAKLiteArray[IL_MAILNEWS].fEnabled && g_fBranded) ||
g_IEAKLiteArray[IL_ADM].fEnabled))
s_fPageEnabled[PPAGE_STAGE5] = FALSE;
// szIspFile used as temp buf
if (g_fDownload && !g_fOCW && ISNONNULL(g_szCustIns) && !GetPrivateProfileString(IS_ACTIVESETUP_SITES, TEXT("SiteUrl0"), TEXT(""), szIspFile, countof(szIspFile), g_szCustIns))
s_fPageEnabled[PPAGE_COMPURLS] = TRUE;
// do not show stage 3 page if nothing has been left on in the stage
if (!(s_fPageEnabled[PPAGE_COMPURLS] || g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled ||
(g_IEAKLiteArray[IL_CORPINSTALL].fEnabled && g_fIntranet) || g_IEAKLiteArray[IL_CABSIGN].fEnabled ||
(g_IEAKLiteArray[IL_ICM].fEnabled) && g_fBranded && !g_fBrandingOnly))
s_fPageEnabled[PPAGE_STAGE3] = FALSE;
// always enable download urls page for download packages
// the page itself has logic to skip
if (g_fDownload)
s_fPageEnabled[PPAGE_COMPURLS] = TRUE;
}
void EnablePages()
{
int i;
static BOOL s_fRunningOnIntegShell = WhichPlatform() & PLATFORM_INTEGRATED;
for (i = 0; i < NUM_PAGES; i++)
{
s_fPageEnabled[i] = TRUE;
}
// NOTE: pages should not explicitly be set to TRUE after this point
// g_fIntranet and g_fBranded are set to the following values depending on the role
// ICP: (g_fIntranet == FALSE && g_fBranded == FALSE)
// ISP: (g_fIntranet == FALSE && g_fBranded == TRUE )
// CORP: (g_fIntranet == TRUE && g_fBranded == TRUE )
//
// So, check for
// ICP is (!g_fBranded)
// ISP is (!g_fIntranet && g_fBranded)
// CORP is (g_fIntranet)
if (!g_fBranded)
{ // ICP mode
s_fPageEnabled[PPAGE_PROXY] =
s_fPageEnabled[PPAGE_INSTALLDIR] =
s_fPageEnabled[PPAGE_ICM] =
s_fPageEnabled[PPAGE_ICW] =
s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] =
s_fPageEnabled[PPAGE_MAIL] =
s_fPageEnabled[PPAGE_IMAP] =
s_fPageEnabled[PPAGE_LDAP] =
s_fPageEnabled[PPAGE_PRECONFIG] =
s_fPageEnabled[PPAGE_OEVIEW] =
s_fPageEnabled[PPAGE_OE] = s_fPageEnabled[PPAGE_CORPCUSTOM] = s_fPageEnabled[PPAGE_ADMDESC] =
s_fPageEnabled[PPAGE_SIG] = s_fPageEnabled[PPAGE_FOLDERMCCP] = s_fPageEnabled[PPAGE_ADDROOT] =
s_fPageEnabled[PPAGE_SECURITY] = s_fPageEnabled[PPAGE_SECURITYCERT] = s_fPageEnabled[PPAGE_QUERYSIGNUP] =
s_fPageEnabled[PPAGE_SILENTINSTALL] =
s_fPageEnabled[PPAGE_DESKTOP] = s_fPageEnabled[PPAGE_DTOOLBARS] = s_fPageEnabled[PPAGE_CONNECTSET] =
s_fPageEnabled[PPAGE_SIGNUPFILES] = s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_ISPINS] = FALSE;
}
else if (!g_fIntranet)
{ // Either ISP or Super ISP
s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] =
s_fPageEnabled[PPAGE_SIG] =
s_fPageEnabled[PPAGE_INSTALLDIR] =
s_fPageEnabled[PPAGE_SILENTINSTALL] =
s_fPageEnabled[PPAGE_DESKTOP] = s_fPageEnabled[PPAGE_DTOOLBARS] = s_fPageEnabled[PPAGE_ADMDESC] =
s_fPageEnabled[PPAGE_SECURITY] = s_fPageEnabled[PPAGE_SECURITYCERT] =
s_fPageEnabled[PPAGE_FOLDERMCCP] = s_fPageEnabled[PPAGE_CORPCUSTOM] = FALSE;
s_fPageEnabled[PPAGE_SERVERISPS] = (g_fServerICW || g_fServerKiosk) && !g_fSkipServerIsps;
s_fPageEnabled[PPAGE_ISPINS] = !g_fNoSignup && !g_fSkipIspIns;
s_fPageEnabled[PPAGE_ICW] = g_fServerICW;
s_fPageEnabled[PPAGE_SIGNUPFILES] = !g_fNoSignup;
}
else
{ // CorpAdmin mode
s_fPageEnabled[PPAGE_ADDROOT] = s_fPageEnabled[PPAGE_ICW] =
s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_ISPINS] =
s_fPageEnabled[PPAGE_QUERYSIGNUP] = s_fPageEnabled[PPAGE_SIGNUPFILES] = FALSE;
s_fPageEnabled[PPAGE_DTOOLBARS] = s_fPageEnabled[PPAGE_DESKTOP] = g_fInteg && s_fRunningOnIntegShell && !s_fNT5;
s_fPageEnabled[PPAGE_FOLDERMCCP] = g_fInteg && !s_fNT5;
s_fPageEnabled[PPAGE_ADMDESC] = ADMEnablePage();
}
if (!g_fCD)
s_fPageEnabled[PPAGE_ISKBACK] = s_fPageEnabled[PPAGE_CDINFO] = FALSE;
if (!g_fDownload)
s_fPageEnabled[PPAGE_COMPURLS] = FALSE;
if (!g_fMailNews95 && !g_fOCW)
{
s_fPageEnabled[PPAGE_MAIL] = s_fPageEnabled[PPAGE_IMAP] = s_fPageEnabled[PPAGE_PRECONFIG] =
s_fPageEnabled[PPAGE_OEVIEW] = s_fPageEnabled[PPAGE_LDAP] = s_fPageEnabled[PPAGE_OE] =
s_fPageEnabled[PPAGE_SIG] = FALSE;
}
if (!g_fDownload && (g_fSilent || g_fStealth))
s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = FALSE;
// pages to disable for single disk branding only builds
if (g_fBrandingOnly && !(g_fDownload || g_fLAN || g_fCD))
{
s_fPageEnabled[PPAGE_CUSTCOMP] = s_fPageEnabled[PPAGE_COMPSEL] = s_fPageEnabled[PPAGE_COMPURLS] =
s_fPageEnabled[PPAGE_INSTALLDIR] = s_fPageEnabled[PPAGE_CORPCUSTOM] = s_fPageEnabled[PPAGE_CUSTOMCUSTOM] =
s_fPageEnabled[PPAGE_COPYCOMP] = s_fPageEnabled[PPAGE_ICM] =
s_fPageEnabled[PPAGE_ADDON] = FALSE;
g_fInteg = TRUE; // set this flag to true so admins can still make desktop customizations
}
// disable advanced installation options page if no download media and custom mode
// disabled
if (!g_fDownload && InsGetBool(IS_BRANDING, TEXT("HideCustom"), FALSE, g_szCustIns))
s_fPageEnabled[PPAGE_CUSTOMCUSTOM] = FALSE;
if (g_fImportConnect)
s_fPageEnabled[PPAGE_PROXY] = s_fPageEnabled[PPAGE_QUERYAUTOCONFIG] = FALSE;
s_fPageEnabled[PPAGE_ADM] = ADMEnablePage();
if(g_fOCW)
{
s_fPageEnabled[PPAGE_FINISH] =
s_fPageEnabled[PPAGE_MEDIA] = s_fPageEnabled[PPAGE_ISPINS] =
s_fPageEnabled[PPAGE_ICM] = s_fPageEnabled[PPAGE_QUERYSIGNUP] = s_fPageEnabled[PPAGE_ICW] =
s_fPageEnabled[PPAGE_SIGNUPFILES] = s_fPageEnabled[PPAGE_SERVERISPS] = s_fPageEnabled[PPAGE_SETUPWIZARD] =
s_fPageEnabled[PPAGE_STAGE1] = s_fPageEnabled[PPAGE_STAGE2] = s_fPageEnabled[PPAGE_STAGE3] =
s_fPageEnabled[PPAGE_STAGE4] = s_fPageEnabled[PPAGE_STAGE5] = s_fPageEnabled[PPAGE_SILENTINSTALL] =
s_fPageEnabled[PPAGE_COMPURLS] = s_fPageEnabled[PPAGE_INSTALLDIR] = FALSE;
}
else
{
s_fPageEnabled[PPAGE_OCWSTAGE2] = FALSE;
}
// Special case IMAP page
if (g_fDisableIMAPPage)
s_fPageEnabled[PPAGE_IMAP] = FALSE;
DisableIEAKLiteGroups();
}
BOOL PageEnabled(int iPage)
{
TCHAR szTemp[4];
// this should eventually just index into s_fPageEnabled, but for now we need to do this
// manually since we must still use the page array for PageNext and PageBack
if (iPage == PPAGE_COMPURLS)
return (g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled
|| !GetPrivateProfileString(IS_ACTIVESETUP_SITES, TEXT("SiteUrl0"),
TEXT(""), szTemp, countof(szTemp), g_szCustIns));
return TRUE; // default to show page
}
static TCHAR s_aSzTitle[NUM_PAGES][MAX_PATH];
void PageNext(HWND hDlg)
{
if (s_fPageEnabled[++g_iCurPage]) return;
while (1)
{
if (s_fPageEnabled[++g_iCurPage])
{
DWORD id = (DWORD) PtrToUlong(g_psp[g_iCurPage].pszTemplate);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, id);
return;
}
}
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_FINISH);
}
void PagePrev(HWND hDlg)
{
if (s_fPageEnabled[--g_iCurPage]) return;
while (1)
{
if (s_fPageEnabled[--g_iCurPage])
{
DWORD id = (DWORD) PtrToUlong(g_psp[g_iCurPage].pszTemplate);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, id);
return;
}
}
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_KEYINS);
}
SHFILEOPSTRUCT g_shfStruc;
void DoCancel()
{
g_fCancelled = TRUE;
g_fOCWCancel = TRUE;
if (g_hDownloadEvent) SetEvent(g_hDownloadEvent);
PostQuitMessage(0);
}
BOOL QueryCancel(HWND hDlg)
{
TCHAR szMsg[MAX_PATH];
LoadString( g_rvInfo.hInst, IDS_CANCELOK, szMsg, countof(szMsg) );
if (MessageBox(hDlg, szMsg, g_szTitle, MB_YESNO | MB_SETFOREGROUND) == IDNO)
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
g_fCancelled = FALSE;
return(FALSE);
}
DoCancel();
return(TRUE);
}
BOOL IeakPageHelp(HWND hWnd, LPCTSTR pszData)
{
static TCHAR szHelpPath[MAX_PATH] = TEXT("");
UNREFERENCED_PARAMETER(hWnd);
if (ISNULL(szHelpPath))
PathCombine(szHelpPath, g_szWizRoot, TEXT("ieakhelp.chm"));
// (pritobla): If we pass hWnd to HtmlHelp, the HTML help window
// would stay on top of our window (parent->child relationship).
// This is bad because the user can't switch between these windows
// for cross referencing. This is especially bad on a 640x480
// resolution monitor.
s_hWndHelp = HtmlHelp(NULL, szHelpPath, HH_HELP_CONTEXT, (ULONG_PTR) pszData);
// (pritobla): On OSR2 machines, the HTML help window comes up behind
// our window. On a 640x480 resolution monitor, we pretty much occupy
// the entire screen, so the user won't know that the HTML help window
// is up. Setting it to the foreground solves the problem.
SetForegroundWindow(s_hWndHelp);
return TRUE;
}
extern DWORD BuildIE4(LPVOID );
//
// FUNCTION: MainWndProc(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for the main window procedure
//
// MESSAGES:
//
// WM_CREATE - creates the main MLE for the window
// WM_COMMAND - processes the menu commands for the application
// WM_SIZE - sizes the MLE to fill the client area of the window
// WM_DESTROY - posts a quit message and returns
//
LRESULT APIENTRY MainWndProc(
HWND hWnd, // window handle
UINT message, // type of message
WPARAM wParam, // additional information
LPARAM lParam) // additional information
{
int i;
switch (message)
{
case WM_CREATE:
return FALSE;
case WM_INITDIALOG:
return FALSE;
case WM_SIZE:
if (!IsIconic(hWnd) && (hWnd != g_hWndCent))
ShowWindow(hWnd, SW_MINIMIZE);
if (g_hWizard != NULL)
SetFocus(g_hWizard);
return (DefWindowProc(hWnd, message, wParam, lParam));
case WM_HELP:
IeakPageHelp(hWnd, g_psp[g_iCurPage].pszTemplate);
break;
case WM_COMMAND:
switch( LOWORD( wParam ))
{
case IDM_WIZARD:
if (g_fCancelled)
break;
i = CreateWizard(g_hWndCent);
if (i < 0) {
PostQuitMessage(0);
break;
}
PostMessage(hWnd, WM_COMMAND, IDM_LAST, (LPARAM) 0);
break;
case IDM_LAST:
PostQuitMessage(0);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
break;
case WM_CLOSE:
QueryCancel(hWnd);
break;
case WM_DESTROY: /* message: window being destroyed */
PostQuitMessage(0);
DestroyWindow(g_hWndCent);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (0);
}
DWORD GetRootFree(LPCTSTR pcszPath)
{
DWORD dwSecPerClus, dwBytesPerSec, dwTotClusters, dwFreeClusters, dwClustK;
CHAR szPathA[MAX_PATH];
// thunk to ANSI since shlwapi doesn't have a wrapper fot GetDiskFreeSpace and
// the W version is stubbed out on Win95
T2Abux(pcszPath, szPathA);
if (szPathA[1] == ':')
{
szPathA[3] = '\0';
}
else
{
if ((szPathA[0] == '\\') && (szPathA[1] == '\\'))
{
NETRESOURCEA netRes;
DWORD erc = ERROR_ALREADY_ASSIGNED;
CHAR szLocalPathA[4] = "D:";
LPSTR pBack = StrChrA(&szPathA[2], '\\');
if (!pBack) return(0);
pBack = StrChrA(CharNextA(pBack), '\\');
if (pBack) *pBack = '\0';
ZeroMemory(&netRes, sizeof(netRes));
netRes.dwType = RESOURCETYPE_DISK;
netRes.lpRemoteName = szPathA;
for (*szLocalPathA = 'D'; *szLocalPathA <= 'Z' ; (*szLocalPathA)++ )
{
netRes.lpLocalName = szLocalPathA;
erc = WNetAddConnection2A(&netRes, NULL, NULL, 0);
if (erc == ERROR_ALREADY_ASSIGNED) continue;
if (erc == NO_ERROR) break;
}
if (erc == NO_ERROR)
{
if (!GetDiskFreeSpaceA( szLocalPathA, &dwSecPerClus, &dwBytesPerSec, &dwFreeClusters, &dwTotClusters ))
dwSecPerClus = dwBytesPerSec = 0;
WNetCancelConnection2A(szLocalPathA, 0, FALSE);
if (dwSecPerClus == 1) return(dwFreeClusters/2);
dwClustK = dwSecPerClus * dwBytesPerSec / 1024;
return(dwClustK * dwFreeClusters);
}
}
else return(0);
}
if (!GetDiskFreeSpaceA( szPathA, &dwSecPerClus, &dwBytesPerSec, &dwFreeClusters, &dwTotClusters ))
return(0);
if (dwSecPerClus == 1) return(dwFreeClusters/2);
dwClustK = dwSecPerClus * dwBytesPerSec / 1024;
return(dwClustK * dwFreeClusters);
}
void CheckBatchAdvance(HWND hDlg)
{
if (g_fBatch || g_fBatch2) PostMessage(hDlg, IDM_BATCHADVANCE, 0, 0);
}
void DoBatchAdvance(HWND hDlg)
{
if (g_fBatch || g_fBatch2) PostMessage(GetParent(hDlg), PSM_PRESSBUTTON, PSBTN_NEXT, 0);
}
INT_PTR CALLBACK MediaDlgProc(HWND hDlg, UINT uMsg, WPARAM, LPARAM lParam)
{
static BOOL s_fNext = TRUE;
switch (uMsg)
{
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
g_fDownload = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_Download"), 1, g_szCustIns);
g_fCD = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_CD"), 0, g_szCustIns);
g_fLAN = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_LAN"), 0, g_szCustIns);
g_fBrandingOnly = GetPrivateProfileInt(TEXT("Media"), TEXT("Build_BrandingOnly"), 0, g_szCustIns);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKDL)))
CheckDlgButton(hDlg, IDC_CHECKDL, g_fDownload ? BST_CHECKED : BST_UNCHECKED);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKCD)))
CheckDlgButton(hDlg, IDC_CHECKCD, g_fCD ? BST_CHECKED : BST_UNCHECKED);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKLAN)))
CheckDlgButton(hDlg, IDC_CHECKLAN, g_fLAN ? BST_CHECKED : BST_UNCHECKED);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKSDB)))
CheckDlgButton(hDlg, IDC_CHECKSDB, g_fBrandingOnly ? BST_CHECKED : BST_UNCHECKED);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
g_fDownload = g_fCD = g_fLAN = g_fBrandingOnly = FALSE;
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKDL)))
g_fDownload = (IsDlgButtonChecked(hDlg, IDC_CHECKDL) == BST_CHECKED);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKCD)))
g_fCD = (IsDlgButtonChecked(hDlg, IDC_CHECKCD) == BST_CHECKED);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKLAN)))
g_fLAN = (IsDlgButtonChecked(hDlg, IDC_CHECKLAN) == BST_CHECKED);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_CHECKSDB)))
g_fBrandingOnly = (IsDlgButtonChecked(hDlg, IDC_CHECKSDB) == BST_CHECKED);
// if none of the media boxes are selected, display an error msg
if (!g_fDownload && !g_fCD && !g_fLAN && !g_fBrandingOnly)
{
ErrorMessageBox(hDlg, IDS_NOMEDIA);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
WritePrivateProfileString(TEXT("Media"), TEXT("Build_Download"), g_fDownload ? TEXT("1") : TEXT("0"), g_szCustIns );
WritePrivateProfileString(TEXT("Media"), TEXT("Build_CD"), g_fCD ? TEXT("1") : TEXT("0"), g_szCustIns );
WritePrivateProfileString(TEXT("Media"), TEXT("Build_LAN"), g_fLAN ? TEXT("1") : TEXT("0"), g_szCustIns );
WritePrivateProfileString(TEXT("Media"), TEXT("Build_BrandingOnly"), g_fBrandingOnly ? TEXT("1") : TEXT("0"), g_szCustIns );
s_fNext = (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) ? FALSE : TRUE;
g_iCurPage = PPAGE_MEDIA;
EnablePages();
(((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
void DisplayBitmap(HWND hControl, LPCTSTR pcszFileName, int nBitmapId)
{
HANDLE hBmp = (HANDLE) GetWindowLongPtr(hControl, GWLP_USERDATA);
if(ISNONNULL(pcszFileName) && PathFileExists(pcszFileName))
ShowBitmap(hControl, pcszFileName, 0, &hBmp);
else
ShowBitmap(hControl, TEXT(""), nBitmapId, &hBmp);
SetWindowLongPtr(hControl, GWLP_USERDATA, (LONG_PTR)hBmp);
}
void ReleaseBitmap(HWND hControl)
{
HANDLE hBmp = (HANDLE) GetWindowLongPtr(hControl, GWLP_USERDATA);
if (hBmp)
DeleteObject(hBmp);
}
void InitializeAnimBmps(HWND hDlg, LPCTSTR szInsFile)
{
TCHAR szBig[MAX_PATH];
TCHAR szSmall[MAX_PATH];
BOOL fBrandBmps;
// load information from ins file
fBrandBmps = InsGetString(IS_ANIMATION, TEXT("Big_Path"),
szBig, countof(szBig), szInsFile);
SetDlgItemTextTriState(hDlg, IDE_BIGANIMBITMAP, IDC_ANIMBITMAP, szBig, fBrandBmps);
InsGetString(IS_ANIMATION, TEXT("Small_Path"),
szSmall, countof(szSmall), szInsFile, NULL, &fBrandBmps);
SetDlgItemTextTriState(hDlg, IDE_SMALLANIMBITMAP, IDC_ANIMBITMAP, szSmall, fBrandBmps);
EnableDlgItem2(hDlg, IDE_BIGANIMBITMAP, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BROWSEBIG, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BIGANIMBITMAP_TXT, fBrandBmps);
EnableDlgItem2(hDlg, IDE_SMALLANIMBITMAP, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BROWSESMALL, fBrandBmps);
EnableDlgItem2(hDlg, IDC_SMALLANIMBITMAP_TXT, fBrandBmps);
}
//
// FUNCTION: CustIcon(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for "Work Habits" page
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_NOTIFY - processes the notifications sent to the page
// WM_COMMAND - saves the id of the choice selected
//
INT_PTR CALLBACK CustIcon( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
TCHAR szBig[MAX_PATH];
TCHAR szSmall[MAX_PATH];
TCHAR szLargeBmp[MAX_PATH];
TCHAR szSmallBmp[MAX_PATH];
LPDRAWITEMSTRUCT lpDrawItem = NULL;
TCHAR szWorkDir[MAX_PATH];
BOOL fBrandBmps,fBrandAnim;
switch( msg )
{
case WM_INITDIALOG:
//from anim
EnableDBCSChars(hDlg, IDE_SMALLANIMBITMAP);
EnableDBCSChars(hDlg, IDE_BIGANIMBITMAP);
Edit_LimitText(GetDlgItem(hDlg, IDE_SMALLANIMBITMAP), countof(szSmallBmp) - 1);
Edit_LimitText(GetDlgItem(hDlg, IDE_BIGANIMBITMAP), countof(szLargeBmp) - 1);
//custicon
EnableDBCSChars(hDlg, IDC_BITMAP);
EnableDBCSChars(hDlg, IDC_BITMAP2);
Edit_LimitText(GetDlgItem(hDlg, IDC_BITMAP), countof(szBig) - 1);
Edit_LimitText(GetDlgItem(hDlg, IDC_BITMAP2), countof(szSmall) - 1);
g_hWizard = hDlg;
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_BROWSEBIG:
GetDlgItemText(hDlg, IDE_BIGANIMBITMAP, szLargeBmp, countof(szLargeBmp));
if(BrowseForFile(hDlg, szLargeBmp, countof(szLargeBmp), GFN_BMP))
SetDlgItemText(hDlg, IDE_BIGANIMBITMAP, szLargeBmp);
break;
case IDC_BROWSESMALL:
GetDlgItemText(hDlg, IDE_SMALLANIMBITMAP, szSmallBmp, countof(szSmallBmp));
if(BrowseForFile(hDlg, szSmallBmp, countof(szSmallBmp), GFN_BMP))
SetDlgItemText(hDlg, IDE_SMALLANIMBITMAP, szSmallBmp);
break;
case IDC_ANIMBITMAP:
fBrandAnim = (IsDlgButtonChecked(hDlg, IDC_ANIMBITMAP) == BST_CHECKED);
EnableDlgItem2(hDlg, IDE_BIGANIMBITMAP, fBrandAnim);
EnableDlgItem2(hDlg, IDC_BROWSEBIG, fBrandAnim);
EnableDlgItem2(hDlg, IDC_BIGANIMBITMAP_TXT, fBrandAnim);
EnableDlgItem2(hDlg, IDE_SMALLANIMBITMAP, fBrandAnim);
EnableDlgItem2(hDlg, IDC_BROWSESMALL, fBrandAnim);
EnableDlgItem2(hDlg, IDC_SMALLANIMBITMAP_TXT, fBrandAnim);
break;
case IDC_BROWSEICON:
if(HIWORD(wParam) == BN_CLICKED)
{
GetDlgItemText(hDlg, IDC_BITMAP, szBig, countof(szBig));
if(BrowseForFile(hDlg, szBig, countof(szBig), GFN_BMP))
SetDlgItemText(hDlg, IDC_BITMAP, szBig);
break;
}
return FALSE;
case IDC_BROWSEICON2:
if(HIWORD(wParam) == BN_CLICKED)
{
GetDlgItemText(hDlg, IDC_BITMAP2, szSmall, countof(szSmall));
if(BrowseForFile(hDlg, szSmall, countof(szSmall), GFN_BMP))
SetDlgItemText(hDlg, IDC_BITMAP2, szSmall);
break;
}
return FALSE;
case IDC_BITMAPCHECK:
if(HIWORD(wParam) == BN_CLICKED)
{
fBrandBmps = (IsDlgButtonChecked(hDlg, IDC_BITMAPCHECK) == BST_CHECKED);
EnableDlgItem2(hDlg, IDC_BITMAP, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BROWSEICON, fBrandBmps);
EnableDlgItem2(hDlg, IDC_LARGEBITMAP_TXT, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BROWSEICON2, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BITMAP2, fBrandBmps);
EnableDlgItem2(hDlg, IDC_SMALLBITMAP_TXT, fBrandBmps);
break;
}
return FALSE;
default:
return FALSE;
}
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT | PSWIZB_BACK);
// load information from ins file
InitializeAnimBmps(hDlg, g_szCustIns);
InsGetString(IS_SMALLLOGO, TEXT("Path"),
szSmall, countof(szSmall), g_szCustIns);
InsGetString(IS_LARGELOGO, TEXT("Path"),
szBig, countof(szBig), g_szCustIns, NULL, &fBrandBmps);
SetDlgItemTextTriState(hDlg, IDC_BITMAP2, IDC_BITMAPCHECK, szSmall, fBrandBmps);
SetDlgItemTextTriState(hDlg, IDC_BITMAP, IDC_BITMAPCHECK, szBig, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BROWSEICON, fBrandBmps);
EnableDlgItem2(hDlg, IDC_BROWSEICON2, fBrandBmps);
EnableDlgItem2(hDlg, IDC_LARGEBITMAP_TXT, fBrandBmps);
EnableDlgItem2(hDlg, IDC_SMALLBITMAP_TXT, fBrandBmps);
{
TCHAR szTmp[MAX_PATH];
if (ISNONNULL(szSmall))
{
PathCombine(szTmp, g_szTempSign, PathFindFileName(szSmall));
DeleteFile(szTmp);
}
if (ISNONNULL(szBig))
{
PathCombine(szTmp, g_szTempSign, PathFindFileName(szBig));
DeleteFile(szTmp);
}
}
CheckBatchAdvance(hDlg);
break;
case PSN_WIZNEXT:
case PSN_WIZBACK:
//from animbmp
g_cmCabMappings.GetFeatureDir(FEATURE_BRAND, szWorkDir);
GetDlgItemTextTriState(hDlg, IDE_SMALLANIMBITMAP, IDC_ANIMBITMAP, szSmallBmp,
countof(szSmallBmp));
fBrandAnim = GetDlgItemTextTriState(hDlg, IDE_BIGANIMBITMAP, IDC_ANIMBITMAP,
szLargeBmp, countof(szLargeBmp));
if ((fBrandAnim && !IsAnimBitmapFileValid(hDlg, IDE_BIGANIMBITMAP, szLargeBmp, NULL, IDS_TOOBIG38, IDS_TOOSMALL38, 38, 38)) ||
!CopyAnimBmp(hDlg, szLargeBmp, szWorkDir, IK_LARGEBITMAP, TEXT("Big_Path"), g_szCustIns))
{
SetFocus(GetDlgItem(hDlg, IDE_BIGANIMBITMAP));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if ((fBrandAnim && !IsAnimBitmapFileValid(hDlg, IDE_SMALLANIMBITMAP, szSmallBmp, NULL, IDS_TOOBIG22, IDS_TOOSMALL22, 22, 22)) ||
!CopyAnimBmp(hDlg, szSmallBmp, szWorkDir, IK_SMALLBITMAP, TEXT("Small_Path"), g_szCustIns))
{
SetFocus(GetDlgItem(hDlg, IDE_SMALLANIMBITMAP));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if ((fBrandAnim && ISNULL(szSmallBmp) && ISNONNULL(szLargeBmp)) || (fBrandAnim && ISNONNULL(szSmallBmp) && ISNULL(szLargeBmp)))
{
ErrorMessageBox(hDlg, IDS_BOTHBMP_ERROR);
if (ISNULL(szSmallBmp))
SetFocus(GetDlgItem(hDlg, IDE_SMALLANIMBITMAP));
else
SetFocus(GetDlgItem(hDlg, IDE_BIGANIMBITMAP));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
InsWriteBool(IS_ANIMATION, IK_DOANIMATION, fBrandAnim, g_szCustIns);
//custicon
fBrandBmps = (IsDlgButtonChecked(hDlg, IDC_BITMAPCHECK) == BST_CHECKED);
//----- Validate the bitmap -----
GetDlgItemText(hDlg, IDC_BITMAP2, szSmall, countof(szSmall));
if (fBrandBmps && !IsBitmapFileValid(hDlg, IDC_BITMAP2, szSmall, NULL, 22, 22, IDS_TOOBIG22, IDS_TOOSMALL22))
{
SetFocus(GetDlgItem(hDlg, IDC_BITMAP2));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
CopyLogoBmp(hDlg, szSmall, IS_SMALLLOGO, szWorkDir, g_szCustIns);
GetDlgItemText(hDlg, IDC_BITMAP, szBig, countof(szBig));
if (fBrandBmps && !IsBitmapFileValid(hDlg, IDC_BITMAP, szBig, NULL, 38, 38, IDS_TOOBIG38, IDS_TOOSMALL38))
{
SetFocus(GetDlgItem(hDlg, IDC_BITMAP));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
CopyLogoBmp(hDlg, szBig, IS_LARGELOGO, szWorkDir, g_szCustIns);
if ((fBrandBmps && ISNULL(szSmall) && ISNONNULL(szBig)) || (fBrandBmps && ISNONNULL(szSmall) && ISNULL(szBig)))
{
ErrorMessageBox(hDlg, IDS_BOTHBMP_ERROR);
if (ISNULL(szSmall))
SetFocus(GetDlgItem(hDlg, IDC_BITMAP2));
else
SetFocus(GetDlgItem(hDlg, IDC_BITMAP));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
g_iCurPage = PPAGE_CUSTICON;
EnablePages();
if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT)
PageNext(hDlg);
else
PagePrev(hDlg);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
INT_PTR CALLBACK Favorites(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
TCHAR szWorkDir[MAX_PATH],
szValue[16],
szUrl[INTERNET_MAX_URL_LENGTH];
HWND hTv = GetDlgItem(hDlg, IDC_TREE1);
LPCTSTR pszValue;
BOOL fQL,
fFavoritesOnTop, fFavoritesDelete, fIEAKFavoritesDelete;
DWORD dwFavoritesDeleteFlags;
switch(msg) {
case WM_INITDIALOG:
EnableDBCSChars(hDlg, IDC_TREE1);
MigrateFavorites(g_szCustIns);
#ifdef UNICODE
TreeView_SetUnicodeFormat(hTv, TRUE);
#else
TreeView_SetUnicodeFormat(hTv, FALSE);
#endif
g_hWizard = hDlg;
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_COMMAND:
switch(HIWORD(wParam)) {
case BN_CLICKED:
switch(LOWORD(wParam)) {
case IDC_FAVONTOP:
if (BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_FAVONTOP)) {
HTREEITEM hti;
TV_ITEM tvi;
EnableDlgItem(hDlg, IDC_FAVONTOP);
hti = TreeView_GetSelection(hTv);
if (hti != NULL) {
ZeroMemory(&tvi, sizeof(tvi));
tvi.mask = TVIF_STATE;
tvi.hItem = hti;
TreeView_GetItem(hTv, &tvi);
if (!HasFlag(tvi.state, TVIS_BOLD)) {
EnableDlgItem2(hDlg, IDC_FAVUP, (NULL != TreeView_GetPrevSibling(hTv, hti)));
EnableDlgItem2(hDlg, IDC_FAVDOWN, (NULL != TreeView_GetNextSibling(hTv, hti)));
}
}
}
else {
DisableDlgItem(hDlg, IDC_FAVUP);
DisableDlgItem(hDlg, IDC_FAVDOWN);
}
break;
case IDC_DELFAVORITES:
fFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELFAVORITES) == BST_CHECKED);
EnableDlgItem2(hDlg, IDC_DELIEAKFAVORITES, fFavoritesDelete);
break;
case IDC_FAVUP:
MoveUpFavorite(hTv, TreeView_GetSelection(hTv));
break;
case IDC_FAVDOWN:
MoveDownFavorite(hTv, TreeView_GetSelection(hTv));
break;
case IDC_ADDURL:
fQL = !IsFavoriteItem(hTv, TreeView_GetSelection(hTv));
if (GetFavoritesNumber(hTv, fQL) >= GetFavoritesMaxNumber(fQL)) {
UINT nID;
nID = (!fQL ? IDS_ERROR_MAXFAVS : IDS_ERROR_MAXQLS);
ErrorMessageBox(hDlg, nID);
break;
}
g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir);
NewUrl(hTv, szWorkDir, g_dwPlatformId, g_fIntranet ? IEM_CORP : IEM_NEUTRAL);
break;
case IDC_ADDFOLDER:
ASSERT(IsFavoriteItem(hTv, TreeView_GetSelection(hTv)));
if (GetFavoritesNumber(hTv) >= GetFavoritesMaxNumber()) {
ErrorMessageBox(hDlg, IDS_ERROR_MAXFAVS);
break;
}
NewFolder(hTv);
break;
case IDC_MODIFY:
g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir);
ModifyFavorite(hTv, TreeView_GetSelection(hTv), szWorkDir, g_szTempSign, g_dwPlatformId, g_fIntranet ? IEM_CORP : IEM_NEUTRAL);
break;
case IDC_REMOVE:
g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir);
DeleteFavorite(hTv, TreeView_GetSelection(hTv), szWorkDir);
break;
case IDC_TESTFAVURL:
if (GetFavoriteUrl(hTv, TreeView_GetSelection(hTv), szUrl, countof(szUrl)))
TestURL(szUrl);
break;
case IDC_IMPORT: {
CNewCursor cursor(IDC_WAIT);
g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir);
ImportFavoritesCmd(hTv, szWorkDir);
break;
}
}
}
break;
case WM_NOTIFY:
switch(((NMHDR FAR *)lParam)->code) {
case PSN_SETACTIVE:
SetBannerText(hDlg);
g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir);
PathCreatePath(szWorkDir);
ASSERT(GetFavoritesNumber(hTv, FALSE) == 0 && GetFavoritesNumber(hTv, TRUE) == 0);
ImportFavorites (hTv, g_szDefInf, g_szCustIns, szWorkDir, g_szTempSign, !g_fIntranet);
ImportQuickLinks(hTv, g_szDefInf, g_szCustIns, szWorkDir, g_szTempSign, !g_fIntranet);
TreeView_SelectItem(hTv, TreeView_GetRoot(hTv));
fFavoritesOnTop = GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_ONTOP, (int)FALSE, g_szCustIns);
CheckDlgButton(hDlg, IDC_FAVONTOP, fFavoritesOnTop ? BST_CHECKED : BST_UNCHECKED);
//delete channels checkbox
if (g_fIntranet)
{
EnableDlgItem(hDlg, IDC_DELETECHANNELS);
ShowDlgItem (hDlg, IDC_DELETECHANNELS);
ReadBoolAndCheckButton(IS_DESKTOPOBJS, IK_DELETECHANNELS, FALSE, g_szCustIns, hDlg, IDC_DELETECHANNELS);
}
else
{
DisableDlgItem(hDlg, IDC_DELETECHANNELS);
HideDlgItem (hDlg, IDC_DELETECHANNELS);
}
if (!fFavoritesOnTop) {
DisableDlgItem(hDlg, IDC_FAVUP);
DisableDlgItem(hDlg, IDC_FAVDOWN);
}
if (g_fIntranet) {
ShowWindow(GetDlgItem(hDlg, IDC_DELFAVORITES), SW_SHOW);
ShowWindow(GetDlgItem(hDlg, IDC_DELIEAKFAVORITES), SW_SHOW);
dwFavoritesDeleteFlags = (DWORD) GetPrivateProfileInt(IS_BRANDING, IK_FAVORITES_DELETE, (int)FD_DEFAULT, g_szCustIns);
fFavoritesDelete = HasFlag(dwFavoritesDeleteFlags, ~FD_REMOVE_IEAK_CREATED);
CheckDlgButton(hDlg, IDC_DELFAVORITES, fFavoritesDelete ? BST_CHECKED : BST_UNCHECKED);
fIEAKFavoritesDelete = HasFlag(dwFavoritesDeleteFlags, FD_REMOVE_IEAK_CREATED);
CheckDlgButton(hDlg, IDC_DELIEAKFAVORITES, fIEAKFavoritesDelete ? BST_CHECKED : BST_UNCHECKED);
// only if delete Favorites is TRUE should the delete IEAK Favorites checkbox be enabled
EnableDlgItem2(hDlg, IDC_DELIEAKFAVORITES, fFavoritesDelete);
}
else {
ShowWindow(GetDlgItem(hDlg, IDC_DELFAVORITES), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_DELIEAKFAVORITES), SW_HIDE);
}
CheckBatchAdvance(hDlg);
break;
case TVN_GETINFOTIP:
ASSERT(wParam == IDC_TREE1);
GetFavoritesInfoTip((LPNMTVGETINFOTIP)lParam);
break;
case NM_DBLCLK:
ASSERT(wParam == IDC_TREE1);
if (IsWindowEnabled(GetDlgItem(hDlg, IDC_MODIFY)))
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_MODIFY, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_MODIFY));
break;
case TVN_KEYDOWN:
ASSERT(wParam == IDC_TREE1);
if (((LPNMTVKEYDOWN)lParam)->wVKey == VK_DELETE && IsWindowEnabled(GetDlgItem(hDlg, IDC_REMOVE)))
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_REMOVE, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_REMOVE));
break;
case TVN_SELCHANGED:
ASSERT(wParam == IDC_TREE1);
ProcessFavSelChange(hDlg, hTv, (LPNMTREEVIEW)lParam);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
fFavoritesOnTop = (IsDlgButtonChecked(hDlg, IDC_FAVONTOP) == BST_CHECKED);
dwFavoritesDeleteFlags = 0;
szValue[0] = TEXT('\0');
pszValue = NULL;
fFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELFAVORITES) == BST_CHECKED);
fIEAKFavoritesDelete = (IsDlgButtonChecked(hDlg, IDC_DELIEAKFAVORITES) == BST_CHECKED);
if (fFavoritesDelete) {
// NOTE. (andrewgu) flags explanation:
// 1. FD_FAVORITES means "empty favorites";
// 2. FD_CHANNELS means "don't delete channels folder";
// 3. FD_SOFTWAREUPDATES means "don't delete sofware updates folder";
// 4. FD_QUICKLINKS means "don't delete quick links folder";
// 5. FD_EMPTY_QUICKLINKS means "but make it empty";
// 6. FD_REMOVE_HIDDEN means "don't hesitate to party on HIDDEN folders and favorites";
// 7. FD_REMOVE_SYSTEM means "don't hesitate to party on SYSTEM folders and favorites";
dwFavoritesDeleteFlags |= FD_FAVORITES |
FD_CHANNELS | FD_SOFTWAREUPDATES | FD_QUICKLINKS | FD_EMPTY_QUICKLINKS |
FD_REMOVE_HIDDEN | FD_REMOVE_SYSTEM;
}
//delete channels
if (g_fIntranet)
CheckButtonAndWriteBool(hDlg, IDC_DELETECHANNELS, IS_DESKTOPOBJS, IK_DELETECHANNELS, g_szCustIns);
if (fIEAKFavoritesDelete)
// FD_REMOVE_IEAK_CREATED means "delete those items created by the IEAK";
dwFavoritesDeleteFlags |= FD_REMOVE_IEAK_CREATED;
if (dwFavoritesDeleteFlags) {
wnsprintf(szValue, countof(szValue), TEXT("0x%X"), dwFavoritesDeleteFlags);
pszValue = szValue;
}
WritePrivateProfileString(IS_BRANDING, IK_FAVORITES_DELETE, pszValue, g_szCustIns);
WritePrivateProfileString(IS_BRANDING, IK_FAVORITES_ONTOP, fFavoritesOnTop ? TEXT("1") : TEXT("0"), g_szCustIns);
g_cmCabMappings.GetFeatureDir(FEATURE_FAVORITES, szWorkDir);
ExportFavorites (hTv, g_szCustIns, szWorkDir, TRUE);
ExportQuickLinks(hTv, g_szCustIns, szWorkDir, TRUE);
if (!g_fBatch)
{
// (pritobla) if in batch mode, no need to export to the old IE4 format
// because there is no scenario that the ms install.ins will be installed
// without the IE6 branding dll.
MigrateToOldFavorites(g_szCustIns);
}
DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL);
DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL);
g_iCurPage = PPAGE_FAVORITES;
EnablePages();
if (((LPNMHDR)lParam)->code != PSN_WIZBACK)
PageNext(hDlg);
else
PagePrev(hDlg);
break;
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_QUERYCANCEL:
if (QueryCancel(hDlg)) {
DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL);
DeleteFavorite(hTv, TreeView_GetRoot(hTv), NULL);
}
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
//
// FUNCTION: Welcome(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for welcome page
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_NOTIFY - processes the notifications sent to the page
// WM_COMMAND - saves the id of the choice selected
//
INT_PTR CALLBACK Welcome(
HWND hDlg,
UINT message,
WPARAM,
LPARAM lParam)
{
static fInitWindowPos = FALSE;
switch (message)
{
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_INITDIALOG:
LoadString(g_rvInfo.hInst, IDS_TITLE, g_szTitle, countof(g_szTitle));
SetWindowText(g_hWndCent, g_szTitle);
g_hWizard = hDlg;
return(TRUE);
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
TCHAR szWizardVer[MAX_PATH];
TCHAR szType[MAX_PATH];
TCHAR szTemp1[MAX_PATH], szTemp2[MAX_PATH];
SetBannerText(hDlg);
LoadString(g_rvInfo.hInst,IDS_WIZARDTYPETEXT,szWizardVer,countof(szWizardVer));
switch (s_iType)
{
case BRANDED:
LoadString(g_rvInfo.hInst,IDS_ISPTYPE,szType,countof(szType));
break;
case REDIST:
LoadString(g_rvInfo.hInst,IDS_ICPTYPE,szType,countof(szType));
break;
case INTRANET:
default:
LoadString(g_rvInfo.hInst,IDS_CORPTYPE,szType,countof(szType));
break;
}
wnsprintf(szTemp1,countof(szTemp1),szWizardVer,szType);
wnsprintf(szTemp2,countof(szTemp2),s_szBannerText,szTemp1);
StrCpy(s_szBannerText,szTemp2);
ChangeBannerText(hDlg);
PropSheet_SetTitle(hDlg, 0, s_aSzTitle[g_iCurPage]);
if (g_fDone)
{
EndDialog(hDlg, 0);
return FALSE;
}
if(!fInitWindowPos)
{
PositionWindow(GetParent(hDlg));
ShowWindow(GetParent(hDlg), SW_SHOWNORMAL);
fInitWindowPos = TRUE;
}
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
EnablePages();
if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) PageNext(hDlg);
else
{
PagePrev(hDlg);
}
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
//
// FUNCTION: Stage(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for welcome page
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_NOTIFY - processes the notifications sent to the page
// WM_COMMAND - saves the id of the choice selected
//
INT_PTR CALLBACK Stage(
HWND hDlg,
UINT message,
WPARAM,
LPARAM lParam)
{
switch (message)
{
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_INITDIALOG:
return(FALSE);
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
PropSheet_SetTitle(hDlg, 0, s_aSzTitle[g_iCurPage]);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT)
PageNext(hDlg);
else
PagePrev(hDlg);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
static UINT_PTR s_idTim;
INT_PTR CALLBACK BrandTitle(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
TCHAR szTitle[MAX_PATH];
TCHAR szFullTitle[MAX_PATH];
TCHAR szTemp[MAX_PATH];
DWORD dwTitlePrefixLen;
BOOL fTitle;
switch (uMsg)
{
case WM_INITDIALOG:
EnableDBCSChars(hDlg, IDE_TITLE);
LoadString(g_rvInfo.hInst, IDS_TITLE_PREFIX, szTitle, countof(szTitle));
dwTitlePrefixLen = StrLen(szTitle);
// browser will only display 74 chars before cutting off title
Edit_LimitText(GetDlgItem(hDlg, IDE_TITLE), 74 - dwTitlePrefixLen);
break;
case WM_NOTIFY:
switch (((LPNMHDR) lParam)->code)
{
case PSN_SETACTIVE:
SetBannerText(hDlg);
// title
InsGetString(IS_BRANDING, TEXT("Window_Title_CN"), szTitle, countof(szTitle),
g_szCustIns, NULL, &fTitle);
if (!fTitle && *szTitle == '\0')
InsGetString(IS_BRANDING, TEXT("CompanyName"), szTitle, countof(szTitle), g_szCustIns);
SetDlgItemTextTriState(hDlg, IDE_TITLE, IDC_TITLE, szTitle, fTitle);
EnableDlgItem2(hDlg, IDC_TITLE_TXT, fTitle);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
// title
if (g_fBatch)
{
InsGetString(TEXT("BatchMode"), IK_WINDOWTITLE, szFullTitle, countof(szFullTitle), g_szCustIns);
InsWriteString(IS_BRANDING, IK_WINDOWTITLE, szFullTitle, g_szCustIns, TRUE, NULL, INSIO_TRISTATE);
InsGetString(TEXT("BatchMode"), TEXT("Window_Title_OE"), szFullTitle, countof(szFullTitle), g_szCustIns);
InsWriteString(IS_INTERNETMAIL, IK_WINDOWTITLE, szFullTitle, g_szCustIns, TRUE, NULL, INSIO_TRISTATE);
}
else
{
fTitle = GetDlgItemTextTriState(hDlg, IDE_TITLE, IDC_TITLE, szTitle, countof(szTitle));
InsWriteString(IS_BRANDING, TEXT("Window_Title_CN"), szTitle, g_szCustIns, fTitle, NULL, INSIO_SERVERONLY | INSIO_TRISTATE);
// browser title
*szFullTitle = TEXT('\0');
if (*szTitle)
{
*szTemp = TEXT('\0');
InsGetString(IS_STRINGS, TEXT("IE_TITLE"), szTemp, countof(szTemp), g_szDefInf);
if (*szTemp)
wnsprintf(szFullTitle, countof(szFullTitle), szTemp, szTitle);
}
InsWriteString(IS_BRANDING, IK_WINDOWTITLE, szFullTitle, g_szCustIns, fTitle, NULL, INSIO_TRISTATE);
// OE title
*szFullTitle = TEXT('\0');
if (*szTitle)
{
*szTemp = TEXT('\0');
InsGetString(IS_STRINGS, TEXT("OE_TITLE"), szTemp, countof(szTemp), g_szDefInf);
if (*szTemp)
wnsprintf(szFullTitle, countof(szFullTitle), szTemp, szTitle);
}
InsWriteString(IS_INTERNETMAIL, IK_WINDOWTITLE, szFullTitle, g_szCustIns, fTitle, NULL, INSIO_TRISTATE);
}
g_iCurPage = PPAGE_TITLE;
EnablePages();
(((LPNMHDR) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg);
break;
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
case WM_COMMAND:
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
return FALSE;
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_TITLE:
fTitle = (IsDlgButtonChecked(hDlg, IDC_TITLE) == BST_CHECKED);
EnableDlgItem2(hDlg, IDC_TITLE_TXT, fTitle);
EnableDlgItem2(hDlg, IDE_TITLE, fTitle);
break;
default:
return FALSE;
}
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
default:
return FALSE;
}
return TRUE;
}
INT_PTR CALLBACK WelcomeMessageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
TCHAR szInitHomePage[INTERNET_MAX_URL_LENGTH];
INT id;
switch (uMsg)
{
case WM_INITDIALOG:
EnableDBCSChars(hDlg, IDE_WELCOMEURL);
Edit_LimitText(GetDlgItem(hDlg, IDE_WELCOMEURL), countof(szInitHomePage) - 1);
break;
case WM_NOTIFY:
switch (((LPNMHDR) lParam)->code)
{
case PSN_SETACTIVE:
SetBannerText(hDlg);
g_fUseIEWelcomePage = !InsGetBool(IS_URL, IK_NO_WELCOME_URL, FALSE, g_szCustIns);
InsGetString(IS_URL, IK_FIRSTHOMEPAGE, szInitHomePage, countof(szInitHomePage), g_szCustIns);
if (g_fUseIEWelcomePage)
id = IDC_WELCOMEDEF;
else
id = (*szInitHomePage ? IDC_WELCOMECUST : IDC_WELCOMENO);
CheckRadioButton(hDlg, IDC_WELCOMEDEF, IDC_WELCOMECUST, id);
if (id == IDC_WELCOMECUST)
{
SetDlgItemText(hDlg, IDE_WELCOMEURL, szInitHomePage);
EnableDlgItem (hDlg, IDE_WELCOMEURL);
}
else
DisableDlgItem(hDlg, IDE_WELCOMEURL);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
// if custom home page radio button is checked, verify that a URL is specified
if (IsDlgButtonChecked(hDlg, IDC_WELCOMECUST) == BST_CHECKED)
if (!CheckField(hDlg, IDE_WELCOMEURL, FC_NONNULL | FC_URL))
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
return TRUE;
}
g_fUseIEWelcomePage = (IsDlgButtonChecked(hDlg, IDC_WELCOMEDEF) == BST_CHECKED);
InsWriteBool(IS_URL, IK_NO_WELCOME_URL, !g_fUseIEWelcomePage, g_szCustIns);
GetDlgItemText(hDlg, IDE_WELCOMEURL, szInitHomePage, countof(szInitHomePage));
InsWriteString(IS_URL, IK_FIRSTHOMEPAGE, szInitHomePage, g_szCustIns);
g_iCurPage = PPAGE_WELCOMEMSGS;
EnablePages();
(((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg);
break;
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
case WM_COMMAND:
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
return FALSE;
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_WELCOMENO:
case IDC_WELCOMEDEF:
SetDlgItemText(hDlg, IDE_WELCOMEURL, TEXT(""));
DisableDlgItem(hDlg, IDE_WELCOMEURL);
break;
case IDC_WELCOMECUST:
EnableDlgItem(hDlg, IDE_WELCOMEURL);
break;
}
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
default:
return FALSE;
}
return TRUE;
}
void LoadInsFile(LPCTSTR pcszNewInsFile)
{
TCHAR szSrcPath[MAX_PATH];
TCHAR szDestDir[MAX_PATH];
TCHAR szPlatform[8];
TCHAR szFilePath[MAX_PATH];
TCHAR szData[8];
CopyFile(pcszNewInsFile, g_szCustIns, FALSE);
SetFileAttributes(g_szCustIns, FILE_ATTRIBUTE_NORMAL);
StrCpy(szSrcPath, pcszNewInsFile);
PathRemoveFileSpec(szSrcPath);
StrCpy(szDestDir, g_szCustIns);
PathRemoveFileSpec(szDestDir);
// make sure platform info is correct
wnsprintf(szPlatform, countof(szPlatform), TEXT("%lu"), g_dwPlatformId);
WritePrivateProfileString(BRANDING, TEXT("Platform"), szPlatform, g_szCustIns);
// the delete adms flag will be cleared out when we hit next on the adm page
WritePrivateProfileString(IS_BRANDING, TEXT("DeleteAdms"), TEXT("1"), g_szCustIns);
WritePrivateProfileString(IS_BRANDING, TEXT("ImportIns"), pcszNewInsFile, g_szCustIns);
// branding.cab file is cross platform
CopyFilesSrcToDest(szSrcPath, TEXT("BRANDING.CAB"), szDestDir);
PathCombine(szFilePath, szSrcPath, TEXT("iesetup.inf"));
// only copy over iesetup.inf if it's also a win32 inf
if (GetPrivateProfileString(OPTIONS, TEXT("CifName"), TEXT(""), szData, countof(szData), szFilePath))
CopyFilesSrcToDest(szSrcPath, TEXT("iesetup.inf"), szDestDir);
CopyFilesSrcToDest(szSrcPath, TEXT("iak.ini"), szDestDir);
CopyFilesSrcToDest(szSrcPath, TEXT("iesetup.cif"), szDestDir);
CopyFilesSrcToDest(szSrcPath, TEXT("custom.cif"), szDestDir);
CopyFilesSrcToDest(szSrcPath, TEXT("DESKTOP.CAB"), szDestDir);
CopyFilesSrcToDest(szSrcPath, TEXT("CHNLS.CAB"), szDestDir);
SetAttribAllEx(szDestDir, TEXT("*.*"), FILE_ATTRIBUTE_NORMAL, FALSE);
// clear out CMAK guid when importing so we'll generate a new one for this package
PathCombine(szFilePath, szDestDir, TEXT("custom.cif"));
WritePrivateProfileString( CUSTCMSECT, TEXT("GUID"), NULL, szFilePath );
WritePrivateProfileString( CUSTCMSECT, VERSION, NULL, szFilePath );
// copy singup files
// BUGBUG: pritobla- should implement a function in ieakutil to xcopy a folder (including its subdirs)
// to another location and use that function here.
PathAppend(szSrcPath, TEXT("signup"));
PathAppend(szDestDir, TEXT("signup"));
PathAppend(szSrcPath, TEXT("icw"));
PathAppend(szDestDir, TEXT("icw"));
CopyFilesSrcToDest(szSrcPath, TEXT("*.*"), szDestDir);
PathRemoveFileSpec(szSrcPath);
PathRemoveFileSpec(szDestDir);
PathAppend(szSrcPath, TEXT("kiosk"));
PathAppend(szDestDir, TEXT("kiosk"));
CopyFilesSrcToDest(szSrcPath, TEXT("*.*"), szDestDir);
PathRemoveFileSpec(szSrcPath);
PathRemoveFileSpec(szDestDir);
PathAppend(szSrcPath, TEXT("servless"));
PathAppend(szDestDir, TEXT("servless"));
CopyFilesSrcToDest(szSrcPath, TEXT("*.*"), szDestDir);
}
//
// FUNCTION: Language(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for "Language" page
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_NOTIFY - processes the notifications sent to the page
// WM_COMMAND - saves the id of the choice selected
//
INT_PTR CALLBACK Language(
HWND hDlg,
UINT message,
WPARAM,
LPARAM lParam)
{
TCHAR szBuf[1024];
int i;
static BOOL s_fNext = TRUE;
TCHAR szTemp[MAX_PATH];
DWORD dwSelLangId;
USES_CONVERSION;
switch (message)
{
case WM_INITDIALOG:
g_hWizard = hDlg;
InitSysFont( hDlg, IDC_LANGUAGE);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
//from the download pg
if (!g_fUrlsInit && !g_fBatch && !g_fBatch2 && !g_hWait && g_hDownloadEvent && !g_fLocalMode)
{
g_hWizard = hDlg;
g_hWait = CreateDialog( g_rvInfo.hInst, MAKEINTRESOURCE(IDD_WAITSITES), hDlg,
DownloadStatusDlgProc );
ShowWindow( g_hWait, SW_SHOWNORMAL );
PropSheet_SetWizButtons(GetParent(hDlg), 0 );
g_iDownloadState = DOWN_STATE_ENUM_URL;
g_hDlg = hDlg;
SetEvent(g_hDownloadEvent);
}
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case IDM_INITIALIZE:
if (g_hWait && g_fLangInit)
{
SendMessage(g_hWait, WM_CLOSE, 0, 0);
g_hWait = NULL;
}
break;
// this resets the focus away from cancel when we disable back/next
case IDM_SETDEFBUTTON:
SetFocus( GetDlgItem( GetParent(hDlg), IDC_STATIC ) );
SendMessage(GetParent(hDlg), DM_SETDEFID, (WPARAM)IDC_STATIC, (LPARAM)0);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_COMMAND:
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
if (!g_fLangInit && !g_fBatch && !g_fBatch2)
{
DWORD dwTid;
g_iDownloadState = DOWN_STATE_ENUM_LANG;
g_hDlg = hDlg;
PropSheet_SetWizButtons(GetParent(hDlg), 0);
if (!g_fLocalMode)
{
g_hWait = CreateDialog(g_rvInfo.hInst, MAKEINTRESOURCE(IDD_WAITSITES), hDlg,
DownloadStatusDlgProc);
ShowWindow( g_hWait, SW_SHOWNORMAL );
}
g_hThread = CreateThread(NULL, 4096, DownloadSiteThreadProc, &g_hWizard, 0, &dwTid);
PostMessage(hDlg, IDM_SETDEFBUTTON, 0, 0);
break;
}
if (g_fOptCompInit)
DisableDlgItem(hDlg, IDC_LANGUAGE);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
if (!g_nLangs && !g_fBatch && !g_fBatch2)
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
g_fCancelled = FALSE;
return(TRUE);
}
//original processing
dwSelLangId = 1033;
if (!g_fBatch && !g_fBatch2)
{
i = (int) SendDlgItemMessage( hDlg, IDC_LANGUAGE, CB_GETCURSEL, 0, 0 );
StrCpy(g_szLanguage + 1, g_aszLang[i]);
*g_szLanguage = g_szLanguage[3] = TEXT('\\');
g_szLanguage[4] = TEXT('\0');
dwSelLangId = g_aLangId[i];
if (StrCmpI(g_szActLang, g_aszLang[i]) != 0)
{
s_fAppendLang = TRUE;
g_fSrcDirChanged = TRUE;
StrCpy(g_szActLang, g_aszLang[i]);
}
if (s_fAppendLang)
{
PathCombine(g_szIEAKProg, s_szSourceDir, &g_szLanguage[1]);
if (!PathFileExists(g_szIEAKProg))
PathCreatePath(g_szIEAKProg);
s_fAppendLang = FALSE;
}
}
CharUpper(g_szLanguage);
CharUpper(g_szActLang);
StrCpy(szBuf, g_szLanguage + 1);
szBuf[lstrlen(szBuf) - 1] = TEXT('\0');
GenerateCustomIns();
if (ISNONNULL(g_szLoadedIns) && s_fLoadIns)
{
TCHAR szLoadLang[8];
s_fLoadIns = FALSE;
if (GetPrivateProfileString(IS_BRANDING, LANG_LOCALE, TEXT(""),
szLoadLang, countof(szLoadLang), g_szLoadedIns) && (StrCmpI(szLoadLang, g_szActLang) != 0))
{
TCHAR szMsgParam[MAX_PATH];
TCHAR szMsg[MAX_PATH*2];
LoadString(g_rvInfo.hInst, IDS_LANGDIFFERS, szMsgParam, countof(szMsgParam));
wnsprintf(szMsg, countof(szMsg), szMsgParam, g_szLoadedIns);
if (MessageBox(hDlg, szMsg, g_szTitle, MB_YESNO) == IDNO)
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
return TRUE;
}
}
LoadInsFile(g_szLoadedIns);
}
wnsprintf(s_szType, countof(s_szType), TEXT("%i"), s_iType);
WritePrivateProfileString(BRANDING, TEXT("Type"), s_szType, g_szCustIns);
WritePrivateProfileString( BRANDING, IK_WIZVERSION, A2CT(VER_PRODUCTVERSION_STR), g_szCustIns );
//clear others so we know this is wizard
WritePrivateProfileString(BRANDING, PMVERKEY, NULL, g_szCustIns);
WritePrivateProfileString(BRANDING, GPVERKEY, NULL, g_szCustIns);
StrCpy(szTemp, g_szKey);
szTemp[7] = TEXT('\0');
WritePrivateProfileString( BRANDING, TEXT("Custom_Key"), szTemp, g_szCustIns );
if (*(g_rvInfo.pszName) == 0)
GetPrivateProfileString(BRANDING, TEXT("CompanyName"), TEXT(""), g_rvInfo.pszName, countof(g_rvInfo.pszName), g_szCustIns);
WritePrivateProfileString(BRANDING, TEXT("CompanyName"), g_rvInfo.pszName, g_szCustIns);
if (g_iKeyType < KEY_TYPE_ENHANCED)
{
WritePrivateProfileString( TEXT("Animation"), NULL, NULL, g_szCustIns );
WritePrivateProfileString( TEXT("Big_Logo"), NULL, NULL, g_szCustIns );
WritePrivateProfileString( TEXT("Small_Logo"), NULL, NULL, g_szCustIns );
}
if (!g_fBatch)
{
TCHAR szLngID[16];
wnsprintf(szLngID, countof(szLngID), TEXT("%lu"), dwSelLangId);
WritePrivateProfileString(BRANDING, LANG_LOCALE, g_szActLang, g_szCustIns);
WritePrivateProfileString(BRANDING, LANG_ID, szLngID, g_szCustIns);
}
g_iCurPage = PPAGE_LANGUAGE;
EnablePages();
if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT)
{
s_fNext = FALSE;
PageNext(hDlg);
}
else
{
s_fNext = TRUE;
PagePrev(hDlg);
}
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
INT_PTR CALLBACK StartSearch(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL fStartPage, fSearchPage, fSupportPage;
switch (uMsg)
{
case WM_INITDIALOG:
EnableDBCSChars(hDlg, IDE_STARTPAGE);
EnableDBCSChars(hDlg, IDE_SEARCHPAGE);
EnableDBCSChars(hDlg, IDE_CUSTOMSUPPORT);
Edit_LimitText(GetDlgItem(hDlg, IDE_STARTPAGE), INTERNET_MAX_URL_LENGTH - 1);
Edit_LimitText(GetDlgItem(hDlg, IDE_SEARCHPAGE), INTERNET_MAX_URL_LENGTH - 1);
Edit_LimitText(GetDlgItem(hDlg, IDE_CUSTOMSUPPORT), INTERNET_MAX_URL_LENGTH - 1);
break;
case WM_NOTIFY:
switch (((LPNMHDR) lParam)->code)
{
case PSN_SETACTIVE:
SetBannerText(hDlg);
InitializeStartSearch(hDlg, g_szCustIns, NULL);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZBACK:
case PSN_WIZNEXT:
fStartPage = (IsDlgButtonChecked(hDlg, IDC_STARTPAGE) == BST_CHECKED);
fSearchPage = (IsDlgButtonChecked(hDlg, IDC_SEARCHPAGE) == BST_CHECKED);
fSupportPage = (IsDlgButtonChecked(hDlg, IDC_CUSTOMSUPPORT) == BST_CHECKED);
if ((fStartPage && !CheckField(hDlg, IDE_STARTPAGE, FC_URL)) ||
(fSearchPage && !CheckField(hDlg, IDE_SEARCHPAGE, FC_URL)) ||
(fSupportPage && !CheckField(hDlg, IDE_CUSTOMSUPPORT, FC_URL)))
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
return TRUE;
}
SaveStartSearch(hDlg, g_szCustIns, NULL);
g_iCurPage = PPAGE_STARTSEARCH;
EnablePages();
(((LPNMHDR) lParam)->code == PSN_WIZNEXT) ? PageNext(hDlg) : PagePrev(hDlg);
break;
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
case WM_COMMAND:
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
return FALSE;
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_STARTPAGE:
fStartPage = (IsDlgButtonChecked(hDlg, IDC_STARTPAGE) == BST_CHECKED);
EnableDlgItem2(hDlg, IDE_STARTPAGE, fStartPage);
EnableDlgItem2(hDlg, IDC_STARTPAGE_TXT, fStartPage);
break;
case IDC_SEARCHPAGE:
fSearchPage = (IsDlgButtonChecked(hDlg, IDC_SEARCHPAGE) == BST_CHECKED);
EnableDlgItem2(hDlg, IDE_SEARCHPAGE, fSearchPage);
EnableDlgItem2(hDlg, IDC_SEARCHPAGE_TXT, fSearchPage);
break;
case IDC_CUSTOMSUPPORT:
fSupportPage = (IsDlgButtonChecked(hDlg, IDC_CUSTOMSUPPORT) == BST_CHECKED);
EnableDlgItem2(hDlg, IDE_CUSTOMSUPPORT, fSupportPage);
EnableDlgItem2(hDlg, IDC_CUSTOMSUPPORT_TXT, fSupportPage);
break;
default:
return FALSE;
}
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
default:
return FALSE;
}
return TRUE;
}
INT_PTR CALLBACK Finish(HWND hDlg, UINT message, WPARAM, LPARAM lParam)
{
TCHAR szPlatform[8];
TCHAR szWinDir[MAX_PATH];
static s_fFinished = FALSE;
switch (message)
{
case WM_INITDIALOG:
g_hWizard = hDlg;
if (s_fFinished)
EnableDBCSChars(hDlg, IDC_FINISHTXT3);
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case WM_COMMAND:
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
if (!s_fFinished)
{
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
ShowWindow(GetDlgItem(hDlg, IDC_FINISHTXT1), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_STEP1), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_STEP3), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_PROGRESS), SW_HIDE);
CheckBatchAdvance(hDlg);
}
else
{
SetWindowText(GetDlgItem(hDlg, IDC_FINISHTXT3), g_szBuildRoot);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_FINISH);
if (g_fBatch || g_fBatch2)
PostMessage(GetParent(hDlg), PSM_PRESSBUTTON, PSBTN_FINISH, 0);
}
break;
case PSN_WIZBACK:
PagePrev(hDlg);
break;
case PSN_WIZNEXT:
if (!g_fCancelled && !g_fDemo)
{
CNewCursor cur(IDC_WAIT);
HANDLE hThread;
DWORD dwTid;
wnsprintf(szPlatform, countof(szPlatform), TEXT("%lu"), g_dwPlatformId);
WritePrivateProfileString(BRANDING, TEXT("Platform"), szPlatform, g_szCustIns);
ShowWindow(GetDlgItem(hDlg, IDC_FINISHTXT1), SW_SHOW);
ShowWindow(GetDlgItem(hDlg, IDC_STEP1), SW_SHOW);
ShowWindow(GetDlgItem(hDlg, IDC_STEP3), SW_SHOW);
ShowWindow(GetDlgItem(hDlg, IDC_PROGRESS), SW_SHOW);
PropSheet_SetWizButtons(GetParent(hDlg), 0);
DisableDlgItem(GetParent(hDlg), IDHELP);
DisableDlgItem(GetParent(hDlg), IDCANCEL);
Animate_Open( GetDlgItem( hDlg, IDC_ANIM ), IDA_GEARS );
Animate_Play( GetDlgItem( hDlg, IDC_ANIM ), 0, -1, -1 );
SetAttribAllEx(g_szBuildRoot, TEXT("*.*"), FILE_ATTRIBUTE_NORMAL, TRUE);
g_fCancelled = TRUE;
GetWindowsDirectory(szWinDir, MAX_PATH);
memset(&g_shfStruc, 0, sizeof(g_shfStruc));
g_shfStruc.hwnd = hDlg;
g_shfStruc.wFunc = FO_COPY;
SetAttribAllEx(g_szBuildTemp, TEXT("*.*"), FILE_ATTRIBUTE_NORMAL, TRUE);
hThread = CreateThread(NULL, 4096, BuildIE4, hDlg, 0, &dwTid);
while (MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CloseHandle(hThread);
// this sets the last 'platform/language' package built in this build directory.
// its used to get the settings used in the last .ins file.
{
TCHAR szPlatformLang[MAX_PATH];
TCHAR szRegKey[MAX_PATH];
wnsprintf(szRegKey, countof(szRegKey), TEXT("%s\\INS"), RK_IEAK_SERVER);
wnsprintf(szPlatformLang, countof(szPlatformLang), TEXT("%s%s"), GetOutputPlatformDir(), g_szActLang);
SHSetValue(HKEY_CURRENT_USER, szRegKey, g_szBuildRoot, REG_SZ, (LPBYTE)szPlatformLang,
(StrLen(szPlatformLang)+1)*sizeof(TCHAR));
}
}
if (g_fDemo)
{
TCHAR szMsg[MAX_PATH];
SetCurrentDirectory(g_szBuildRoot);
PathRemovePath(g_szBuildTemp);
LoadString( g_rvInfo.hInst, IDS_ENDEMO, szMsg, countof(szMsg) );
MessageBox(hDlg, szMsg, g_szTitle, MB_OK | MB_SETFOREGROUND);
g_fDone = TRUE;
SetEvent(g_hDownloadEvent);
}
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_FINISH);
g_fCancelled = TRUE;
s_fFinished = TRUE;
break;
case PSN_WIZFINISH:
break;
case PSN_QUERYCANCEL:
if (IsWindowEnabled(GetDlgItem(GetParent(hDlg), IDCANCEL)))
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
#define OLDPRSHTSIZE 0x28
#define OLDPPAGESIZE 0x28
#define SSF_ALL SSF_SHOWALLOBJECTS | SSF_SHOWEXTENSIONS | SSF_SHOWCOMPCOLOR | SSF_SHOWSYSFILES | SSF_DESKTOPHTML | SSF_WIN95CLASSIC
void FillInPropertyPage(int iPsp, WORD idDlg, DLGPROC pfnDlgProc)
{
LPPROPSHEETPAGE pPsp;
TCHAR szPage[MAX_PATH];
LPDLGTEMPLATE pDlg;
if (iPsp < 0 || iPsp > NUM_PAGES)
return;
if (idDlg == 0)
return;
if (pfnDlgProc == NULL)
return;
pDlg = NULL;
LoadString(g_rvInfo.hInst, IDS_TITLE, szPage, countof(szPage));
if (iPsp != PPAGE_WELCOME && iPsp != PPAGE_OCWWELCOME && iPsp != PPAGE_FINISH)
{
TCHAR szStage[MAX_PATH];
if (iPsp < PPAGE_STAGE2)
LoadString(g_rvInfo.hInst, IDS_STAGE1, szStage, countof(szStage));
else
{
if (iPsp < PPAGE_STAGE3)
LoadString(g_rvInfo.hInst, IDS_STAGE2, szStage, countof(szStage));
else
{
if (iPsp < PPAGE_STAGE4)
LoadString(g_rvInfo.hInst, IDS_STAGE3, szStage, countof(szStage));
else
{
if (iPsp < PPAGE_STAGE5)
LoadString(g_rvInfo.hInst, IDS_STAGE4, szStage, countof(szStage));
else
LoadString(g_rvInfo.hInst, IDS_STAGE5, szStage, countof(szStage));
}
}
}
StrCpy(s_aSzTitle[iPsp], szStage);
}
else
StrCpy(s_aSzTitle[iPsp], szPage);
pPsp = &g_psp[iPsp];
ZeroMemory(pPsp, sizeof(PROPSHEETPAGE));
pPsp->dwSize = sizeof(PROPSHEETPAGE);
pPsp->dwFlags = PSP_USETITLE | PSP_HASHELP;
pPsp->hInstance = g_rvInfo.hInst;
pPsp->pfnDlgProc = pfnDlgProc;
pPsp->pszTitle = s_aSzTitle[iPsp];
pPsp->pszTemplate = MAKEINTRESOURCE(idDlg);
/* if (!IsTahomaFontExist(g_hWndCent))
{
pPsp->dwFlags |= PSP_DLGINDIRECT;
pPsp->pResource = pDlg;
}*/
s_ahPsp[iPsp] = CreatePropertySheetPage(pPsp);
}
int CreateWizard(HWND hwndOwner)
{
PROPSHEETHEADER psh;
LPTSTR pLastSlash;
GetModuleFileName(GetModuleHandle(NULL), g_szWizPath, MAX_PATH);
pLastSlash = StrRChr(g_szWizPath, NULL, TEXT('\\'));
if (pLastSlash)
{
pLastSlash[1] = TEXT('\0');
}
StrCpy(g_szWizRoot, g_szWizPath);
CharUpper(g_szWizRoot);
pLastSlash = StrStr(g_szWizRoot, TEXT("IEBIN"));
if (pLastSlash) *pLastSlash = TEXT('\0');
LoadString( g_rvInfo.hInst, IDS_TITLE, g_szTitle, countof(g_szTitle) );
ZeroMemory(&psh, sizeof(psh));
if(!g_fOCW)
FillInPropertyPage( PPAGE_WELCOME, IDD_WELCOME, Welcome);
else
FillInPropertyPage( PPAGE_OCWWELCOME, IDD_OCWWELCOME, Welcome);
FillInPropertyPage( PPAGE_STAGE1, IDD_STAGE1, Stage);
FillInPropertyPage( PPAGE_TARGET, IDD_TARGET, TargetProc);
FillInPropertyPage( PPAGE_LANGUAGE, IDD_LANGUAGE, Language);
FillInPropertyPage( PPAGE_MEDIA, IDD_MEDIA, MediaDlgProc);
FillInPropertyPage( PPAGE_IEAKLITE, IDD_IEAKLITE, IEAKLiteProc);
FillInPropertyPage( PPAGE_STAGE2, IDD_STAGE2, Stage);
FillInPropertyPage( PPAGE_OPTDOWNLOAD, IDD_OPTDOWNLOAD, OptionalDownload);
FillInPropertyPage( PPAGE_CUSTCOMP, IDD_CUSTCOMP4, CustomComponents);
FillInPropertyPage( PPAGE_STAGE3, IDD_STAGE3, Stage);
FillInPropertyPage( PPAGE_ISKBACK, IDD_ISKBACKBITMAP, ISKBackBitmap);
FillInPropertyPage( PPAGE_CDINFO, IDD_CD, CDInfoProc);
FillInPropertyPage( PPAGE_SETUPWIZARD, IDD_SETUPWIZARD, ActiveSetupDlgProc);
FillInPropertyPage( PPAGE_ICM, IDD_ICM, InternetConnMgr);
FillInPropertyPage( PPAGE_COMPSEL, IDD_COMPSEL4, ComponentSelect);
FillInPropertyPage( PPAGE_COMPURLS, IDD_COMPURLS, ComponentUrls);
FillInPropertyPage( PPAGE_ADDON, IDD_ADDON, AddOnDlgProc);
FillInPropertyPage( PPAGE_CORPCUSTOM, IDD_CORPCUSTOM, CorpCustomizeCustom);
FillInPropertyPage( PPAGE_CUSTOMCUSTOM, IDD_CUSTOMCUSTOM, CustomizeCustom);
FillInPropertyPage( PPAGE_COPYCOMP, IDD_COPYCOMP, CopyComp);
FillInPropertyPage( PPAGE_CABSIGN, IDD_CABSIGN, CabSignDlgProc);
FillInPropertyPage( PPAGE_STAGE4, IDD_STAGE4, Stage);
FillInPropertyPage( PPAGE_OCWSTAGE2, IDD_OCWSTAGE2, Stage);
FillInPropertyPage( PPAGE_INSTALLDIR, IDD_INSTALLDIR, InstallDirectory);
FillInPropertyPage( PPAGE_SILENTINSTALL, IDD_SILENTINSTALL, SilentInstall);
FillInPropertyPage( PPAGE_TITLE, IDD_BTITLE, BrandTitle);
FillInPropertyPage( PPAGE_BTOOLBARS, IDD_BTOOLBARS, BToolbarProc);
FillInPropertyPage( PPAGE_CUSTICON, IDD_CUSTICON, CustIcon);
FillInPropertyPage( PPAGE_STARTSEARCH, IDD_STARTSEARCH, StartSearch);
FillInPropertyPage( PPAGE_FAVORITES, IDD_FAVORITES, Favorites);
FillInPropertyPage( PPAGE_WELCOMEMSGS, IDD_WELCOMEMSGS, WelcomeMessageDlgProc);
FillInPropertyPage( PPAGE_UASTRDLG, IDD_UASTRDLG, UserAgentString);
FillInPropertyPage( PPAGE_QUERYAUTOCONFIG, IDD_QUERYAUTOCONFIG, QueryAutoConfigDlgProc);
FillInPropertyPage( PPAGE_PROXY, IDD_PROXY, ProxySettings);
FillInPropertyPage( PPAGE_CONNECTSET, IDD_CONNECTSET, ConnectSetDlgProc);
FillInPropertyPage( PPAGE_QUERYSIGNUP, IDD_QUERYSIGNUP, QuerySignupDlgProc);
FillInPropertyPage( PPAGE_SIGNUPFILES, IDD_SIGNUPFILES, SignupFilesDlgProc);
FillInPropertyPage( PPAGE_SERVERISPS, IDD_SERVERISPS, ServerIspsDlgProc);
FillInPropertyPage( PPAGE_ISPINS, IDD_SIGNUPINS, SignupInsDlgProc);
FillInPropertyPage( PPAGE_ICW, IDD_ICW, NewICWDlgProc);
FillInPropertyPage( PPAGE_ADDROOT, IDD_ADDROOT, ISPAddRootCertDlgProc);
FillInPropertyPage( PPAGE_SECURITYCERT, IDD_SECURITYCERT, SecurityCertsDlgProc);
FillInPropertyPage( PPAGE_SECURITY, IDD_SECURITY1, SecurityZonesDlgProc);
FillInPropertyPage( PPAGE_STAGE5, IDD_STAGE5, Stage);
FillInPropertyPage( PPAGE_PROGRAMS, IDD_PROGRAMS, ProgramsDlgProc);
FillInPropertyPage( PPAGE_MAIL, IDD_MAIL, MailServer);
FillInPropertyPage( PPAGE_IMAP, IDD_IMAP, IMAPSettings);
FillInPropertyPage( PPAGE_PRECONFIG,IDD_PRECONFIG,PreConfigSettings);
FillInPropertyPage( PPAGE_OEVIEW,IDD_OEVIEW,ViewSettings);
FillInPropertyPage( PPAGE_LDAP, IDD_LDAP, LDAPServer);
FillInPropertyPage( PPAGE_OE, IDD_OE, CustomizeOE);
FillInPropertyPage( PPAGE_SIG, IDD_SIG, Signature);
FillInPropertyPage( PPAGE_ADMDESC, IDD_ADMDESC, ADMDesc);
FillInPropertyPage( PPAGE_ADM, IDD_ADM, ADMParse);
FillInPropertyPage( PPAGE_STATUS, IDD_STATUS, Finish);
FillInPropertyPage( PPAGE_FINISH, IDD_FINISH, Finish);
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_WIZARD | PSH_NOAPPLYNOW | PSH_USEPAGELANG | PSH_USECALLBACK;
psh.hInstance = g_rvInfo.hInst;
psh.hwndParent = hwndOwner;
psh.pszCaption = TEXT("Review Wizard");
psh.nPages = NUM_PAGES;
psh.nStartPage = 0;
psh.phpage = s_ahPsp;
psh.pfnCallback= &PropSheetProc;
INT_PTR iResult = PropertySheet(&psh);
/* if (!IsTahomaFontExist(g_hWndCent))
{
for (int i = 0; i < NUM_PAGES; i++) {
CoTaskMemFree((PVOID)g_psp[i].pResource);
g_psp[i].pResource = NULL;
}
}*/
return (iResult < 0) ? -1 : 1;
}
BOOL CheckAVS(LPCTSTR pcszDownloadDir)
{
TCHAR szDownloadDir[MAX_PATH];
TCHAR szCabFile[MAX_PATH];
HANDLE hFind = NULL;
WIN32_FIND_DATA fd;
static TCHAR s_szLocaleIni[MAX_PATH];
if (ISNULL(s_szLocaleIni))
PathCombine(s_szLocaleIni, g_szWizRoot, TEXT("locale.ini"));
PathCombine(szDownloadDir, pcszDownloadDir, TEXT("*.*"));
hFind = FindFirstFile(szDownloadDir, &fd);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|| (StrCmp(fd.cFileName, TEXT(".")) == 0)
|| (StrCmp(fd.cFileName, TEXT("..")) == 0))
continue;
if (!InsIsKeyEmpty(IS_STRINGS, fd.cFileName, s_szLocaleIni))
{
PathCombine(szCabFile, pcszDownloadDir, fd.cFileName);
PathAppend(szCabFile, TEXT("setupw95.cab"));
if (PathFileExists(szCabFile))
{
FindClose(hFind);
return TRUE;
}
}
}
while (FindNextFile(hFind, &fd));
FindClose(hFind);
}
return FALSE;
}
INT_PTR CALLBACK AdvancedDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM)
{
TCHAR szTemp[MAX_PATH];
TCHAR szTempFile[MAX_PATH];
DWORD dwVal;
BOOL fLocalMode = TRUE;
HANDLE hTemp;
DWORD dwFlags;
switch (message)
{
case WM_INITDIALOG:
EnableDBCSChars(hDlg, IDE_LOADINS);
EnableDBCSChars(hDlg, IDE_SOURCEDIR);
SetDlgItemText(hDlg, IDE_SOURCEDIR, g_szIEAKProg);
CheckDlgButton( hDlg, IDC_OFFLINE, g_fLocalMode ? BST_UNCHECKED : BST_CHECKED );
if (g_fLangInit)
DisableDlgItem(hDlg, IDC_OFFLINE);
SetDlgItemText(hDlg, IDE_LOADINS, g_szLoadedIns);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch (LOWORD(wParam))
{
case IDC_BROWSE:
{
TCHAR szInstructions[MAX_PATH];
LoadString(g_rvInfo.hInst,IDS_COMPDLDIR,szInstructions,countof(szInstructions));
if (BrowseForFolder(hDlg, szTemp, szInstructions))
SetDlgItemText(hDlg, IDE_SOURCEDIR, szTemp);
}
break;
case IDC_BROWSEINS:
GetDlgItemText( hDlg, IDE_LOADINS, szTemp, countof(szTemp));
if( BrowseForFile( hDlg, szTemp, countof(szTemp), GFN_INS ))
SetDlgItemText( hDlg, IDE_LOADINS, szTemp );
break;
case IDCANCEL:
EndDialog( hDlg, IDCANCEL );
break;
case IDOK:
dwFlags = FC_FILE | FC_EXISTS;
if (!CheckField(hDlg, IDE_LOADINS, dwFlags))
break;
GetDlgItemText(hDlg, IDE_SOURCEDIR, szTemp, countof(szTemp));
if (!CheckField(hDlg, IDE_SOURCEDIR, FC_PATH | FC_DIR))
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if (!PathIsUNC(szTemp))
{
if ((PathIsRoot(szTemp)) || (PathIsRelative(szTemp)))
{
ErrorMessageBox(hDlg, IDS_SRCNEEDPATH);
break;
}
}
if ((StrLen(szTemp) <= 3) || PathIsUNCServer(szTemp))
{
ErrorMessageBox(hDlg, IDS_SRCROOTILLEGAL);
break;;
}
fLocalMode = !IsDlgButtonChecked( hDlg, IDC_OFFLINE );
if (!g_fBatch && fLocalMode && !CheckAVS(szTemp))
{
ErrorMessageBox(hDlg, IDS_NEEDAVS);
break;
}
PathCombine(szTempFile, szTemp, TEXT("~~!!foo.txt"));
if (!PathCreatePath(szTemp) ||
((hTemp = CreateFile(szTempFile, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE))
{
TCHAR szMsg[128];
TCHAR szMsgTemp[MAX_PATH+128];
LoadString(g_rvInfo.hInst, IDS_BADDIR, szMsg, countof(szMsg));
wnsprintf(szMsgTemp, countof(szMsgTemp), szMsg, szTemp);
MessageBox(hDlg, szMsgTemp, g_szTitle, MB_OK | MB_SETFOREGROUND);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
CloseHandle(hTemp);
DeleteFile(szTempFile);
PathAddBackslash(szTemp);
StrCpy(g_szIEAKProg, szTemp);
GetDlgItemText(hDlg, IDE_LOADINS, g_szLoadedIns, countof(g_szLoadedIns));
if (ISNONNULL(g_szLoadedIns))
{
int nPlatformId = 0;
InsGetString(IS_BRANDING, TEXT("Platform"), szTemp, countof(szTemp), g_szLoadedIns);
nPlatformId = StrToInt(szTemp);
if (nPlatformId != 0 && nPlatformId != PLATFORM_WIN32 && nPlatformId != PLATFORM_W2K)
{
TCHAR szMsgParam[128];
TCHAR szMsg[MAX_PATH+128];
LoadString(g_rvInfo.hInst, IDS_UNSUPPORTED_PLATFORM, szMsgParam, countof(szMsgParam));
wnsprintf(szMsg, countof(szMsg), szMsgParam, g_szLoadedIns);
MessageBox(hDlg, szMsg, g_szTitle, MB_ICONINFORMATION | MB_OK);
*g_szLoadedIns = TEXT('\0');
SetFocus(GetDlgItem(hDlg, IDE_LOADINS));
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
else if (nPlatformId == 0)
nPlatformId = PLATFORM_WIN32;
}
s_fLoadIns = TRUE;
g_fLocalMode = fLocalMode;
dwVal = g_fLocalMode ? 0 : 1;
switch (g_dwPlatformId)
{
case PLATFORM_WIN32:
default:
SHSetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("WIN32_AVS"), REG_DWORD, (LPBYTE)&dwVal, sizeof(dwVal));
break;
}
EndDialog( hDlg, IDOK );
break;
}
break;
}
break;
default:
return FALSE;
}
return TRUE;
}
//
// FUNCTION: TargetProc(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for "OCW Source Target" page
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_NOTIFY - processes the notifications sent to the page
//
INT_PTR CALLBACK TargetProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
TCHAR szMsg[MAX_PATH];
TCHAR szTemp[MAX_PATH+128];
TCHAR szTempFile[MAX_PATH];
TCHAR szDeskDir[MAX_PATH];
TCHAR szRealRoot[MAX_PATH];
TCHAR szDestRoot[MAX_PATH];
TCHAR szTempRoot[MAX_PATH];
DWORD dwDestFree, dwDestNeed;
DWORD dwSRet, dwAttrib = 0xFFFFFFFF;
BOOL fNext = FALSE;
HANDLE hTemp;
static BOOL s_fFirst = TRUE;
switch (message)
{
case WM_INITDIALOG:
g_hWizard = hDlg;
EnableDBCSChars(hDlg, IDE_TARGETDIR);
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_COMMAND:
if( HIWORD(wParam) == BN_CLICKED )
{
switch (LOWORD(wParam))
{
case IDC_BROWSE2:
{
TCHAR szInstructions[MAX_PATH];
LoadString(g_rvInfo.hInst,IDS_TARGETDIR,szInstructions,countof(szInstructions));
if (BrowseForFolder(hDlg, szTemp,szInstructions))
SetDlgItemText(hDlg, IDE_TARGETDIR, szTemp);
}
break;
case IDC_ADVANCED:
DialogBox( g_rvInfo.hInst, (LPTSTR) IDD_ADVANCEDPOPUP, hDlg, AdvancedDlgProc);
break;
}
}
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
//file locs
dwSRet = countof(g_szBuildRoot);
if(!g_fBatch && !g_fBatch2)
{
if (ISNULL(s_szSourceDir))
{
DWORD dwSize = sizeof(g_szIEAKProg);
SHGetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("SourceDir"), NULL, (LPBYTE)s_szSourceDir, &dwSize);
if (ISNULL(s_szSourceDir))
{
GetIEAKDir(s_szSourceDir);
PathAppend(s_szSourceDir, TEXT("Download"));
}
}
StrCpy(g_szIEAKProg, s_szSourceDir);
PathAddBackslash(s_szSourceDir);
s_fAppendLang = TRUE;
}
if (s_fFirst)
{
DWORD dwSize, dwVal;
s_fFirst = FALSE;
dwSize = sizeof(dwVal);
switch (g_dwPlatformId)
{
case PLATFORM_WIN32:
default:
if ((SHGetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("WIN32_AVS"), NULL, (LPBYTE)&dwVal, &dwSize) == ERROR_SUCCESS)
&& !dwVal)
g_fLocalMode = TRUE;
break;
}
}
if (ISNONNULL(g_szIEAKProg))
PathRemoveBackslash(g_szIEAKProg);
if (!g_fOCW)
{
if (!g_fBatch && !g_fBatch2)
{
DWORD dwSize = sizeof(g_szBuildRoot);
SHGetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("DestPath"), NULL, (LPVOID)g_szBuildRoot, &dwSize);
}
}
if (ISNONNULL(g_szBuildRoot))
PathRemoveBackslash(g_szBuildRoot);
else
{
SYSTEMTIME SystemTime;
TCHAR szDate[MAX_PATH];
TCHAR szDefaultTarget[MAX_PATH];
GetLocalTime(&SystemTime);
wnsprintf(szDate, countof(szDate), TEXT("%02d%02d%d"), SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear);
LoadString(g_rvInfo.hInst, IDS_DEFAULT_TARGETDIR, szDefaultTarget, countof(szDefaultTarget));
wnsprintf(g_szBuildRoot, countof(g_szBuildRoot), szDefaultTarget, szDate);
}
SetDlgItemText(hDlg, IDE_TARGETDIR, g_szBuildRoot);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZNEXT:
fNext = TRUE;
case PSN_WIZBACK:
//file locs
if (!g_fBatch && g_fLocalMode && !CheckAVS(g_szIEAKProg))
{
ErrorMessageBox(hDlg, IDS_NEEDAVS2);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
StrCpy(szTemp, g_szBuildRoot);
GetDlgItemText(hDlg, IDE_TARGETDIR, g_szBuildRoot, countof(g_szBuildRoot));
StrTrim(g_szBuildRoot, TEXT(" \t"));
if (!PathIsUNC(g_szBuildRoot))
{
if ((PathIsRoot(g_szBuildRoot)) || (PathIsRelative(g_szBuildRoot)))
{
ErrorMessageBox(hDlg, IDS_NEEDPATH);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
}
if ((StrLen(g_szBuildRoot) <= 3) || PathIsUNCServer(g_szBuildRoot))
{
ErrorMessageBox(hDlg, IDS_ROOTILLEGAL);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if (!CheckField(hDlg, IDE_TARGETDIR, FC_PATH | FC_DIR))
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if (ISNONNULL(g_szBuildRoot))
PathRemoveBackslash(g_szBuildRoot);
PathRemoveBackslash(g_szIEAKProg);
if (StrCmpI(g_szBuildRoot, g_szIEAKProg) == 0)
{
LoadString(g_rvInfo.hInst, IDS_SAMEDIR, szMsg, countof(szMsg));
MessageBox(hDlg, szMsg, g_szTitle, MB_OK | MB_SETFOREGROUND);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
StrCpy(szRealRoot, g_szBuildRoot);
hTemp = NULL;
PathCombine(szTempFile, g_szIEAKProg, TEXT("~~!!foo.txt"));
if (!PathCreatePath(g_szIEAKProg) ||
((hTemp = CreateFile(szTempFile, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE))
{
LoadString(g_rvInfo.hInst, IDS_BADDIR2, szMsg, countof(szMsg));
wnsprintf(szTemp, countof(szTemp), szMsg, g_szIEAKProg);
MessageBox(hDlg, szTemp, g_szTitle, MB_OK | MB_SETFOREGROUND);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if (hTemp != INVALID_HANDLE_VALUE)
CloseHandle(hTemp);
DeleteFile(szTempFile);
PathAddBackslash(g_szIEAKProg);
hTemp = NULL;
PathCombine(szTempFile, g_szBuildRoot, TEXT("~~!!foo.txt"));
if (!PathCreatePath(g_szBuildRoot) || (hTemp = CreateFile(szTempFile, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
{
LoadString(g_rvInfo.hInst, IDS_BADDIR, szMsg, countof(szMsg));
wnsprintf(szTemp, countof(szTemp), szMsg, g_szBuildRoot);
MessageBox(hDlg, szTemp, g_szTitle, MB_OK | MB_SETFOREGROUND);
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
break;
}
if (hTemp != INVALID_HANDLE_VALUE)
CloseHandle(hTemp);
DeleteFile(szTempFile);
PathCombine(szDeskDir, g_szBuildRoot, TEXT("Desktop"));
if ((dwAttrib = GetFileAttributes(szDeskDir)) != 0xFFFFFFFF)
SetFileAttributes(szDeskDir, dwAttrib & ~FILE_ATTRIBUTE_HIDDEN);
if (!g_fBatch)
SHSetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("DestPath"), REG_SZ, (LPBYTE)szRealRoot,
(StrLen(szRealRoot)+1)*sizeof(TCHAR));
GetTempPath(MAX_PATH, g_szBuildTemp);
PathAppend(g_szBuildTemp, TEXT("IEDKTEMP"));
PathRemovePath(g_szBuildTemp);
PathCreatePath(g_szBuildTemp);
PathCombine(g_szTempSign, g_szBuildTemp, TEXT("CUSTSIGN"));
PathCreatePath(g_szTempSign);
// BUGBUG: (andrewgu) no man's land starts...
StrCpy(szDestRoot, g_szBuildRoot);
StrCpy(szTempRoot, g_szBuildTemp);
CharUpper(szDestRoot);
CharUpper(szTempRoot);
dwDestFree = GetRootFree(szDestRoot);
dwDestNeed = MIN_PACKAGE_SIZE;
if (fNext)
{
if (dwDestFree < dwDestNeed)
{
TCHAR szTitle[MAX_PATH];
TCHAR szTemplate[MAX_PATH];
TCHAR szMsg[MAX_PATH];
LoadString( g_rvInfo.hInst, IDS_DISKERROR, szTitle, MAX_PATH );
LoadString( g_rvInfo.hInst, IDS_DESTDISKMSG, szTemplate, MAX_PATH );
wnsprintf(szMsg, countof(szMsg), szTemplate, dwDestFree, dwDestNeed);
if (MessageBox(hDlg, szMsg, szTitle, MB_OKCANCEL | MB_SETFOREGROUND) == IDCANCEL)
{
LoadString( g_rvInfo.hInst, IDS_ERROREXIT, szMsg, countof(szMsg) );
MessageBox(hDlg, szMsg, szTitle, MB_OK | MB_SETFOREGROUND);
DoCancel();
}
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
return TRUE;
}
}
if(!g_fBatch && !g_fBatch2)
{
if (StrCmpI(s_szSourceDir, g_szIEAKProg) != 0)
{
SHSetValue(HKEY_CURRENT_USER, RK_IEAK_SERVER, TEXT("SourceDir"), REG_SZ,
(LPBYTE)g_szIEAKProg, (lstrlen(g_szIEAKProg)+1)*sizeof(TCHAR));
g_fSrcDirChanged = TRUE;
s_fAppendLang = TRUE;
StrCpy(s_szSourceDir, g_szIEAKProg);
}
if (StrCmpI(szTemp, g_szBuildRoot))
s_fDestDirChanged = TRUE;
}
g_iCurPage = PPAGE_TARGET;
EnablePages();
if (fNext)
PageNext(hDlg);
else
PagePrev(hDlg);
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
void InitIEAKLite(HWND hwndList)
{
ListView_DeleteAllItems(hwndList);
for (int i = 0, iItem = 0; i < IL_END; i++)
{
TCHAR szGroupName[MAX_PATH];
LVITEM lvItem;
// do not show groups that are not relevant for the current role (ICP, ISP, or Corp)
// recap:
// ICP is (!g_fBranded)
// ISP is (g_fBranded && !g_fIntranet)
// CORP is (g_fIntranet)
if ((!g_fBranded && g_IEAKLiteArray[i].fICP == FALSE) ||
( g_fBranded && !g_fIntranet && g_IEAKLiteArray[i].fISP == FALSE) ||
( g_fIntranet && g_IEAKLiteArray[i].fCorp == FALSE))
{
g_IEAKLiteArray[i].iListBox = -2;
g_IEAKLiteArray[i].fEnabled = TRUE;
continue;
}
// do not show ICM group in IEAKLite if only doing single disk branding since it's
// not available anyway
if (i == IL_ICM)
{
if (g_fBrandingOnly && !g_fDownload && !g_fCD && !g_fLAN)
{
g_IEAKLiteArray[i].iListBox = -2;
g_IEAKLiteArray[i].fEnabled = TRUE;
continue;
}
}
// if adms haven't been deleted yet, show adm page
// by not creating an entry in the IEAKLite box
if (i == IL_ADM)
{
if (InsGetBool(IS_BRANDING, TEXT("DeleteAdms"), FALSE, g_szCustIns))
{
g_IEAKLiteArray[i].iListBox = -2;
g_IEAKLiteArray[i].fEnabled = TRUE;
continue;
}
}
// BUGBUG: pritobla: should have separate flags similar to DeleteAdms for activesetup
// and icm so that even if the user cancels out of wizard before reaching these
// pages, we can force them again.
// Should consider this while reworking ieaklite.
// force active setup, CMAK and adms to show up if imported an ins
// by not creating an entry in the IEAKLite box
if (*g_szLoadedIns)
{
if (i == IL_ACTIVESETUP || i == IL_ICM || i == IL_ADM)
{
g_IEAKLiteArray[i].iListBox = -2;
g_IEAKLiteArray[i].fEnabled = TRUE;
continue;
}
}
LoadString(g_rvInfo.hInst, g_IEAKLiteArray[i].idGroupName, szGroupName, countof(szGroupName));
g_IEAKLiteArray[i].fEnabled = !InsGetBool(IS_IEAKLITE, szGroupName, FALSE, g_szCustIns);
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
lvItem.iItem = iItem++;
lvItem.pszText = szGroupName;
lvItem.iImage = g_IEAKLiteArray[i].fEnabled ? 1 : 0;
#ifdef _DEBUG
{
LVFINDINFO lvFind;
ZeroMemory(&lvFind, sizeof(lvFind));
lvFind.flags = LVFI_STRING;
lvFind.psz = szGroupName;
ASSERT(ListView_FindItem(hwndList, -1, &lvFind) == -1);
}
#endif
g_IEAKLiteArray[i].iListBox = ListView_InsertItem(hwndList, &lvItem);
}
ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE);
}
void IEAKLiteMaintToggleCheckItem(HWND hwndList, int iItem)
{
int i;
LVITEM lvItem;
for (i = 0; i < IL_END; i++)
{
if (g_IEAKLiteArray[i].iListBox == iItem)
break;
}
ZeroMemory(&lvItem, sizeof(lvItem));
g_IEAKLiteArray[i].fEnabled = !(g_IEAKLiteArray[i].fEnabled);
lvItem.iItem = iItem;
lvItem.mask = LVIF_IMAGE;
lvItem.iImage = g_IEAKLiteArray[i].fEnabled ? 1 : 0;
ListView_SetItem(hwndList, &lvItem);
}
BOOL ExtractOldInfo(LPCTSTR pcszCabname, LPTSTR pcszDestDir, BOOL fExe)
{
TCHAR szCabPath[MAX_PATH];
TCHAR szCmd[MAX_PATH*3];
StrCpy(szCabPath, g_szCustIns);
PathRemoveFileSpec(szCabPath);
PathAppend(szCabPath, pcszCabname);
if (!PathFileExists(szCabPath))
return TRUE;
if (!fExe)
return (ExtractFilesWrap(szCabPath, pcszDestDir, 0, NULL, NULL, 0) == ERROR_SUCCESS);
wnsprintf(szCmd, countof(szCmd), TEXT("\"%s\" /c /t:\"%s\""), szCabPath, pcszDestDir);
return (RunAndWait(szCmd, g_szBuildTemp, SW_HIDE) == S_OK);
}
// BUGBUG: should probably persist this server side only info in a server side file for IEAK6
DWORD SaveIEAKLiteThreadProc(LPVOID)
{
static BOOL s_fDesk;
static BOOL s_fBrand;
static BOOL s_fExe;
TCHAR szGroupName[128];
TCHAR szTmp[MAX_PATH];
if (s_fDestDirChanged)
s_fDestDirChanged = s_fDesk = s_fBrand = s_fExe = FALSE;
for (int i=0; i < IL_END; i++)
{
LoadString(g_rvInfo.hInst, g_IEAKLiteArray[i].idGroupName, szGroupName, countof(szGroupName));
WritePrivateProfileString(IS_IEAKLITE, szGroupName, g_IEAKLiteArray[i].fEnabled ? NULL : TEXT("1"), g_szCustIns);
}
if (!s_fExe && !g_IEAKLiteArray[IL_ACTIVESETUP].fEnabled)
{
ExtractOldInfo(TEXT("IE6SETUP.EXE"), g_szBuildTemp, TRUE);
s_fExe = TRUE;
}
if (!s_fBrand &&
(!g_IEAKLiteArray[IL_BROWSER].fEnabled || !g_IEAKLiteArray[IL_SIGNUP].fEnabled || !g_IEAKLiteArray[IL_CONNECT].fEnabled ||
!g_IEAKLiteArray[IL_ZONES].fEnabled || !g_IEAKLiteArray[IL_CERT].fEnabled || !g_IEAKLiteArray[IL_MAILNEWS].fEnabled ||
!g_IEAKLiteArray[IL_ADM].fEnabled || IsIconsInFavs(IS_FAVORITESEX, g_szCustIns) ||
IsIconsInFavs(IS_URL, g_szCustIns)))
{
ExtractOldInfo(TEXT("BRANDING.CAB"), g_szTempSign, FALSE);
PathCombine(szTmp, g_szTempSign, TEXT("install.inf"));
DeleteFile(szTmp);
PathCombine(szTmp, g_szTempSign, TEXT("setup.inf"));
DeleteFile(szTmp);
s_fBrand = TRUE;
}
if (ISNULL(g_szDeskTemp) && g_fIntranet)
{
PathCombine(g_szDeskTemp, g_szBuildRoot, TEXT("DESKTOP"));
PathCreatePath(g_szDeskTemp);
}
if (!s_fDesk)
{
ExtractOldInfo(TEXT("DESKTOP.CAB"), g_szDeskTemp, FALSE);
PathCombine(szTmp, g_szDeskTemp, TEXT("install.inf"));
DeleteFile(szTmp);
PathCombine(szTmp, g_szDeskTemp, TEXT("setup.inf"));
DeleteFile(szTmp);
s_fDesk = TRUE;
}
if (!g_fIntranet && g_fBranded)
{
// ISP
g_fServerICW = g_fServerKiosk = g_fServerless = g_fNoSignup = FALSE;
// make sure that only one of the variables is set to TRUE
g_fServerICW = InsGetBool(IS_BRANDING, IK_USEICW, 0, g_szCustIns);
if (!g_fServerICW)
{
g_fServerKiosk = InsGetBool(IS_BRANDING, IK_SERVERKIOSK, 0, g_szCustIns);
if (!g_fServerKiosk)
{
g_fServerless = InsGetBool(IS_BRANDING, IK_SERVERLESS, 0, g_szCustIns);
if (!g_fServerless)
{
// in lots of other functions like BuildIE4, BuildBrandingOnly, BuildCDandMflop, etc.,
// !g_fNoSignup is used to mean that some signup mode was chosen;
// therefore, default to TRUE for g_fNoSignup
g_fNoSignup = InsGetBool(IS_BRANDING, IK_NODIAL, 1, g_szCustIns);
}
}
}
}
else
{
if (g_fIntranet)
{
// Corp
g_fSilent = GetPrivateProfileInt( BRANDING, SILENT_INSTALL, 0, g_szCustIns );
g_fStealth = GetPrivateProfileInt( BRANDING, TEXT("StealthInstall"), 0, g_szCustIns );
g_fInteg = GetPrivateProfileInt( BRANDING, WEB_INTEGRATED, 0, g_szCustIns );
}
}
g_fUseIEWelcomePage = !InsGetBool(IS_URL, IK_NO_WELCOME_URL, FALSE, g_szCustIns);
// take care of install dir for corp case
if (g_fIntranet)
{
TCHAR szWrk[MAX_PATH];
GetPrivateProfileString( IS_BRANDING, TEXT("InstallDir"), TEXT(""), szWrk, countof(szWrk), g_szCustIns );
if (*szWrk != TEXT('%'))
{
g_iInstallOpt = INSTALL_OPT_FULL;
if (ISNONNULL(szWrk))
StrCpy(g_szInstallFolder, szWrk);
else
{
LoadString( g_rvInfo.hInst, IDS_IE, g_szInstallFolder, MAX_PATH );
g_iInstallOpt = INSTALL_OPT_PROG;
}
}
else
{
switch (szWrk[1])
{
case 'p':
case 'P':
default:
g_iInstallOpt = INSTALL_OPT_PROG;
break;
}
StrCpy(g_szInstallFolder, &szWrk[3]);
}
}
return 0;
}
void SetIEAKLiteDesc(HWND hDlg, int iItem)
{
WORD wId;
int i;
TCHAR szDesc[512];
for (i = 0; i < IL_END; i++)
{
if (g_IEAKLiteArray[i].iListBox == iItem)
break;
}
if (!g_fBranded)
wId = g_IEAKLiteArray[i].idICPDesc;
else
{
if (!g_fIntranet)
wId = g_IEAKLiteArray[i].idISPDesc;
else
wId = g_IEAKLiteArray[i].idCorpDesc;
}
LoadString(g_rvInfo.hInst, wId, szDesc, countof(szDesc));
SetDlgItemText(hDlg, IDC_IEAKLITEDESC, szDesc);
}
void IEAKLiteSelectAll(HWND hCompList, BOOL fSet)
{
for (int i=0; i < IL_END; i++)
{
if (g_IEAKLiteArray[i].iListBox != -2)
{
LV_ITEM lvItem;
g_IEAKLiteArray[i].fEnabled = fSet;
ZeroMemory(&lvItem, sizeof(lvItem));
lvItem.iImage = fSet ? 1 : 0;
lvItem.mask = LVIF_IMAGE;
lvItem.iItem = g_IEAKLiteArray[i].iListBox;
ListView_SetItem(hCompList, &lvItem);
}
}
}
//
// FUNCTION: IEAKLiteProc(HWND, UINT, UINT, LONG)
//
// PURPOSE: Processes messages for "IEAKLite" page
//
// MESSAGES:
//
// WM_INITDIALOG - intializes the page
// WM_NOTIFY - processes the notifications sent to the page
//
INT_PTR CALLBACK IEAKLiteProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HWND hwndList = GetDlgItem(hDlg, IDC_IEAKLITE);
HWND hWait;
HANDLE hThread;
int iItem;
DWORD dwTid;
switch (message)
{
case WM_INITDIALOG:
EnableDBCSChars(hDlg, IDC_IEAKLITE);
InitList(hDlg, IDC_IEAKLITE);
g_hWizard = hDlg;
break;
case WM_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case IDM_BATCHADVANCE:
DoBatchAdvance(hDlg);
break;
case WM_COMMAND:
if (HIWORD(wParam) == BN_CLICKED)
{
switch (LOWORD(wParam))
{
case IDC_LITECHECKALL:
IEAKLiteSelectAll(hwndList, TRUE);
break;
case IDC_LITEUNCHECKALL:
IEAKLiteSelectAll(hwndList, FALSE);
break;
}
}
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case LVN_KEYDOWN:
{
NMLVKEYDOWN *pnm = (NMLVKEYDOWN*) lParam;
if ( pnm->wVKey == VK_SPACE )
{
iItem = ListView_GetSelectionMark(hwndList);
IEAKLiteMaintToggleCheckItem(hwndList, iItem);
}
break;
}
case NM_CLICK:
{
POINT pointScreen, pointLVClient;
DWORD dwPos;
LVHITTESTINFO HitTest;
dwPos = GetMessagePos();
pointScreen.x = LOWORD (dwPos);
pointScreen.y = HIWORD (dwPos);
pointLVClient = pointScreen;
// Convert the point from screen to client coordinates,
// relative to the Listview
ScreenToClient (hwndList, &pointLVClient);
HitTest.pt = pointLVClient;
ListView_HitTest(hwndList, &HitTest);
// Only if the user clicked on the checkbox icon/bitmap, change
if (HitTest.flags == LVHT_ONITEMICON)
IEAKLiteMaintToggleCheckItem(hwndList, HitTest.iItem);
SetIEAKLiteDesc(hDlg, HitTest.iItem);
}
break;
case NM_DBLCLK:
if ( ((LPNMHDR)lParam)->idFrom == IDC_IEAKLITE)
{
iItem = ListView_GetSelectionMark(hwndList);
IEAKLiteMaintToggleCheckItem(hwndList, iItem);
SetIEAKLiteDesc(hDlg, iItem);
}
break;
case LVN_ITEMCHANGED:
iItem = ListView_GetSelectionMark(hwndList);
SetIEAKLiteDesc(hDlg, iItem);
break;
case PSN_HELP:
IeakPageHelp(hDlg, g_psp[g_iCurPage].pszTemplate);
break;
case PSN_SETACTIVE:
SetBannerText(hDlg);
InitIEAKLite(GetDlgItem(hDlg, IDC_IEAKLITE));
ListView_SetItemState(hwndList, 0, LVIS_SELECTED, LVIS_SELECTED);
SetIEAKLiteDesc(hDlg, 0);
CheckBatchAdvance(hDlg);
break;
case PSN_WIZNEXT:
case PSN_WIZBACK:
PropSheet_SetWizButtons(GetParent(hDlg), 0);
hWait = CreateDialog(g_rvInfo.hInst, MAKEINTRESOURCE(IDD_WAITIEAKLITE), hDlg,
DownloadStatusDlgProc);
ShowWindow( hWait, SW_SHOWNORMAL );
hThread = CreateThread(NULL, 4096, SaveIEAKLiteThreadProc, NULL, 0, &dwTid);
while (MsgWaitForMultipleObjects(1, &hThread, FALSE, INFINITE, QS_ALLINPUT) != WAIT_OBJECT_0)
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
if (hThread) CloseHandle(hThread);
DestroyWindow(hWait);
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
g_iCurPage = PPAGE_IEAKLITE;
EnablePages();
if (((NMHDR FAR *) lParam)->code == PSN_WIZNEXT) PageNext(hDlg);
else
{
PagePrev(hDlg);
}
break;
case PSN_QUERYCANCEL:
QueryCancel(hDlg);
break;
default:
return FALSE;
}
break;
case WM_LV_GETITEMS:
LVGetItems(GetDlgItem(hDlg, IDC_IEAKLITE));
break;
default:
return FALSE;
}
return TRUE;
}
void PositionWindow(HWND hWnd)
{
int nXPos, nYPos, nWidth, nHeight;
RECT rectWnd, rectDesktop;
if (hWnd == NULL && !IsWindow(hWnd))
return;
GetWindowRect(GetDesktopWindow(), &rectDesktop);
GetWindowRect(hWnd, &rectWnd);
nXPos = nYPos = -1;
nWidth = rectWnd.right - rectWnd.left;
nHeight = rectWnd.bottom - rectWnd.top;
if (g_fOCW && *g_szParentWindowName)
{
HWND hOCWWnd;
RECT rect;
hOCWWnd = FindWindow(NULL, g_szParentWindowName);
if (hOCWWnd != NULL && IsWindow(hOCWWnd) && !IsIconic(hOCWWnd))
{
GetWindowRect(hOCWWnd, &rect);
nXPos = rect.left;
nYPos = rect.top;
}
}
if (nXPos == -1 && nYPos == -1)
{
nXPos = (rectDesktop.right - nWidth) / 2;
nYPos = (rectDesktop.bottom - nHeight) / 2;
}
MoveWindow(hWnd, nXPos, nYPos, nWidth, nHeight, TRUE);
}
void GetIEAKDir(LPTSTR szDir)
{
TCHAR szIEAKDir[MAX_PATH];
*szIEAKDir = TEXT('\0');
if (GetModuleFileName(NULL, szIEAKDir, countof(szIEAKDir)))
PathRemoveFileSpec(szIEAKDir);
else
{
DWORD dwSize;
dwSize = sizeof(szIEAKDir);
if (SHGetValue(HKEY_LOCAL_MACHINE, REGSTR_PATH_APPPATHS TEXT("\\ieak6WIZ.EXE"),
TEXT("Path"), NULL, (LPVOID) szIEAKDir, &dwSize) != ERROR_SUCCESS)
{
dwSize = sizeof(szIEAKDir);
if (SHGetValue(HKEY_LOCAL_MACHINE, REGSTR_PATH_SETUP, TEXT("ProgramFilesDir"),
NULL, (LPVOID) szIEAKDir, &dwSize) == ERROR_SUCCESS)
PathAppend(szIEAKDir, TEXT("IEAK"));
}
}
StrCpy(szDir, szIEAKDir);
}
// get the ins file from the selected "platform/language" directory if exists
// else copy the last ins file used for this build directory if one exists
// else start with a new ins file
void GenerateCustomIns()
{
TCHAR szSrcCustIns[MAX_PATH];
PathCombine(g_szCustIns, g_szBuildRoot, TEXT("INS"));
PathAppend(g_szCustIns, GetOutputPlatformDir());
PathAppend(g_szCustIns, g_szLanguage);
PathCreatePath(g_szCustIns);
PathAppend(g_szCustIns, TEXT("INSTALL.INS"));
if (g_szSrcRoot[0])
{
PathCombine(szSrcCustIns, g_szSrcRoot, TEXT("INS"));
PathAppend(szSrcCustIns, GetOutputPlatformDir());
PathAppend(szSrcCustIns, g_szLanguage);
PathCreatePath(szSrcCustIns);
PathAppend(szSrcCustIns, TEXT("INSTALL.INS"));
}
if (PathFileExists(szSrcCustIns))
CopyFile(szSrcCustIns, g_szCustIns, FALSE); //Overwrite if already exists
if (!PathFileExists(g_szCustIns))
{
TCHAR szInsFile[MAX_PATH];
TCHAR szPlatformLang[MAX_PATH];
DWORD dwSize = sizeof(szPlatformLang);
TCHAR szRegKey[MAX_PATH];
wnsprintf(szRegKey, countof(szRegKey), TEXT("%s\\INS"), RK_IEAK_SERVER);
if (SHGetValue(HKEY_CURRENT_USER, szRegKey, g_szBuildRoot, NULL, (LPBYTE)szPlatformLang, &dwSize) == ERROR_SUCCESS)
{
TCHAR szTemp[MAX_PATH];
StrCpy(szTemp, szPlatformLang);
PathRemoveFileSpec(szTemp);
if (StrCmpI(szTemp, TEXT("WIN32")) == 0)
{
PathCombine(szInsFile, g_szBuildRoot, TEXT("INS"));
PathAppend(szInsFile, szPlatformLang);
PathAppend(szInsFile, TEXT("INSTALL.INS"));
CopyFile(szInsFile, g_szCustIns, TRUE);
if (ISNULL(g_szLoadedIns) && (StrCmpI(g_szLoadedIns, szInsFile) != 0))
{
StrCpy(g_szLoadedIns, szInsFile);
s_fLoadIns = TRUE;
}
}
}
}
}