//+-------------------------------------------------------------------------- // // 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()); StringCchCopy(_tszJobObjectFullPath, MAX_PATH +1, GetTaskPath()); lstrcpyn(&_tszJobObjectFullPath[cchPath], GetTaskName(), ARRAYLEN(_tszJobObjectFullPath) - (cchPath + ARRAY_LEN(TSZ_DOTJOB) - 1)); StringCchCat(_tszJobObjectFullPath, MAX_PATH +1, 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, MAX_PATH)) { 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) { lNextPage = IDD_PASSWORD; break; } lNextPage = IDD_DAILY + (_idSelectedTrigger - seltrig_first_rb); } while (0); SetWindowLongPtr(Hwnd(), DWLP_MSGRESULT, lNextPage); return -1; }