Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

244 lines
5.7 KiB

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1996.
//
// File: selmonth.cxx
//
// Contents: Implementation of class to manage simple month-selection
// dialog box.
//
// Classes: CSelectMonth
//
// History: 5-05-1997 DavidMun Created
//
//---------------------------------------------------------------------------
#include "..\pch\headers.hxx"
#pragma hdrstop
#include <mstask.h>
#include "dll.hxx"
#include "dlg.hxx"
#include "selmonth.hxx"
#include "rc.h"
#include "uiutil.hxx"
#include "defines.hxx"
#include "helpids.h"
// Helpids for Select Months dialog
const ULONG s_aSelectMonthDlgHelpIds[] =
{
select_month_dlg, Hselect_month_dlg,
chk_jan, Hchk_jan,
chk_feb, Hchk_feb,
chk_mar, Hchk_mar,
chk_apr, Hchk_apr,
chk_may, Hchk_may,
chk_jun, Hchk_jun,
chk_jul, Hchk_jul,
chk_aug, Hchk_aug,
chk_sep, Hchk_sep,
chk_oct, Hchk_oct,
chk_nov, Hchk_nov,
chk_dec, Hchk_dec,
lbl_sel_months, Hlbl_sel_months,
0,0
};
extern "C" TCHAR szMstaskHelp[];
//+--------------------------------------------------------------------------
//
// Member: CSelectMonth::InitSelectionFromTrigger
//
// Synopsis: Set selected bits from monthly trigger
//
// Arguments: [pjt] - pointer to trigger to modify, must be of type
// TASK_TIME_TRIGGER_MONTHLYDATE or
// TASK_TIME_TRIGGER_MONTHLYDOW.
//
// History: 07-18-1997 DavidMun Created
//
//---------------------------------------------------------------------------
VOID
CSelectMonth::InitSelectionFromTrigger(
const TASK_TRIGGER *pjt)
{
if (pjt->TriggerType == TASK_TIME_TRIGGER_MONTHLYDATE)
{
_rgfMonths = pjt->Type.MonthlyDate.rgfMonths;
}
else
{
Win4Assert(pjt->TriggerType == TASK_TIME_TRIGGER_MONTHLYDOW);
_rgfMonths = pjt->Type.MonthlyDOW.rgfMonths;
}
}
//+--------------------------------------------------------------------------
//
// Member: CSelectMonth::UpdateTrigger
//
// Synopsis: Copy the dialog settings into the appropriate rgfMonths
// field in [pjt].
//
// Arguments: [pjt] - pointer to trigger to modify.
//
// History: 07-18-1997 DavidMun Created
//
//---------------------------------------------------------------------------
VOID
CSelectMonth::UpdateTrigger(
TASK_TRIGGER *pjt)
{
if (!_rgfMonths)
{
_rgfMonths = ALL_MONTHS;
}
if (pjt->TriggerType == TASK_TIME_TRIGGER_MONTHLYDATE)
{
pjt->Type.MonthlyDate.rgfMonths = _rgfMonths;
}
else
{
Win4Assert(pjt->TriggerType == TASK_TIME_TRIGGER_MONTHLYDOW);
pjt->Type.MonthlyDOW.rgfMonths = _rgfMonths;
}
}
//+--------------------------------------------------------------------------
//
// Member: CSelectMonth::RealDlgProc
//
// Synopsis: Dispatch to methods for specific messages.
//
// Arguments: standard windows dlg
//
// Returns: standard windows dlg
//
// Derivation: CDlg override
//
// History: 5-05-1997 DavidMun Created
//
//---------------------------------------------------------------------------
INT_PTR
CSelectMonth::RealDlgProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
_OnInit();
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
if (!_OnOK())
{
// tell user at least 1 month must be selected
SchedUIErrorDialog(Hwnd(), IERR_INVALID_MONTHLY_TASK, 0);
break;
}
// else FALL THROUGH
case IDCANCEL:
EndDialog(Hwnd(), GET_WM_COMMAND_ID(wParam, lParam) != IDCANCEL);
break;
}
break;
case WM_HELP:
WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle,
szMstaskHelp,
HELP_WM_HELP,
(DWORD_PTR)(LPSTR)s_aSelectMonthDlgHelpIds);
return TRUE;
case WM_CONTEXTMENU:
WinHelp((HWND) wParam,
szMstaskHelp,
HELP_CONTEXTMENU,
(DWORD_PTR)(LPSTR)s_aSelectMonthDlgHelpIds);
return TRUE;
default:
return FALSE;
}
return TRUE;
}
//+--------------------------------------------------------------------------
//
// Member: CSelectMonth::_OnInit
//
// Synopsis: Check boxes so they match flags in _flMonths
//
// History: 5-05-1997 DavidMun Created
//
//---------------------------------------------------------------------------
VOID
CSelectMonth::_OnInit()
{
ULONG id;
for (id = chk_jan; id <= chk_dec; id++)
{
if (_rgfMonths & (1 << (id - chk_jan)))
{
CheckDlgButton(Hwnd(), id, BST_CHECKED);
}
}
}
//+--------------------------------------------------------------------------
//
// Member: CSelectMonth::_OnOK
//
// Synopsis: Map checked boxes to TASK_<month> bits in *_prgfMonths
//
// Returns: TRUE if at least one month is selected
//
// History: 5-05-1997 DavidMun Created
//
//---------------------------------------------------------------------------
BOOL
CSelectMonth::_OnOK()
{
ULONG id;
_rgfMonths = 0;
for (id = chk_jan; id <= chk_dec; id++)
{
if (IsDlgButtonChecked(Hwnd(), id))
{
_rgfMonths |= (1 << (id - chk_jan));
}
}
return _rgfMonths != 0;
}