windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/net/service.c
2020-09-26 16:20:57 +08:00

246 lines
6.1 KiB
C

//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// service.c
//
// Description:
//
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
//----------------------------------------------------------------------------
//
// Function: InitSelectServiceListView
//
// Purpose:
//
//----------------------------------------------------------------------------
VOID
InitSelectServiceListView( HWND hDlg, HINSTANCE hInst )
{
LV_ITEM lvI; // list view item structure
HWND hServiceListView; // handle to list view window
NETWORK_COMPONENT *pNetComponent;
hServiceListView = GetDlgItem( hDlg, IDC_SELECT_SERVICE_LIST );
for( pNetComponent = NetSettings.NetComponentsList;
pNetComponent;
pNetComponent = pNetComponent->next )
{
if( pNetComponent->bInstalled == FALSE &&
pNetComponent->ComponentType == SERVICE )
{
//
// 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( hServiceListView,
(LPARAM) pNetComponent );
}
}
else
{
InsertEntryIntoListView( hServiceListView,
(LPARAM) pNetComponent );
}
}
}
SetListViewSelection( hDlg, IDC_SELECT_SERVICE_LIST, 0 );
}
//----------------------------------------------------------------------------
//
// Function: OnServiceOk
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog
//
// Returns: VOID
//
//----------------------------------------------------------------------------
static VOID
OnServiceOk( IN HWND hwnd )
{
LV_ITEM lvI;
// ISSUE-2002/02/28-stelo- if there is no item selected and the user clicks OK the dialog should NOT close
// see if there is an item selected
if(GetSelectedItemFromListView(hwnd, IDC_SELECT_SERVICE_LIST, &lvI)) {
NETWORK_COMPONENT *pEntry = (NETWORK_COMPONENT *)lvI.lParam;
pEntry->bInstalled = TRUE;
// return a 1 to show an item was actually added
EndDialog(hwnd, 1);
}
else {
// return a 0 to show no items were added because the list is empty
EndDialog(hwnd, 0);
}
}
//----------------------------------------------------------------------------
//
// Function: NotifyHandler
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog
// IN WPARAM wParam -
// IN LPARAM lParam -
//
// Returns: BOOL - whether the message was handled or not
//
//----------------------------------------------------------------------------
static BOOL
NotifyHandler( IN HWND hwnd, IN WPARAM wParam, IN LPARAM lParam )
{
LV_DISPINFO *pLvdi = (LV_DISPINFO *)lParam;
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
NETWORK_COMPONENT *pListViewString = (NETWORK_COMPONENT *)(pLvdi->item.lParam);
BOOL bStatus = TRUE;
if( wParam == IDC_SELECT_SERVICE_LIST )
{
switch( pLvdi->hdr.code )
{
case LVN_GETDISPINFO:
pLvdi->item.pszText = pListViewString->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_SELECT_SERVICE_LIST )
{
//
// Make sure they actually clicked on an item and not just
// empty space
//
if( pNmItemActivate->iItem != -1 )
{
OnServiceOk( hwnd );
}
}
break;
}
default:
bStatus = FALSE;
break;
}
}
return( bStatus );
}
//----------------------------------------------------------------------------
//
// Function: SelectNetworkServiceDlgProc
//
// Purpose:
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK SelectNetworkServiceDlgProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
BOOL bStatus = TRUE;
switch (uMsg) {
case WM_DESTROY:
// do nothing
break;
case WM_INITDIALOG:
InitSelectServiceListView(hwnd, FixedGlobals.hInstance);
break;
case WM_COMMAND:
{
int nButtonId;
switch ( nButtonId = LOWORD(wParam) ) {
case IDOK:
OnServiceOk( hwnd );
break;
case IDCANCEL:
// return a 0 to show no items were added
EndDialog(hwnd, 0);
break;
case IDC_HAVEDISK:
// ISSUE-2002/02/28-stelo- this needs to be implemented
AssertMsg(FALSE,
"This button has not been implemented yet.");
break;
default:
bStatus = FALSE;
break;
}
break;
}
case WM_NOTIFY:
NotifyHandler( hwnd, wParam, lParam );
break;
default:
bStatus = FALSE;
break;
}
return bStatus;
}