mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-13 03:10:10 +01:00
2688 lines
89 KiB
C
2688 lines
89 KiB
C
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is Mozilla Communicator client code, released
|
|
* March 31, 1998.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Sean Su <ssu@netscape.com>
|
|
* Curt Patrick <curt@netscape.com>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
#include "extern.h"
|
|
#include "extra.h"
|
|
#include "dialogs.h"
|
|
#include "ifuncns.h"
|
|
#include "xpistub.h"
|
|
#include "xpi.h"
|
|
#include "logging.h"
|
|
#include <logkeys.h>
|
|
|
|
static PFNWP OldListBoxWndProc;
|
|
static BOOL gbProcessingXpnstallFiles;
|
|
static DWORD gdwACFlag;
|
|
static DWORD gdwIndexLastSelected;
|
|
|
|
BOOL AskCancelDlg(HWND hDlg)
|
|
{
|
|
char szDlgQuitTitle[MAX_BUF];
|
|
char szDlgQuitMsg[MAX_BUF];
|
|
char szMsg[MAX_BUF];
|
|
BOOL bRv = FALSE;
|
|
|
|
if((sgProduct.ulMode != SILENT) && (sgProduct.ulMode != AUTO))
|
|
{
|
|
if(!GetPrivateProfileString("Messages", "DLGQUITTITLE", "", szDlgQuitTitle, sizeof(szDlgQuitTitle), szFileIniInstall))
|
|
WinPostQueueMsg(0, WM_QUIT, 1, 0);
|
|
else if(!GetPrivateProfileString("Messages", "DLGQUITMSG", "", szDlgQuitMsg, sizeof(szDlgQuitMsg), szFileIniInstall))
|
|
WinPostQueueMsg(0, WM_QUIT, 1, 0);
|
|
else if(WinMessageBox(HWND_DESKTOP, hDlg, szDlgQuitMsg, szDlgQuitTitle, 0, MB_YESNO | MB_ICONQUESTION | MB_MOVEABLE | MB_DEFBUTTON2 | MB_APPLMODAL) == MBID_YES)
|
|
{
|
|
WinDestroyWindow(hDlg);
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
bRv = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GetPrivateProfileString("Strings", "Message Cancel Setup AUTO mode", "", szMsg, sizeof(szMsg), szFileIniConfig);
|
|
ShowMessage(szMsg, TRUE);
|
|
DosSleep(5000);
|
|
ShowMessage(szMsg, FALSE);
|
|
bRv = TRUE;
|
|
}
|
|
|
|
return(bRv);
|
|
}
|
|
|
|
/* This function relayouts a dialog so that the values used in the */
|
|
/* resource files represent real pixel values and are from the upper */
|
|
/* left like windows. It does NOT reposition the dialog itself. */
|
|
/* It also uses windows type sizing which means that the size specified in */
|
|
/* the resource file is the size of the inner dialog */
|
|
/* Note that for optimum display at 1024x768, ALL y value in the */
|
|
/* resource file must be even */
|
|
/* This does NOT work on controls that are bitmaps. */
|
|
void AdjustDialogSize(HWND hwndDlg)
|
|
{
|
|
FONTMETRICS fm;
|
|
HPS hps;
|
|
float duX, duY;
|
|
LONG cxDlgFrame, cyDlgFrame, cyTitleBar;
|
|
SWP swpCurrent, swpDlg;
|
|
HENUM henum;
|
|
HWND hwndNext;
|
|
USHORT id;
|
|
CHAR classname[4];
|
|
|
|
hps = WinGetPS(hwndDlg);
|
|
GpiQueryFontMetrics(hps, sizeof(FONTMETRICS), &fm);
|
|
WinReleasePS(hps);
|
|
duX = fm.lAveCharWidth*0.25;
|
|
duY = fm.lMaxBaselineExt*0.125;
|
|
cxDlgFrame = WinQuerySysValue(HWND_DESKTOP, SV_CXDLGFRAME);
|
|
cyDlgFrame = WinQuerySysValue(HWND_DESKTOP, SV_CYDLGFRAME);
|
|
cyTitleBar = WinQuerySysValue(HWND_DESKTOP, SV_CYTITLEBAR);
|
|
|
|
WinQueryWindowPos(hwndDlg, &swpDlg);
|
|
swpDlg.cx = ((swpDlg.cx-(cxDlgFrame*2))/duX)+(cxDlgFrame*2);
|
|
swpDlg.cy = ((swpDlg.cy-cyTitleBar-(cyDlgFrame*2))/duY)+cyTitleBar+(cyDlgFrame*2);
|
|
WinSetWindowPos(hwndDlg, 0, 0, 0,
|
|
swpDlg.cx,
|
|
swpDlg.cy,
|
|
SWP_SIZE);
|
|
|
|
henum = WinBeginEnumWindows(hwndDlg);
|
|
while ((hwndNext = WinGetNextWindow(henum)) != NULLHANDLE)
|
|
{
|
|
id = WinQueryWindowUShort( hwndNext, QWS_ID );
|
|
if ((id == FID_TITLEBAR) ||
|
|
(id == FID_SYSMENU) ||
|
|
(id == FID_MINMAX) ||
|
|
(id == FID_MENU))
|
|
{
|
|
continue;
|
|
}
|
|
WinQueryWindowPos(hwndNext, &swpCurrent);
|
|
WinQueryClassName(hwndNext, 4, classname);
|
|
if (strcmp(classname, "#6") == 0) {
|
|
swpCurrent.x += 3;
|
|
swpCurrent.y += 3;
|
|
swpCurrent.cx -= 6;
|
|
swpCurrent.cy -= 6;
|
|
WinSetWindowPos(hwndNext, 0,
|
|
(swpCurrent.x-4)/duX+cyDlgFrame+3,
|
|
(swpCurrent.y-4)/duY+cyDlgFrame+3,
|
|
swpCurrent.cx/duX-6,
|
|
swpCurrent.cy/duY-6,
|
|
SWP_MOVE | SWP_SIZE);
|
|
} else {
|
|
WinSetWindowPos(hwndNext, 0,
|
|
(swpCurrent.x-4)/duX+cyDlgFrame,
|
|
(swpCurrent.y-4)/duY+cyDlgFrame,
|
|
swpCurrent.cx/duX,
|
|
swpCurrent.cy/duY,
|
|
SWP_MOVE | SWP_SIZE);
|
|
}
|
|
}
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcWelcome(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
BOOL rc;
|
|
char szBuf[MAX_BUF];
|
|
SWP swpDlg;
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
/* Initialize controls */
|
|
WinSetWindowText(hDlg, diWelcome.szTitle);
|
|
sprintf(szBuf, diWelcome.szMessage0, sgProduct.szProductName, sgProduct.szProductName);
|
|
strcat(szBuf, "\n\n");
|
|
strcat(szBuf, diWelcome.szMessage1);
|
|
strcat(szBuf, "\n\n");
|
|
strcat(szBuf, diWelcome.szMessage2);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC0, szBuf);
|
|
// WinSetDlgItemText(hDlg, IDC_STATIC1, diWelcome.szMessage1);
|
|
// WinSetDlgItemText(hDlg, IDC_STATIC2, diWelcome.szMessage2);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szNext_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
|
|
/* Center dialog */
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case DID_CANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcLicense(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
char szBuf[MAX_BUF];
|
|
LPSTR szLicenseFilenameBuf = NULL;
|
|
DWORD dwFileSize;
|
|
DWORD dwBytesRead;
|
|
HANDLE hFLicense;
|
|
FILE *fLicense;
|
|
SWP swpDlg;
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
/* Initialize controls */
|
|
WinSetWindowText(hDlg, diLicense.szTitle);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diLicense.szMessage0);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE1, diLicense.szMessage1);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szAccept_);
|
|
WinSetDlgItemText(hDlg, DID_CANCEL, sgInstallGui.szDecline_);
|
|
|
|
/* If LICENSE.TXT exists, read it into the MLE */
|
|
strcpy(szBuf, szSetupDir);
|
|
AppendBackSlash(szBuf, sizeof(szBuf));
|
|
strcat(szBuf, diLicense.szLicenseFilename);
|
|
|
|
if((fLicense = fopen(szBuf, "rb")) != NULL)
|
|
{
|
|
fseek(fLicense, 0L, SEEK_END);
|
|
dwFileSize = ftell(fLicense);
|
|
fseek(fLicense, 0L, SEEK_SET);
|
|
if((szLicenseFilenameBuf = NS_GlobalAlloc(dwFileSize+1)) != NULL) {
|
|
dwBytesRead = fread(szLicenseFilenameBuf, sizeof(char), dwFileSize, fLicense);
|
|
szLicenseFilenameBuf[dwFileSize] = '\0';
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_LICENSE, szLicenseFilenameBuf);
|
|
FreeMemory(&szLicenseFilenameBuf);
|
|
}
|
|
fclose(fLicense);
|
|
}
|
|
|
|
/* Center dialog */
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
/* This is our custom directory dialog - pulled from widget with extra voodoo */
|
|
MRESULT EXPENTRY DirDialogProc( HWND hwndDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
char szBuf[MAX_BUF];
|
|
PFILEDLG pfiledlg;
|
|
HRESULT hresult;
|
|
|
|
switch ( msg ) {
|
|
case WM_INITDLG:
|
|
{
|
|
SWP swpDlgOrig;
|
|
SWP swpDlgNew;
|
|
SWP swpDirST;
|
|
SWP swpDirLB;
|
|
SWP swpDriveST;
|
|
SWP swpDriveCB;
|
|
SWP swpDriveCBEF;
|
|
SWP swpOK;
|
|
SWP swpCancel;
|
|
HWND hwndDirST;
|
|
HWND hwndDirLB;
|
|
HWND hwndDriveST;
|
|
HWND hwndDriveCB;
|
|
HWND hwndOK;
|
|
HWND hwndCancel;
|
|
HWND hwndEF;
|
|
HENUM henum;
|
|
HWND hwndNext;
|
|
ULONG ulCurY, ulCurX;
|
|
|
|
WinSetPresParam(hwndDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
hwndDirST = WinWindowFromID(hwndDlg, DID_DIRECTORY_TXT);
|
|
hwndDirLB = WinWindowFromID(hwndDlg, DID_DIRECTORY_LB);
|
|
hwndDriveST = WinWindowFromID(hwndDlg, DID_DRIVE_TXT);
|
|
hwndDriveCB = WinWindowFromID(hwndDlg, DID_DRIVE_CB);
|
|
hwndOK = WinWindowFromID(hwndDlg, DID_OK);
|
|
hwndCancel = WinWindowFromID(hwndDlg, DID_CANCEL);
|
|
|
|
#define SPACING 10
|
|
// Reposition drives combobox
|
|
ulCurY = SPACING;
|
|
ulCurX = SPACING + gSystemInfo.lDlgFrameX;
|
|
WinQueryWindowPos(hwndOK, &swpOK);
|
|
WinSetWindowPos(hwndOK, 0, ulCurX, ulCurY, 0, 0, SWP_MOVE);
|
|
ulCurY += swpOK.cy + SPACING;
|
|
WinQueryWindowPos(hwndCancel, &swpCancel);
|
|
WinSetWindowPos(hwndCancel, 0, ulCurX+swpOK.cx+10, SPACING, 0, 0, SWP_MOVE);
|
|
WinQueryWindowPos(hwndDirLB, &swpDirLB);
|
|
WinSetWindowPos(hwndDirLB, 0, ulCurX, ulCurY, 0, 0, SWP_MOVE);
|
|
ulCurY += swpDirLB.cy + SPACING;
|
|
WinQueryWindowPos(hwndDirST, &swpDirST);
|
|
WinSetWindowPos(hwndDirST, 0, ulCurX, ulCurY, 0, 0, SWP_MOVE);
|
|
ulCurY += swpDirST.cy + SPACING;
|
|
WinQueryWindowPos(hwndDriveCB, &swpDriveCB);
|
|
WinQueryWindowPos(WinWindowFromID(hwndDriveCB, CBID_EDIT), &swpDriveCBEF);
|
|
WinSetWindowPos(hwndDriveCB, 0, ulCurX, ulCurY-(swpDriveCB.cy-swpDriveCBEF.cy)+5,
|
|
swpDirLB.cx,
|
|
swpDriveCB.cy,
|
|
SWP_SIZE | SWP_MOVE);
|
|
ulCurY += swpDriveCBEF.cy + SPACING;
|
|
WinQueryWindowPos(hwndDriveST, &swpDriveST);
|
|
WinSetWindowPos(hwndDriveST, 0, ulCurX, ulCurY, 0, 0, SWP_MOVE);
|
|
ulCurY += swpDriveST.cy + SPACING;
|
|
// Create an entryfield
|
|
hwndEF = WinCreateWindow(hwndDlg, WC_ENTRYFIELD, "", ES_MARGIN | WS_VISIBLE | ES_AUTOSCROLL,
|
|
ulCurX+3, ulCurY+3,
|
|
swpDirLB.cx-6, swpDriveCBEF.cy, hwndDlg, HWND_TOP, 777, NULL, NULL);
|
|
WinSendMsg(hwndEF, EM_SETTEXTLIMIT, CCHMAXPATH, 0);
|
|
ulCurY += swpDriveCBEF.cy + SPACING;
|
|
|
|
// Hide unused stuff
|
|
henum = WinBeginEnumWindows(hwndDlg);
|
|
while ((hwndNext = WinGetNextWindow(henum)) != NULLHANDLE)
|
|
{
|
|
USHORT usID = WinQueryWindowUShort(hwndNext, QWS_ID);
|
|
if (usID != DID_DIRECTORY_TXT &&
|
|
usID != DID_DIRECTORY_LB &&
|
|
usID != DID_DRIVE_TXT &&
|
|
usID != DID_DRIVE_CB &&
|
|
usID != DID_OK &&
|
|
usID != DID_CANCEL &&
|
|
usID != FID_TITLEBAR &&
|
|
usID != FID_SYSMENU &&
|
|
usID != 777 &&
|
|
usID != FID_MINMAX)
|
|
{
|
|
WinShowWindow(hwndNext, FALSE);
|
|
}
|
|
}
|
|
|
|
WinSetWindowPos(hwndDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-((swpDirLB.cx+2*SPACING+2*gSystemInfo.lDlgFrameX)/2),
|
|
(gSystemInfo.lScreenY/2)-((ulCurY+2*gSystemInfo.lDlgFrameY+gSystemInfo.lTitleBarY)/2),
|
|
swpDirLB.cx+2*SPACING+2*gSystemInfo.lDlgFrameX,
|
|
ulCurY+2*gSystemInfo.lDlgFrameY+gSystemInfo.lTitleBarY,
|
|
SWP_MOVE | SWP_SIZE);
|
|
}
|
|
break;
|
|
case WM_CONTROL:
|
|
{
|
|
if (SHORT1FROMMP(mp1) != 777) {
|
|
pfiledlg = (PFILEDLG)WinQueryWindowPtr(hwndDlg, QWL_USER);
|
|
RemoveBackSlash(pfiledlg->szFullFile);
|
|
WinSetWindowText(WinWindowFromID(hwndDlg,777), pfiledlg->szFullFile);
|
|
}
|
|
}
|
|
break;
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) ) {
|
|
case DID_OK:
|
|
WinQueryDlgItemText(hwndDlg, 777, MAX_BUF, szBuf);
|
|
if(*szBuf != '\0')
|
|
hresult = FileExists(szBuf);
|
|
|
|
if ((*szBuf == '\0') || ((hresult == TRUE) && (hresult != FILE_DIRECTORY)))
|
|
{
|
|
char szEDestinationPath[MAX_BUF];
|
|
|
|
GetPrivateProfileString("Messages", "ERROR_DESTINATION_PATH", "", szEDestinationPath, sizeof(szEDestinationPath), szFileIniInstall);
|
|
WinMessageBox(HWND_DESKTOP, hwndDlg, szEDestinationPath, NULL, 0, MB_OK | MB_ICONEXCLAMATION);
|
|
return (MRESULT)TRUE;
|
|
}
|
|
|
|
if (isFAT(szBuf)) {
|
|
GetPrivateProfileString("Messages", "ERROR_FILESYSTEM", "", szBuf, sizeof(szBuf), szFileIniInstall);
|
|
WinMessageBox(HWND_DESKTOP, hwndDlg, szBuf, NULL, 0, MB_OK | MB_ICONEXCLAMATION);
|
|
return (MRESULT)TRUE;
|
|
}
|
|
|
|
if(hresult == FALSE)
|
|
{
|
|
char szMsgCreateDirectory[MAX_BUF];
|
|
char szStrCreateDirectory[MAX_BUF];
|
|
char szBufTemp[MAX_BUF];
|
|
char szBufTemp2[MAX_BUF];
|
|
|
|
GetPrivateProfileString("Messages", "STR_CREATE_DIRECTORY", "", szStrCreateDirectory, sizeof(szStrCreateDirectory), szFileIniInstall);
|
|
if(GetPrivateProfileString("Messages", "MSG_CREATE_DIRECTORY", "", szMsgCreateDirectory, sizeof(szMsgCreateDirectory), szFileIniInstall))
|
|
{
|
|
strcpy(szBufTemp, "\n\n");
|
|
strcat(szBufTemp, szBuf);
|
|
RemoveBackSlash(szBufTemp);
|
|
strcat(szBufTemp, "\n\n");
|
|
sprintf(szBufTemp2, szMsgCreateDirectory, szBufTemp);
|
|
}
|
|
|
|
if(WinMessageBox(HWND_DESKTOP, hwndDlg, szBufTemp2, szStrCreateDirectory, 0, MB_YESNO | MB_ICONQUESTION) == IDYES)
|
|
{
|
|
char szBuf2[MAX_PATH];
|
|
|
|
AppendBackSlash(szBuf, sizeof(szBuf));
|
|
if(CreateDirectoriesAll(szBuf, TRUE) == FALSE)
|
|
{
|
|
char szECreateDirectory[MAX_BUF];
|
|
|
|
strcpy(szBufTemp, "\n\n");
|
|
strcat(szBufTemp, szBuf);
|
|
RemoveBackSlash(szBufTemp);
|
|
strcat(szBufTemp, "\n\n");
|
|
|
|
if(GetPrivateProfileString("Messages", "ERROR_CREATE_DIRECTORY", "", szECreateDirectory, sizeof(szECreateDirectory), szFileIniInstall))
|
|
sprintf(szBuf, szECreateDirectory, szBufTemp);
|
|
|
|
WinMessageBox(HWND_DESKTOP, hwndDlg, szBuf, "", 0, MB_OK | MB_ERROR);
|
|
return (MRESULT)TRUE;
|
|
}
|
|
} else {
|
|
return (MRESULT)TRUE;
|
|
}
|
|
}
|
|
RemoveBackSlash(szBuf);
|
|
strcpy(szTempSetupPath, szBuf);
|
|
break;
|
|
|
|
|
|
}
|
|
break;
|
|
}
|
|
return WinDefFileDlgProc(hwndDlg, msg, mp1, mp2);
|
|
}
|
|
|
|
BOOL BrowseForDirectory(HWND hDlg, char *szCurrDir)
|
|
{
|
|
FILEDLG filedlg;
|
|
char ftitle[MAX_PATH];
|
|
char szBuf[MAX_BUF];
|
|
char szSearchPathBuf[MAX_BUF];
|
|
char szDlgBrowseTitle[MAX_BUF];
|
|
BOOL bRet;
|
|
char* caret;
|
|
|
|
memset(szDlgBrowseTitle, 0, sizeof(szDlgBrowseTitle));
|
|
GetPrivateProfileString("Messages", "DLGBROWSETITLE", "", szDlgBrowseTitle, sizeof(szDlgBrowseTitle), szFileIniInstall);
|
|
|
|
memset(&filedlg, 0, sizeof(FILEDLG));
|
|
filedlg.cbSize = sizeof(FILEDLG);
|
|
filedlg.pszTitle = szDlgBrowseTitle;
|
|
strcpy(filedlg.szFullFile, szCurrDir);
|
|
strncat(filedlg.szFullFile, "\\", 1);
|
|
strncat(filedlg.szFullFile, "^", 1);
|
|
filedlg.fl = FDS_OPEN_DIALOG | FDS_CENTER;
|
|
filedlg.pfnDlgProc = DirDialogProc;
|
|
WinFileDlg(HWND_DESKTOP, hDlg, &filedlg);
|
|
caret = strstr(filedlg.szFullFile, "^");
|
|
if (caret) {
|
|
*(caret-1) = '\0';
|
|
} else {
|
|
/* Something went horribly wrong. Usually this means they typed a filename */
|
|
/* that actually exists. */
|
|
/* If this is the case, use the parent directory */
|
|
}
|
|
|
|
if (filedlg.lReturn == DID_OK) {
|
|
bRet = TRUE;
|
|
} else {
|
|
strcpy(szTempSetupPath, szCurrDir);
|
|
bRet = FALSE;
|
|
}
|
|
|
|
return(bRet);
|
|
}
|
|
|
|
void TruncateString(HWND hWnd, LPSTR szInURL, LPSTR szOutString, DWORD dwOutStringBufSize)
|
|
{
|
|
HPS hpsWnd;
|
|
SWP swpWnd;
|
|
RECTL rectlString = {0,0,1000,1000};
|
|
char *ptr = NULL;
|
|
int iHalfLen;
|
|
int iOutStringLen;
|
|
|
|
if((DWORD)strlen(szInURL) > dwOutStringBufSize)
|
|
return;
|
|
|
|
memset(szOutString, 0, dwOutStringBufSize);
|
|
strcpy(szOutString, szInURL);
|
|
iOutStringLen = strlen(szOutString);
|
|
|
|
hpsWnd = WinGetPS(hWnd);
|
|
|
|
|
|
WinQueryWindowPos(hWnd, &swpWnd);
|
|
|
|
WinDrawText(hpsWnd, iOutStringLen, szOutString,
|
|
&rectlString, 0, 0,
|
|
DT_BOTTOM | DT_QUERYEXTENT | DT_TEXTATTRS);
|
|
while(rectlString.xRight > swpWnd.cx)
|
|
{
|
|
iHalfLen = iOutStringLen / 2;
|
|
if(iHalfLen == 2)
|
|
break;
|
|
|
|
ptr = szOutString + iHalfLen;
|
|
memmove(ptr - 1, ptr, strlen(ptr) + 1);
|
|
szOutString[iHalfLen - 2] = '.';
|
|
szOutString[iHalfLen - 1] = '.';
|
|
szOutString[iHalfLen] = '.';
|
|
iOutStringLen = strlen(szOutString);
|
|
rectlString.xLeft = rectlString.yBottom = 0;
|
|
rectlString.xRight = rectlString.yTop = 1000;
|
|
WinDrawText(hpsWnd, iOutStringLen, szOutString,
|
|
&rectlString, 0, 0,
|
|
DT_BOTTOM | DT_QUERYEXTENT | DT_TEXTATTRS);
|
|
}
|
|
|
|
WinReleasePS(hpsWnd);
|
|
}
|
|
|
|
|
|
MRESULT EXPENTRY DlgProcSetupType(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
HWND hRadioSt0;
|
|
HWND hStaticSt0;
|
|
HWND hRadioSt1;
|
|
HWND hStaticSt1;
|
|
HWND hRadioSt2;
|
|
HWND hStaticSt2;
|
|
HWND hRadioSt3;
|
|
HWND hStaticSt3;
|
|
HWND hReadme;
|
|
HWND hDestinationPath;
|
|
SWP swpDlg;
|
|
char szBuf[MAX_BUF];
|
|
char szBufTemp[MAX_BUF];
|
|
char szBufTemp2[MAX_BUF];
|
|
HRESULT hresult;
|
|
HOBJECT hobject;
|
|
|
|
hRadioSt0 = WinWindowFromID(hDlg, IDC_RADIO_ST0);
|
|
hStaticSt0 = WinWindowFromID(hDlg, IDC_STATIC_ST0_DESCRIPTION);
|
|
hRadioSt1 = WinWindowFromID(hDlg, IDC_RADIO_ST1);
|
|
hStaticSt1 = WinWindowFromID(hDlg, IDC_STATIC_ST1_DESCRIPTION);
|
|
hRadioSt2 = WinWindowFromID(hDlg, IDC_RADIO_ST2);
|
|
hStaticSt2 = WinWindowFromID(hDlg, IDC_STATIC_ST2_DESCRIPTION);
|
|
hRadioSt3 = WinWindowFromID(hDlg, IDC_RADIO_ST3);
|
|
hStaticSt3 = WinWindowFromID(hDlg, IDC_STATIC_ST3_DESCRIPTION);
|
|
hReadme = WinWindowFromID(hDlg, IDC_README);
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinSetWindowText(hDlg, diSetupType.szTitle);
|
|
|
|
hDestinationPath = WinWindowFromID(hDlg, IDC_EDIT_DESTINATION); /* handle to the static destination path text window */
|
|
strcpy(szTempSetupPath, sgProduct.szPath);
|
|
TruncateString(hDestinationPath, szTempSetupPath, szBuf, sizeof(szBuf));
|
|
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_DESTINATION, szBuf);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_MSG0, diSetupType.szMessage0);
|
|
|
|
if(diSetupType.stSetupType0.bVisible)
|
|
{
|
|
WinSetDlgItemText(hDlg, IDC_RADIO_ST0, diSetupType.stSetupType0.szDescriptionShort);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_ST0_DESCRIPTION, diSetupType.stSetupType0.szDescriptionLong);
|
|
WinShowWindow(hRadioSt0, TRUE);
|
|
WinShowWindow(hStaticSt0, TRUE);
|
|
}
|
|
else
|
|
{
|
|
WinShowWindow(hRadioSt0, FALSE);
|
|
WinShowWindow(hStaticSt0, FALSE);
|
|
}
|
|
|
|
if(diSetupType.stSetupType1.bVisible)
|
|
{
|
|
WinSetDlgItemText(hDlg, IDC_RADIO_ST1, diSetupType.stSetupType1.szDescriptionShort);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_ST1_DESCRIPTION, diSetupType.stSetupType1.szDescriptionLong);
|
|
WinShowWindow(hRadioSt1, TRUE);
|
|
WinShowWindow(hStaticSt1, TRUE);
|
|
}
|
|
else
|
|
{
|
|
WinShowWindow(hRadioSt1, FALSE);
|
|
WinShowWindow(hStaticSt1, FALSE);
|
|
}
|
|
|
|
if(diSetupType.stSetupType2.bVisible)
|
|
{
|
|
WinSetDlgItemText(hDlg, IDC_RADIO_ST2, diSetupType.stSetupType2.szDescriptionShort);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_ST2_DESCRIPTION, diSetupType.stSetupType2.szDescriptionLong);
|
|
WinShowWindow(hRadioSt2, TRUE);
|
|
WinShowWindow(hStaticSt2, TRUE);
|
|
}
|
|
else
|
|
{
|
|
WinShowWindow(hRadioSt2, FALSE);
|
|
WinShowWindow(hStaticSt2, FALSE);
|
|
}
|
|
|
|
if(diSetupType.stSetupType3.bVisible)
|
|
{
|
|
WinSetDlgItemText(hDlg, IDC_RADIO_ST3, diSetupType.stSetupType3.szDescriptionShort);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_ST3_DESCRIPTION, diSetupType.stSetupType3.szDescriptionLong);
|
|
WinShowWindow(hRadioSt3, TRUE);
|
|
WinShowWindow(hStaticSt3, TRUE);
|
|
}
|
|
else
|
|
{
|
|
WinShowWindow(hRadioSt3, FALSE);
|
|
WinShowWindow(hStaticSt3, FALSE);
|
|
}
|
|
|
|
/* enable the appropriate radio button */
|
|
switch(ulTempSetupType)
|
|
{
|
|
case ST_RADIO0:
|
|
WinCheckButton(hDlg, IDC_RADIO_ST0, 1);
|
|
WinSetFocus(HWND_DESKTOP, hRadioSt0);
|
|
break;
|
|
|
|
case ST_RADIO1:
|
|
WinCheckButton(hDlg, IDC_RADIO_ST1, 1);
|
|
WinSetFocus(HWND_DESKTOP, hRadioSt1);
|
|
break;
|
|
|
|
case ST_RADIO2:
|
|
WinCheckButton(hDlg, IDC_RADIO_ST2, 1);
|
|
WinSetFocus(HWND_DESKTOP, hRadioSt2);
|
|
break;
|
|
|
|
case ST_RADIO3:
|
|
WinCheckButton(hDlg, IDC_RADIO_ST3, 1);
|
|
WinSetFocus(HWND_DESKTOP, hRadioSt3);
|
|
break;
|
|
}
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
strcpy(szBuf, szSetupDir);
|
|
AppendBackSlash(szBuf, sizeof(szBuf));
|
|
strcat(szBuf, diSetupType.szReadmeFilename);
|
|
if((*diSetupType.szReadmeFilename == '\0') || (FileExists(szBuf) == FALSE))
|
|
WinShowWindow(hReadme, FALSE);
|
|
else
|
|
WinShowWindow(hReadme, TRUE);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_DESTINATION, sgInstallGui.szDestinationDirectory);
|
|
WinSetDlgItemText(hDlg, IDC_BUTTON_BROWSE, sgInstallGui.szBrowse_);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szNext_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
WinSetDlgItemText(hDlg, IDC_README, sgInstallGui.szReadme_);
|
|
|
|
if(sgProduct.bLockPath)
|
|
WinEnableWindow(WinWindowFromID(hDlg, IDC_BUTTON_BROWSE), FALSE);
|
|
else
|
|
WinEnableWindow(WinWindowFromID(hDlg, IDC_BUTTON_BROWSE), TRUE);
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDC_BUTTON_BROWSE:
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST0) == 1)
|
|
ulTempSetupType = ST_RADIO0;
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST1) == 1)
|
|
ulTempSetupType = ST_RADIO1;
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST2) == 1)
|
|
ulTempSetupType = ST_RADIO2;
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST3) == 1)
|
|
ulTempSetupType = ST_RADIO3;
|
|
|
|
BrowseForDirectory(hDlg, szTempSetupPath);
|
|
|
|
hDestinationPath = WinWindowFromID(hDlg, IDC_EDIT_DESTINATION); /* handle to the static destination path text window */
|
|
TruncateString(hDestinationPath, szTempSetupPath, szBuf, sizeof(szBuf));
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_DESTINATION, szBuf);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case IDC_README:
|
|
{
|
|
char fullReadme[CCHMAXPATH];
|
|
strcpy(fullReadme, szSetupDir);
|
|
strcat(fullReadme, diSetupType.szReadmeFilename);
|
|
|
|
if(*diSetupType.szReadmeApp == '\0')
|
|
WinSpawn(diSetupType.szReadmeFilename, NULL, szSetupDir, FALSE);
|
|
else
|
|
WinSpawn(diSetupType.szReadmeApp, fullReadme, szSetupDir, FALSE);
|
|
}
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case IDWIZNEXT:
|
|
strcpy(sgProduct.szPath, szTempSetupPath);
|
|
|
|
strcpy(szBuf, sgProduct.szPath);
|
|
|
|
if (isFAT(szBuf)) {
|
|
GetPrivateProfileString("Messages", "ERROR_FILESYSTEM", "", szBuf, sizeof(szBuf), szFileIniInstall);
|
|
WinMessageBox(HWND_DESKTOP, hDlg, szBuf, NULL, 0, MB_OK | MB_ICONEXCLAMATION);
|
|
return (MRESULT)TRUE;
|
|
}
|
|
|
|
hresult = FileExists(szBuf);
|
|
if ((hresult == TRUE) && (hresult != FILE_DIRECTORY))
|
|
{
|
|
char szEDestinationPath[MAX_BUF];
|
|
|
|
GetPrivateProfileString("Messages", "ERROR_DESTINATION_PATH", "", szEDestinationPath, sizeof(szEDestinationPath), szFileIniInstall);
|
|
WinMessageBox(HWND_DESKTOP, hDlg, szEDestinationPath, NULL, 0, MB_OK | MB_ICONEXCLAMATION);
|
|
return (MRESULT)TRUE;
|
|
}
|
|
|
|
if(FileExists(szBuf) == FALSE)
|
|
{
|
|
char szMsgCreateDirectory[MAX_BUF];
|
|
char szStrCreateDirectory[MAX_BUF];
|
|
|
|
GetPrivateProfileString("Messages", "STR_CREATE_DIRECTORY", "", szStrCreateDirectory, sizeof(szStrCreateDirectory), szFileIniInstall);
|
|
if(GetPrivateProfileString("Messages", "MSG_CREATE_DIRECTORY", "", szMsgCreateDirectory, sizeof(szMsgCreateDirectory), szFileIniInstall))
|
|
{
|
|
strcpy(szBufTemp, "\n\n");
|
|
strcat(szBufTemp, szBuf);
|
|
RemoveBackSlash(szBufTemp);
|
|
strcat(szBufTemp, "\n\n");
|
|
sprintf(szBufTemp2, szMsgCreateDirectory, szBufTemp);
|
|
}
|
|
|
|
if(WinMessageBox(HWND_DESKTOP, hDlg, szBufTemp2, szStrCreateDirectory, 0, MB_YESNO | MB_ICONQUESTION) == MBID_YES)
|
|
{
|
|
char szBuf2[MAX_PATH];
|
|
|
|
/* append a backslash to the path because CreateDirectoriesAll()
|
|
uses a backslash to determine directories */
|
|
AppendBackSlash(szBuf, sizeof(szBuf));
|
|
if(CreateDirectoriesAll(szBuf, TRUE) == FALSE)
|
|
{
|
|
char szECreateDirectory[MAX_BUF];
|
|
|
|
strcpy(szBufTemp, "\n\n");
|
|
strcat(szBufTemp, sgProduct.szPath);
|
|
RemoveBackSlash(szBufTemp);
|
|
strcat(szBufTemp, "\n\n");
|
|
|
|
if(GetPrivateProfileString("Messages", "ERROR_CREATE_DIRECTORY", "", szECreateDirectory, sizeof(szECreateDirectory), szFileIniInstall))
|
|
sprintf(szBuf, szECreateDirectory, szBufTemp);
|
|
|
|
WinMessageBox(HWND_DESKTOP, hDlg, szBuf, "", 0, MB_OK | MB_ERROR);
|
|
return (MRESULT)TRUE;
|
|
}
|
|
|
|
if(*sgProduct.szSubPath != '\0')
|
|
{
|
|
/* log the subpath for uninstallation. This subpath does not normally get logged
|
|
* for uninstallation due to a chicken and egg problem with creating the log file
|
|
* and the directory its in */
|
|
strcpy(szBuf2, szBuf);
|
|
AppendBackSlash(szBuf2, sizeof(szBuf2));
|
|
strcat(szBuf2, sgProduct.szSubPath);
|
|
UpdateInstallLog(KEY_CREATE_FOLDER, szBuf2, FALSE);
|
|
}
|
|
|
|
bCreateDestinationDir = TRUE;
|
|
}
|
|
else
|
|
{
|
|
return (MRESULT)TRUE;
|
|
}
|
|
}
|
|
|
|
/* retrieve and save the state of the selected radio button */
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST0) == 1)
|
|
{
|
|
SiCNodeSetItemsSelected(ST_RADIO0);
|
|
|
|
ulSetupType = ST_RADIO0;
|
|
ulTempSetupType = ulSetupType;
|
|
}
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST1) == 1)
|
|
{
|
|
SiCNodeSetItemsSelected(ST_RADIO1);
|
|
|
|
ulSetupType = ST_RADIO1;
|
|
ulTempSetupType = ulSetupType;
|
|
}
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST2) == 1)
|
|
{
|
|
SiCNodeSetItemsSelected(ST_RADIO2);
|
|
|
|
ulSetupType = ST_RADIO2;
|
|
ulTempSetupType = ulSetupType;
|
|
}
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_ST3) == 1)
|
|
{
|
|
SiCNodeSetItemsSelected(ST_RADIO3);
|
|
|
|
ulSetupType = ST_RADIO3;
|
|
ulTempSetupType = ulSetupType;
|
|
}
|
|
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
ulTempSetupType = ulSetupType;
|
|
strcpy(sgProduct.szPath, szTempSetupPath);
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
void DrawLBText(POWNERITEM poi, DWORD dwACFlag)
|
|
{
|
|
siC *siCTemp = NULL;
|
|
CHAR chBuffer[MAX_BUF];
|
|
DWORD y;
|
|
|
|
siCTemp = SiCNodeGetObject(poi->idItem, FALSE, dwACFlag);
|
|
if(siCTemp != NULL)
|
|
{
|
|
WinSendMsg(poi->hwnd, LM_QUERYITEMTEXT, MPFROM2SHORT(poi->idItem, MAX_BUF), (MPARAM)chBuffer);
|
|
|
|
if (poi->fsState != poi->fsStateOld) {
|
|
if (!(siCTemp->dwAttributes & SIC_DISABLED))
|
|
WinInvertRect(poi->hps, &poi->rclItem);
|
|
} else {
|
|
ULONG flags = DT_TEXTATTRS | DT_LEFT | DT_VCENTER;
|
|
RECTL rclTemp = poi->rclItem;
|
|
rclTemp.xLeft += CX_CHECKBOX+4+4;
|
|
if(siCTemp->dwAttributes & SIC_DISABLED)
|
|
flags |= DT_HALFTONE;
|
|
WinFillRect(poi->hps, &rclTemp, CLR_BACKGROUND);
|
|
WinDrawText(poi->hps, -1, chBuffer, &rclTemp, 0, 0,
|
|
flags);
|
|
if (poi->fsState) {
|
|
if (!(siCTemp->dwAttributes & SIC_DISABLED))
|
|
WinInvertRect(poi->hps, &poi->rclItem);
|
|
}
|
|
}
|
|
poi->fsState = poi->fsStateOld = 0;
|
|
}
|
|
}
|
|
|
|
void DrawCheck(POWNERITEM poi, DWORD dwACFlag)
|
|
{
|
|
siC *siCTemp = NULL;
|
|
HBITMAP hbmpCheckBox;
|
|
POINTL ptl;
|
|
|
|
siCTemp = SiCNodeGetObject(poi->idItem, FALSE, dwACFlag);
|
|
if(siCTemp != NULL)
|
|
{
|
|
if(!(siCTemp->dwAttributes & SIC_SELECTED))
|
|
/* Component is not selected. Use the unchecked bitmap regardless if the
|
|
* component is disabled or not. The unchecked bitmap looks the same if
|
|
* it's disabled or enabled. */
|
|
hbmpCheckBox = GpiLoadBitmap(poi->hps, hSetupRscInst, IDB_BOX_UNCHECKED, CX_CHECKBOX, CY_CHECKBOX);
|
|
else if(siCTemp->dwAttributes & SIC_DISABLED)
|
|
/* Component is checked and disabled */
|
|
hbmpCheckBox = GpiLoadBitmap(poi->hps, hSetupRscInst, IDB_BOX_CHECKED_DISABLED, CX_CHECKBOX, CY_CHECKBOX);
|
|
else
|
|
/* Component is checked and enabled */
|
|
hbmpCheckBox = GpiLoadBitmap(poi->hps, hSetupRscInst, IDB_BOX_CHECKED, CX_CHECKBOX, CY_CHECKBOX);
|
|
|
|
ptl.x = poi->rclItem.xLeft+4;
|
|
ptl.y = poi->rclItem.yBottom+4;
|
|
WinDrawBitmap(poi->hps, hbmpCheckBox, NULL, &ptl, 0, 0, DBM_NORMAL);
|
|
GpiDeleteBitmap(hbmpCheckBox);
|
|
}
|
|
}
|
|
|
|
void InvalidateLBCheckbox(HWND hwndListBox)
|
|
{
|
|
RECTL rcCheckArea;
|
|
|
|
// retrieve the rectangle of all list items to update.
|
|
WinQueryWindowRect(hwndListBox, &rcCheckArea);
|
|
|
|
// Set the right coordinate of the rectangle to be the same
|
|
// as the right edge of the bitmap drawn.
|
|
// But if a screen reader is being used we want to redraw the text
|
|
// as well as the checkbox so we do not set the right coordinate.
|
|
if(!gSystemInfo.bScreenReader)
|
|
rcCheckArea.xRight = CX_CHECKBOX;
|
|
|
|
// It then invalidates the checkbox region to be redrawn.
|
|
// Invalidating the region sends a WM_DRAWITEM message to
|
|
// the dialog, which redraws the region given the
|
|
// node attirbute, in this case it is a bitmap of a
|
|
// checked/unchecked checkbox.
|
|
WinInvalidateRect(hwndListBox, &rcCheckArea, TRUE);
|
|
}
|
|
|
|
void ToggleCheck(HWND hwndListBox, DWORD dwIndex, DWORD dwACFlag)
|
|
{
|
|
BOOL bMoreToResolve;
|
|
LPSTR szToggledReferenceName = NULL;
|
|
DWORD dwAttributes;
|
|
CHAR tchBuffer[MAX_BUF];
|
|
|
|
// Checks to see if the checkbox is checked or not checked, and
|
|
// toggles the node attributes appropriately.
|
|
dwAttributes = SiCNodeGetAttributes(dwIndex, FALSE, dwACFlag);
|
|
if(!(dwAttributes & SIC_DISABLED))
|
|
{
|
|
if(dwAttributes & SIC_SELECTED)
|
|
{
|
|
SiCNodeSetAttributes(dwIndex, SIC_SELECTED, FALSE, FALSE, dwACFlag, hwndListBox);
|
|
|
|
szToggledReferenceName = SiCNodeGetReferenceName(dwIndex, FALSE, dwACFlag);
|
|
ResolveDependees(szToggledReferenceName, hwndListBox);
|
|
}
|
|
else
|
|
{
|
|
SiCNodeSetAttributes(dwIndex, SIC_SELECTED, TRUE, FALSE, dwACFlag, hwndListBox);
|
|
bMoreToResolve = ResolveDependencies(dwIndex, hwndListBox);
|
|
|
|
while(bMoreToResolve)
|
|
bMoreToResolve = ResolveDependencies(-1, hwndListBox);
|
|
|
|
szToggledReferenceName = SiCNodeGetReferenceName(dwIndex, FALSE, dwACFlag);
|
|
ResolveDependees(szToggledReferenceName, hwndListBox);
|
|
}
|
|
InvalidateLBCheckbox(hwndListBox);
|
|
}
|
|
}
|
|
|
|
// ************************************************************************
|
|
// FUNCTION : NewListBoxWndProc( HWND, UINT, WPARAM, LPARAM )
|
|
// PURPOSE : Processes messages for "LISTBOX" class.
|
|
// COMMENTS : Prevents the user from moving the window
|
|
// by dragging the titlebar.
|
|
// ************************************************************************
|
|
MRESULT APIENTRY NewListBoxWndProc(HWND hWnd, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
POINTS ptspointerpos;
|
|
USHORT fsflags;
|
|
ULONG ulIndex;
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_CHAR:
|
|
fsflags = SHORT1FROMMP(mp1);
|
|
if (SHORT2FROMMP(mp2) == VK_SPACE) {
|
|
if (!(fsflags & KC_KEYUP)) {
|
|
ulIndex = WinSendMsg(hWnd,
|
|
LM_QUERYSELECTION,
|
|
0,
|
|
0);
|
|
ToggleCheck(hWnd, ulIndex, gdwACFlag);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_BUTTON1DOWN:
|
|
ptspointerpos.x = SHORT1FROMMP(mp1);
|
|
ptspointerpos.y = SHORT2FROMMP(mp1);
|
|
|
|
if((ptspointerpos.x >= 0) && (ptspointerpos.x <= CX_CHECKBOX+4+4))
|
|
{
|
|
MRESULT mr = (OldListBoxWndProc)(hWnd, msg, mp1, mp2);
|
|
ulIndex = WinSendMsg(hWnd, LM_QUERYSELECTION, LIT_FIRST, 0);
|
|
ToggleCheck(hWnd, ulIndex, gdwACFlag);
|
|
return mr;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return(OldListBoxWndProc)(hWnd, msg, mp1, mp2);
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcSelectComponents(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
BOOL bReturn = FALSE;
|
|
siC *siCTemp;
|
|
DWORD dwIndex;
|
|
DWORD dwItems = MAX_BUF;
|
|
HWND hwndLBComponents;
|
|
SWP swpDlg;
|
|
CHAR tchBuffer[MAX_BUF];
|
|
POWNERITEM pOwnerItem;
|
|
ULONG ulDSBuf;
|
|
char szBuf[MAX_BUF];
|
|
|
|
hwndLBComponents = WinWindowFromID(hDlg, IDC_LIST_COMPONENTS);
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinSetWindowText(hDlg, diSelectComponents.szTitle);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diSelectComponents.szMessage0);
|
|
|
|
siCTemp = siComponents;
|
|
if(siCTemp != NULL)
|
|
{
|
|
if((!(siCTemp->dwAttributes & SIC_INVISIBLE)) && (!(siCTemp->dwAttributes & SIC_ADDITIONAL)))
|
|
WinSendMsg(hwndLBComponents, LM_INSERTITEM, LIT_END, (MPARAM)siCTemp->szDescriptionShort);
|
|
|
|
siCTemp = siCTemp->Next;
|
|
while((siCTemp != siComponents) && (siCTemp != NULL))
|
|
{
|
|
if((!(siCTemp->dwAttributes & SIC_INVISIBLE)) && (!(siCTemp->dwAttributes & SIC_ADDITIONAL)))
|
|
WinSendMsg(hwndLBComponents, LM_INSERTITEM, LIT_END, (MPARAM)siCTemp->szDescriptionShort);
|
|
|
|
siCTemp = siCTemp->Next;
|
|
}
|
|
WinSetFocus(HWND_DESKTOP, hwndLBComponents);
|
|
WinSendMsg(hwndLBComponents, LM_SELECTITEM, 0, 0);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_DESCRIPTION, SiCNodeGetDescriptionLong(0, FALSE, AC_COMPONENTS));
|
|
}
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
/* update the disk space available info in the dialog. GetDiskSpaceAvailable()
|
|
returns value in kbytes */
|
|
ulDSBuf = GetDiskSpaceAvailable(sgProduct.szPath);
|
|
_itoa(ulDSBuf, tchBuffer, 10);
|
|
ParsePath(sgProduct.szPath, szBuf, sizeof(szBuf), FALSE, PP_ROOT_ONLY);
|
|
RemoveBackSlash(szBuf);
|
|
strcat(szBuf, " ");
|
|
strcat(szBuf, tchBuffer);
|
|
strcat(szBuf, " KB");
|
|
WinSetDlgItemText(hDlg, IDC_SPACE_AVAILABLE, szBuf);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_STATIC1, sgInstallGui.szComponents_);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC2, sgInstallGui.szDescription);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC3, sgInstallGui.szTotalDownloadSize);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC4, sgInstallGui.szSpaceAvailable);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szNext_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
|
|
gdwACFlag = AC_COMPONENTS;
|
|
OldListBoxWndProc = WinSubclassWindow(hwndLBComponents, (PFNWP)NewListBoxWndProc);
|
|
break;
|
|
|
|
case WM_MEASUREITEM:
|
|
return MRFROM2SHORT(CX_CHECKBOX+4+4, 0);
|
|
|
|
case WM_DRAWITEM:
|
|
pOwnerItem = (POWNERITEM)mp2;
|
|
|
|
// If there are no list box items, skip this message.
|
|
if(pOwnerItem->idItem == -1)
|
|
break;
|
|
|
|
DrawLBText(pOwnerItem, AC_COMPONENTS);
|
|
DrawCheck(pOwnerItem, AC_COMPONENTS);
|
|
|
|
/* update the disk space required info in the dialog. It is already
|
|
in Kilobytes */
|
|
ulDSBuf = GetDiskSpaceRequired(DSR_DOWNLOAD_SIZE);
|
|
_itoa(ulDSBuf, tchBuffer, 10);
|
|
strcpy(szBuf, tchBuffer);
|
|
strcat(szBuf, " KB");
|
|
|
|
WinSetDlgItemText(hDlg, IDC_DOWNLOAD_SIZE, szBuf);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_CONTROL:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDC_LIST_COMPONENTS:
|
|
/* to update the long description for each component the user selected */
|
|
if((dwIndex = WinSendMsg(hwndLBComponents, LM_QUERYSELECTION, 0, 0)) != LIT_NONE)
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_DESCRIPTION, SiCNodeGetDescriptionLong(dwIndex, FALSE, AC_COMPONENTS));
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcSelectAdditionalComponents(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
BOOL bReturn = FALSE;
|
|
siC *siCTemp;
|
|
DWORD dwIndex;
|
|
DWORD dwItems = MAX_BUF;
|
|
HWND hwndLBComponents;
|
|
SWP swpDlg;
|
|
CHAR tchBuffer[MAX_BUF];
|
|
POWNERITEM pOwnerItem;
|
|
ULONG ulDSBuf;
|
|
char szBuf[MAX_BUF];
|
|
|
|
hwndLBComponents = WinWindowFromID(hDlg, IDC_LIST_COMPONENTS);
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinSetWindowText(hDlg, diSelectAdditionalComponents.szTitle);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diSelectAdditionalComponents.szMessage0);
|
|
|
|
siCTemp = siComponents;
|
|
if(siCTemp != NULL)
|
|
{
|
|
if((!(siCTemp->dwAttributes & SIC_INVISIBLE)) && (siCTemp->dwAttributes & SIC_ADDITIONAL))
|
|
WinSendMsg(hwndLBComponents, LM_INSERTITEM, LIT_END, (MPARAM)siCTemp->szDescriptionShort);
|
|
|
|
siCTemp = siCTemp->Next;
|
|
while((siCTemp != siComponents) && (siCTemp != NULL))
|
|
{
|
|
if((!(siCTemp->dwAttributes & SIC_INVISIBLE)) && (siCTemp->dwAttributes & SIC_ADDITIONAL))
|
|
WinSendMsg(hwndLBComponents, LM_INSERTITEM, LIT_END, (MPARAM)siCTemp->szDescriptionShort);
|
|
|
|
siCTemp = siCTemp->Next;
|
|
}
|
|
WinSetFocus(HWND_DESKTOP, hwndLBComponents);
|
|
WinSendMsg(hwndLBComponents, LM_SELECTITEM, 0, 0);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_DESCRIPTION, SiCNodeGetDescriptionLong(0, FALSE, AC_ADDITIONAL_COMPONENTS));
|
|
}
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
/* update the disk space available info in the dialog. GetDiskSpaceAvailable()
|
|
returns value in kbytes */
|
|
ulDSBuf = GetDiskSpaceAvailable(sgProduct.szPath);
|
|
_itoa(ulDSBuf, tchBuffer, 10);
|
|
ParsePath(sgProduct.szPath, szBuf, sizeof(szBuf), FALSE, PP_ROOT_ONLY);
|
|
RemoveBackSlash(szBuf);
|
|
strcat(szBuf, " ");
|
|
strcat(szBuf, tchBuffer);
|
|
strcat(szBuf, " KB");
|
|
WinSetDlgItemText(hDlg, IDC_SPACE_AVAILABLE, szBuf);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_STATIC1, sgInstallGui.szAdditionalComponents_);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC2, sgInstallGui.szDescription);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC3, sgInstallGui.szTotalDownloadSize);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC4, sgInstallGui.szSpaceAvailable);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szNext_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
|
|
gdwACFlag = AC_ADDITIONAL_COMPONENTS;
|
|
OldListBoxWndProc = WinSubclassWindow(hwndLBComponents, (PFNWP)NewListBoxWndProc);
|
|
break;
|
|
|
|
case WM_MEASUREITEM:
|
|
return MRFROM2SHORT(CX_CHECKBOX+4+4, 0);
|
|
|
|
case WM_DRAWITEM:
|
|
pOwnerItem = (POWNERITEM)mp2;
|
|
|
|
// If there are no list box items, skip this message.
|
|
if(pOwnerItem->idItem == -1)
|
|
break;
|
|
|
|
DrawLBText(pOwnerItem, AC_ADDITIONAL_COMPONENTS);
|
|
DrawCheck(pOwnerItem, AC_ADDITIONAL_COMPONENTS);
|
|
|
|
/* update the disk space required info in the dialog. It is already
|
|
in Kilobytes */
|
|
ulDSBuf = GetDiskSpaceRequired(DSR_DOWNLOAD_SIZE);
|
|
_itoa(ulDSBuf, tchBuffer, 10);
|
|
strcpy(szBuf, tchBuffer);
|
|
strcat(szBuf, " KB");
|
|
|
|
WinSetDlgItemText(hDlg, IDC_DOWNLOAD_SIZE, szBuf);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_CONTROL:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDC_LIST_COMPONENTS:
|
|
/* to update the long description for each component the user selected */
|
|
if((dwIndex = WinSendMsg(hwndLBComponents, LM_QUERYSELECTION, 0, 0)) != LIT_NONE)
|
|
WinSetDlgItemText(hDlg, IDC_STATIC_DESCRIPTION, SiCNodeGetDescriptionLong(dwIndex, FALSE, AC_ADDITIONAL_COMPONENTS));
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
MRESULT APIENTRY DlgProcOS2Integration(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
char szBuf[MAX_BUF];
|
|
HWND hcbCheck0;
|
|
HWND hcbCheck1;
|
|
HWND hcbCheck2;
|
|
HWND hcbCheck3;
|
|
HWND hDestinationPath;
|
|
SWP swpDlg;
|
|
|
|
hcbCheck0 = WinWindowFromID(hDlg, IDC_CHECK0);
|
|
hcbCheck1 = WinWindowFromID(hDlg, IDC_CHECK1);
|
|
hcbCheck2 = WinWindowFromID(hDlg, IDC_CHECK2);
|
|
hcbCheck3 = WinWindowFromID(hDlg, IDC_CHECK3);
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinSetWindowText(hDlg, diOS2Integration.szTitle);
|
|
|
|
if (diOS2Integration.szHomeDirectory[0]) {
|
|
strcpy(szTempSetupPath, diOS2Integration.szHomeDirectory);
|
|
hDestinationPath = WinWindowFromID(hDlg, IDC_EDIT_DESTINATION); /* handle to the static destination path text window */
|
|
TruncateString(hDestinationPath, szTempSetupPath, szBuf, sizeof(szBuf));
|
|
} else {
|
|
strcpy(szTempSetupPath, sgProduct.szPath);
|
|
hDestinationPath = WinWindowFromID(hDlg, IDC_EDIT_DESTINATION); /* handle to the static destination path text window */
|
|
TruncateString(hDestinationPath, szTempSetupPath, szBuf, sizeof(szBuf));
|
|
}
|
|
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_DESTINATION, szBuf);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diOS2Integration.szMessage0);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE1, diOS2Integration.szMessage1);
|
|
|
|
if(diOS2Integration.oiCBMakeDefaultBrowser.bEnabled)
|
|
{
|
|
WinShowWindow(hcbCheck0, TRUE);
|
|
WinCheckButton(hDlg, IDC_CHECK0, diOS2Integration.oiCBMakeDefaultBrowser.bCheckBoxState);
|
|
WinSetDlgItemText(hDlg, IDC_CHECK0, diOS2Integration.oiCBMakeDefaultBrowser.szDescription);
|
|
}
|
|
else
|
|
WinShowWindow(hcbCheck0, FALSE);
|
|
|
|
if(diOS2Integration.oiCBAssociateHTML.bEnabled)
|
|
{
|
|
WinShowWindow(hcbCheck1, TRUE);
|
|
WinCheckButton(hDlg, IDC_CHECK1, diOS2Integration.oiCBAssociateHTML.bCheckBoxState);
|
|
WinSetDlgItemText(hDlg, IDC_CHECK1, diOS2Integration.oiCBAssociateHTML.szDescription);
|
|
}
|
|
else
|
|
WinShowWindow(hcbCheck1, FALSE);
|
|
|
|
if(diOS2Integration.oiCBUpdateCONFIGSYS.bEnabled)
|
|
{
|
|
WinShowWindow(hcbCheck2, TRUE);
|
|
WinCheckButton(hDlg, IDC_CHECK2, diOS2Integration.oiCBUpdateCONFIGSYS.bCheckBoxState);
|
|
WinSetDlgItemText(hDlg, IDC_CHECK2, diOS2Integration.oiCBUpdateCONFIGSYS.szDescription);
|
|
}
|
|
else
|
|
WinShowWindow(hcbCheck2, FALSE);
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_BUTTON_BROWSE, sgInstallGui.szBrowse_);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szNext_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDC_BUTTON_BROWSE:
|
|
if (BrowseForDirectory(hDlg, szTempSetupPath)) {
|
|
strcpy(diOS2Integration.szHomeDirectory, szTempSetupPath);
|
|
}
|
|
|
|
hDestinationPath = WinWindowFromID(hDlg, IDC_EDIT_DESTINATION); /* handle to the static destination path text window */
|
|
TruncateString(hDestinationPath, szTempSetupPath, szBuf, sizeof(szBuf));
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_DESTINATION, szBuf);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
case IDWIZNEXT:
|
|
if(diOS2Integration.oiCBMakeDefaultBrowser.bEnabled)
|
|
{
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_CHECK0) == 1)
|
|
diOS2Integration.oiCBMakeDefaultBrowser.bCheckBoxState = TRUE;
|
|
else
|
|
diOS2Integration.oiCBMakeDefaultBrowser.bCheckBoxState = FALSE;
|
|
}
|
|
|
|
if(diOS2Integration.oiCBAssociateHTML.bEnabled)
|
|
{
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_CHECK1) == 1)
|
|
diOS2Integration.oiCBAssociateHTML.bCheckBoxState = TRUE;
|
|
else
|
|
diOS2Integration.oiCBAssociateHTML.bCheckBoxState = FALSE;
|
|
}
|
|
|
|
if(diOS2Integration.oiCBUpdateCONFIGSYS.bEnabled)
|
|
{
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_CHECK2) == 1)
|
|
diOS2Integration.oiCBUpdateCONFIGSYS.bCheckBoxState = TRUE;
|
|
else
|
|
diOS2Integration.oiCBUpdateCONFIGSYS.bCheckBoxState = FALSE;
|
|
}
|
|
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
void SaveDownloadProtocolOption(HWND hDlg)
|
|
{
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_USE_FTP) == 1)
|
|
diAdditionalOptions.dwUseProtocol = UP_FTP;
|
|
else if(WinQueryButtonCheckstate(hDlg, IDC_USE_HTTP) == 1)
|
|
diAdditionalOptions.dwUseProtocol = UP_HTTP;
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcAdvancedSettings(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
SWP swpDlg;
|
|
char szBuf[MAX_BUF];
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinSetWindowText(hDlg, diAdvancedSettings.szTitle);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diAdvancedSettings.szMessage0);
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_PROXY_SERVER, diAdvancedSettings.szProxyServer);
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_PROXY_PORT, diAdvancedSettings.szProxyPort);
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_PROXY_USER, diAdvancedSettings.szProxyUser);
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_PROXY_PASSWD, diAdvancedSettings.szProxyPasswd);
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
GetPrivateProfileString("Strings", "IDC Use FTP", "", szBuf, sizeof(szBuf), szFileIniConfig);
|
|
WinSetDlgItemText(hDlg, IDC_USE_FTP, szBuf);
|
|
GetPrivateProfileString("Strings", "IDC Use HTTP", "", szBuf, sizeof(szBuf), szFileIniConfig);
|
|
WinSetDlgItemText(hDlg, IDC_USE_HTTP, szBuf);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_STATIC, sgInstallGui.szProxySettings);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC1, sgInstallGui.szServer);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC2, sgInstallGui.szPort);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC3, sgInstallGui.szUserId);
|
|
WinSetDlgItemText(hDlg, IDC_STATIC4, sgInstallGui.szPassword);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szOk_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
|
|
switch(diAdditionalOptions.dwUseProtocol)
|
|
{
|
|
case UP_HTTP:
|
|
WinCheckButton(hDlg, IDC_USE_FTP, 0);
|
|
WinCheckButton(hDlg, IDC_USE_HTTP, 1);
|
|
break;
|
|
|
|
case UP_FTP:
|
|
default:
|
|
WinCheckButton(hDlg, IDC_USE_FTP, 1);
|
|
WinCheckButton(hDlg, IDC_USE_HTTP, 0);
|
|
break;
|
|
|
|
}
|
|
|
|
if((diAdditionalOptions.bShowProtocols) && (diAdditionalOptions.bUseProtocolSettings))
|
|
{
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_USE_FTP), TRUE);
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_USE_HTTP), TRUE);
|
|
}
|
|
else
|
|
{
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_USE_FTP), FALSE);
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_USE_HTTP), FALSE);
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
/* get the proxy server and port information */
|
|
WinQueryDlgItemText(hDlg, IDC_EDIT_PROXY_SERVER, MAX_BUF, diAdvancedSettings.szProxyServer);
|
|
WinQueryDlgItemText(hDlg, IDC_EDIT_PROXY_PORT, MAX_BUF, diAdvancedSettings.szProxyPort);
|
|
WinQueryDlgItemText(hDlg, IDC_EDIT_PROXY_USER, MAX_BUF, diAdvancedSettings.szProxyUser);
|
|
WinQueryDlgItemText(hDlg, IDC_EDIT_PROXY_PASSWD, MAX_BUF, diAdvancedSettings.szProxyPasswd);
|
|
|
|
SaveDownloadProtocolOption(hDlg);
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
case IDCANCEL:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
void SaveAdditionalOptions(HWND hDlg, HWND hwndCBSiteSelector)
|
|
{
|
|
int iIndex;
|
|
|
|
/* get selected item from the site selector's pull down list */
|
|
iIndex = WinSendMsg(hwndCBSiteSelector, LM_QUERYSELECTION, 0, 0);
|
|
WinSendMsg(hwndCBSiteSelector, LM_QUERYITEMTEXT, MPFROM2SHORT(iIndex, MAX_BUF), (MPARAM)szSiteSelectorDescription);
|
|
|
|
/* get the state of the Save Installer Files checkbox */
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_CHECK_SAVE_INSTALLER_FILES) == 1)
|
|
diAdditionalOptions.bSaveInstaller = TRUE;
|
|
else
|
|
diAdditionalOptions.bSaveInstaller = FALSE;
|
|
|
|
/* get the state of the Recapture Homepage checkbox */
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_CHECK_RECAPTURE_HOMEPAGE) == 1)
|
|
diAdditionalOptions.bRecaptureHomepage = TRUE;
|
|
else
|
|
diAdditionalOptions.bRecaptureHomepage = FALSE;
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcAdditionalOptions(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
SWP swpDlg;
|
|
char szBuf[MAX_BUF];
|
|
HWND hwndCBSiteSelector;
|
|
int iIndex;
|
|
ssi *ssiTemp;
|
|
char szCBDefault[MAX_BUF];
|
|
|
|
hwndCBSiteSelector = WinWindowFromID(hDlg, IDC_LIST_SITE_SELECTOR);
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
// if(gdwSiteSelectorStatus == SS_HIDE)
|
|
// {
|
|
// WinShowWindow(WinWindowFromID(hDlg, IDC_MESSAGE0), FALSE);
|
|
// WinShowWindow(WinWindowFromID(hDlg, IDC_LIST_SITE_SELECTOR), FALSE);
|
|
// }
|
|
|
|
if(diAdditionalOptions.bShowHomepageOption == FALSE)
|
|
{
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_MESSAGE0), FALSE);
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_CHECK_RECAPTURE_HOMEPAGE), FALSE);
|
|
}
|
|
|
|
if(GetTotalArchivesToDownload() == 0)
|
|
{
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_MESSAGE1), FALSE);
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_CHECK_SAVE_INSTALLER_FILES), FALSE);
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_EDIT_LOCAL_INSTALLER_PATH), FALSE);
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_BUTTON_PROXY_SETTINGS), FALSE);
|
|
}
|
|
|
|
WinSetWindowText(hDlg, diAdditionalOptions.szTitle);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diAdditionalOptions.szMessage0);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE1, diAdditionalOptions.szMessage1);
|
|
|
|
GetPrivateProfileString("Strings", "IDC Save Installer Files", "", szBuf, sizeof(szBuf), szFileIniConfig);
|
|
WinSetDlgItemText(hDlg, IDC_CHECK_SAVE_INSTALLER_FILES, szBuf);
|
|
GetPrivateProfileString("Strings", "IDC Recapture Homepage", "", szBuf, sizeof(szBuf), szFileIniConfig);
|
|
WinSetDlgItemText(hDlg, IDC_CHECK_RECAPTURE_HOMEPAGE, szBuf);
|
|
|
|
GetSaveInstallerPath(szBuf, sizeof(szBuf));
|
|
WinSetDlgItemText(hDlg, IDC_EDIT_LOCAL_INSTALLER_PATH, szBuf);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_BUTTON_PROXY_SETTINGS, sgInstallGui.szProxySettings_);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szNext_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
ssiTemp = ssiSiteSelector;
|
|
do
|
|
{
|
|
if(ssiTemp == NULL)
|
|
break;
|
|
|
|
WinSendMsg(hwndCBSiteSelector, LM_INSERTITEM, 0, (LPARAM)(ssiTemp->szDescription));
|
|
ssiTemp = ssiTemp->Next;
|
|
} while(ssiTemp != ssiSiteSelector);
|
|
|
|
if((szSiteSelectorDescription == NULL) || (*szSiteSelectorDescription == '\0'))
|
|
{
|
|
if(GetPrivateProfileString("Messages", "CB_DEFAULT", "", szCBDefault, sizeof(szCBDefault), szFileIniInstall) &&
|
|
((iIndex = WinSendMsg(hwndCBSiteSelector, LM_SEARCHSTRING, MPFROM2SHORT(0, LIT_FIRST), (LPARAM)szCBDefault)) != LIT_NONE))
|
|
WinSendMsg(hwndCBSiteSelector, LM_SELECTITEM, (WPARAM)iIndex, 0);
|
|
else
|
|
WinSendMsg(hwndCBSiteSelector, LM_SELECTITEM, 0, 0);
|
|
}
|
|
else if((iIndex = WinSendMsg(hwndCBSiteSelector, LM_SEARCHSTRING, MPFROM2SHORT(0, LIT_FIRST), (LPARAM)szSiteSelectorDescription)) != LIT_NONE)
|
|
WinSendMsg(hwndCBSiteSelector, LM_SELECTITEM, (WPARAM)iIndex, 0);
|
|
else
|
|
WinSendMsg(hwndCBSiteSelector, LM_SELECTITEM, 0, 0);
|
|
|
|
if(diAdditionalOptions.bSaveInstaller)
|
|
WinCheckButton(hDlg, IDC_CHECK_SAVE_INSTALLER_FILES, 1);
|
|
else
|
|
WinCheckButton(hDlg, IDC_CHECK_SAVE_INSTALLER_FILES, 0);
|
|
|
|
if(diAdditionalOptions.bRecaptureHomepage)
|
|
WinCheckButton(hDlg, IDC_CHECK_RECAPTURE_HOMEPAGE, 1);
|
|
else
|
|
WinCheckButton(hDlg, IDC_CHECK_RECAPTURE_HOMEPAGE, 0);
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
SaveAdditionalOptions(hDlg, hwndCBSiteSelector);
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
SaveAdditionalOptions(hDlg, hwndCBSiteSelector);
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDC_BUTTON_ADDITIONAL_SETTINGS:
|
|
SaveAdditionalOptions(hDlg, hwndCBSiteSelector);
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(OTHER_DLG_1);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
void AppendStringWOTilde(LPSTR szInputString, DWORD dwInputStringSize, LPSTR szString)
|
|
{
|
|
DWORD i;
|
|
DWORD iInputStringCounter;
|
|
DWORD iInputStringLen;
|
|
DWORD iStringLen;
|
|
|
|
|
|
iInputStringLen = strlen(szInputString);
|
|
iStringLen = strlen(szString);
|
|
|
|
if((iInputStringLen + iStringLen) >= dwInputStringSize)
|
|
return;
|
|
|
|
iInputStringCounter = iInputStringLen;
|
|
for(i = 0; i < iStringLen; i++)
|
|
{
|
|
if(szString[i] != '~')
|
|
szInputString[iInputStringCounter++] = szString[i];
|
|
else
|
|
if (szString[i-1] == '(') {
|
|
szInputString[iInputStringCounter-1] = '\0';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
LPSTR GetStartInstallMessage()
|
|
{
|
|
char szBuf[MAX_BUF];
|
|
char szSTRRequired[MAX_BUF_TINY];
|
|
siC *siCObject = NULL;
|
|
LPSTR szMessageBuf = NULL;
|
|
DWORD dwBufSize;
|
|
DWORD dwIndex0;
|
|
|
|
GetPrivateProfileString("Strings", "STR Force Upgrade Required", "", szSTRRequired, sizeof(szSTRRequired), szFileIniConfig);
|
|
|
|
/* calculate the amount of memory to allocate for the buffer */
|
|
dwBufSize = 0;
|
|
|
|
/* setup type */
|
|
if(GetPrivateProfileString("Messages", "STR_SETUP_TYPE", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
dwBufSize += strlen(szBuf) + 2; // the extra 2 bytes is for the \r\n characters
|
|
dwBufSize += 4; // take into account 4 indentation spaces
|
|
|
|
switch(ulSetupType)
|
|
{
|
|
case ST_RADIO3:
|
|
dwBufSize += strlen(diSetupType.stSetupType3.szDescriptionShort) + 2; // the extra 2 bytes is for the \r\n characters
|
|
break;
|
|
|
|
case ST_RADIO2:
|
|
dwBufSize += strlen(diSetupType.stSetupType2.szDescriptionShort) + 2; // the extra 2 bytes is for the \r\n characters
|
|
break;
|
|
|
|
case ST_RADIO1:
|
|
dwBufSize += strlen(diSetupType.stSetupType1.szDescriptionShort) + 2; // the extra 2 bytes is for the \r\n characters
|
|
break;
|
|
|
|
default:
|
|
dwBufSize += strlen(diSetupType.stSetupType0.szDescriptionShort) + 2; // the extra 2 bytes is for the \r\n characters
|
|
break;
|
|
}
|
|
dwBufSize += 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
/* selected components */
|
|
if(GetPrivateProfileString("Messages", "STR_SELECTED_COMPONENTS", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
dwBufSize += strlen(szBuf) + 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
dwIndex0 = 0;
|
|
siCObject = SiCNodeGetObject(dwIndex0, FALSE, AC_ALL);
|
|
while(siCObject)
|
|
{
|
|
if(siCObject->dwAttributes & SIC_SELECTED)
|
|
{
|
|
dwBufSize += 4; // take into account 4 indentation spaces
|
|
dwBufSize += strlen(siCObject->szDescriptionShort);
|
|
}
|
|
|
|
if(siCObject->bForceUpgrade)
|
|
{
|
|
/* add the "(Required)" string (or something equivalent) after the component description */
|
|
if(*szSTRRequired != '\0')
|
|
{
|
|
dwBufSize += 1; // space after the short description
|
|
dwBufSize += strlen(szSTRRequired);
|
|
}
|
|
}
|
|
|
|
if(siCObject->dwAttributes & SIC_SELECTED)
|
|
dwBufSize += 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
++dwIndex0;
|
|
siCObject = SiCNodeGetObject(dwIndex0, FALSE, AC_ALL);
|
|
}
|
|
dwBufSize += 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
/* destination path */
|
|
if(GetPrivateProfileString("Messages", "STR_DESTINATION_DIRECTORY", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
dwBufSize += strlen(szBuf) + 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
dwBufSize += 4; // take into account 4 indentation spaces
|
|
dwBufSize += strlen(sgProduct.szPath) + 2; // the extra 2 bytes is for the \r\n characters
|
|
dwBufSize += 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
if(GetTotalArchivesToDownload() > 0)
|
|
{
|
|
dwBufSize += 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
/* site selector info */
|
|
if(GetPrivateProfileString("Messages", "STR_DOWNLOAD_SITE", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
dwBufSize += strlen(szBuf) + 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
dwBufSize += 4; // take into account 4 indentation spaces
|
|
dwBufSize += strlen(szSiteSelectorDescription) + 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
if(diAdditionalOptions.bSaveInstaller)
|
|
{
|
|
dwBufSize += 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
/* site selector info */
|
|
if(GetPrivateProfileString("Messages", "STR_SAVE_INSTALLER_FILES", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
dwBufSize += strlen(szBuf) + 2; // the extra 2 bytes is for the \r\n characters
|
|
|
|
GetSaveInstallerPath(szBuf, sizeof(szBuf));
|
|
dwBufSize += 4; // take into account 4 indentation spaces
|
|
dwBufSize += strlen(szBuf) + 2; // the extra 2 bytes is for the \r\n characters
|
|
}
|
|
}
|
|
|
|
dwBufSize += 1; // take into account the null character
|
|
|
|
|
|
/* From here down, the buffer is created given the above calculated buffer size. If the
|
|
* string concatenation (addition) is changed below, then the buffer size calculation above
|
|
* needs to be changed accordingly! */
|
|
|
|
/* allocate the memory */
|
|
if((szMessageBuf = NS_GlobalAlloc(dwBufSize)) != NULL)
|
|
{
|
|
memset(szMessageBuf, 0, dwBufSize);
|
|
|
|
/* Setup Type */
|
|
if(GetPrivateProfileString("Messages", "STR_SETUP_TYPE", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
{
|
|
strcat(szMessageBuf, szBuf);
|
|
strcat(szMessageBuf, "\r\n");
|
|
}
|
|
strcat(szMessageBuf, " "); // add 4 indentation spaces
|
|
|
|
switch(ulSetupType)
|
|
{
|
|
case ST_RADIO3:
|
|
AppendStringWOTilde(szMessageBuf, dwBufSize, diSetupType.stSetupType3.szDescriptionShort);
|
|
break;
|
|
|
|
case ST_RADIO2:
|
|
AppendStringWOTilde(szMessageBuf, dwBufSize, diSetupType.stSetupType2.szDescriptionShort);
|
|
break;
|
|
|
|
case ST_RADIO1:
|
|
AppendStringWOTilde(szMessageBuf, dwBufSize, diSetupType.stSetupType1.szDescriptionShort);
|
|
break;
|
|
|
|
default:
|
|
AppendStringWOTilde(szMessageBuf, dwBufSize, diSetupType.stSetupType0.szDescriptionShort);
|
|
break;
|
|
}
|
|
strcat(szMessageBuf, "\r\n\r\n");
|
|
|
|
/* Selected Components */
|
|
if(GetPrivateProfileString("Messages", "STR_SELECTED_COMPONENTS", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
{
|
|
strcat(szMessageBuf, szBuf);
|
|
strcat(szMessageBuf, "\r\n");
|
|
}
|
|
|
|
dwIndex0 = 0;
|
|
siCObject = SiCNodeGetObject(dwIndex0, FALSE, AC_ALL);
|
|
while(siCObject)
|
|
{
|
|
if(siCObject->dwAttributes & SIC_SELECTED)
|
|
{
|
|
strcat(szMessageBuf, " "); // add 4 indentation spaces
|
|
strcat(szMessageBuf, siCObject->szDescriptionShort);
|
|
}
|
|
|
|
if(siCObject->bForceUpgrade)
|
|
{
|
|
/* add the "(Required)" string (or something equivalent) after the component description */
|
|
if(*szSTRRequired != '\0')
|
|
{
|
|
strcat(szMessageBuf, " "); // add 1 space
|
|
strcat(szMessageBuf, szSTRRequired);
|
|
}
|
|
}
|
|
|
|
if(siCObject->dwAttributes & SIC_SELECTED)
|
|
strcat(szMessageBuf, "\r\n");
|
|
|
|
++dwIndex0;
|
|
siCObject = SiCNodeGetObject(dwIndex0, FALSE, AC_ALL);
|
|
}
|
|
strcat(szMessageBuf, "\r\n");
|
|
|
|
/* destination directory */
|
|
if(GetPrivateProfileString("Messages", "STR_DESTINATION_DIRECTORY", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
{
|
|
strcat(szMessageBuf, szBuf);
|
|
strcat(szMessageBuf, "\r\n");
|
|
}
|
|
strcat(szMessageBuf, " "); // add 4 indentation spaces
|
|
strcat(szMessageBuf, sgProduct.szPath);
|
|
strcat(szMessageBuf, "\r\n\r\n");
|
|
|
|
if(GetTotalArchivesToDownload() > 0)
|
|
{
|
|
strcat(szMessageBuf, "\r\n");
|
|
|
|
/* site selector info */
|
|
if(GetPrivateProfileString("Messages", "STR_DOWNLOAD_SITE", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
{
|
|
strcat(szMessageBuf, szBuf);
|
|
strcat(szMessageBuf, "\r\n");
|
|
}
|
|
|
|
strcat(szMessageBuf, " "); // add 4 indentation spaces
|
|
strcat(szMessageBuf, szSiteSelectorDescription); // site selector description
|
|
strcat(szMessageBuf, "\r\n");
|
|
|
|
if(diAdditionalOptions.bSaveInstaller)
|
|
{
|
|
strcat(szMessageBuf, "\r\n");
|
|
|
|
/* site selector info */
|
|
if(GetPrivateProfileString("Messages", "STR_SAVE_INSTALLER_FILES", "", szBuf, sizeof(szBuf), szFileIniInstall))
|
|
{
|
|
strcat(szMessageBuf, szBuf);
|
|
strcat(szMessageBuf, "\r\n");
|
|
}
|
|
|
|
GetSaveInstallerPath(szBuf, sizeof(szBuf));
|
|
strcat(szMessageBuf, " "); // add 4 indentation spaces
|
|
strcat(szMessageBuf, szBuf);
|
|
strcat(szMessageBuf, "\r\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
return(szMessageBuf);
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcStartInstall(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
SWP swpDlg;
|
|
LPSTR szMessage = NULL;
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinSetWindowText(hDlg, diStartInstall.szTitle);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_STATIC, sgInstallGui.szCurrentSettings);
|
|
WinSetDlgItemText(hDlg, IDWIZBACK, sgInstallGui.szBack_);
|
|
WinSetDlgItemText(hDlg, IDWIZNEXT, sgInstallGui.szInstall_);
|
|
WinSetDlgItemText(hDlg, IDCANCEL, sgInstallGui.szCancel_);
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
if((diAdvancedSettings.bShowDialog == FALSE) || (GetTotalArchivesToDownload() == 0))
|
|
{
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_BUTTON_SITE_SELECTOR), FALSE);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diStartInstall.szMessageInstall);
|
|
}
|
|
else
|
|
{
|
|
WinShowWindow(WinWindowFromID(hDlg, IDC_BUTTON_SITE_SELECTOR), TRUE);
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE0, diStartInstall.szMessageDownload);
|
|
}
|
|
|
|
if((szMessage = GetStartInstallMessage()) != NULL)
|
|
{
|
|
WinSetDlgItemText(hDlg, IDC_CURRENT_SETTINGS, szMessage);
|
|
FreeMemory(&szMessage);
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDWIZNEXT:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(NEXT_DLG);
|
|
break;
|
|
|
|
case IDWIZBACK:
|
|
WinDestroyWindow(hDlg);
|
|
DlgSequence(PREV_DLG);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcReboot(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
HANDLE hToken;
|
|
HWND hRadioYes;
|
|
SWP swpDlg;
|
|
|
|
hRadioYes = WinWindowFromID(hDlg, IDC_RADIO_YES);
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
WinCheckButton(hDlg, IDC_RADIO_YES, 1);
|
|
WinSetFocus(HWND_DESKTOP, hRadioYes);
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
WinSetDlgItemText(hDlg, 202, sgInstallGui.szSetupMessage);
|
|
WinSetDlgItemText(hDlg, IDC_RADIO_YES, sgInstallGui.szYesRestart);
|
|
WinSetDlgItemText(hDlg, IDC_RADIO_NO, sgInstallGui.szNoRestart);
|
|
WinSetDlgItemText(hDlg, DID_OK, sgInstallGui.szOk);
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case DID_OK:
|
|
if(WinQueryButtonCheckstate(hDlg, IDC_RADIO_YES) == 1)
|
|
{
|
|
WinDestroyWindow(hDlg);
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
WinDestroyWindow(hWndMain);
|
|
|
|
// Reboot the system and force all applications to close.
|
|
WinShutdownSystem(0, 0);
|
|
}
|
|
else
|
|
{
|
|
WinDestroyWindow(hDlg);
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
}
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
WinDestroyWindow(hDlg);
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
MRESULT EXPENTRY DlgProcMessage(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
|
|
{
|
|
SWP swpDlg;
|
|
HWND hSTMessage = WinWindowFromID(hDlg, IDC_MESSAGE); /* handle to the Static Text message window */
|
|
HPS hpsSTMessage;
|
|
RECTL rectlString;
|
|
char szBuf[MAX_BUF];
|
|
char szBuf2[MAX_BUF];
|
|
|
|
memset(szBuf, 0, sizeof(szBuf));
|
|
memset(szBuf2, 0, sizeof(szBuf2));
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_INITDLG:
|
|
AdjustDialogSize(hDlg);
|
|
WinSetPresParam(hDlg, PP_FONTNAMESIZE,
|
|
strlen(sgInstallGui.szDefinedFont)+1, sgInstallGui.szDefinedFont);
|
|
if(GetPrivateProfileString("Messages", "STR_MESSAGEBOX_TITLE", "", szBuf2, sizeof(szBuf2), szFileIniInstall))
|
|
{
|
|
if((sgProduct.szProductName != NULL) && (*sgProduct.szProductName != '\0'))
|
|
sprintf(szBuf, szBuf2, sgProduct.szProductName);
|
|
else
|
|
sprintf(szBuf, szBuf2, "");
|
|
}
|
|
else if((sgProduct.szProductName != NULL) && (*sgProduct.szProductName != '\0'))
|
|
strcpy(szBuf, sgProduct.szProductName);
|
|
|
|
WinSetWindowText(hDlg, szBuf);
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
WinSetWindowPos(hDlg,
|
|
HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-(swpDlg.cx/2),
|
|
(gSystemInfo.lScreenY/2)-(swpDlg.cy/2),
|
|
0,
|
|
0,
|
|
SWP_MOVE);
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
AskCancelDlg(hDlg);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch ( SHORT1FROMMP( mp1 ) )
|
|
{
|
|
case IDC_MESSAGE:
|
|
hpsSTMessage = WinGetPS(hSTMessage);
|
|
|
|
rectlString.xLeft = 0;
|
|
rectlString.xRight = 10000;
|
|
rectlString.yTop = 10000;
|
|
rectlString.yBottom = 0;
|
|
WinDrawText(hpsSTMessage, strlen((char*)mp2), (char*)mp2,
|
|
&rectlString, 0, 0,
|
|
DT_BOTTOM | DT_QUERYEXTENT | DT_TEXTATTRS | DT_WORDBREAK);
|
|
WinReleasePS(hpsSTMessage);
|
|
|
|
WinSetWindowPos(hDlg, HWND_TOP,
|
|
(gSystemInfo.lScreenX/2)-((rectlString.xRight + 55)/2),
|
|
(gSystemInfo.lScreenY/2)-((rectlString.yTop + 50)/2),
|
|
rectlString.xRight + 55,
|
|
rectlString.yTop + 50,
|
|
SWP_SIZE | SWP_MOVE);
|
|
|
|
WinQueryWindowPos(hDlg, &swpDlg);
|
|
|
|
WinSetWindowPos(hSTMessage,
|
|
HWND_TOP,
|
|
gSystemInfo.lDlgFrameX,
|
|
gSystemInfo.lDlgFrameY,
|
|
swpDlg.cx-2*gSystemInfo.lDlgFrameX,
|
|
swpDlg.cy-2*gSystemInfo.lDlgFrameY-gSystemInfo.lTitleBarY,
|
|
SWP_SIZE | SWP_MOVE);
|
|
|
|
WinSetDlgItemText(hDlg, IDC_MESSAGE, (PSZ)mp2);
|
|
return (MRESULT)TRUE;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return(WinDefDlgProc(hDlg, msg, mp1, mp2));
|
|
}
|
|
|
|
void ProcessWindowsMessages()
|
|
{
|
|
QMSG qmsg;
|
|
|
|
while(WinPeekMsg((HAB)0, &qmsg, 0, 0, 0, PM_REMOVE))
|
|
{
|
|
WinDispatchMsg((HAB)0, &qmsg );
|
|
}
|
|
}
|
|
|
|
void ShowMessage(PSZ szMessage, BOOL bShow)
|
|
{
|
|
char szBuf[MAX_BUF];
|
|
|
|
if(sgProduct.ulMode != SILENT)
|
|
{
|
|
if((bShow) && (hDlgMessage == NULL))
|
|
{
|
|
memset(szBuf, 0, sizeof(szBuf));
|
|
GetPrivateProfileString("Messages", "MB_MESSAGE_STR", "", szBuf, sizeof(szBuf), szFileIniInstall);
|
|
hDlgMessage = InstantiateDialog(hWndMain, DLG_MESSAGE, szBuf, DlgProcMessage);
|
|
WinSendMsg(hDlgMessage, WM_COMMAND, IDC_MESSAGE, (LPARAM)szMessage);
|
|
}
|
|
else if(!bShow && hDlgMessage)
|
|
{
|
|
WinDestroyWindow(hDlgMessage);
|
|
hDlgMessage = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
HWND InstantiateDialog(HWND hParent, ULONG ulDlgID, PSZ szTitle, PFNWP pfnwpDlgProc)
|
|
{
|
|
char szBuf[MAX_BUF];
|
|
HWND hDlg = NULL;
|
|
ATOM atom;
|
|
|
|
hDlg = WinLoadDlg(HWND_DESKTOP, hParent, pfnwpDlgProc, hSetupRscInst, ulDlgID, NULL);
|
|
|
|
if (hDlg == NULL)
|
|
{
|
|
char szEDialogCreate[MAX_BUF];
|
|
|
|
if(GetPrivateProfileString("Messages", "ERROR_DIALOG_CREATE", "", szEDialogCreate, sizeof(szEDialogCreate), szFileIniInstall))
|
|
{
|
|
sprintf(szBuf, szEDialogCreate, szTitle);
|
|
PrintError(szBuf, ERROR_CODE_SHOW);
|
|
}
|
|
WinPostQueueMsg(NULL, WM_QUIT, 1, 0);
|
|
}
|
|
|
|
atom = WinFindAtom(WinQuerySystemAtomTable(), CLASS_NAME_SETUP_DLG);
|
|
WinSetWindowULong(hDlg, QWL_USER, atom);
|
|
|
|
return(hDlg);
|
|
}
|
|
|
|
/*
|
|
* Check to see if turbo is enabled. If so, do the following:
|
|
* * Log the turbo status that use had chosen.
|
|
* * Set the appropriate Windows registry keys/values.
|
|
*/
|
|
void SetTurboArgs(void)
|
|
{
|
|
char szData[MAX_BUF];
|
|
char szBuf[MAX_BUF];
|
|
char szApp[MAX_BUF];
|
|
|
|
if(diQuickLaunch.bTurboModeEnabled)
|
|
{
|
|
/* log if the user selected the turbo mode or not */
|
|
LogISTurboMode(diQuickLaunch.bTurboMode);
|
|
LogMSTurboMode(diQuickLaunch.bTurboMode);
|
|
|
|
if(diQuickLaunch.bTurboMode)
|
|
strcpy( szData, "turbo=yes" );
|
|
else
|
|
strcpy( szData, "turbo=no" );
|
|
|
|
sprintf(szApp, "%s %s",
|
|
sgProduct.szProductNameInternal,
|
|
sgProduct.szUserAgent);
|
|
PrfQueryProfileString(HINI_USERPROFILE, szApp, "browserargs", "", szBuf, sizeof(szBuf));
|
|
|
|
if ( szBuf[0] != '\0' )
|
|
strcat(szBuf, " ");
|
|
strcat(szBuf, szData);
|
|
}
|
|
}
|
|
|
|
void DlgSequence(int iDirection)
|
|
{
|
|
HRESULT hrValue;
|
|
BOOL bDone = FALSE;
|
|
|
|
do
|
|
{
|
|
gbProcessingXpnstallFiles = FALSE;
|
|
|
|
if(iDirection == NEXT_DLG)
|
|
{
|
|
switch(ulWizardState)
|
|
{
|
|
case DLG_NONE:
|
|
ulWizardState = DLG_WELCOME;
|
|
break;
|
|
case DLG_WELCOME:
|
|
ulWizardState = DLG_LICENSE;
|
|
break;
|
|
case DLG_LICENSE:
|
|
ulWizardState = DLG_SETUP_TYPE;
|
|
break;
|
|
case DLG_SETUP_TYPE:
|
|
ulWizardState = DLG_SELECT_COMPONENTS;
|
|
break;
|
|
case DLG_SELECT_COMPONENTS:
|
|
ulWizardState = DLG_SELECT_ADDITIONAL_COMPONENTS;
|
|
break;
|
|
case DLG_SELECT_ADDITIONAL_COMPONENTS:
|
|
ulWizardState = DLG_OS2_INTEGRATION;
|
|
break;
|
|
case DLG_OS2_INTEGRATION:
|
|
ulWizardState = DLG_ADDITIONAL_OPTIONS;
|
|
break;
|
|
case DLG_ADDITIONAL_OPTIONS:
|
|
ulWizardState = DLG_START_INSTALL;
|
|
break;
|
|
case DLG_START_INSTALL:
|
|
ulWizardState = DLG_COMMIT_INSTALL;
|
|
break;
|
|
|
|
case DLG_ADVANCED_SETTINGS:
|
|
ulWizardState = DLG_ADDITIONAL_OPTIONS;
|
|
break;
|
|
|
|
default:
|
|
ulWizardState = DLG_WELCOME;
|
|
break; }
|
|
}
|
|
else if(iDirection == PREV_DLG)
|
|
{
|
|
switch(ulWizardState)
|
|
{
|
|
case DLG_LICENSE:
|
|
ulWizardState = DLG_WELCOME;
|
|
break;
|
|
case DLG_SETUP_TYPE:
|
|
ulWizardState = DLG_LICENSE;
|
|
break;
|
|
case DLG_SELECT_COMPONENTS:
|
|
ulWizardState = DLG_SETUP_TYPE;
|
|
break;
|
|
case DLG_SELECT_ADDITIONAL_COMPONENTS:
|
|
ulWizardState = DLG_SELECT_COMPONENTS;
|
|
break;
|
|
case DLG_OS2_INTEGRATION:
|
|
ulWizardState = DLG_SELECT_ADDITIONAL_COMPONENTS;
|
|
break;
|
|
case DLG_ADDITIONAL_OPTIONS:
|
|
ulWizardState = DLG_OS2_INTEGRATION;
|
|
break;
|
|
case DLG_START_INSTALL:
|
|
ulWizardState = DLG_ADDITIONAL_OPTIONS;
|
|
break;
|
|
|
|
case DLG_ADVANCED_SETTINGS:
|
|
ulWizardState = DLG_ADDITIONAL_OPTIONS;
|
|
break;
|
|
|
|
default:
|
|
ulWizardState = DLG_WELCOME;
|
|
break;
|
|
}
|
|
}
|
|
else if(iDirection == OTHER_DLG_1)
|
|
{
|
|
switch(ulWizardState)
|
|
{
|
|
case DLG_ADDITIONAL_OPTIONS:
|
|
ulWizardState = DLG_ADVANCED_SETTINGS;
|
|
break;
|
|
|
|
// You'll get here only if DLG_ADVANCED_SETTINGS is not displayed, which really should
|
|
// should never be the case unless DLG_ADDITIONAL_OPTIONS is also not displayed, since this
|
|
// is a button off that dialog. But if the user turns this off in error, handling the case
|
|
// will keep from dropping into an infinite loop.
|
|
case DLG_ADVANCED_SETTINGS:
|
|
ulWizardState = DLG_ADDITIONAL_OPTIONS;
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch(ulWizardState)
|
|
{
|
|
case DLG_WELCOME:
|
|
if(diWelcome.bShowDialog)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diWelcome.szTitle, DlgProcWelcome);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_LICENSE:
|
|
if(diLicense.bShowDialog)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diLicense.szTitle, DlgProcLicense);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_SETUP_TYPE:
|
|
if(diSetupType.bShowDialog)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diSetupType.szTitle, DlgProcSetupType);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_SELECT_COMPONENTS:
|
|
if((diSelectComponents.bShowDialog) && (sgProduct.ulCustomType == ulSetupType))
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diSelectComponents.szTitle, DlgProcSelectComponents);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_SELECT_ADDITIONAL_COMPONENTS:
|
|
if((diSelectAdditionalComponents.bShowDialog) && (sgProduct.ulCustomType == ulSetupType))
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diSelectAdditionalComponents.szTitle, DlgProcSelectAdditionalComponents);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_OS2_INTEGRATION:
|
|
if(diOS2Integration.bShowDialog)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diOS2Integration.szTitle, DlgProcOS2Integration);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_ADVANCED_SETTINGS:
|
|
if(diAdvancedSettings.bShowDialog)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diAdvancedSettings.szTitle, DlgProcAdvancedSettings);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_ADDITIONAL_OPTIONS:
|
|
do
|
|
{
|
|
hrValue = VerifyDiskSpace();
|
|
if(hrValue == DID_OK)
|
|
{
|
|
/* show previous visible window */
|
|
iDirection = PREV_DLG;
|
|
}
|
|
else if(hrValue == IDCANCEL)
|
|
{
|
|
AskCancelDlg(hWndMain);
|
|
hrValue = MBID_RETRY;
|
|
}
|
|
}while(hrValue == MBID_RETRY);
|
|
|
|
if(hrValue != DID_OK)
|
|
{
|
|
if(ShowAdditionalOptionsDialog() == TRUE)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diAdditionalOptions.szTitle, DlgProcAdditionalOptions);
|
|
bDone = TRUE;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case DLG_START_INSTALL:
|
|
if(diStartInstall.bShowDialog)
|
|
{
|
|
hDlgCurrent = InstantiateDialog(hWndMain, ulWizardState, diStartInstall.szTitle, DlgProcStartInstall);
|
|
bDone = TRUE;
|
|
}
|
|
break;
|
|
|
|
case DLG_COMMIT_INSTALL:
|
|
gbProcessingXpnstallFiles = TRUE;
|
|
CommitInstall();
|
|
bDone = TRUE;
|
|
break;
|
|
}
|
|
} while(!bDone);
|
|
}
|
|
|
|
void CommitInstall(void)
|
|
{
|
|
HRESULT hrErr;
|
|
char szDestPath[MAX_BUF];
|
|
char szInstallLogFile[MAX_BUF];
|
|
|
|
LogISDestinationPath();
|
|
LogISSetupType();
|
|
LogISComponentsSelected();
|
|
LogISComponentsToDownload();
|
|
LogISDiskSpace(gdsnComponentDSRequirement);
|
|
|
|
strcpy(szDestPath, sgProduct.szPath);
|
|
if(*sgProduct.szSubPath != '\0')
|
|
{
|
|
AppendBackSlash(szDestPath, sizeof(szDestPath));
|
|
strcat(szDestPath, sgProduct.szSubPath);
|
|
}
|
|
AppendBackSlash(szDestPath, sizeof(szDestPath));
|
|
|
|
/* Set global var, that determines where the log file is to update, to
|
|
* not use the TEMP dir *before* the FileCopy() calls because we want
|
|
* to log the FileCopy() calls to where the log files were copied to.
|
|
* This is possible because the logging, that is done within the
|
|
* FileCopy() function, is done after the actual copy
|
|
*/
|
|
gbILUseTemp = FALSE;
|
|
|
|
/* copy the install_wizard.log file from the temp\ns_temp dir to
|
|
* the destination dir and use the new destination file to continue
|
|
* logging.
|
|
*/
|
|
strcpy(szInstallLogFile, szTempDir);
|
|
AppendBackSlash(szInstallLogFile, sizeof(szInstallLogFile));
|
|
strcat(szInstallLogFile, FILE_INSTALL_LOG);
|
|
FileCopy(szInstallLogFile, szDestPath, FALSE, FALSE);
|
|
DosDelete(szInstallLogFile);
|
|
|
|
/* copy the install_status.log file from the temp\ns_temp dir to
|
|
* the destination dir and use the new destination file to continue
|
|
* logging.
|
|
*/
|
|
strcpy(szInstallLogFile, szTempDir);
|
|
AppendBackSlash(szInstallLogFile, sizeof(szInstallLogFile));
|
|
strcat(szInstallLogFile, FILE_INSTALL_STATUS_LOG);
|
|
FileCopy(szInstallLogFile, szDestPath, FALSE, FALSE);
|
|
DosDelete(szInstallLogFile);
|
|
|
|
/* PRE_DOWNLOAD process file manipulation functions */
|
|
ProcessFileOpsForAll(T_PRE_DOWNLOAD);
|
|
|
|
if(RetrieveArchives() == WIZ_OK)
|
|
{
|
|
/* Check to see if Turbo is required. If so, set the
|
|
* appropriate Windows registry keys */
|
|
SetTurboArgs();
|
|
|
|
if(gbDownloadTriggered || gbPreviousUnfinishedDownload)
|
|
SetSetupState(SETUP_STATE_UNPACK_XPCOM);
|
|
|
|
/* POST_DOWNLOAD process file manipulation functions */
|
|
ProcessFileOpsForAll(T_POST_DOWNLOAD);
|
|
/* PRE_XPCOM process file manipulation functions */
|
|
ProcessFileOpsForAll(T_PRE_XPCOM);
|
|
|
|
if(ProcessXpcomFile() != FO_SUCCESS)
|
|
{
|
|
bSDUserCanceled = TRUE;
|
|
CleanupXpcomFile();
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
|
|
return;
|
|
}
|
|
|
|
if(gbDownloadTriggered || gbPreviousUnfinishedDownload)
|
|
SetSetupState(SETUP_STATE_INSTALL_XPI); // clears and sets new setup state
|
|
|
|
/* POST_XPCOM process file manipulation functions */
|
|
ProcessFileOpsForAll(T_POST_XPCOM);
|
|
/* PRE_SMARTUPDATE process file manipulation functions */
|
|
ProcessFileOpsForAll(T_PRE_SMARTUPDATE);
|
|
|
|
/* save the installer files in the local machine */
|
|
if(diAdditionalOptions.bSaveInstaller)
|
|
SaveInstallerFiles();
|
|
|
|
if(CheckInstances())
|
|
{
|
|
bSDUserCanceled = TRUE;
|
|
CleanupXpcomFile();
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
|
|
return;
|
|
}
|
|
|
|
strcat(szDestPath, "uninstall\\");
|
|
CreateDirectoriesAll(szDestPath, TRUE);
|
|
|
|
/* save the installer files in the local machine */
|
|
if(diAdditionalOptions.bSaveInstaller)
|
|
SaveInstallerFiles();
|
|
|
|
hrErr = SmartUpdateJars();
|
|
if((hrErr == WIZ_OK) || (hrErr == 999))
|
|
{
|
|
UpdateJSProxyInfo();
|
|
|
|
/* POST_SMARTUPDATE process file manipulation functions */
|
|
ProcessFileOpsForAll(T_POST_SMARTUPDATE);
|
|
/* PRE_LAUNCHAPP process file manipulation functions */
|
|
ProcessFileOpsForAll(T_PRE_LAUNCHAPP);
|
|
|
|
LaunchApps();
|
|
|
|
/* POST_LAUNCHAPP process file manipulation functions */
|
|
ProcessFileOpsForAll(T_POST_LAUNCHAPP);
|
|
/* DEPEND_REBOOT process file manipulation functions */
|
|
ProcessFileOpsForAll(T_DEPEND_REBOOT);
|
|
|
|
ProcessOS2Integration();
|
|
|
|
UnsetSetupState(); // clear setup state
|
|
if(!gbIgnoreProgramFolderX)
|
|
ProcessProgramFolderShowCmd();
|
|
|
|
CleanupArgsRegistry();
|
|
CleanupPreviousVersionINIKeys();
|
|
if(NeedReboot())
|
|
{
|
|
CleanupXpcomFile();
|
|
hDlgCurrent = InstantiateDialog(hWndMain, DLG_RESTART, diReboot.szTitle, DlgProcReboot);
|
|
}
|
|
else
|
|
{
|
|
CleanupXpcomFile();
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CleanupXpcomFile();
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bSDUserCanceled = TRUE;
|
|
CleanupXpcomFile();
|
|
CleanupArgsRegistry();
|
|
WinPostQueueMsg(0, WM_QUIT, 0, 0);
|
|
}
|
|
gbProcessingXpnstallFiles = FALSE;
|
|
}
|