windows-nt/Source/XPSP1/NT/com/mobile/syncmgr/dll/daily.cxx
2020-09-26 16:20:57 +08:00

325 lines
7.7 KiB
C++

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1996.
//
// File: daily.cxx
//
// Contents: Task wizard Onestop daily selection property page implementation.
//
// Classes: CSelectDailyPage
//
// History: 11-21-1997 SusiA
//
//---------------------------------------------------------------------------
#include "precomp.h"
CSelectDailyPage *g_pDailyPage = NULL;
extern CSelectItemsPage *g_pSelectItemsPage;
//+-------------------------------------------------------------------------------
// FUNCTION: SchedWizardDailyDlgProc(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:
//
// HISTORY: 12-08-1997 SusiA Created
//
//--------------------------------------------------------------------------------
BOOL CALLBACK SchedWizardDailyDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
WORD wNotifyCode = HIWORD(wParam); // notification code
switch (uMessage)
{
case WM_INITDIALOG:
if (g_pDailyPage)
g_pDailyPage->Initialize(hDlg);
InitPage(hDlg,lParam);
break;
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:
return g_pDailyPage->OnCommand(hDlg,
LOWORD(wParam), // item, control, or acce
HIWORD(wParam)); // notification code
break;
case WM_NOTIFY:
switch (((NMHDR FAR *) lParam)->code)
{
case PSN_KILLACTIVE:
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
return 1;
break;
case PSN_RESET:
// reset to the original values
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE);
break;
case PSN_SETACTIVE:
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
break;
case PSN_WIZNEXT:
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
//+--------------------------------------------------------------------------
//
// Member: CSelectDailyPage::OnCommand
//
// Synopsis: Handle the WM_COMMAND for the daily page
//
// History: 12-08-1997 SusiA
//
//---------------------------------------------------------------------------
BOOL CSelectDailyPage::OnCommand(HWND hwnd, WORD wID, WORD wNotifyCode)
{
switch (wNotifyCode)
{
case BN_CLICKED:
switch (wID)
{
case daily_day_rb:
case daily_weekday_rb:
case daily_ndays_rb:
m_idSelectedRadio = (USHORT) wID;
EnableNDaysControls(wID == daily_ndays_rb);
break;
default:
break;
}
break;
case EN_UPDATE:
{
//
// If the user just pasted non-numeric text or an illegal numeric
// value, overwrite it and complain.
//
if (IsWindowEnabled(GetDlgItem(hwnd,daily_ndays_edit)))
{
INT iNewPos = GetDlgItemInt(hwnd, daily_ndays_edit, NULL, FALSE);
if (iNewPos < NDAYS_MIN || iNewPos > NDAYS_MAX)
{
HWND hUD = GetDlgItem(hwnd,daily_ndays_ud);
UpDown_SetPos(hUD, UpDown_GetPos(hUD));
MessageBeep(MB_ICONASTERISK);
}
}
}
default:
break;
break;
}
return TRUE;
}
//+--------------------------------------------------------------------------
//
// Member: CSelectDailyPage::EnableNDaysControls
//
// Synopsis: Enable or disable the 'run every n days' controls
//
// History: 12-05-1997 SusiA Created
//
//---------------------------------------------------------------------------
VOID CSelectDailyPage::EnableNDaysControls(BOOL fEnable)
{
EnableWindow(GetDlgItem(m_hwnd,daily_ndays_ud), fEnable);
EnableWindow(GetDlgItem(m_hwnd,daily_ndays_edit), fEnable);
EnableWindow(GetDlgItem(m_hwnd,daily_ndays_lable), fEnable);
}
//+--------------------------------------------------------------------------
//
// Member: CSelectDailyPage::CSelectDailyPage
//
// Synopsis: ctor
//
// [phPSP] - filled with prop page handle
//
// History: 11-21-1997 SusiA
//
//---------------------------------------------------------------------------
CSelectDailyPage::CSelectDailyPage(
HINSTANCE hinst,
ISyncSchedule *pISyncSched,
HPROPSHEETPAGE *phPSP)
{
ZeroMemory(&m_psp, sizeof(PROPSHEETPAGE));
m_psp.dwSize = sizeof (PROPSHEETPAGE);
m_psp.hInstance = hinst;
m_psp.dwFlags = PSP_DEFAULT;
m_psp.pszTemplate = MAKEINTRESOURCE(IDD_SCHEDWIZ_DAILY);
m_psp.pszIcon = NULL;
m_psp.pfnDlgProc = (DLGPROC) SchedWizardDailyDlgProc;
m_psp.lParam = 0;
m_pISyncSched = pISyncSched;
m_pISyncSched->AddRef();
g_pDailyPage = this;
#ifdef WIZARD97
m_psp.dwFlags |= PSP_HIDEHEADER;
#endif // WIZARD97
m_idSelectedRadio = 0;
*phPSP = CreatePropertySheetPage(&m_psp);
}
//+--------------------------------------------------------------------------
//
// Member: CSelectDailyPage::Initialize(HWND hwnd)
//
// Synopsis: initialize the welcome page and set the task name to a unique
// new onestop name
//
// History: 11-21-1997 SusiA
//
//---------------------------------------------------------------------------
BOOL CSelectDailyPage::Initialize(HWND hwnd)
{
m_hwnd = hwnd;
UpdateTimeFormat(m_tszTimeFormat, ARRAYLEN(m_tszTimeFormat));
DateTime_SetFormat(GetDlgItem(m_hwnd,starttime_dp), m_tszTimeFormat);
m_idSelectedRadio = daily_day_rb;
CheckDlgButton(m_hwnd, m_idSelectedRadio, BST_CHECKED);
EnableNDaysControls(FALSE);
UpDown_SetRange(GetDlgItem(m_hwnd,daily_ndays_ud), NDAYS_MIN, NDAYS_MAX);
UpDown_SetPos(GetDlgItem(m_hwnd,daily_ndays_ud), 7);
Edit_LimitText(GetDlgItem(m_hwnd,daily_ndays_edit), 3);
return TRUE;
}
//+--------------------------------------------------------------------------
//
// Member: CSelectDailyPage::FillInTrigger
//
// Synopsis: Fill in the fields of the trigger structure according to the
// settings specified for this type of trigger
//
// Arguments: [pTrigger] - trigger struct to fill in
//
// Modifies: *[pTrigger]
//
// History: 12-08-1997 SusiA Stole from the TaskScheduler
//
// Notes: Precondition is that trigger's cbTriggerSize member is
// initialized.
//
//---------------------------------------------------------------------------
BOOL CSelectDailyPage::SetITrigger()
{
TASK_TRIGGER Trigger;
ITaskTrigger *pITrigger;
if (FAILED(m_pISyncSched->GetTrigger(&pITrigger)))
{
return FALSE;
}
ZeroMemory(&Trigger, sizeof(Trigger));
Trigger.cbTriggerSize = sizeof(TASK_TRIGGER);
switch (m_idSelectedRadio)
{
case daily_day_rb:
Trigger.TriggerType = TASK_TIME_TRIGGER_DAILY;
Trigger.Type.Daily.DaysInterval = 1;
break;
case daily_weekday_rb:
Trigger.TriggerType = TASK_TIME_TRIGGER_WEEKLY;
Trigger.Type.Weekly.WeeksInterval = 1;
Trigger.Type.Weekly.rgfDaysOfTheWeek = TASK_WEEKDAYS;
break;
case daily_ndays_rb:
Trigger.TriggerType = TASK_TIME_TRIGGER_DAILY;
Trigger.Type.Daily.DaysInterval =
UpDown_GetPos(GetDlgItem(m_hwnd, daily_ndays_ud));
break;
default:
break;
}
FillInStartDateTime(GetDlgItem(m_hwnd,startdate_dp),
GetDlgItem(m_hwnd,starttime_dp), &Trigger);
if (ERROR_SUCCESS == pITrigger->SetTrigger(&Trigger))
{
return TRUE;
}
else
{
return FALSE;
}
}