1201 lines
30 KiB
C
1201 lines
30 KiB
C
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
// File Name:
|
||
|
// lanwiz.c
|
||
|
//
|
||
|
// Description:
|
||
|
// This file contains the dialog procedure for the custom networking
|
||
|
// page (IDD_LANWIZ_DLG).
|
||
|
//
|
||
|
// This is the primary page for custom networking, all other networking
|
||
|
// pages come initially from this page.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.h"
|
||
|
#include "resource.h"
|
||
|
|
||
|
static UINT iCurrentSelection;
|
||
|
static TCHAR *StrNetworkCardNumber;
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: UpdateListView
|
||
|
//
|
||
|
// Purpose: clears all the entries in the list view and adds the items
|
||
|
// in the Network Component List that have the installed flag on
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
UpdateListView( IN HWND hwnd ) {
|
||
|
|
||
|
NETWORK_COMPONENT *pNetComponent;
|
||
|
|
||
|
SendDlgItemMessage( hwnd,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
LVM_DELETEALLITEMS,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) 0 );
|
||
|
|
||
|
for( pNetComponent = NetSettings.NetComponentsList;
|
||
|
pNetComponent;
|
||
|
pNetComponent = pNetComponent->next )
|
||
|
{
|
||
|
|
||
|
if( pNetComponent->bInstalled == TRUE )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Make sure we are installing workstation and server components
|
||
|
// correctly. If this isn't one that should be added, continue
|
||
|
// on to the next one.
|
||
|
//
|
||
|
if( WizGlobals.iPlatform == PLATFORM_PERSONAL )
|
||
|
{
|
||
|
if( ! (pNetComponent->dwPlatforms & PERSONAL_INSTALL) )
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
else if( WizGlobals.iPlatform == PLATFORM_WORKSTATION )
|
||
|
{
|
||
|
if( ! (pNetComponent->dwPlatforms & WORKSTATION_INSTALL) )
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
else if( WizGlobals.iPlatform == PLATFORM_SERVER || WizGlobals.iPlatform == PLATFORM_ENTERPRISE || WizGlobals.iPlatform == PLATFORM_WEBBLADE)
|
||
|
{
|
||
|
if( ! (pNetComponent->dwPlatforms & SERVER_INSTALL) )
|
||
|
{
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
AssertMsg( FALSE,
|
||
|
"Invalid platform type." );
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// If it is not a sysprep then just go ahead and add it to the
|
||
|
// list view. If we are doing a sysprep, check to see if this
|
||
|
// component is supported by sysprep to see if we should add it
|
||
|
// or not
|
||
|
//
|
||
|
if( WizGlobals.iProductInstall == PRODUCT_SYSPREP )
|
||
|
{
|
||
|
if( pNetComponent->bSysprepSupport )
|
||
|
{
|
||
|
InsertEntryIntoListView( GetDlgItem( hwnd, IDC_LVW_COMPLIST ),
|
||
|
(LPARAM) pNetComponent );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// If it is not supported by sysprep, then don't install it
|
||
|
//
|
||
|
pNetComponent->bInstalled = FALSE;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
|
||
|
InsertEntryIntoListView( GetDlgItem( hwnd, IDC_LVW_COMPLIST ),
|
||
|
(LPARAM) pNetComponent );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: GetListViewIndex
|
||
|
//
|
||
|
// Purpose: returns the entry in the list view with the controlID specified by
|
||
|
// the index
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog the list view is in
|
||
|
// IN WORD controlID - resource ID of the list view
|
||
|
// IN INT index - index in the list view of the item to grab
|
||
|
//
|
||
|
// Returns: a pointer to the item in the list view at the location specified by
|
||
|
// the IN parameter index
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
NETWORK_COMPONENT*
|
||
|
GetListViewIndex( IN HWND hwnd,
|
||
|
IN WORD controlID,
|
||
|
IN INT index ) {
|
||
|
|
||
|
LVITEM lvI;
|
||
|
|
||
|
memset( &lvI, 0, sizeof(LVITEM) );
|
||
|
|
||
|
lvI.iItem = index;
|
||
|
lvI.mask = LVIF_PARAM;
|
||
|
|
||
|
SendDlgItemMessage( hwnd,
|
||
|
controlID,
|
||
|
LVM_GETITEM,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) &lvI );
|
||
|
|
||
|
return (NETWORK_COMPONENT *)lvI.lParam ;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: SetListViewSelection
|
||
|
//
|
||
|
// Purpose: sets the selection in the list view (specified by controlID) to
|
||
|
// the position specified
|
||
|
//
|
||
|
// Arguments: IN HWND hDlg -
|
||
|
// IN WORD controlID -
|
||
|
// IN INT position -
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
SetListViewSelection( IN HWND hDlg, IN WORD controlID, IN INT position ) {
|
||
|
|
||
|
HWND hListViewWnd;
|
||
|
|
||
|
// get a handle to the list view window
|
||
|
hListViewWnd = GetDlgItem( hDlg, controlID );
|
||
|
|
||
|
ListView_SetItemState( hListViewWnd,
|
||
|
position,
|
||
|
LVIS_SELECTED | LVIS_FOCUSED,
|
||
|
LVIS_SELECTED | LVIS_FOCUSED ) ;
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: SetDescription
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
SetDescription( HWND hwnd, INT index ) {
|
||
|
|
||
|
INT_PTR iListViewCount;
|
||
|
NETWORK_COMPONENT* tempEntry;
|
||
|
|
||
|
tempEntry = GetListViewIndex( hwnd, IDC_LVW_COMPLIST, index );
|
||
|
|
||
|
iListViewCount = SendDlgItemMessage( hwnd,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
LVM_GETITEMCOUNT,
|
||
|
0,
|
||
|
0 );
|
||
|
|
||
|
//
|
||
|
// if there are no entries, then clear the description box
|
||
|
// else display the description
|
||
|
//
|
||
|
if( iListViewCount == 0 ) {
|
||
|
|
||
|
SendDlgItemMessage( hwnd,
|
||
|
IDC_TXT_COMPDESC,
|
||
|
WM_SETTEXT,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) _T("") );
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
SendDlgItemMessage( hwnd,
|
||
|
IDC_TXT_COMPDESC,
|
||
|
WM_SETTEXT,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) tempEntry->StrComponentDescription );
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: GetSelectedItemFromListView
|
||
|
//
|
||
|
// Purpose: searches through the List View specified by controlID
|
||
|
// returns the found item in the lvI parameter
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: function returns TRUE if there was an item selected and it
|
||
|
// found it,
|
||
|
// FALSE if there was no item selected
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
BOOL
|
||
|
GetSelectedItemFromListView( HWND hwndDlg, WORD controlID, LVITEM* lvI )
|
||
|
{
|
||
|
|
||
|
INT i;
|
||
|
INT iCount;
|
||
|
HWND hListView = GetDlgItem( hwndDlg, controlID );
|
||
|
UINT uMask = LVIS_SELECTED | LVIS_FOCUSED;
|
||
|
UINT uState;
|
||
|
BOOL bSelectedItemFound = FALSE;
|
||
|
|
||
|
iCount = ListView_GetItemCount( hListView );
|
||
|
|
||
|
//
|
||
|
// cycle through the list until the selected item is found
|
||
|
//
|
||
|
|
||
|
i = 0;
|
||
|
|
||
|
while( !bSelectedItemFound && i < iCount )
|
||
|
{
|
||
|
|
||
|
uState = ListView_GetItemState( hListView, i, uMask );
|
||
|
|
||
|
if( uState == uMask )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// found the selected item
|
||
|
//
|
||
|
|
||
|
bSelectedItemFound = TRUE;
|
||
|
|
||
|
memset( lvI, 0, sizeof( LVITEM ) );
|
||
|
|
||
|
lvI->iItem = i;
|
||
|
lvI->mask = LVIF_PARAM;
|
||
|
|
||
|
ListView_GetItem( hListView, lvI );
|
||
|
|
||
|
return( TRUE );
|
||
|
|
||
|
}
|
||
|
|
||
|
i++;
|
||
|
|
||
|
}
|
||
|
|
||
|
return( FALSE );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: InsertEntryIntoListView
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
BOOL
|
||
|
InsertEntryIntoListView( HWND hListViewWnd,
|
||
|
LPARAM lParam )
|
||
|
{
|
||
|
|
||
|
LVITEM lvI;
|
||
|
NETWORK_COMPONENT *pListViewEntry = (NETWORK_COMPONENT *)lParam;
|
||
|
|
||
|
lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
|
||
|
|
||
|
lvI.iItem = 0;
|
||
|
lvI.iSubItem = 0;
|
||
|
lvI.pszText = LPSTR_TEXTCALLBACK;
|
||
|
lvI.cchTextMax = MAX_ITEMLEN;
|
||
|
lvI.lParam = lParam;
|
||
|
lvI.state = LVIS_SELECTED | LVIS_FOCUSED;
|
||
|
lvI.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
|
||
|
|
||
|
|
||
|
lvI.iImage = 0;
|
||
|
|
||
|
switch( pListViewEntry->ComponentType ) {
|
||
|
|
||
|
case CLIENT: lvI.iImage = 0; break;
|
||
|
case SERVICE: lvI.iImage = 1; break;
|
||
|
case PROTOCOL: lvI.iImage = 2; break;
|
||
|
|
||
|
}
|
||
|
|
||
|
if ( ListView_InsertItem( hListViewWnd, &lvI ) == -1 )
|
||
|
return( FALSE );
|
||
|
|
||
|
ListView_SortItems( hListViewWnd, ListViewCompareFunc, (LPARAM)NULL );
|
||
|
|
||
|
return( TRUE );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: InitListView
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
BOOL
|
||
|
InitListView( HWND hDlg, HINSTANCE hInst ) {
|
||
|
|
||
|
HICON hIcon1, hIcon2, hIcon3; // handles to icons
|
||
|
HIMAGELIST hSmall; // handle to image list for small icons
|
||
|
LVCOLUMN lvCol;
|
||
|
RECT rect;
|
||
|
|
||
|
//
|
||
|
// Initialize the list view window
|
||
|
// First initialize the image lists you will need:
|
||
|
// create image list for the small icons
|
||
|
//
|
||
|
|
||
|
hSmall = ImageList_Create( BITMAP_WIDTH, BITMAP_HEIGHT, ILC_MASK, 3, 0 );
|
||
|
|
||
|
//
|
||
|
// Load the icons and add them to the image list
|
||
|
//
|
||
|
|
||
|
hIcon1 = LoadIcon( hInst, MAKEINTRESOURCE(IDI_CLIENT) );
|
||
|
hIcon2 = LoadIcon( hInst, MAKEINTRESOURCE(IDI_SERVICE) );
|
||
|
hIcon3 = LoadIcon( hInst, MAKEINTRESOURCE(IDI_PROTOCOL) );
|
||
|
|
||
|
if( ImageList_AddIcon(hSmall, hIcon1) == -1 )
|
||
|
return( FALSE );
|
||
|
if( ImageList_AddIcon(hSmall, hIcon2) == -1 )
|
||
|
return( FALSE );
|
||
|
if( ImageList_AddIcon(hSmall, hIcon3) == -1 )
|
||
|
return( FALSE );
|
||
|
|
||
|
// Be sure that all the icons were added
|
||
|
if ( ImageList_GetImageCount( hSmall ) < 3 )
|
||
|
return( FALSE );
|
||
|
|
||
|
// Associate the image list with the list view control
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
LVM_SETIMAGELIST,
|
||
|
(WPARAM) LVSIL_SMALL,
|
||
|
(LPARAM) hSmall );
|
||
|
|
||
|
//
|
||
|
// Using a "Report" list view so make it 1 column that is the width of
|
||
|
// the list view
|
||
|
//
|
||
|
|
||
|
GetClientRect( GetDlgItem( hDlg, IDC_LVW_COMPLIST ),
|
||
|
&rect );
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
LVM_SETCOLUMNWIDTH,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) rect.right );
|
||
|
|
||
|
// The mask specifies that the fmt, width and pszText members
|
||
|
// of the structure are valid
|
||
|
lvCol.mask = LVCF_FMT | LVCF_WIDTH;
|
||
|
lvCol.fmt = LVCFMT_LEFT; // left-align column
|
||
|
lvCol.cx = rect.right; // width of column in pixels
|
||
|
|
||
|
SendDlgItemMessage( hDlg,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
LVM_INSERTCOLUMN,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) &lvCol );
|
||
|
|
||
|
iCurrentSelection = 0;
|
||
|
|
||
|
return( TRUE );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: SetNetworkNumberText
|
||
|
//
|
||
|
// Purpose: Changes the caption of Network card # text so the user knows what
|
||
|
// network card he is currently changing settings for
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
SetNetworkNumberText( IN HWND hwnd, IN INT iCmdShow )
|
||
|
{
|
||
|
|
||
|
HWND hNumNetworkCards;
|
||
|
TCHAR szNetNumber[3]; // 3 so it holds up to a 2 digit string
|
||
|
TCHAR szTempString[MAX_STRING_LEN];
|
||
|
HRESULT hrCat;
|
||
|
|
||
|
hNumNetworkCards = GetDlgItem( hwnd, IDC_NETWORKCARDNUM );
|
||
|
|
||
|
//
|
||
|
// Convert network card int to string
|
||
|
//
|
||
|
_itow( NetSettings.iCurrentNetworkCard, szNetNumber, 10 );
|
||
|
|
||
|
//
|
||
|
// copy "Network Adapter #" string into szTempString
|
||
|
// szTempString is the string being built up that will be displayed
|
||
|
// as the new caption
|
||
|
//
|
||
|
lstrcpyn( szTempString, StrNetworkCardNumber, AS(szTempString) );
|
||
|
|
||
|
//
|
||
|
// concat the current network card number to the rest of the string
|
||
|
//
|
||
|
hrCat=StringCchCat( szTempString, AS(szTempString), szNetNumber );
|
||
|
|
||
|
SetWindowText( hNumNetworkCards, szTempString );
|
||
|
|
||
|
ShowWindow( hNumNetworkCards, iCmdShow );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ShowPlugAndPlay
|
||
|
//
|
||
|
// Purpose: Displays Plug and Play box, if necessary
|
||
|
// if the box is displayed then it fills it with the proper data
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
static VOID
|
||
|
ShowPlugAndPlay( IN HWND hwnd,
|
||
|
IN BOOL bShowNetworkText,
|
||
|
IN BOOL bShowEditBox )
|
||
|
{
|
||
|
|
||
|
HWND hPlugAndPlayText = GetDlgItem( hwnd, IDC_PLUGANDPLAYTEXT );
|
||
|
HWND hPlugAndPlayEditBox = GetDlgItem( hwnd, IDC_PLUGANDPLAY_ID );
|
||
|
|
||
|
AssertMsg( NetSettings.pCurrentAdapter != NULL,
|
||
|
"The current network card is null but there are more network cards left." );
|
||
|
|
||
|
//
|
||
|
// Show or hide the Network adapter text and make sure it is displaying
|
||
|
// the right number for the network card.
|
||
|
//
|
||
|
|
||
|
if( bShowNetworkText )
|
||
|
{
|
||
|
//
|
||
|
// change the text to display which network card the user is
|
||
|
// currently on
|
||
|
//
|
||
|
|
||
|
SetNetworkNumberText( hwnd , SW_SHOW );
|
||
|
|
||
|
SetWindowText( hPlugAndPlayEditBox,
|
||
|
NetSettings.pCurrentAdapter->szPlugAndPlayID );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SetNetworkNumberText( hwnd, SW_HIDE );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Show or hide the static Plug and Play text and edit box
|
||
|
//
|
||
|
|
||
|
if( bShowEditBox )
|
||
|
{
|
||
|
ShowWindow(hPlugAndPlayText, SW_SHOW );
|
||
|
|
||
|
ShowWindow(hPlugAndPlayEditBox, SW_SHOW );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ShowWindow( hPlugAndPlayText, SW_HIDE );
|
||
|
|
||
|
ShowWindow( hPlugAndPlayEditBox, SW_HIDE );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: FindNode
|
||
|
//
|
||
|
// Purpose: iterate throught the global net component list until the Node
|
||
|
// where the component position matches the iPosition parameter
|
||
|
// return a pointer to this node
|
||
|
// if the node is not found, return NULL
|
||
|
//
|
||
|
// Arguments: INT iPosition - position to return a pointer to in the list
|
||
|
//
|
||
|
// Returns: Pointer to the NETWORK_COMPONENT if found
|
||
|
// NULL if not found
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
NETWORK_COMPONENT*
|
||
|
FindNode( IN INT iPosition )
|
||
|
{
|
||
|
|
||
|
NETWORK_COMPONENT *pNetComponent;
|
||
|
|
||
|
for( pNetComponent = NetSettings.NetComponentsList;
|
||
|
pNetComponent;
|
||
|
pNetComponent = pNetComponent->next )
|
||
|
{
|
||
|
|
||
|
if( pNetComponent->iPosition == iPosition )
|
||
|
{
|
||
|
|
||
|
return( pNetComponent );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return( NULL );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: PropertiesHandler
|
||
|
//
|
||
|
// Purpose: called to handle when either the properties button is pushed or
|
||
|
// an item in the list view is double clicked
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
PropertiesHandler( IN HWND hDlg )
|
||
|
{
|
||
|
|
||
|
LVITEM lvI;
|
||
|
NETWORK_COMPONENT *entry;
|
||
|
|
||
|
if( GetSelectedItemFromListView( hDlg, IDC_LVW_COMPLIST, &lvI ) ) {
|
||
|
|
||
|
entry = (NETWORK_COMPONENT *)lvI.lParam;
|
||
|
|
||
|
// if the dialog box has properties, find the right dialog to pop-up
|
||
|
if( entry->bHasPropertiesTab ) {
|
||
|
|
||
|
switch( entry->iPosition ) {
|
||
|
|
||
|
case TCPIP_POSITION:
|
||
|
|
||
|
Create_TCPIP_PropertySheet( hDlg ); break;
|
||
|
|
||
|
case MS_CLIENT_POSITION:
|
||
|
|
||
|
Create_MSClient_PropertySheet( hDlg ); break;
|
||
|
|
||
|
case IPX_POSITION:
|
||
|
|
||
|
Create_MS_NWIPX_PropertySheet( hDlg ); break;
|
||
|
|
||
|
case APPLETALK_POSITION:
|
||
|
|
||
|
Create_Appletalk_PropertySheet( hDlg ); break;
|
||
|
|
||
|
case NETWARE_CLIENT_POSITION:
|
||
|
case GATEWAY_FOR_NETWARE_POSITION:
|
||
|
|
||
|
DialogBox( FixedGlobals.hInstance,
|
||
|
(LPCTSTR) IDD_NWC_WINNT_DLG,
|
||
|
hDlg,
|
||
|
DlgNetwarePage );
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
|
||
|
AssertMsg( FALSE,
|
||
|
"Bad Switch Case: Entry has Properties but no corresponding Property Sheet" );
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ListViewHandler
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
ListViewHandler( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam )
|
||
|
{
|
||
|
|
||
|
LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
|
||
|
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
|
||
|
NETWORK_COMPONENT *pListViewEntry;
|
||
|
HWND hPropertiesButton;
|
||
|
|
||
|
pListViewEntry = (NETWORK_COMPONENT *)(pLvdi->item.lParam);
|
||
|
|
||
|
switch( pLvdi->hdr.code )
|
||
|
{
|
||
|
|
||
|
case LVN_GETDISPINFO:
|
||
|
{
|
||
|
|
||
|
pLvdi->item.pszText = pListViewEntry->StrComponentName;
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
switch( pNm->hdr.code )
|
||
|
{
|
||
|
|
||
|
case NM_DBLCLK:
|
||
|
{
|
||
|
|
||
|
NMITEMACTIVATE *pNmItemActivate = (NMITEMACTIVATE *) lParam;
|
||
|
|
||
|
//
|
||
|
// see if the user has double clicked inside the list view
|
||
|
//
|
||
|
|
||
|
if( pNm->hdr.idFrom == IDC_LVW_COMPLIST )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Make sure they actually clicked on an item and not just
|
||
|
// empty space
|
||
|
//
|
||
|
|
||
|
if( pNmItemActivate->iItem != -1 )
|
||
|
{
|
||
|
PropertiesHandler( hwnd );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
case LVN_ITEMCHANGED:
|
||
|
|
||
|
// test to see if a new item in the list has been selected
|
||
|
if( pNm->uNewState == SELECTED )
|
||
|
{
|
||
|
|
||
|
LVITEM lvI;
|
||
|
NETWORK_COMPONENT* currentEntry;
|
||
|
|
||
|
if( ! GetSelectedItemFromListView( hwnd,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
&lvI ) )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
currentEntry = (NETWORK_COMPONENT *)lvI.lParam;
|
||
|
|
||
|
iCurrentSelection = lvI.iItem;
|
||
|
|
||
|
SetDescription( hwnd, lvI.iItem );
|
||
|
|
||
|
// enable or disable the properties button based on their
|
||
|
// selection in the list view
|
||
|
hPropertiesButton = GetDlgItem( hwnd, IDC_PSH_PROPERTIES );
|
||
|
|
||
|
if( currentEntry->bHasPropertiesTab )
|
||
|
{
|
||
|
EnableWindow( hPropertiesButton, TRUE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
EnableWindow( hPropertiesButton, FALSE );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnLANWizNext
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnLANWizNext( IN HWND hwnd )
|
||
|
{
|
||
|
if ( IsDlgButtonChecked(hwnd, IDC_CUSTOMNET) == BST_CHECKED )
|
||
|
NetSettings.iNetworkingMethod = CUSTOM_NETWORKING;
|
||
|
else
|
||
|
NetSettings.iNetworkingMethod = TYPICAL_NETWORKING;
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: EnableWindows
|
||
|
//
|
||
|
// Purpose: Enable/Disable windows based on the current selection
|
||
|
//
|
||
|
//
|
||
|
// Arguments: handle to the main window
|
||
|
//
|
||
|
// Returns: none
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
EnableControls( IN HWND hwnd )
|
||
|
{
|
||
|
BOOL fEnable = ( IsDlgButtonChecked(hwnd, IDC_CUSTOMNET) == BST_CHECKED );
|
||
|
|
||
|
EnableWindow(GetDlgItem(hwnd, IDC_LVW_COMPLIST), fEnable);
|
||
|
EnableWindow(GetDlgItem(hwnd, IDC_PSH_ADD), fEnable);
|
||
|
EnableWindow(GetDlgItem(hwnd, IDC_PSH_REMOVE), fEnable);
|
||
|
EnableWindow(GetDlgItem(hwnd, IDC_PSH_PROPERTIES), fEnable);
|
||
|
EnableWindow(GetDlgItem(hwnd, IDC_TXT_COMPDESC), fEnable);
|
||
|
EnableWindow(GetDlgItem(hwnd, IDC_DESCRIPTION), fEnable);
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnLANWizSetActive
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnLANWizSetActive( IN HWND hwnd )
|
||
|
{
|
||
|
|
||
|
UpdateListView( hwnd );
|
||
|
|
||
|
//
|
||
|
// set the selection in the list view to the first item
|
||
|
//
|
||
|
SetListViewSelection( hwnd, IDC_LVW_COMPLIST, 0 );
|
||
|
|
||
|
//
|
||
|
// set the description because it might have changed with the new item
|
||
|
// being added
|
||
|
//
|
||
|
SetDescription( hwnd, 0 );
|
||
|
|
||
|
// Check to proper default button
|
||
|
//
|
||
|
if ( NetSettings.iNetworkingMethod == CUSTOM_NETWORKING )
|
||
|
CheckRadioButton( hwnd, IDC_TYPICALNET, IDC_CUSTOMNET, IDC_CUSTOMNET );
|
||
|
else
|
||
|
CheckRadioButton( hwnd, IDC_TYPICALNET, IDC_CUSTOMNET, IDC_TYPICALNET );
|
||
|
|
||
|
// Enable the controls
|
||
|
//
|
||
|
EnableControls(hwnd);
|
||
|
|
||
|
WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: ListViewCompareFunc
|
||
|
//
|
||
|
// Purpose: sorts the list view by component type first
|
||
|
// (Client < Service < Protocol) and within each component type,
|
||
|
// sorts alphabetically
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
INT CALLBACK
|
||
|
ListViewCompareFunc( LPARAM lParam1,
|
||
|
LPARAM lParam2,
|
||
|
LPARAM lParamSort ) {
|
||
|
|
||
|
NETWORK_COMPONENT *pEntry1 = (NETWORK_COMPONENT *)lParam1;
|
||
|
NETWORK_COMPONENT *pEntry2 = (NETWORK_COMPONENT *)lParam2;
|
||
|
|
||
|
//
|
||
|
// sort by ComponentType first, and then alphabetically
|
||
|
//
|
||
|
if( pEntry1->ComponentType < pEntry2->ComponentType ) {
|
||
|
|
||
|
return(-1);
|
||
|
|
||
|
}
|
||
|
else if( pEntry1->ComponentType > pEntry2->ComponentType ) {
|
||
|
|
||
|
return(1);
|
||
|
|
||
|
}
|
||
|
// Component Types are equal so sort alphabetically
|
||
|
else {
|
||
|
|
||
|
return lstrcmpi( pEntry1->StrComponentName, pEntry2->StrComponentName ) ;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnLANWizAdd
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: standard Win32 dialog proc arguments, passed through from the
|
||
|
// Dialog proc
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnLANWizAdd( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam ) {
|
||
|
|
||
|
if ( HIWORD( wParam ) == BN_CLICKED )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// pop-up the new dialog box and if they actual add
|
||
|
// an item make sure the Uninstall button is enabled
|
||
|
//
|
||
|
|
||
|
if( DialogBox( FixedGlobals.hInstance,
|
||
|
(LPCTSTR) IDD_LAN_COMPONENT_ADD,
|
||
|
hwnd,
|
||
|
AddDeviceDlgProc) )
|
||
|
{
|
||
|
|
||
|
HWND hUninstallButton = GetDlgItem( hwnd, IDC_PSH_REMOVE );
|
||
|
|
||
|
EnableWindow( hUninstallButton, TRUE );
|
||
|
|
||
|
UpdateListView( hwnd );
|
||
|
|
||
|
// set the selection in the list view
|
||
|
// to the first item
|
||
|
SetListViewSelection( hwnd, IDC_LVW_COMPLIST, 0 );
|
||
|
|
||
|
// set the description because it might have
|
||
|
// changed with the new item being added
|
||
|
SetDescription( hwnd, 0 );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnLANWizRemove
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: standard Win32 dialog proc arguments, passed through from the
|
||
|
// Dialog proc
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnLANWizRemove( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam ) {
|
||
|
|
||
|
INT_PTR iListViewCount;
|
||
|
|
||
|
if ( HIWORD( wParam ) == BN_CLICKED ) {
|
||
|
//
|
||
|
// remove the currently selected item from the list view
|
||
|
//
|
||
|
LVITEM lvI;
|
||
|
NETWORK_COMPONENT* pNode;
|
||
|
|
||
|
if( GetSelectedItemFromListView( hwnd,
|
||
|
IDC_LVW_COMPLIST, &lvI ) ) {
|
||
|
|
||
|
pNode = (NETWORK_COMPONENT *)lvI.lParam;
|
||
|
|
||
|
pNode->bInstalled = FALSE;
|
||
|
|
||
|
//
|
||
|
// Update the list view to show the removed
|
||
|
// component is gone
|
||
|
//
|
||
|
UpdateListView( hwnd );
|
||
|
|
||
|
SetListViewSelection( hwnd, IDC_LVW_COMPLIST, 1 );
|
||
|
|
||
|
SetDescription( hwnd, 0 );
|
||
|
|
||
|
}
|
||
|
|
||
|
iListViewCount = SendDlgItemMessage( hwnd,
|
||
|
IDC_LVW_COMPLIST,
|
||
|
LVM_GETITEMCOUNT,
|
||
|
(WPARAM) 0,
|
||
|
(LPARAM) 0 );
|
||
|
|
||
|
// if there are no more items in the list view then grey out
|
||
|
// the uninstall and properties button
|
||
|
if( iListViewCount == 0 ) {
|
||
|
|
||
|
HWND hUninstallButton = GetDlgItem( hwnd, IDC_PSH_REMOVE );
|
||
|
HWND hPropertiesButton = GetDlgItem( hwnd, IDC_PSH_PROPERTIES );
|
||
|
|
||
|
EnableWindow( hUninstallButton, FALSE );
|
||
|
EnableWindow( hPropertiesButton, FALSE );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnLANWizProperties
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: standard Win32 dialog proc arguments, passed through from the
|
||
|
// Dialog proc
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnLANWizProperties( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam ) {
|
||
|
|
||
|
if ( HIWORD( wParam ) == BN_CLICKED ) {
|
||
|
|
||
|
PropertiesHandler( hwnd );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnLANWizInitDialog
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// Arguments: IN HWND hwnd - handle to the dialog box
|
||
|
//
|
||
|
// Returns: VOID
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
VOID
|
||
|
OnLANWizInitDialog( IN HWND hwnd ) {
|
||
|
|
||
|
INITCOMMONCONTROLSEX CommonControlsStruct;
|
||
|
|
||
|
CommonControlsStruct.dwICC = ICC_INTERNET_CLASSES | ICC_LISTVIEW_CLASSES;
|
||
|
CommonControlsStruct.dwSize = sizeof( INITCOMMONCONTROLSEX );
|
||
|
|
||
|
// Ensure that the common control DLL has loaded the window classes
|
||
|
// for the IP control and the ListView control
|
||
|
InitCommonControlsEx( &CommonControlsStruct );
|
||
|
|
||
|
//
|
||
|
// Load strings from resources
|
||
|
//
|
||
|
|
||
|
StrNetworkCardNumber = MyLoadString( IDS_NETADAPTERNUMBER );
|
||
|
|
||
|
InitListView( hwnd, FixedGlobals.hInstance );
|
||
|
|
||
|
// Set the default description
|
||
|
SetDescription( hwnd, 0 );
|
||
|
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: DlgLANWizardPage
|
||
|
//
|
||
|
// Purpose: Dialog procedure for the LAN Wizard page. (The one that shows
|
||
|
// what Client, Services, and Protocols are to be installed)
|
||
|
//
|
||
|
// Arguments: standard Win32 dialog proc arguments
|
||
|
//
|
||
|
// Returns: standard Win32 dialog proc return value
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
INT_PTR CALLBACK DlgLANWizardPage( IN HWND hwnd,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam )
|
||
|
{
|
||
|
|
||
|
BOOL bStatus = TRUE;
|
||
|
|
||
|
switch( uMsg ) {
|
||
|
|
||
|
case WM_INITDIALOG: {
|
||
|
|
||
|
OnLANWizInitDialog( hwnd );
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case WM_COMMAND: {
|
||
|
|
||
|
switch ( LOWORD(wParam) ) {
|
||
|
case IDC_TYPICALNET:
|
||
|
case IDC_CUSTOMNET:
|
||
|
EnableControls(hwnd);
|
||
|
break;
|
||
|
|
||
|
case IDC_PSH_ADD:
|
||
|
|
||
|
OnLANWizAdd( hwnd, uMsg, wParam, lParam );
|
||
|
|
||
|
break;
|
||
|
|
||
|
case IDC_PSH_REMOVE:
|
||
|
|
||
|
OnLANWizRemove( hwnd, uMsg, wParam, lParam );
|
||
|
|
||
|
break;
|
||
|
|
||
|
case IDC_PSH_PROPERTIES:
|
||
|
|
||
|
OnLANWizProperties( hwnd, uMsg, wParam, lParam );
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
break; // WM_COMMAND
|
||
|
|
||
|
}
|
||
|
|
||
|
case WM_NOTIFY: {
|
||
|
|
||
|
LPNMHDR pnmh = (LPNMHDR)lParam;
|
||
|
HWND hwndComponentDescription;
|
||
|
|
||
|
if( wParam == IDC_LVW_COMPLIST ) {
|
||
|
|
||
|
ListViewHandler( hwnd, uMsg, wParam, lParam );
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
switch( pnmh->code ) {
|
||
|
|
||
|
case PSN_QUERYCANCEL:
|
||
|
|
||
|
WIZ_CANCEL(hwnd);
|
||
|
|
||
|
break;
|
||
|
|
||
|
case PSN_SETACTIVE:
|
||
|
|
||
|
g_App.dwCurrentHelp = IDH_NET_COMPS;
|
||
|
|
||
|
OnLANWizSetActive( hwnd );
|
||
|
|
||
|
break;
|
||
|
|
||
|
case PSN_WIZBACK:
|
||
|
break;
|
||
|
case PSN_WIZNEXT:
|
||
|
OnLANWizNext( hwnd );
|
||
|
bStatus = FALSE;
|
||
|
break;
|
||
|
|
||
|
case PSN_HELP:
|
||
|
WIZ_HELP();
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
default: {
|
||
|
|
||
|
bStatus = FALSE;
|
||
|
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return( bStatus );
|
||
|
|
||
|
}
|
||
|
|
||
|
|