windows-nt/Source/XPSP1/NT/admin/services/sched/wizard/seltrig.cxx
2020-09-26 16:20:57 +08:00

329 lines
8.2 KiB
C++

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1996.
//
// File: selprog.cxx
//
// Contents: Task wizard trigger selection property page implementation.
//
// Classes: CSelectTriggerPage
//
// History: 4-28-1997 DavidMun Created
//
//---------------------------------------------------------------------------
#include "..\pch\headers.hxx"
#pragma hdrstop
#include "myheaders.hxx"
//
// Constants
//
// ILLEGAL_FILENAME_CHARS - characters to reject in task name edit control
//
#define ILLEGAL_FILENAME_CHARS TEXT("<>:/\\|")
#define ARRAY_LEN(a) (sizeof(a)/sizeof(a[0]))
//+--------------------------------------------------------------------------
//
// Member: CSelectTriggerPage::CSelectTriggerPage
//
// Synopsis: ctor
//
// Arguments: [ptszFolderPath] - full path to tasks folder with dummy
// filename appended
// [phPSP] - filled with prop page handle
//
// History: 4-28-1997 DavidMun Created
//
//---------------------------------------------------------------------------
CSelectTriggerPage::CSelectTriggerPage(
CTaskWizard *pParent,
LPTSTR ptszFolderPath,
HPROPSHEETPAGE *phPSP):
_pParent(pParent),
CWizPage(MAKEINTRESOURCE(IDD_SELECT_TRIGGER), ptszFolderPath)
{
TRACE_CONSTRUCTOR(CSelectTriggerPage);
DEBUG_ASSERT(pParent);
_tszDisplayName[0] = TCHAR('\0');
_tszJobObjectFullPath[0] = TCHAR('\0');
_idSelectedTrigger = 0;
_CreatePage(IDS_SELTRIG_HDR1, IDS_SELTRIG_HDR2, phPSP);
}
//+--------------------------------------------------------------------------
//
// Member: CSelectTriggerPage::~CSelectTriggerPage
//
// Synopsis: dtor
//
// History: 4-28-1997 DavidMun Created
//
//---------------------------------------------------------------------------
CSelectTriggerPage::~CSelectTriggerPage()
{
TRACE_DESTRUCTOR(CSelectTriggerPage);
}
//===========================================================================
//
// CPropPage overrides
//
//===========================================================================
LRESULT
CSelectTriggerPage::_OnCommand(
INT id,
HWND hwndCtl,
UINT codeNotify)
{
TRACE_METHOD(CSelectTriggerPage, _OnCommand);
LRESULT lr = 1;
if (codeNotify == BN_CLICKED &&
id >= seltrig_first_rb && id <= seltrig_last_rb)
{
lr = 0;
if (!_idSelectedTrigger && *_tszDisplayName)
{
_SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
}
_idSelectedTrigger = id;
}
else if (codeNotify == EN_UPDATE)
{
Edit_GetText(_hCtrl(seltrig_taskname_edit),
_tszDisplayName,
ARRAYLEN(_tszDisplayName));
StripLeadTrailSpace(_tszDisplayName);
if (!*_tszDisplayName)
{
_SetWizButtons(PSWIZB_BACK);
}
else if (_idSelectedTrigger)
{
_SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
}
}
return lr;
}
//===========================================================================
//
// CWizPage overrides
//
//===========================================================================
//+--------------------------------------------------------------------------
//
// Member: CSelectTriggerPage::_OnInitDialog
//
// Synopsis: Initialize the controls on this page, only called once.
//
// Arguments: [lParam] - LPPROPSHEETPAGE
//
// Returns: TRUE (let windows set focus)
//
// History: 5-16-1997 DavidMun Created
//
//---------------------------------------------------------------------------
LRESULT
CSelectTriggerPage::_OnInitDialog(
LPARAM lParam)
{
TRACE_METHOD(CSelectTriggerPage, _OnInitDialog);
HWND hwndEdit = _hCtrl(seltrig_taskname_edit);
Edit_LimitText(hwndEdit,
ARRAYLEN(_tszDisplayName)
- 1 // null terminator
- lstrlen(GetTaskPath()) // path to tasks folder
- 1 // backslash
- (ARRAY_LEN(TSZ_DOTJOB) - 1)); // extension
return TRUE;
}
//+--------------------------------------------------------------------------
//
// Member: CSelectTriggerPage::_OnPSNSetActive
//
// Synopsis: Init wizard buttons and other controls, called whenever
// this page becomes the current page.
//
// Arguments: [lParam] - unused
//
// Returns: TRUE
//
// History: 5-16-1997 DavidMun Created
//
//---------------------------------------------------------------------------
LRESULT
CSelectTriggerPage::_OnPSNSetActive(
LPARAM lParam)
{
if (_idSelectedTrigger)
{
_SetWizButtons(PSWIZB_BACK | PSWIZB_NEXT);
}
else
{
_SetWizButtons(PSWIZB_BACK);
}
if (!*_tszDisplayName)
{
CSelectProgramPage *pSelProg = GetSelectProgramPage(_pParent);
pSelProg->GetDefaultDisplayName(_tszDisplayName,
ARRAYLEN(_tszDisplayName));
Edit_SetText(_hCtrl(seltrig_taskname_edit), _tszDisplayName);
}
return CPropPage::_OnPSNSetActive(lParam);
}
//+--------------------------------------------------------------------------
//
// Member: CSelectTriggerPage::_OnWizBack
//
// Synopsis: Handle the user's selection of the 'Back' button.
//
// History: 5-16-1997 DavidMun Created
//
//---------------------------------------------------------------------------
LRESULT
CSelectTriggerPage::_OnWizBack()
{
*_tszDisplayName = TEXT('\0');
return 0;
}
//+--------------------------------------------------------------------------
//
// Member: CSelectTriggerPage::_OnWizNext
//
// Synopsis: Handle the user's selection of the 'Next' button
//
// Returns: -1 (DWLP_MSGRESULT contains next page number)
//
// History: 5-16-1997 DavidMun Created
//
//---------------------------------------------------------------------------
LRESULT
CSelectTriggerPage::_OnWizNext()
{
TRACE_METHOD(CSelectTriggerPage, _OnWizNext);
LONG lNextPage;
do
{
//
// Check the filename for invalid characters
//
if (_tcspbrk(_tszDisplayName, ILLEGAL_FILENAME_CHARS))
{
SchedUIErrorDialog(Hwnd(), IDS_BAD_FILENAME, (LPTSTR) NULL);
lNextPage = IDD_SELECT_TRIGGER; // stay on this page
break;
}
//
// Build the full pathname to the .job object
//
ULONG cchPath = lstrlen(GetTaskPath());
lstrcpy(_tszJobObjectFullPath, GetTaskPath());
lstrcpyn(&_tszJobObjectFullPath[cchPath],
GetTaskName(),
ARRAYLEN(_tszJobObjectFullPath) - (cchPath + ARRAY_LEN(TSZ_DOTJOB) - 1));
lstrcat(_tszJobObjectFullPath, TSZ_DOTJOB);
DeleteQuotes(_tszJobObjectFullPath);
//
// If the name collides with an existing task, get the user's
// confirmation before proceeding to next page
//
if (FileExists(_tszJobObjectFullPath))
{
INT iAnswer = SchedUIMessageDialog(Hwnd(),
IDS_TASK_ALREADY_EXISTS,
MB_APPLMODAL |
MB_SETFOREGROUND |
MB_ICONQUESTION |
MB_YESNO,
_tszDisplayName);
if (iAnswer != IDYES)
{
lNextPage = IDD_SELECT_TRIGGER;
break;
}
}
//
// If the selected trigger type doesn't have its own page,
// go directly to the end
//
if (_idSelectedTrigger == seltrig_startup_rb ||
_idSelectedTrigger == seltrig_logon_rb)
{
#if defined(_CHICAGO_)
lNextPage = IDD_COMPLETION;
#else
lNextPage = IDD_PASSWORD;
#endif // defined(_CHICAGO_)
break;
}
lNextPage = IDD_DAILY + (_idSelectedTrigger - seltrig_first_rb);
} while (0);
SetWindowLongPtr(Hwnd(), DWLP_MSGRESULT, lNextPage);
return -1;
}