269 lines
8.8 KiB
C
269 lines
8.8 KiB
C
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dialogs.c
|
|
|
|
Abstract:
|
|
|
|
This file implements the dialog proc for the server
|
|
platforms page.
|
|
|
|
Environment:
|
|
|
|
WIN32 User Mode
|
|
|
|
Author:
|
|
|
|
Wesley Witt (wesw) 17-Feb-1996
|
|
|
|
--*/
|
|
|
|
#include "wizard.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
LRESULT
|
|
PlatformsDlgProc(
|
|
HWND hwnd,
|
|
UINT msg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
{
|
|
static HWND hwndList;
|
|
static DWORD RequireThisPlatform ;
|
|
SYSTEM_INFO SystemInfo;
|
|
|
|
|
|
switch( msg ) {
|
|
case WM_INITDIALOG:
|
|
{
|
|
HIMAGELIST himlState;
|
|
int iItem = 0;
|
|
DWORD i;
|
|
LV_ITEM lvi;
|
|
LV_COLUMN lvc = {0};
|
|
|
|
GetSystemInfo( &SystemInfo );
|
|
|
|
if ( (SystemInfo.wProcessorArchitecture > 3) || (EnumPlatforms[SystemInfo.wProcessorArchitecture] == WRONG_PLATFORM ) ) {
|
|
return FALSE;
|
|
}
|
|
|
|
RequireThisPlatform = EnumPlatforms[SystemInfo.wProcessorArchitecture];
|
|
|
|
|
|
if (InstallMode != INSTALL_NEW) {
|
|
DWORD i, Mask;
|
|
for (i=0,Mask=InstalledPlatforms; i<CountPlatforms; i++) {
|
|
if (Mask & 1) {
|
|
Platforms[i].Selected = TRUE;
|
|
}
|
|
Mask = Mask >> 1;
|
|
}
|
|
}
|
|
if( RequireThisPlatform < 4 ) {
|
|
Platforms[RequireThisPlatform].Selected = TRUE;
|
|
}
|
|
|
|
|
|
hwndList = GetDlgItem( hwnd, IDC_PLATFORM_LIST );
|
|
|
|
//
|
|
// set/initialize the image list(s)
|
|
//
|
|
himlState = ImageList_Create( 16, 16, TRUE, 2, 0 );
|
|
|
|
ImageList_AddMasked(
|
|
himlState,
|
|
LoadBitmap( FaxWizModuleHandle, MAKEINTRESOURCE(IDB_CHECKSTATES) ),
|
|
RGB (255,0,0)
|
|
);
|
|
|
|
ListView_SetImageList( hwndList, himlState, LVSIL_STATE );
|
|
|
|
//
|
|
// set/initialize the columns
|
|
//
|
|
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
lvc.cx = 274;
|
|
lvc.pszText = TEXT("Platform");
|
|
lvc.iSubItem = 0;
|
|
ListView_InsertColumn( hwndList, lvc.iSubItem, &lvc );
|
|
|
|
//
|
|
// add the data to the list
|
|
//
|
|
|
|
for (i=0,lvi.iItem=0; i<MAX_PLATFORMS; i++) {
|
|
|
|
lvi.pszText = Platforms[i].PrintPlatform;
|
|
lvi.iItem += 1;
|
|
lvi.iSubItem = 0;
|
|
lvi.iImage = 0;
|
|
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
|
|
lvi.state = Platforms[i].Selected ? LVIS_GCCHECK : LVIS_GCNOCHECK;
|
|
lvi.stateMask = LVIS_STATEIMAGEMASK;
|
|
iItem = ListView_InsertItem( hwndList, &lvi );
|
|
|
|
}
|
|
|
|
//
|
|
// Set focus to the list control and make first un-selected platform blue.
|
|
//
|
|
|
|
for (i = 0 ; i < MAX_PLATFORMS ; ++ i ){
|
|
if ( !Platforms[i].Selected ){
|
|
break ;
|
|
}
|
|
}
|
|
if (i == MAX_PLATFORMS ){
|
|
i = 0 ;
|
|
}
|
|
ListView_SetItemState( hwndList, i, LVIS_FOCUSED | LVNI_SELECTED, 0x000F );
|
|
}
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
switch( ((LPNMHDR)lParam)->code ) {
|
|
case PSN_SETACTIVE:
|
|
if (Unattended) {
|
|
WCHAR buf[128];
|
|
LPWSTR p = buf;
|
|
DWORD i;
|
|
UnAttendGetAnswer(
|
|
UAA_PLATFORM_LIST,
|
|
(LPBYTE) buf,
|
|
sizeof(buf)/sizeof(WCHAR)
|
|
);
|
|
p = wcstok( buf, L"," );
|
|
do {
|
|
for (i=0; i<CountPlatforms; i++) {
|
|
if (_wcsicmp( Platforms[i].OsPlatform, p ) == 0) {
|
|
Platforms[i].Selected = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
p = wcstok( NULL, L"," );
|
|
} while(p);
|
|
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
|
|
return TRUE;
|
|
}
|
|
if (InstallMode & INSTALL_UPGRADE || InstallMode & INSTALL_REMOVE) {
|
|
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case NM_CLICK:
|
|
{
|
|
DWORD dwpos;
|
|
LV_HITTESTINFO lvhti;
|
|
int iItemClicked;
|
|
UINT state;
|
|
|
|
//
|
|
// Find out where the cursor was
|
|
//
|
|
dwpos = GetMessagePos();
|
|
lvhti.pt.x = LOWORD(dwpos);
|
|
lvhti.pt.y = HIWORD(dwpos);
|
|
|
|
MapWindowPoints( HWND_DESKTOP, hwndList, &lvhti.pt, 1 );
|
|
|
|
//
|
|
// Now do a hittest with this point.
|
|
//
|
|
iItemClicked = ListView_HitTest( hwndList, &lvhti );
|
|
|
|
if (lvhti.flags & LVHT_ONITEMSTATEICON) {
|
|
//
|
|
// Now lets get the state from the item and toggle it.
|
|
//
|
|
state = ListView_GetItemState(
|
|
hwndList,
|
|
iItemClicked,
|
|
LVIS_STATEIMAGEMASK
|
|
);
|
|
|
|
if ((InstallMode & INSTALL_DRIVERS &&
|
|
(1<<iItemClicked) & InstalledPlatforms &&
|
|
state == LVIS_GCCHECK) ||
|
|
( (DWORD)iItemClicked == RequireThisPlatform)){
|
|
|
|
MessageBeep( MB_ICONEXCLAMATION );
|
|
}
|
|
else {
|
|
|
|
state = (state == LVIS_GCNOCHECK) ? LVIS_GCCHECK : LVIS_GCNOCHECK;
|
|
|
|
ListView_SetItemState(
|
|
hwndList,
|
|
iItemClicked,
|
|
state,
|
|
LVIS_STATEIMAGEMASK
|
|
);
|
|
|
|
Platforms[iItemClicked].Selected = (state == LVIS_GCCHECK);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
break;
|
|
|
|
case LVN_KEYDOWN:
|
|
|
|
//
|
|
// Use space key to toggle check boxes
|
|
//
|
|
|
|
if (((LV_KEYDOWN *) lParam)->wVKey == VK_SPACE) {
|
|
INT index ;
|
|
UINT state ;
|
|
index = ListView_GetNextItem(hwndList, -1, LVNI_ALL|LVNI_SELECTED);
|
|
if (index == -1) {
|
|
return FALSE ;
|
|
}
|
|
//
|
|
// Toggle.
|
|
//
|
|
state = ListView_GetItemState(
|
|
hwndList,
|
|
index,
|
|
LVIS_STATEIMAGEMASK,
|
|
);
|
|
if ((InstallMode & INSTALL_DRIVERS &&
|
|
( 1 << index ) & InstalledPlatforms &&
|
|
state == LVIS_GCCHECK) ||
|
|
( (DWORD)index == RequireThisPlatform)){
|
|
|
|
MessageBeep( MB_ICONEXCLAMATION );
|
|
|
|
}
|
|
else {
|
|
state = ( state == LVIS_GCNOCHECK )? LVIS_GCCHECK : LVIS_GCNOCHECK ;
|
|
ListView_SetItemState(
|
|
hwndList,
|
|
index,
|
|
state,
|
|
LVIS_STATEIMAGEMASK
|
|
);
|
|
Platforms[index].Selected = ( state == LVIS_GCCHECK );
|
|
}
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|