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

333 lines
8.3 KiB
C

//----------------------------------------------------------------------------
//
// Copyright (c) 1997-1999 Microsoft Corporation
// All rights reserved.
//
// File Name:
// newedit.c
//
// Description:
// This file has the dialog proc for the New Or Edit Script page.
//
//----------------------------------------------------------------------------
#include "pch.h"
#include "resource.h"
//----------------------------------------------------------------------------
//
// Function: GreyUnGreyNewEdit
//
// Purpose: Greys/ungreys controls on this page.
//
//----------------------------------------------------------------------------
VOID GreyUnGreyNewEdit(HWND hwnd)
{
BOOL bUnGrey = IsDlgButtonChecked(hwnd, IDC_EDITSCRIPT);
EnableWindow(GetDlgItem(hwnd, IDT_SCRIPTNAME), bUnGrey);
EnableWindow(GetDlgItem(hwnd, IDC_BROWSE), bUnGrey);
EnableWindow(GetDlgItem(hwnd, IDC_GREYTEXT), bUnGrey);
}
//----------------------------------------------------------------------------
//
// Function: OnEditOrNewInitDialog
//
// Purpose:
//
// Arguments: IN HWND hwnd - handle to the dialog box
//
// Returns: VOID
//
//----------------------------------------------------------------------------
VOID
OnEditOrNewInitDialog( IN HWND hwnd ) {
//
// If they specifed an answer file on the command line, then pre-fill
// this page with it
//
if( lstrcmp( FixedGlobals.ScriptName, _T("") ) != 0 ) {
FixedGlobals.iLoadType = LOAD_FROM_ANSWER_FILE;
}
}
//----------------------------------------------------------------------------
//
// Function: OnSetActiveNewOrEdit
//
// Purpose: Called at SETACTIVE time. Fill in the controls.
//
//----------------------------------------------------------------------------
VOID OnSetActiveNewOrEdit(HWND hwnd)
{
int nButtonId = IDC_NEWSCRIPT;
//
// Map the current load type to a radio button
//
switch ( FixedGlobals.iLoadType ) {
case LOAD_UNDEFINED:
case LOAD_NEWSCRIPT_DEFAULTS:
nButtonId = IDC_NEWSCRIPT;
break;
case LOAD_FROM_ANSWER_FILE:
nButtonId = IDC_EDITSCRIPT;
SetWindowText( GetDlgItem( hwnd, IDT_SCRIPTNAME ),
FixedGlobals.ScriptName );
break;
default:
AssertMsg(FALSE, "Bad case OnSetActiveNewEdit");
break;
}
CheckRadioButton(hwnd,
IDC_NEWSCRIPT,
IDC_EDITSCRIPT,
nButtonId);
GreyUnGreyNewEdit(hwnd);
PropSheet_SetWizButtons(GetParent(hwnd), PSWIZB_BACK | PSWIZB_NEXT);
}
//----------------------------------------------------------------------------
//
// Function: OnRadioButtonNewOrEdit
//
// Purpose: Called when a radio button is pushed. Update
// FixedGlobals.bEditScript & Grey/ungrey controls.
//
//----------------------------------------------------------------------------
VOID OnRadioButtonNewOrEdit(HWND hwnd, int nButtonId)
{
CheckRadioButton(hwnd,
IDC_NEWSCRIPT,
IDC_EDITSCRIPT,
nButtonId);
GreyUnGreyNewEdit(hwnd);
}
//----------------------------------------------------------------------------
//
// Function: OnBrowseNewOrEdit
//
// Purpose: Called when the browse button is pushed.
//
//----------------------------------------------------------------------------
VOID OnBrowseNewOrEdit(HWND hwnd)
{
GetAnswerFileName(hwnd, FixedGlobals.ScriptName, FALSE);
SendDlgItemMessage(hwnd,
IDT_SCRIPTNAME,
WM_SETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) FixedGlobals.ScriptName);
}
//----------------------------------------------------------------------------
//
// Function: OnWizNextNewOrEdit
//
// Purpose: Called when the Next button is pushed. Retrieve the settings
// of the controls and validate.
//
//----------------------------------------------------------------------------
BOOL OnWizNextNewOrEdit(HWND hwnd)
{
BOOL bNewScript;
BOOL bReturn = TRUE;
LOAD_TYPES NewLoadType;
//
// Figure out where the user wants to load answers from
//
if ( IsDlgButtonChecked(hwnd, IDC_NEWSCRIPT) )
{
NewLoadType = LOAD_NEWSCRIPT_DEFAULTS;
bNewScript = TRUE;
}
else
{
NewLoadType = LOAD_FROM_ANSWER_FILE;
bNewScript = FALSE;
}
//
// If we're loading from an answer file, retrieve the filename.
//
if ( NewLoadType == LOAD_FROM_ANSWER_FILE ) {
SendDlgItemMessage(hwnd,
IDT_SCRIPTNAME,
WM_GETTEXT,
(WPARAM) MAX_PATH,
(LPARAM) FixedGlobals.ScriptName);
MyGetFullPath(FixedGlobals.ScriptName);
if ( FixedGlobals.ScriptName[0] == _T('\0') ) {
ReportErrorId(hwnd, MSGTYPE_ERR, IDS_ERR_ENTER_FILENAME);
bReturn = FALSE;
}
if( bReturn )
{
INT nStrLen;
TCHAR *pFileExtension;
lstrcpyn( FixedGlobals.UdfFileName, FixedGlobals.ScriptName, AS(FixedGlobals.UdfFileName) );
nStrLen = lstrlen( FixedGlobals.UdfFileName );
pFileExtension = FixedGlobals.UdfFileName + ( nStrLen - 3 );
lstrcpyn( pFileExtension, _T("udf"), AS(FixedGlobals.UdfFileName)-nStrLen+3);
}
}
//
// Load the answers
//
if ( bReturn ) {
if ( ! LoadAllAnswers(hwnd, NewLoadType) )
{
bReturn = FALSE;
}
}
FixedGlobals.iLoadType = NewLoadType;
WizGlobals.bNewScript = bNewScript;
return ( bReturn );
}
//----------------------------------------------------------------------------
//
// Function: DlgEditOrNewPage
//
// Purpose: Dialog procedure for the edit or new script page.
//
//----------------------------------------------------------------------------
INT_PTR CALLBACK DlgEditOrNewPage(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
BOOL bStatus = TRUE;
switch(uMsg) {
case WM_INITDIALOG:
OnEditOrNewInitDialog( hwnd );
break;
case WM_COMMAND:
{
int nButtonId=LOWORD(wParam);
switch ( nButtonId ) {
case IDC_NEWSCRIPT:
case IDC_EDITSCRIPT:
if ( HIWORD(wParam) == BN_CLICKED )
OnRadioButtonNewOrEdit(hwnd, nButtonId);
break;
case IDC_BROWSE:
if ( HIWORD(wParam) == BN_CLICKED )
OnBrowseNewOrEdit(hwnd);
break;
default:
bStatus = FALSE;
break;
}
}
break;
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR)lParam;
switch( pnmh->code ) {
case PSN_QUERYCANCEL:
WIZ_CANCEL(hwnd);
break;
case PSN_SETACTIVE:
g_App.dwCurrentHelp = IDH_ANSW_FILE;
// Set this flag so we don't get a prompt when user wants to cancel
//
SET_FLAG(OPK_EXIT, TRUE);
SET_FLAG(OPK_CREATED, FALSE);
WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT);
OnSetActiveNewOrEdit(hwnd);
break;
case PSN_WIZBACK:
bStatus = FALSE;
break;
case PSN_WIZNEXT:
if ( !OnWizNextNewOrEdit(hwnd) )
WIZ_FAIL(hwnd);
else
bStatus = FALSE;
break;
case PSN_HELP:
WIZ_HELP();
break;
default:
bStatus = FALSE;
break;
}
}
break;
default:
bStatus = FALSE;
break;
}
return bStatus;
}