mirror of https://github.com/tongzx/nt5src
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.
1995 lines
51 KiB
1995 lines
51 KiB
/*======================================================================================//
|
|
| Process Control //
|
|
| //
|
|
|Copyright (c) 1998 Sequent Computer Systems, Incorporated. All rights reserved. //
|
|
| //
|
|
|File Name: ManagementRuleWizards.cpp //
|
|
| //
|
|
|Description: Implementation of process management rule wizards //
|
|
| //
|
|
|Created: Paul Skoglund 09-1998 //
|
|
| //
|
|
|Rev History: //
|
|
| //
|
|
|=======================================================================================*/
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "ManagementRuleWizards.h"
|
|
#include "ManagementPages.h"
|
|
|
|
|
|
using std::list<tstring>;
|
|
|
|
|
|
bool GetGrpNameList(PCid id, list<tstring> &jobs)
|
|
{
|
|
PCINT32 res = 0;
|
|
|
|
PCJobSummary jlist[min((COM_BUFFER_SIZE/sizeof(PCJobSummary)), 100)];
|
|
|
|
memset(&jlist[0], 0, sizeof(PCJobSummary));
|
|
|
|
do
|
|
{
|
|
res = PCGetJobSummary( id, jlist, ARRAY_SIZE(jlist) * sizeof(PCJobSummary));
|
|
if (res < 0 )
|
|
{
|
|
PCULONG32 err = PCGetLastError(id);
|
|
return false;
|
|
}
|
|
|
|
if (res > 0)
|
|
{
|
|
for (INT32 i = 0; i < res; i++)
|
|
{
|
|
jobs.push_back(jlist[i].jobName);
|
|
}
|
|
memcpy(&jlist[0], &jlist[res-1], sizeof(PCJobSummary));
|
|
}
|
|
} while (res > 0 && PCERROR_MORE_DATA == PCGetLastError(id) );
|
|
|
|
return true;
|
|
}
|
|
|
|
list<tstring> *GetGrpNameList(PCid id)
|
|
{
|
|
list<tstring> *jlist = new list<tstring>;
|
|
|
|
if (jlist)
|
|
GetGrpNameList(id, *jlist);
|
|
|
|
return jlist;
|
|
}
|
|
|
|
BOOL IsValidName(const CComBSTR &bStr, const BOOL nullOK)
|
|
{
|
|
ASSERT(PROC_NAME_LEN == JOB_NAME_LEN);
|
|
|
|
const TCHAR BLANK = _T(' ');
|
|
|
|
if ( !bStr.Length() ) // empty string
|
|
return nullOK;
|
|
|
|
unsigned int len = bStr.Length();
|
|
if ( len > JOB_NAME_LEN )
|
|
return FALSE;
|
|
|
|
if ( bStr[0] == BLANK || bStr[len - 1] == BLANK )
|
|
return FALSE; // leading/trailing blank
|
|
|
|
if ( len != _tcscspn( bStr, _T("\\,\"")) )
|
|
return FALSE; // hit invalid character
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL ProcRuleWizard(int nTitle, const list<tstring> &jobsdefined, PCProcDetail &out, const PCSystemParms &SystemParms, PROC_NAME *procName /* = NULL */)
|
|
{
|
|
PROPSHEETHEADER sheet;
|
|
HPROPSHEETPAGE hPages[5];
|
|
|
|
memset(&sheet, 0, sizeof(PROPSHEETHEADER));
|
|
sheet.dwSize = sizeof(PROPSHEETHEADER);
|
|
sheet.dwFlags = PSH_WIZARD; // | PSH_USEICONID;
|
|
sheet.hwndParent = ::GetActiveWindow();
|
|
sheet.hInstance = _Module.GetResourceInstance();
|
|
sheet.pszIcon = NULL; // MAKEINTRESOURCE(IDI_MANAGEMENT);
|
|
sheet.pszCaption = MAKEINTRESOURCE(nTitle);
|
|
sheet.nPages = ARRAY_SIZE(hPages);
|
|
sheet.nStartPage = 0;
|
|
sheet.phpage = &hPages[0];
|
|
sheet.pfnCallback = NULL;
|
|
|
|
#if USE_WIZARD97_WATERMARKS
|
|
sheet.dwFlags |= PSH_WIZARD97 | PSH_WATERMARK;
|
|
sheet.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK1);
|
|
#endif
|
|
#if USE_WIZARD97_HEADERS
|
|
sheet.dwFlags |= PSH_WIZARD97 | PSH_HEADER;
|
|
sheet.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER1);
|
|
#endif
|
|
|
|
memset(&out, 0, sizeof(PCProcDetail));
|
|
|
|
if (procName)
|
|
_tcscpy(out.base.procName, *procName);
|
|
|
|
// set any ProcDetail Defaults...
|
|
|
|
//memset(out.base.memberOfJobName, 0, sizeof(JOB_NAME));
|
|
//SetMGMTFlag(out.base.mgmtParms.mFlags, PCMFLAG_APPLY_JOB_MEMBERSHIP, FALSE);
|
|
|
|
//out.base.mgmtParms.affinity = 0;
|
|
//SetMGMTFlag(out.base.mgmtParms.mFlags, PCMFLAG_APPLY_AFFINITY, FALSE);
|
|
|
|
out.base.mgmtParms.priority = PCPrioNormal;
|
|
//SetMGMTFlag(out.base.mgmtParms.mFlags, PCMFLAG_APPLY_PRIORITY, FALSE);
|
|
|
|
CProcNameWiz *pPage1 = new CProcNameWiz(CProcNameWiz::FIRST_PAGE, nTitle, &out);
|
|
if (!pPage1)
|
|
return -1;
|
|
hPages[0] = pPage1->Create();
|
|
|
|
if (procName)
|
|
pPage1->SetNoNameChange();
|
|
|
|
CProcGrpMemberWiz *pPage2 = new CProcGrpMemberWiz(CProcGrpMemberWiz::MIDDLE_PAGE, nTitle, &out, jobsdefined);
|
|
if (!pPage2)
|
|
{
|
|
delete pPage1;
|
|
return -1;
|
|
}
|
|
hPages[1] = pPage2->Create();
|
|
|
|
CAffinityWiz *pPage3 = new CAffinityWiz(CAffinityWiz::MIDDLE_PAGE, nTitle, &out, SystemParms.processorMask);
|
|
if (!pPage3)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
return -1;
|
|
}
|
|
hPages[2] = pPage3->Create();
|
|
|
|
CPriorityWiz *pPage4 = new CPriorityWiz(CPriorityWiz::MIDDLE_PAGE, nTitle, &out);
|
|
if (!pPage4)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
return -1;
|
|
}
|
|
hPages[3] = pPage4->Create();
|
|
|
|
CWorkingSetWiz *pPage5 = new CWorkingSetWiz(CWorkingSetWiz::LAST_PAGE, nTitle, &out);
|
|
if (!pPage5)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
return -1;
|
|
}
|
|
hPages[4] = pPage5->Create();
|
|
|
|
INT_PTR id = PropertySheet(&sheet);
|
|
if (id > 0)
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
BOOL GroupRuleWizard(int nTitle, PCJobDetail &out, const PCSystemParms &SystemParms, JOB_NAME *jobName /* = NULL */)
|
|
{
|
|
PROPSHEETHEADER sheet;
|
|
HPROPSHEETPAGE hPages[10];
|
|
|
|
memset(&sheet, 0, sizeof(PROPSHEETHEADER));
|
|
sheet.dwSize = sizeof(PROPSHEETHEADER);
|
|
sheet.dwFlags = PSH_WIZARD;
|
|
sheet.hwndParent = ::GetActiveWindow();
|
|
sheet.hInstance = _Module.GetResourceInstance();
|
|
sheet.pszIcon = NULL;
|
|
sheet.pszCaption = MAKEINTRESOURCE(nTitle);
|
|
sheet.nPages = ARRAY_SIZE(hPages);
|
|
sheet.nStartPage = 0;
|
|
sheet.phpage = &hPages[0];
|
|
sheet.pfnCallback = NULL;
|
|
|
|
#if USE_WIZARD97_WATERMARKS
|
|
sheet.dwFlags |= PSH_WIZARD97 | PSH_WATERMARK;
|
|
sheet.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK1);
|
|
#endif
|
|
#if USE_WIZARD97_HEADERS
|
|
sheet.dwFlags |= PSH_WIZARD97 | PSH_HEADER;
|
|
sheet.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER1);
|
|
#endif
|
|
|
|
bool applyschedulingclass;
|
|
SCHEDULING_CLASS schedulingclass;
|
|
|
|
bool procmemorylimitchk;
|
|
MEMORY_VALUE procmemorylimit;
|
|
bool jobmemorylimitchk;
|
|
MEMORY_VALUE jobmemorylimit;
|
|
|
|
bool processcountchk;
|
|
PROC_COUNT processcount;
|
|
|
|
bool procusertimechk;
|
|
TIME_VALUE procusertime;
|
|
|
|
bool jobusertimechk;
|
|
TIME_VALUE jobusertime;
|
|
bool jobmsgontimelimit;
|
|
|
|
bool breakaway;
|
|
bool silentbreakaway;
|
|
|
|
bool endjob;
|
|
bool unhandledexcept;
|
|
|
|
memset(&out, 0, sizeof(PCJobDetail));
|
|
|
|
// set any JobDetail Defaults...
|
|
if (jobName)
|
|
_tcscpy(out.base.jobName, *jobName);
|
|
|
|
//out.base.mgmtParms.affinity = 0;
|
|
//SetMGMTFlag(out.base.mgmtParms.mFlags, PCMFLAG_APPLY_AFFINITY, FALSE);
|
|
|
|
out.base.mgmtParms.priority = PCPrioNormal;
|
|
//SetMGMTFlag(out.base.mgmtParms.mFlags, PCMFLAG_APPLY_PRIORITY, FALSE);
|
|
|
|
CJobNameWiz *pPage1 = new CJobNameWiz(CJobNameWiz::FIRST_PAGE, nTitle, &out);
|
|
if (!pPage1)
|
|
return -1;
|
|
hPages[0] = pPage1->Create();
|
|
|
|
if (jobName)
|
|
pPage1->SetNoNameChange();
|
|
|
|
CAffinityWiz *pPage2 = new CAffinityWiz(CAffinityWiz::MIDDLE_PAGE, nTitle, &out, SystemParms.processorMask);
|
|
if (!pPage2)
|
|
{
|
|
delete pPage1;
|
|
return -1;
|
|
}
|
|
hPages[1] = pPage2->Create();
|
|
|
|
|
|
CPriorityWiz *pPage3 = new CPriorityWiz(CPriorityWiz::MIDDLE_PAGE, nTitle, &out);
|
|
if (!pPage3)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
return -1;
|
|
}
|
|
hPages[2] = pPage3->Create();
|
|
|
|
CSchedulingClassWiz *pPage4 = new CSchedulingClassWiz(CSchedulingClassWiz::MIDDLE_PAGE, nTitle, &schedulingclass, &applyschedulingclass);
|
|
if (!pPage4)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
return -1;
|
|
}
|
|
hPages[3] = pPage4->Create();
|
|
|
|
CWorkingSetWiz *pPage5 = new CWorkingSetWiz(CWorkingSetWiz::MIDDLE_PAGE, nTitle, &out);
|
|
if (!pPage5)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
return -1;
|
|
}
|
|
hPages[4] = pPage5->Create();
|
|
|
|
CCommittedMemoryWiz *pPage6 = new CCommittedMemoryWiz(CCommittedMemoryWiz::MIDDLE_PAGE, nTitle, &procmemorylimit, &procmemorylimitchk, &jobmemorylimit, &jobmemorylimitchk);
|
|
if (!pPage6)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
delete pPage5;
|
|
return -1;
|
|
}
|
|
hPages[5] = pPage6->Create();
|
|
|
|
CProcCountWiz *pPage7 = new CProcCountWiz(CProcCountWiz::MIDDLE_PAGE, nTitle, &processcount, &processcountchk);
|
|
if (!pPage7)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
delete pPage5;
|
|
delete pPage6;
|
|
return -1;
|
|
}
|
|
hPages[6] = pPage7->Create();
|
|
|
|
CTimeWiz *pPage8 = new CTimeWiz(CTimeWiz::MIDDLE_PAGE, nTitle, &procusertime, &procusertimechk, &jobusertime, &jobusertimechk, &jobmsgontimelimit);
|
|
if (!pPage8)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
delete pPage5;
|
|
delete pPage6;
|
|
delete pPage7;
|
|
return -1;
|
|
}
|
|
hPages[7] = pPage8->Create();
|
|
|
|
CAdvancedWiz *pPage9 = new CAdvancedWiz(CAdvancedWiz::MIDDLE_PAGE, nTitle, &endjob, &unhandledexcept);
|
|
if (!pPage9)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
delete pPage5;
|
|
delete pPage6;
|
|
delete pPage7;
|
|
delete pPage8;
|
|
return -1;
|
|
}
|
|
hPages[8] = pPage9->Create();
|
|
|
|
|
|
CAdvBreakawayWiz *pPage10 = new CAdvBreakawayWiz(CAdvBreakawayWiz::LAST_PAGE, nTitle, &breakaway, &silentbreakaway);
|
|
if (!pPage10)
|
|
{
|
|
delete pPage1;
|
|
delete pPage2;
|
|
delete pPage3;
|
|
delete pPage4;
|
|
delete pPage5;
|
|
delete pPage6;
|
|
delete pPage7;
|
|
delete pPage8;
|
|
delete pPage9;
|
|
return -1;
|
|
}
|
|
hPages[9] = pPage10->Create();
|
|
|
|
INT_PTR id = PropertySheet(&sheet);
|
|
if (id > 0)
|
|
{
|
|
out.base.mgmtParms.schedClass = schedulingclass;
|
|
if (applyschedulingclass)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_APPLY_SCHEDULING_CLASS;
|
|
|
|
out.base.mgmtParms.procMemoryLimit = procmemorylimit;
|
|
if (procmemorylimitchk)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_APPLY_PROC_MEMORY_LIMIT;
|
|
|
|
out.base.mgmtParms.jobMemoryLimit = jobmemorylimit;
|
|
if (jobmemorylimitchk)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_APPLY_JOB_MEMORY_LIMIT;
|
|
|
|
out.base.mgmtParms.procCountLimit = processcount;
|
|
if (processcountchk)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_APPLY_PROC_COUNT_LIMIT;
|
|
|
|
out.base.mgmtParms.procTimeLimitCNS = procusertime;
|
|
if (procusertimechk)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_APPLY_PROC_TIME_LIMIT;
|
|
|
|
out.base.mgmtParms.jobTimeLimitCNS = jobusertime;
|
|
if (jobusertimechk)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_APPLY_JOB_TIME_LIMIT;
|
|
|
|
if (jobmsgontimelimit)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_MSG_ON_JOB_TIME_LIMIT_HIT;
|
|
|
|
if (endjob)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_END_JOB_WHEN_EMPTY;
|
|
if (unhandledexcept)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_SET_DIE_ON_UH_EXCEPTION;
|
|
|
|
if (breakaway)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_SET_PROC_BREAKAWAY_OK;
|
|
if (silentbreakaway)
|
|
out.base.mgmtParms.mFlags |= PCMFLAG_SET_SILENT_BREAKAWAY;
|
|
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// ProcName
|
|
|
|
CProcNameWiz::CProcNameWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail) :
|
|
CMySnapInPropertyWizardImpl<CProcNameWiz>(pos, nTitle), m_pProcDetail(ProcDetail)
|
|
{
|
|
ASSERT(m_pProcDetail);
|
|
|
|
m_bReadOnly = FALSE;
|
|
m_bNoNameChange = FALSE;
|
|
}
|
|
|
|
CProcNameWiz::~CProcNameWiz()
|
|
{
|
|
}
|
|
|
|
|
|
LRESULT CProcNameWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CProcNameWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_proc_name);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CProcNameWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
CComBSTR bName;
|
|
if (!GetDlgItemText( IDC_NAME, bName.m_str ) ||
|
|
!IsValidName(bName, FALSE) )
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_NAME);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
ITEM_STR strOut;
|
|
LoadStringHelper(strOut, IDS_JOBNAME_WARNING);
|
|
MessageBox(strOut, NULL, MB_OK | MB_ICONWARNING);
|
|
return FALSE;
|
|
}
|
|
|
|
CComBSTR bComment;
|
|
if ( !GetDlgItemText(IDC_COMMENT, bComment.m_str) )
|
|
bComment = _T("");
|
|
if (bComment.Length() > RULE_DESCRIPTION_LEN)
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_COMMENT);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
|
|
// everything validated so save
|
|
_tcscpy(m_pProcDetail->base.procName, bName);
|
|
_tcscpy(m_pProcDetail->base.mgmtParms.description, bComment);
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
VERIFY(SetDlgItemText( IDC_NAME, m_pProcDetail->base.procName ));
|
|
SendDlgItemMessage( IDC_NAME, EM_SETLIMITTEXT, PROC_NAME_LEN, 0);
|
|
|
|
VERIFY(SetDlgItemText( IDC_COMMENT, m_pProcDetail->base.mgmtParms.description ));
|
|
SendDlgItemMessage( IDC_COMMENT, EM_SETLIMITTEXT, RULE_DESCRIPTION_LEN, 0);
|
|
|
|
if (m_bReadOnly)
|
|
{
|
|
DisableControl(IDC_NAME);
|
|
DisableControl(IDC_COMMENT);
|
|
}
|
|
|
|
if (m_bNoNameChange)
|
|
DisableControl(IDC_NAME);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
|
|
BOOL CProcNameWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// JobMember
|
|
|
|
CProcGrpMemberWiz::CProcGrpMemberWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail, const list<tstring> &jobsdefined)
|
|
: CMySnapInPropertyWizardImpl<CProcGrpMemberWiz>(pos, nTitle),
|
|
m_pProcDetail(ProcDetail), m_JobsExisting(jobsdefined)
|
|
{
|
|
ASSERT(ProcDetail);
|
|
|
|
m_bReadOnly = FALSE;
|
|
}
|
|
|
|
CProcGrpMemberWiz::~CProcGrpMemberWiz()
|
|
{
|
|
}
|
|
|
|
|
|
LRESULT CProcGrpMemberWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CProcGrpMemberWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_pr_job_name);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CProcGrpMemberWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
CComBSTR bStr;
|
|
bool bChecked = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBMEMBER_CHK));
|
|
|
|
if (!GetDlgItemText( IDC_JOB_LIST, bStr.m_str ) )
|
|
bStr = _T("");
|
|
|
|
if ( !IsValidName(bStr, !bChecked) )
|
|
{
|
|
HWND hWndCtl = NULL;
|
|
if (bChecked)
|
|
hWndCtl = GetDlgItem(IDC_JOB_LIST);
|
|
else
|
|
hWndCtl = GetDlgItem(IDC_JOBMEMBER_CHK);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
|
|
ITEM_STR strOut;
|
|
LoadStringHelper(strOut, IDS_JOBNAME_WARNING);
|
|
MessageBox(strOut, NULL, MB_OK | MB_ICONWARNING);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
SetMGMTFlag(m_pProcDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_JOB_MEMBERSHIP, bChecked);
|
|
_tcscpy(m_pProcDetail->base.memberOfJobName, bStr);
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
list<tstring>::const_iterator i;
|
|
for (i = m_JobsExisting.begin(); i != m_JobsExisting.end(); i++)
|
|
SendDlgItemMessage(IDC_JOB_LIST, CB_ADDSTRING, 0, (LPARAM) (*i).c_str() );
|
|
|
|
SendDlgItemMessage( IDC_JOB_LIST, CB_LIMITTEXT, JOB_NAME_LEN, 0);
|
|
|
|
VERIFY(SetDlgItemText( IDC_JOB_LIST, m_pProcDetail->base.memberOfJobName ));
|
|
|
|
CheckDlgButton(IDC_JOBMEMBER_CHK, (m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_JOB_MEMBERSHIP) ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
if (m_bReadOnly || !(m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_JOB_MEMBERSHIP) )
|
|
DisableControl(IDC_JOB_LIST);
|
|
|
|
if (m_bReadOnly)
|
|
DisableControl(IDC_JOBMEMBER_CHK);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
LRESULT CProcGrpMemberWiz::OnJobChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_JOBMEMBER_CHK )
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBMEMBER_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_JOB_LIST), checked);
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CProcGrpMemberWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Affinity
|
|
CAffinityWiz::CAffinityWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail, AFFINITY ProcessorMask) :
|
|
CMySnapInPropertyWizardImpl<CAffinityWiz>(pos, nTitle),
|
|
m_PageType(PROCESS_PAGE), m_pProcDetail(ProcDetail), m_pJobDetail(NULL),
|
|
m_ProcessorMask(ProcessorMask)
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CAffinityWiz::CAffinityWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail, AFFINITY ProcessorMask) :
|
|
CMySnapInPropertyWizardImpl<CAffinityWiz>(pos, nTitle),
|
|
m_PageType(JOB_PAGE), m_pProcDetail(NULL), m_pJobDetail(JobDetail),
|
|
m_ProcessorMask(ProcessorMask)
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CAffinityWiz::~CAffinityWiz()
|
|
{
|
|
}
|
|
|
|
void CAffinityWiz::Initialize()
|
|
{
|
|
ASSERT(m_PageType == PROCESS_PAGE && m_pProcDetail || m_PageType == JOB_PAGE && m_pJobDetail);
|
|
|
|
m_bReadOnly = FALSE;
|
|
}
|
|
|
|
LRESULT CAffinityWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UINT nPromptID;
|
|
if (m_PageType == PROCESS_PAGE)
|
|
nPromptID = IDS_AFFINITY_JOBWARNING;
|
|
else
|
|
nPromptID = IDS_AFFINITY_NOJOBWARNING;
|
|
|
|
CComBSTR bStr;
|
|
if (bStr.LoadString(nPromptID))
|
|
VERIFY(SetDlgItemText(IDC_AFFINITY_PROMPT, bStr.m_str));
|
|
|
|
UpdateData(FALSE);
|
|
bHandled = FALSE;
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CAffinityWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_affinity);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CAffinityWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
AFFINITY affinity = 0;
|
|
bool affinitychk = (BST_CHECKED == IsDlgButtonChecked(IDC_AFFINITY_CHK));
|
|
|
|
int i;
|
|
for ( i = IDC_AFFINITY1; i <= IDC_AFFINITY64; i++)
|
|
{
|
|
if ( BST_UNCHECKED != IsDlgButtonChecked(i) )
|
|
affinity |= (ProcessorBit << (i - IDC_AFFINITY1));
|
|
}
|
|
|
|
// Warn the user if the affinity and processor mask don't
|
|
// reference at least one processor
|
|
if (affinitychk && !(affinity & m_ProcessorMask) )
|
|
{
|
|
ITEM_STR strOut;
|
|
LoadStringHelper(strOut, IDS_AFFINITY_WARNING);
|
|
if (IDYES != MessageBox(strOut, NULL, MB_YESNO | MB_ICONQUESTION))
|
|
return FALSE;
|
|
}
|
|
|
|
if (m_PageType == PROCESS_PAGE)
|
|
{
|
|
m_pProcDetail->base.mgmtParms.affinity = affinity;
|
|
SetMGMTFlag(m_pProcDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_AFFINITY, affinitychk);
|
|
}
|
|
else if (m_PageType == JOB_PAGE)
|
|
{
|
|
m_pJobDetail->base.mgmtParms.affinity = affinity;
|
|
SetMGMTFlag(m_pJobDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_AFFINITY, affinitychk);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
ASSERT(IDC_AFFINITY1 + 63 == IDC_AFFINITY64);
|
|
|
|
AFFINITY affinity = 0;
|
|
bool affinitychk = FALSE;
|
|
|
|
if ( m_PageType == PROCESS_PAGE )
|
|
{
|
|
affinity = m_pProcDetail->base.mgmtParms.affinity;
|
|
if (m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_AFFINITY)
|
|
affinitychk = TRUE;
|
|
}
|
|
else if ( m_PageType == JOB_PAGE )
|
|
{
|
|
affinity = m_pJobDetail->base.mgmtParms.affinity;
|
|
if (m_pJobDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_AFFINITY)
|
|
affinitychk = TRUE;
|
|
}
|
|
|
|
for(int i = IDC_AFFINITY1; i <= IDC_AFFINITY64; i++)
|
|
{
|
|
if (affinity & (ProcessorBit << (i - IDC_AFFINITY1) ) )
|
|
{
|
|
if (m_ProcessorMask & (ProcessorBit << (i - IDC_AFFINITY1)))
|
|
CheckDlgButton(i, BST_CHECKED);
|
|
else
|
|
CheckDlgButton(i, BST_INDETERMINATE);
|
|
}
|
|
else
|
|
CheckDlgButton(i, BST_UNCHECKED);
|
|
}
|
|
|
|
CheckDlgButton(IDC_AFFINITY_CHK, affinitychk ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
ApplyControlEnableRules(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
void CAffinityWiz::ApplyControlEnableRules(BOOL bForceDisable)
|
|
{
|
|
BOOL bEnable;
|
|
if (m_bReadOnly || !(BST_CHECKED == IsDlgButtonChecked(IDC_AFFINITY_CHK)) || bForceDisable)
|
|
bEnable = FALSE;
|
|
else
|
|
bEnable = TRUE;
|
|
|
|
for (int i = IDC_AFFINITY1; i <= IDC_AFFINITY64; i++)
|
|
::EnableWindow(GetDlgItem(i), bEnable);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_AFFINITY_CHK), !(m_bReadOnly || bForceDisable));
|
|
}
|
|
|
|
BOOL CAffinityWiz::OnSetActive()
|
|
{
|
|
if ( m_PageType == PROCESS_PAGE )
|
|
{
|
|
if (m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_JOB_MEMBERSHIP)
|
|
ApplyControlEnableRules(TRUE);
|
|
else
|
|
ApplyControlEnableRules(FALSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
LRESULT CAffinityWiz::OnAffinityEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wNotifyCode == BN_CLICKED)
|
|
{
|
|
ASSERT(wID >= IDC_AFFINITY1 && wID <= IDC_AFFINITY64);
|
|
|
|
int bit = wID - IDC_AFFINITY1;
|
|
UINT btnState = IsDlgButtonChecked(wID);
|
|
if (btnState == BST_UNCHECKED)
|
|
{
|
|
if ( m_ProcessorMask & (ProcessorBit << bit))
|
|
CheckDlgButton(wID, BST_CHECKED);
|
|
else
|
|
CheckDlgButton(wID, BST_INDETERMINATE);
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(wID, BST_UNCHECKED);
|
|
}
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CAffinityWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_AFFINITY_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_AFFINITY_CHK));
|
|
for (int i = IDC_AFFINITY1; i <= IDC_AFFINITY64; i++)
|
|
::EnableWindow(GetDlgItem(i), checked);
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CAffinityWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Priority
|
|
|
|
CPriorityWiz::CPriorityWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail) :
|
|
CMySnapInPropertyWizardImpl<CPriorityWiz>(pos, nTitle),
|
|
m_PageType(PROCESS_PAGE), m_pProcDetail(ProcDetail), m_pJobDetail(NULL)
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CPriorityWiz::CPriorityWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail) :
|
|
CMySnapInPropertyWizardImpl<CPriorityWiz>(pos, nTitle),
|
|
m_PageType(JOB_PAGE), m_pProcDetail(NULL), m_pJobDetail(JobDetail)
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CPriorityWiz::~CPriorityWiz()
|
|
{
|
|
}
|
|
|
|
void CPriorityWiz::Initialize()
|
|
{
|
|
ASSERT(m_PageType == PROCESS_PAGE && m_pProcDetail || m_PageType == JOB_PAGE && m_pJobDetail);
|
|
|
|
m_bReadOnly = FALSE;
|
|
}
|
|
|
|
|
|
LRESULT CPriorityWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UINT nPromptID;
|
|
if (m_PageType == PROCESS_PAGE)
|
|
nPromptID = IDS_PRIORITY_JOBWARNING;
|
|
else
|
|
nPromptID = IDS_PRIORITY_NOJOBWARNING;
|
|
|
|
CComBSTR bStr;
|
|
if (bStr.LoadString(nPromptID))
|
|
VERIFY(SetDlgItemText(IDC_PRIORITY_PROMPT, bStr.m_str));
|
|
|
|
UpdateData(FALSE);
|
|
bHandled = FALSE;
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CPriorityWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_priority);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CPriorityWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
BOOL prioritychk = (BST_CHECKED == IsDlgButtonChecked(IDC_PRIORITY_CHK));
|
|
PRIORITY p = 0;
|
|
for ( int i = IDC_LOW; i<= IDC_REALTIME; i++)
|
|
{
|
|
if ( BST_CHECKED == IsDlgButtonChecked(i) )
|
|
p += IDToPriority(i);
|
|
}
|
|
|
|
if (IDToPriority(PriorityToID(p)) != p) //not fool proof, but do we really need to check this? no
|
|
{
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
|
|
if (m_PageType == PROCESS_PAGE)
|
|
{
|
|
m_pProcDetail->base.mgmtParms.priority = p;
|
|
SetMGMTFlag(m_pProcDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_PRIORITY, prioritychk);
|
|
}
|
|
else if (m_PageType == JOB_PAGE)
|
|
{
|
|
m_pJobDetail->base.mgmtParms.priority = p;
|
|
SetMGMTFlag(m_pJobDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_PRIORITY, prioritychk);
|
|
}
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
BOOL prioritychk = FALSE;
|
|
PRIORITY p = PCPrioNormal;
|
|
if (m_PageType == PROCESS_PAGE)
|
|
{
|
|
if (m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_PRIORITY)
|
|
prioritychk = TRUE;
|
|
m_pProcDetail->base.mgmtParms.priority = p;
|
|
}
|
|
else if (m_PageType == JOB_PAGE)
|
|
{
|
|
if (m_pJobDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_PRIORITY)
|
|
prioritychk = TRUE;
|
|
m_pJobDetail->base.mgmtParms.priority = p;
|
|
}
|
|
|
|
CheckDlgButton(IDC_PRIORITY_CHK, prioritychk ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
CheckRadioButton(IDC_LOW, IDC_REALTIME, PriorityToID(p));
|
|
|
|
ApplyControlEnableRules(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
void CPriorityWiz::ApplyControlEnableRules(BOOL bForceDisable)
|
|
{
|
|
BOOL bEnable;
|
|
if (m_bReadOnly || !(BST_CHECKED == IsDlgButtonChecked(IDC_PRIORITY_CHK)) || bForceDisable)
|
|
bEnable = FALSE;
|
|
else
|
|
bEnable = TRUE;
|
|
|
|
UINT ids[] = { IDC_REALTIME, IDC_HIGH, IDC_ABOVE_NORMAL, IDC_NORMAL, IDC_BELOW_NORMAL, IDC_LOW, 0 };
|
|
for (int i = 0; ids[i]; i++)
|
|
::EnableWindow(GetDlgItem(ids[i]), bEnable);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_PRIORITY_CHK), !(m_bReadOnly || bForceDisable));
|
|
}
|
|
|
|
BOOL CPriorityWiz::OnSetActive()
|
|
{
|
|
if ( m_PageType == PROCESS_PAGE )
|
|
{
|
|
if (m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_JOB_MEMBERSHIP)
|
|
ApplyControlEnableRules(TRUE);
|
|
else
|
|
ApplyControlEnableRules(FALSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
LRESULT CPriorityWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_PRIORITY_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_PRIORITY_CHK));
|
|
|
|
UINT ids[] = { IDC_REALTIME, IDC_HIGH, IDC_ABOVE_NORMAL, IDC_NORMAL, IDC_BELOW_NORMAL, IDC_LOW,0 };
|
|
for (int i = 0; ids[i]; i++)
|
|
::EnableWindow(GetDlgItem(ids[i]), checked);
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CPriorityWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// JobName
|
|
|
|
CJobNameWiz::CJobNameWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail)
|
|
: CMySnapInPropertyWizardImpl<CJobNameWiz>(pos, nTitle),
|
|
m_pJobDetail(JobDetail)
|
|
{
|
|
ASSERT(m_pJobDetail);
|
|
|
|
m_bReadOnly = FALSE;
|
|
m_bNoNameChange = FALSE;
|
|
}
|
|
|
|
CJobNameWiz::~CJobNameWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CJobNameWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CJobNameWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_name);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CJobNameWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
CComBSTR bName;
|
|
if (!GetDlgItemText( IDC_NAME, bName.m_str ) ||
|
|
!IsValidName(bName, FALSE) )
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_NAME);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
|
|
ITEM_STR strOut;
|
|
LoadStringHelper(strOut, IDS_JOBNAME_WARNING);
|
|
MessageBox(strOut, NULL, MB_OK | MB_ICONWARNING);
|
|
|
|
return FALSE;
|
|
}
|
|
CComBSTR bComment;
|
|
if ( !GetDlgItemText(IDC_COMMENT, bComment.m_str) )
|
|
bComment = _T("");
|
|
if (bComment.Length() > RULE_DESCRIPTION_LEN)
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_COMMENT);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
|
|
// everything validated so save
|
|
_tcscpy(m_pJobDetail->base.jobName, bName);
|
|
_tcscpy(m_pJobDetail->base.mgmtParms.description, bComment);
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
VERIFY(SetDlgItemText( IDC_NAME, m_pJobDetail->base.jobName ));
|
|
SendDlgItemMessage( IDC_NAME, EM_SETLIMITTEXT, JOB_NAME_LEN, 0);
|
|
|
|
VERIFY(SetDlgItemText( IDC_COMMENT, m_pJobDetail->base.mgmtParms.description ));
|
|
SendDlgItemMessage( IDC_COMMENT, EM_SETLIMITTEXT, RULE_DESCRIPTION_LEN, 0);
|
|
|
|
if (m_bReadOnly)
|
|
{
|
|
DisableControl(IDC_NAME);
|
|
DisableControl(IDC_COMMENT);
|
|
}
|
|
|
|
if (m_bNoNameChange)
|
|
DisableControl(IDC_NAME);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
BOOL CJobNameWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CSchedulingClassWiz
|
|
|
|
CSchedulingClassWiz::CSchedulingClassWiz(WIZ_POSITION pos, int nTitle, SCHEDULING_CLASS *sclass, bool *chk)
|
|
: CMySnapInPropertyWizardImpl<CSchedulingClassWiz>(pos, nTitle), m_schedClass(*sclass), m_schedClasschk(*chk)
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
|
|
m_schedClass = 5;
|
|
m_schedClasschk = FALSE;
|
|
}
|
|
|
|
CSchedulingClassWiz::~CSchedulingClassWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CSchedulingClassWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CSchedulingClassWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_sch);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CSchedulingClassWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
LRESULT pos = SendDlgItemMessage(IDC_SPIN, UDM_GETPOS, 0, 0);
|
|
if (0 == HIWORD(pos) && LOWORD(pos) >= 0 && LOWORD(pos) <= 9 )
|
|
{
|
|
m_schedClass = (SCHEDULING_CLASS) LOWORD(pos);
|
|
m_schedClasschk = (BST_CHECKED == IsDlgButtonChecked(IDC_SCHEDULING_CHK));
|
|
return TRUE;
|
|
}
|
|
|
|
HWND hWndCtl = GetDlgItem(IDC_SCLASS);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_SCHEDULING_CHK, m_schedClasschk ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
SendDlgItemMessage(IDC_SPIN, UDM_SETPOS, 0, MAKELONG(m_schedClass, 0) );
|
|
SendDlgItemMessage(IDC_SPIN, UDM_SETRANGE32, 0, 9);
|
|
|
|
if (m_bReadOnly || !m_schedClasschk)
|
|
{
|
|
DisableControl(IDC_SCLASS);
|
|
DisableControl(IDC_SPIN);
|
|
}
|
|
if (m_bReadOnly)
|
|
DisableControl(IDC_SCHEDULING_CHK);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
LRESULT CSchedulingClassWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_SCHEDULING_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_SCHEDULING_CHK));
|
|
|
|
::EnableWindow(GetDlgItem(IDC_SCLASS), checked);
|
|
::EnableWindow(GetDlgItem(IDC_SPIN), checked);
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CSchedulingClassWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CWorkingSetWiz
|
|
CWorkingSetWiz::CWorkingSetWiz(WIZ_POSITION pos, int nTitle, PCProcDetail *ProcDetail)
|
|
: CMySnapInPropertyWizardImpl<CWorkingSetWiz>(pos, nTitle), m_pProcDetail(ProcDetail), m_pJobDetail(NULL)
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
CWorkingSetWiz::CWorkingSetWiz(WIZ_POSITION pos, int nTitle, PCJobDetail *JobDetail)
|
|
: CMySnapInPropertyWizardImpl<CWorkingSetWiz>(pos, nTitle), m_pProcDetail(NULL), m_pJobDetail(JobDetail)
|
|
{
|
|
Initialize();
|
|
}
|
|
|
|
void CWorkingSetWiz::Initialize()
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
}
|
|
|
|
CWorkingSetWiz::~CWorkingSetWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CWorkingSetWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CWorkingSetWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_mem);
|
|
if (m_pProcDetail)
|
|
pTopic = const_cast<TCHAR*>(HELP_ru_workset);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CWorkingSetWiz::Validate(BOOL bSave)
|
|
{
|
|
LONG_PTR PosErr = 0;
|
|
MEMORY_VALUE minWS;
|
|
MEMORY_VALUE maxWS;
|
|
|
|
BOOL WSchk = (BST_CHECKED == IsDlgButtonChecked(IDC_WORKINGSET_CHK));
|
|
|
|
minWS = SendDlgItemMessage(IDC_MINWS_SPIN, UDM_GETPOS32, 0, (LPARAM) &PosErr);
|
|
if (PosErr || minWS > MAXLONG - 1 || (WSchk && minWS <= 0) )
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_MINWS);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
ITEM_STR strOut;
|
|
LoadStringHelper(strOut, IDS_WSMINMAX_WARNING);
|
|
MessageBox(strOut, NULL, MB_OK | MB_ICONWARNING);
|
|
return FALSE;
|
|
}
|
|
maxWS = SendDlgItemMessage(IDC_MAXWS_SPIN, UDM_GETPOS32, 0, (LPARAM) &PosErr);
|
|
if (PosErr || maxWS > MAXLONG - 1 || (WSchk && minWS >= maxWS) )
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_MAXWS);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
ITEM_STR strOut;
|
|
LoadStringHelper(strOut, IDS_WSMINMAX_WARNING);
|
|
MessageBox(strOut, NULL, MB_OK | MB_ICONWARNING);
|
|
return FALSE;
|
|
}
|
|
|
|
if (bSave)
|
|
{
|
|
|
|
if (m_pProcDetail)
|
|
{
|
|
SetMGMTFlag(m_pProcDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_WS_MINMAX, WSchk);
|
|
m_pProcDetail->base.mgmtParms.minWS = minWS *1024;
|
|
m_pProcDetail->base.mgmtParms.maxWS = maxWS *1024;
|
|
|
|
}
|
|
else if (m_pJobDetail)
|
|
{
|
|
SetMGMTFlag(m_pJobDetail->base.mgmtParms.mFlags, PCMFLAG_APPLY_WS_MINMAX, WSchk);
|
|
m_pJobDetail->base.mgmtParms.minWS = minWS * 1024;
|
|
m_pJobDetail->base.mgmtParms.maxWS = maxWS * 1024;
|
|
}
|
|
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CWorkingSetWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
return Validate(TRUE);
|
|
}
|
|
else
|
|
{
|
|
BOOL WSchk = FALSE;
|
|
MEMORY_VALUE minWS = 0;
|
|
MEMORY_VALUE maxWS = 0;
|
|
|
|
if (m_pProcDetail)
|
|
{
|
|
WSchk = m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_WS_MINMAX;
|
|
minWS = m_pProcDetail->base.mgmtParms.minWS;
|
|
maxWS = m_pProcDetail->base.mgmtParms.maxWS;
|
|
|
|
}
|
|
else if (m_pJobDetail)
|
|
{
|
|
WSchk = m_pJobDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_WS_MINMAX;
|
|
minWS = m_pJobDetail->base.mgmtParms.minWS;
|
|
maxWS = m_pJobDetail->base.mgmtParms.maxWS;
|
|
}
|
|
if ( minWS/1024 > (MAXLONG - 1) ||
|
|
maxWS/1024 > (MAXLONG - 1) )
|
|
m_bReadOnly = TRUE;
|
|
|
|
long minWSInK = (long) (minWS/1024);
|
|
long maxWSInK = (long) (maxWS/1024);
|
|
|
|
CheckDlgButton(IDC_WORKINGSET_CHK, WSchk ? BST_CHECKED : BST_UNCHECKED);
|
|
SendDlgItemMessage(IDC_MINWS_SPIN, UDM_SETRANGE32, 0, MAXLONG - 1 );
|
|
SendDlgItemMessage(IDC_MINWS_SPIN, UDM_SETPOS32, 0, minWSInK );
|
|
|
|
SendDlgItemMessage(IDC_MAXWS_SPIN, UDM_SETRANGE32, 0, MAXLONG - 1 );
|
|
SendDlgItemMessage(IDC_MAXWS_SPIN, UDM_SETPOS32, 0, maxWSInK );
|
|
|
|
ApplyControlEnableRules(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
void CWorkingSetWiz::ApplyControlEnableRules(BOOL bForceDisable)
|
|
{
|
|
BOOL bEnable;
|
|
if (m_bReadOnly || !(BST_CHECKED == IsDlgButtonChecked(IDC_WORKINGSET_CHK)) || bForceDisable)
|
|
bEnable = FALSE;
|
|
else
|
|
bEnable = TRUE;
|
|
|
|
UINT ids[] = { IDC_MINWS, IDC_MAXWS, IDC_MINWS_SPIN, IDC_MAXWS_SPIN, 0 };
|
|
for (int i = 0; ids[i]; i++)
|
|
::EnableWindow(GetDlgItem(ids[i]), bEnable);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_WORKINGSET_CHK), !(m_bReadOnly || bForceDisable));
|
|
}
|
|
|
|
BOOL CWorkingSetWiz::OnSetActive()
|
|
{
|
|
if ( m_pProcDetail )
|
|
{
|
|
if (m_pProcDetail->base.mgmtParms.mFlags & PCMFLAG_APPLY_JOB_MEMBERSHIP)
|
|
ApplyControlEnableRules(TRUE);
|
|
else
|
|
ApplyControlEnableRules(FALSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
LRESULT CWorkingSetWiz::OnSpin(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
|
{
|
|
if (idCtrl == IDC_MINWS_SPIN ||
|
|
idCtrl == IDC_MAXWS_SPIN )
|
|
{
|
|
NMUPDOWN * nmupdown = (NMUPDOWN *) pnmh;
|
|
__int64 value = (__int64) nmupdown->iPos + 1024 * (__int64) nmupdown->iDelta;
|
|
if ( value <= MAXLONG - 1 )
|
|
nmupdown->iDelta *= 1024;
|
|
}
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CWorkingSetWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_WORKINGSET_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_WORKINGSET_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_MINWS), checked);
|
|
::EnableWindow(GetDlgItem(IDC_MAXWS), checked);
|
|
::EnableWindow(GetDlgItem(IDC_MINWS_SPIN), checked);
|
|
::EnableWindow(GetDlgItem(IDC_MAXWS_SPIN), checked);
|
|
}
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CWorkingSetWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CCommittedMemoryWiz
|
|
|
|
CCommittedMemoryWiz::CCommittedMemoryWiz(WIZ_POSITION pos, int nTitle, MEMORY_VALUE *procmemorylimit, bool *procmemorylimitchk, MEMORY_VALUE *jobmemorylimit, bool *jobmemorylimitchk) :
|
|
CMySnapInPropertyWizardImpl<CCommittedMemoryWiz>(pos, nTitle),
|
|
m_procmemorylimit(*procmemorylimit), m_procmemorylimitchk(*procmemorylimitchk),
|
|
m_jobmemorylimit(*jobmemorylimit), m_jobmemorylimitchk(*jobmemorylimitchk)
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
|
|
m_procmemorylimitchk = m_jobmemorylimitchk = FALSE;
|
|
m_procmemorylimit = m_jobmemorylimit = 0;
|
|
}
|
|
|
|
CCommittedMemoryWiz::~CCommittedMemoryWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CCommittedMemoryWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CCommittedMemoryWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_mem);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CCommittedMemoryWiz::Validate(BOOL bSave)
|
|
{
|
|
LONG_PTR PosErr = 0;
|
|
MEMORY_VALUE procmemorylimit;
|
|
MEMORY_VALUE jobmemorylimit;
|
|
|
|
procmemorylimit = SendDlgItemMessage(IDC_PROC_SPIN, UDM_GETPOS32, 0, (LPARAM) &PosErr);
|
|
if (PosErr || procmemorylimit > MAXLONG - 1)
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_PROCMEMORY);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
jobmemorylimit = SendDlgItemMessage(IDC_JOB_SPIN, UDM_GETPOS32, 0, (LPARAM) &PosErr);
|
|
if (PosErr || jobmemorylimit > MAXLONG - 1)
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_JOBMEMORY);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
|
|
if (bSave)
|
|
{
|
|
m_procmemorylimitchk = (BST_CHECKED == IsDlgButtonChecked(IDC_PROCMEMORY_CHK));
|
|
m_procmemorylimit = procmemorylimit * 1024;
|
|
m_jobmemorylimitchk = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBMEMORY_CHK));
|
|
m_jobmemorylimit = jobmemorylimit * 1024;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CCommittedMemoryWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
return Validate(TRUE);
|
|
}
|
|
else
|
|
{
|
|
if ( m_procmemorylimit/1024 > (MAXLONG - 1) ||
|
|
m_jobmemorylimit/1024 > (MAXLONG - 1) )
|
|
m_bReadOnly = TRUE;
|
|
|
|
long ProcMemInK = (long) (m_procmemorylimit/1024);
|
|
long JobMemInK = (long) (m_jobmemorylimit/1024);
|
|
|
|
CheckDlgButton(IDC_PROCMEMORY_CHK, m_procmemorylimitchk ? BST_CHECKED : BST_UNCHECKED);
|
|
SendDlgItemMessage(IDC_PROC_SPIN, UDM_SETRANGE32, 0, MAXLONG - 1);
|
|
SendDlgItemMessage(IDC_PROC_SPIN, UDM_SETPOS32, 0, ProcMemInK );
|
|
|
|
CheckDlgButton(IDC_JOBMEMORY_CHK, m_jobmemorylimitchk ? BST_CHECKED : BST_UNCHECKED);
|
|
SendDlgItemMessage(IDC_JOB_SPIN, UDM_SETRANGE32, 0, MAXLONG - 1);
|
|
SendDlgItemMessage(IDC_JOB_SPIN, UDM_SETPOS32, 0, JobMemInK );
|
|
|
|
if (m_bReadOnly || !m_procmemorylimitchk)
|
|
DisableControl(IDC_PROCMEMORY);
|
|
|
|
if (m_bReadOnly || !m_jobmemorylimitchk)
|
|
DisableControl(IDC_JOBMEMORY);
|
|
|
|
if (m_bReadOnly)
|
|
{
|
|
DisableControl(IDC_PROCMEMORY_CHK);
|
|
DisableControl(IDC_JOBMEMORY_CHK);
|
|
}
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
LRESULT CCommittedMemoryWiz::OnSpin(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
|
{
|
|
if (idCtrl == IDC_PROC_SPIN ||
|
|
idCtrl == IDC_JOB_SPIN )
|
|
{
|
|
NMUPDOWN * nmupdown = (NMUPDOWN *) pnmh;
|
|
__int64 value = (__int64) nmupdown->iPos + 1024 * (__int64) nmupdown->iDelta;
|
|
if ( value <= MAXLONG - 1 )
|
|
nmupdown->iDelta *= 1024;
|
|
}
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CCommittedMemoryWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_PROCMEMORY_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_PROCMEMORY_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_PROCMEMORY), checked);
|
|
::EnableWindow(GetDlgItem(IDC_PROC_SPIN), checked);
|
|
}
|
|
else if (wID == IDC_JOBMEMORY_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBMEMORY_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_JOBMEMORY), checked);
|
|
::EnableWindow(GetDlgItem(IDC_JOB_SPIN), checked);
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CCommittedMemoryWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CProcCountWiz
|
|
CProcCountWiz::CProcCountWiz(WIZ_POSITION pos, int nTitle, PROC_COUNT *processcount, bool *processcountchk ) :
|
|
CMySnapInPropertyWizardImpl<CProcCountWiz>(pos, nTitle),
|
|
m_processcount(*processcount), m_processcountchk(*processcountchk)
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
|
|
m_processcount = 0;
|
|
m_processcountchk = FALSE;
|
|
}
|
|
|
|
CProcCountWiz::~CProcCountWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CProcCountWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CProcCountWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_procs);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CProcCountWiz::Validate(BOOL bSave)
|
|
{
|
|
LONG_PTR PosErr = 0;
|
|
LRESULT processcount = SendDlgItemMessage(IDC_SPIN, UDM_GETPOS32, 0, (LPARAM) &PosErr);
|
|
|
|
if (PosErr || processcount < 0)
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_PROCESSCOUNT);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
return FALSE;
|
|
}
|
|
|
|
if (bSave)
|
|
{
|
|
m_processcountchk = (BST_CHECKED == IsDlgButtonChecked(IDC_PROCESSCOUNT_CHK));
|
|
m_processcount = (PROC_COUNT) processcount;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CProcCountWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
return Validate(TRUE);
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_PROCESSCOUNT_CHK, m_processcountchk ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
SendDlgItemMessage(IDC_SPIN, UDM_SETRANGE32, 0, MAXLONG-1);
|
|
SendDlgItemMessage(IDC_SPIN, UDM_SETPOS32, 0, m_processcount );
|
|
|
|
if (m_bReadOnly || !m_processcountchk)
|
|
{
|
|
DisableControl(IDC_PROCESSCOUNT);
|
|
DisableControl(IDC_SPIN);
|
|
}
|
|
if (m_bReadOnly)
|
|
DisableControl(IDC_PROCESSCOUNT_CHK);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
LRESULT CProcCountWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_PROCESSCOUNT_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_PROCESSCOUNT_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_PROCESSCOUNT), checked);
|
|
::EnableWindow(GetDlgItem(IDC_SPIN), checked);
|
|
}
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CProcCountWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CTimeWiz
|
|
CTimeWiz::CTimeWiz(WIZ_POSITION pos, int nTitle,
|
|
TIME_VALUE *procusertime, bool *procusertimechk,
|
|
TIME_VALUE *jobusertime, bool *jobusertimechk, bool *jobmsgontimelimit) :
|
|
CMySnapInPropertyWizardImpl<CTimeWiz>(pos, nTitle),
|
|
m_procusertime(*procusertime), m_procusertimechk(*procusertimechk),
|
|
m_jobusertime(*jobusertime), m_jobusertimechk(*jobusertimechk), m_jobmsgontimelimit(*jobmsgontimelimit)
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
|
|
m_procusertimechk = m_jobusertimechk = m_jobmsgontimelimit = FALSE;
|
|
m_procusertime = m_jobusertime = 0;
|
|
}
|
|
|
|
CTimeWiz::~CTimeWiz()
|
|
{
|
|
}
|
|
|
|
|
|
LRESULT CTimeWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CTimeWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_time);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CTimeWiz::Validate(BOOL bSave)
|
|
{
|
|
TIME_VALUE procusertime;
|
|
TIME_VALUE jobusertime;
|
|
|
|
bool procusertimechk = (BST_CHECKED == IsDlgButtonChecked(IDC_PROCUSERTIME_CHK));
|
|
bool jobusertimechk = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBUSERTIME_CHK));
|
|
|
|
if ( !ValidateTimeField(m_hWnd, IDC_PROCUSERTIME, procusertime) ||
|
|
(procusertimechk && procusertime < PC_MIN_TIME_LIMIT) )
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_PROCUSERTIME);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
CComBSTR bTemp;
|
|
if (bTemp.LoadString(IDS_TIMEENTRY))
|
|
MessageBox(bTemp.m_str, NULL, MB_OK | MB_ICONWARNING);
|
|
return FALSE;
|
|
}
|
|
if ( !ValidateTimeField(m_hWnd, IDC_JOBUSERTIME, jobusertime) ||
|
|
(jobusertimechk && jobusertime < PC_MIN_TIME_LIMIT) )
|
|
{
|
|
HWND hWndCtl = GetDlgItem(IDC_JOBUSERTIME);
|
|
if(hWndCtl)
|
|
::SetFocus(hWndCtl);
|
|
MessageBeep(MB_ICONASTERISK);
|
|
CComBSTR bTemp;
|
|
if (bTemp.LoadString(IDS_TIMEENTRY))
|
|
MessageBox(bTemp.m_str, NULL, MB_OK | MB_ICONWARNING);
|
|
return FALSE;
|
|
}
|
|
|
|
if (bSave)
|
|
{
|
|
m_procusertimechk = procusertimechk;
|
|
m_procusertime = procusertime;
|
|
m_jobusertimechk = jobusertimechk;
|
|
m_jobusertime = jobusertime;
|
|
m_jobmsgontimelimit = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBTIMELIMIT_MSG));
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CTimeWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
return Validate(TRUE);
|
|
}
|
|
else
|
|
{
|
|
ITEM_STR str;
|
|
CheckDlgButton(IDC_PROCUSERTIME_CHK, m_procusertimechk ? BST_CHECKED : BST_UNCHECKED);
|
|
SetDlgItemText(IDC_PROCUSERTIME, FormatCNSTime(str, m_procusertime) );
|
|
|
|
CheckDlgButton(IDC_JOBUSERTIME_CHK, m_jobusertimechk ? BST_CHECKED : BST_UNCHECKED);
|
|
SetDlgItemText(IDC_JOBUSERTIME, FormatCNSTime(str, m_jobusertime) );
|
|
|
|
CheckRadioButton(IDC_JOBTIMELIMIT_TERM, IDC_JOBTIMELIMIT_MSG, m_jobmsgontimelimit ? IDC_JOBTIMELIMIT_MSG : IDC_JOBTIMELIMIT_TERM );
|
|
|
|
if (m_bReadOnly || !m_procusertimechk)
|
|
DisableControl(IDC_PROCUSERTIME);
|
|
|
|
if (m_bReadOnly || !m_jobusertimechk)
|
|
{
|
|
DisableControl(IDC_JOBUSERTIME);
|
|
DisableControl(IDC_JOBTIMELIMIT_TERM);
|
|
DisableControl(IDC_JOBTIMELIMIT_MSG);
|
|
}
|
|
|
|
if (m_bReadOnly)
|
|
{
|
|
DisableControl(IDC_PROCUSERTIME_CHK);
|
|
DisableControl(IDC_JOBUSERTIME_CHK);
|
|
}
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
LRESULT CTimeWiz::OnChk(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
if (wID == IDC_PROCUSERTIME_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_PROCUSERTIME_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_PROCUSERTIME), checked);
|
|
}
|
|
else if (wID == IDC_JOBUSERTIME_CHK)
|
|
{
|
|
bool checked = (BST_CHECKED == IsDlgButtonChecked(IDC_JOBUSERTIME_CHK));
|
|
::EnableWindow(GetDlgItem(IDC_JOBUSERTIME), checked);
|
|
::EnableWindow(GetDlgItem(IDC_JOBTIMELIMIT_TERM), checked);
|
|
::EnableWindow(GetDlgItem(IDC_JOBTIMELIMIT_MSG), checked);
|
|
}
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CTimeWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CAdvancedWiz
|
|
|
|
CAdvancedWiz::CAdvancedWiz(WIZ_POSITION pos, int nTitle, bool *endjob, bool *unhandledexcept ) :
|
|
CMySnapInPropertyWizardImpl<CAdvancedWiz>(pos, nTitle),
|
|
m_endjob(*endjob),m_unhandledexcept(*unhandledexcept)
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
|
|
m_endjob = m_unhandledexcept = FALSE;
|
|
}
|
|
|
|
CAdvancedWiz::~CAdvancedWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CAdvancedWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CAdvancedWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_adv);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CAdvancedWiz::Validate(BOOL bSave)
|
|
{
|
|
if (bSave)
|
|
{
|
|
m_endjob = (BST_CHECKED == IsDlgButtonChecked(IDC_ENDJOB_CHK));
|
|
m_unhandledexcept = (BST_CHECKED == IsDlgButtonChecked(IDC_UNHANDLEDEXCEPT_CHK));
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CAdvancedWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
return Validate(TRUE);
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_ENDJOB_CHK, m_endjob ? BST_CHECKED : BST_UNCHECKED);
|
|
CheckDlgButton(IDC_UNHANDLEDEXCEPT_CHK, m_unhandledexcept ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
if (m_bReadOnly)
|
|
{
|
|
DisableControl(IDC_ENDJOB_CHK);
|
|
DisableControl(IDC_UNHANDLEDEXCEPT_CHK);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
BOOL CAdvancedWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// CAdvBreakawayWiz
|
|
|
|
CAdvBreakawayWiz::CAdvBreakawayWiz(WIZ_POSITION pos, int nTitle, bool *breakaway, bool *silentbreakaway) :
|
|
CMySnapInPropertyWizardImpl<CAdvBreakawayWiz>(pos, nTitle),
|
|
m_breakaway(*breakaway), m_silentbreakaway(*silentbreakaway)
|
|
{
|
|
m_bReadOnly = FALSE;
|
|
|
|
m_breakaway = m_silentbreakaway = FALSE;
|
|
}
|
|
|
|
CAdvBreakawayWiz::~CAdvBreakawayWiz()
|
|
{
|
|
}
|
|
|
|
LRESULT CAdvBreakawayWiz::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
bHandled = FALSE;
|
|
|
|
return TRUE; // Let the system set the focus
|
|
}
|
|
|
|
LRESULT CAdvBreakawayWiz::OnWMHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
HELPINFO *phi = (HELPINFO*) lParam;
|
|
if (phi && phi->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
TCHAR *pTopic = const_cast<TCHAR*>(HELP_ru_job_adv);
|
|
|
|
MMCPropertyHelp(pTopic);
|
|
|
|
return TRUE;
|
|
}
|
|
bHandled = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL CAdvBreakawayWiz::Validate(BOOL bSave)
|
|
{
|
|
if (bSave)
|
|
{
|
|
m_breakaway = (BST_CHECKED == IsDlgButtonChecked(IDC_BREAKAWAY_CHK));
|
|
m_silentbreakaway = (BST_CHECKED == IsDlgButtonChecked(IDC_SILENTBREAKAWAY_CHK));
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CAdvBreakawayWiz::UpdateData(BOOL bSaveAndValidate)
|
|
{
|
|
if (bSaveAndValidate)
|
|
{
|
|
return Validate(TRUE);
|
|
}
|
|
else
|
|
{
|
|
CheckDlgButton(IDC_BREAKAWAY_CHK, m_breakaway ? BST_CHECKED : BST_UNCHECKED);
|
|
CheckDlgButton(IDC_SILENTBREAKAWAY_CHK, m_silentbreakaway ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
if (m_bReadOnly)
|
|
{
|
|
DisableControl(IDC_BREAKAWAY_CHK);
|
|
DisableControl(IDC_SILENTBREAKAWAY_CHK);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
BOOL CAdvBreakawayWiz::OnWizardNext()
|
|
{
|
|
if (!UpdateData(TRUE) )
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|