//+-------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1994 - 1996. // // File: wizsel.cxx // // Contents: Task schedule credentials selection property page implementation. // // Classes: CCredentialsPage // // History: 05-22-1998 SusiA // //--------------------------------------------------------------------------- #include "precomp.h" // temporariy define new mstask flag in case hasn't // propogated to sdk\inc //for CS help #ifdef _CREDENTIALS extern TCHAR szSyncMgrHelp[]; extern ULONG g_aContextHelpIds[]; extern DWORD g_dwPlatformId; CCredentialsPage *g_pCredentialsPage = NULL; //+------------------------------------------------------------------------------- // FUNCTION: SchedWizardCredentialsDlgProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Callback dialog procedure for the property page // // PARAMETERS: // hDlg - Dialog box window handle // uMessage - current message // wParam - depends on message // lParam - depends on message // // RETURN VALUE: // // Depends on message. In general, return TRUE if we process it. // // COMMENTS: // //-------------------------------------------------------------------------------- BOOL CALLBACK SchedWizardCredentialsDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam) { WORD wNotifyCode = HIWORD(wParam); // notification code switch (uMessage) { case WM_INITDIALOG: if (g_pCredentialsPage) g_pCredentialsPage->Initialize(hDlg); InitPage(hDlg,lParam); break; case WM_HELP: { LPHELPINFO lphi = (LPHELPINFO)lParam; if (lphi->iContextType == HELPINFO_WINDOW) { WinHelp ( (HWND) lphi->hItemHandle, szSyncMgrHelp, HELP_WM_HELP, (ULONG_PTR) g_aContextHelpIds); } return TRUE; } case WM_CONTEXTMENU: { WinHelp ((HWND)wParam, szSyncMgrHelp, HELP_CONTEXTMENU, (ULONG_PTR)g_aContextHelpIds); return TRUE; } case WM_PAINT: WmPaint(hDlg, uMessage, wParam, lParam); break; case WM_PALETTECHANGED: WmPaletteChanged(hDlg, wParam); break; case WM_QUERYNEWPALETTE: return( WmQueryNewPalette(hDlg) ); break; case WM_ACTIVATE: return( WmActivate(hDlg, wParam, lParam) ); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_USERNAME: case IDC_PASSWORD: case IDC_CONFIRMPASSWORD: { if (wNotifyCode == EN_CHANGE) { PropSheet_Changed(GetParent(hDlg), hDlg); g_pCredentialsPage->SetDirty(); } } break; case IDC_RUNLOGGEDON: { if (wNotifyCode == BN_CLICKED) { PropSheet_Changed(GetParent(hDlg), hDlg); g_pCredentialsPage->SetDirty(); g_pCredentialsPage->SetEnabled(FALSE); } } break; case IDC_RUNALWAYS: { if (wNotifyCode == BN_CLICKED) { PropSheet_Changed(GetParent(hDlg), hDlg); g_pCredentialsPage->SetDirty(); g_pCredentialsPage->SetEnabled(TRUE); } } break; default: break; } break; default: return FALSE; } return TRUE; } //+-------------------------------------------------------------------------- // // Member: CCredentialsPage::CCredentialsPage // // Synopsis: ctor // // [phPSP] - filled with prop page handle // // History: 11-21-1997 SusiA // //--------------------------------------------------------------------------- CCredentialsPage::CCredentialsPage( HINSTANCE hinst, BOOL *pfSaved, ISyncSchedule *pISyncSched, HPROPSHEETPAGE *phPSP) { ZeroMemory(&m_psp, sizeof(PROPSHEETPAGE)); m_psp.dwSize = sizeof (PROPSHEETPAGE); m_psp.dwFlags = PSP_DEFAULT; m_psp.hInstance = hinst; m_psp.pszTemplate = MAKEINTRESOURCE(IDD_SCHEDPAGE_CREDENTIALS); m_psp.pszIcon = NULL; m_psp.pfnDlgProc = (DLGPROC) SchedWizardCredentialsDlgProc; m_psp.lParam = 0; g_pCredentialsPage = this; m_pISyncSched = pISyncSched; m_pISyncSched->AddRef(); m_pfSaved = pfSaved; *m_pfSaved = FALSE; m_fTaskAccountChange = FALSE; #ifdef WIZARD97 m_psp.dwFlags |= PSP_HIDEHEADER; #endif // WIZARD97 *phPSP = CreatePropertySheetPage(&m_psp); } //+-------------------------------------------------------------------------- // // Member: CCredentialsPage::Initialize(HWND hwnd) // // Synopsis: initialize the credentials page // // History: 05-22-1998 SusiA // //--------------------------------------------------------------------------- BOOL CCredentialsPage::Initialize(HWND hwnd) { m_hwnd = hwnd; ShowUserName(); //Set the default IDC_ONLY_WHEN_LOGGED_ON check state. ITask *pITask; m_pISyncSched->GetITask(&pITask); DWORD dwFlags; pITask->GetFlags(&dwFlags); BOOL fOnlyWhenLoggedOn = dwFlags & TASK_FLAG_RUN_ONLY_IF_LOGGED_ON; Button_SetCheck(GetDlgItem(m_hwnd,IDC_RUNLOGGEDON), fOnlyWhenLoggedOn); Button_SetCheck(GetDlgItem(m_hwnd,IDC_RUNALWAYS), !fOnlyWhenLoggedOn); Edit_LimitText(GetDlgItem(m_hwnd, IDC_PASSWORD), PWLEN); Edit_LimitText(GetDlgItem(m_hwnd, IDC_CONFIRMPASSWORD), PWLEN); Edit_LimitText(GetDlgItem(m_hwnd, IDC_USERNAME), MAX_DOMANDANDMACHINENAMESIZE -1); SetEnabled(!fOnlyWhenLoggedOn); pITask->Release(); ShowWindow(m_hwnd, /* nCmdShow */ SW_SHOWNORMAL ); UpdateWindow(m_hwnd); return TRUE; } //-------------------------------------------------------------------------------- // // FUNCTION: CCredentialsPage::SetDirty() // // PURPOSE: we have changed the account info // // COMMENTS: Only called frm prop sheet; not wizard // //-------------------------------------------------------------------------------- void CCredentialsPage::SetDirty() { m_fTaskAccountChange = TRUE; } //-------------------------------------------------------------------------------- // // FUNCTION: CSelectItemsPage::ShowUserName() // // PURPOSE: change the task's user name // // COMMENTS: Only called frm prop sheet; not wizard // //-------------------------------------------------------------------------------- BOOL CCredentialsPage::ShowUserName() { Assert(m_pISyncSched); WCHAR wszUserName[MAX_PATH + 1]; DWORD dwSize = MAX_PATH; HWND hwndEdit = GetDlgItem(m_hwnd, IDC_USERNAME); HRESULT hr = m_pISyncSched->GetAccountInformation(&dwSize, wszUserName); if (FAILED(hr)) { *wszUserName = L'\0'; } Edit_SetText(hwndEdit, wszUserName); // // Need to set m_fTaskAccountChange here since doing a Edit_SetText causes // a WM_COMMAND msg with EN_CHANGE to be called for edit boxes. // m_fTaskAccountChange = FALSE; return TRUE; } //-------------------------------------------------------------------------------- // // FUNCTION: CSelectItemsPage::CommitChanges() // // PURPOSE: Write all the current Schedule Settings to the registry // // COMMENTS: Implemented on main thread. // //-------------------------------------------------------------------------------- HRESULT CCredentialsPage::CommitChanges() { HRESULT hr = S_OK; BOOL fAccountChanged = TRUE; if (m_fTaskAccountChange) { BOOL fRunAlways = Button_GetCheck(GetDlgItem(m_hwnd,IDC_RUNALWAYS)); if (fRunAlways) { Assert(m_pISyncSched); WCHAR wcUserBuffMAX_DOMANDANDMACHINENAMESIZE]; WCHAR wcPassword[PWLEN + 1]; WCHAR wcConfirmPassword[PWLEN + 1]; GetDlgItemText(m_hwnd,IDC_USERNAME,wcUserBuff,MAX_DOMANDANDMACHINENAMESIZE); GetDlgItemText(m_hwnd,IDC_PASSWORD,wcPassword, PWLEN); GetDlgItemText(m_hwnd,IDC_CONFIRMPASSWORD,wcConfirmPassword, PWLEN); if (wcscmp(wcPassword, wcConfirmPassword) != 0) { // we return this to signal the controlling page not to // dismiss the dialog. return(ERROR_INVALID_PASSWORD); } ITask *pITask; if (FAILED(hr = m_pISyncSched->GetITask(&pITask))) { return hr; } if (FAILED (hr = m_pISyncSched->SetAccountInformation(wcUserBuff, wcPassword))) { AssertSz(0,"ISyncSched->SetAccountInformation failed"); return hr; } DWORD dwFlags; pITask->GetFlags(&dwFlags); if (FAILED(hr = pITask->SetFlags(dwFlags & (~TASK_FLAG_RUN_ONLY_IF_LOGGED_ON)))) { AssertSz(0,"ITask->SetFlags failed"); return hr; } pITask->Release(); } else { ITask *pITask; if (FAILED(hr = m_pISyncSched->GetITask(&pITask))) { return hr; } WCHAR wszDomainAndUser[MAX_DOMANDANDMACHINENAMESIZE]; GetDefaultDomainAndUserName(wszDomainAndUser,TEXT("\\"),MAX_DOMANDANDMACHINENAMESIZE); if (FAILED(hr = m_pISyncSched->SetAccountInformation(wszDomainAndUser, NULL))) { AssertSz(0,"ISyncSched->SetAccountInformation failed"); return hr; } DWORD dwFlags; pITask->GetFlags(&dwFlags); if (FAILED(hr = pITask->SetFlags(dwFlags | TASK_FLAG_RUN_ONLY_IF_LOGGED_ON))) { AssertSz(0,"ITask->SetFlags failed"); return hr; } pITask->Release(); } //Now save the schedule //NoteNote: optimize by moving the save from wizsel and cred to EditSyncSched hr = m_pISyncSched->Save(); if (hr == S_OK) { *m_pfSaved = TRUE; } } return hr; } //+------------------------------------------------------------------------------- // // FUNCTION: BOOL CSelectItemsPage::SetEnabled(BOOL fEnabled) // // PURPOSE: set the fields enabled according to the RB choice // // RETURN VALUE: return TRUE if we process it ok. // //+------------------------------------------------------------------------------- BOOL CCredentialsPage::SetEnabled(BOOL fEnabled) { EnableWindow(GetDlgItem(m_hwnd, IDC_USERNAME), fEnabled); EnableWindow(GetDlgItem(m_hwnd, IDC_PASSWORD), fEnabled); EnableWindow(GetDlgItem(m_hwnd, IDC_CONFIRMPASSWORD), fEnabled); EnableWindow(GetDlgItem(m_hwnd, IDC_RUNAS_TEXT), fEnabled); EnableWindow(GetDlgItem(m_hwnd, IDC_PASSWORD_TEXT), fEnabled); EnableWindow(GetDlgItem(m_hwnd, IDC_CONFIRMPASSWORD_TEXT), fEnabled); return TRUE; } #endif // #ifdef _CREDENTIALS