|
|
//+--------------------------------------------------------------------------
//
// 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
|