00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Prg_MiscPage.h"
00009 #include "ShedulerWnd.h"
00010
00011 extern CShedulerWnd *_pwndScheduler;
00012
00013 #ifdef _DEBUG
00014 #define new DEBUG_NEW
00015 #undef THIS_FILE
00016 static char THIS_FILE[] = __FILE__;
00017 #endif
00018
00019 IMPLEMENT_DYNCREATE(CPrg_MiscPage, CPropertyPage)
00020
00021 CPrg_MiscPage::CPrg_MiscPage() : CPropertyPage(CPrg_MiscPage::IDD)
00022 {
00023 m_psp.dwFlags |= PSP_USETITLE;
00024 m_psp.pszTitle = LS (L_MISC);
00025
00026 m_bHangupToutChanged = m_bExitToutChanged = m_bShutdownToutChanged = false;
00027 m_bDTAEChanged = false;
00028 }
00029
00030 CPrg_MiscPage::~CPrg_MiscPage()
00031 {
00032 }
00033
00034 void CPrg_MiscPage::DoDataExchange(CDataExchange* pDX)
00035 {
00036 CPropertyPage::DoDataExchange(pDX);
00037
00038 DDX_Control(pDX, IDC_SHUTDOWN_TOUT, m_wndShutdownTout);
00039 DDX_Control(pDX, IDC_LAUNCHDLD_TOUT, m_wndLaunchDldTout);
00040 DDX_Control(pDX, IDC_HANGUP_TOUT, m_wndHangupTout);
00041 DDX_Control(pDX, IDC_EXIT_TOUT, m_wndExitTout);
00042
00043 }
00044
00045 BEGIN_MESSAGE_MAP(CPrg_MiscPage, CPropertyPage)
00046
00047 ON_WM_CONTEXTMENU()
00048 ON_WM_HELPINFO()
00049 ON_COMMAND(ID_WHATISTHIS, OnWhatisthis)
00050 ON_BN_CLICKED(IDC_ASKFORST, OnAskforst)
00051 ON_CBN_SELCHANGE(IDC_EXIT_TOUT, OnSelchangeExitTout)
00052 ON_CBN_SELCHANGE(IDC_HANGUP_TOUT, OnSelchangeHangupTout)
00053 ON_CBN_SELCHANGE(IDC_LAUNCHDLD_TOUT, OnSelchangeLaunchdldTout)
00054 ON_CBN_SELCHANGE(IDC_SHUTDOWN_TOUT, OnSelchangeShutdownTout)
00055 ON_BN_CLICKED(IDC_DISABLEWDTASKAFTEREXEC, OnDisablewdtaskafterexec)
00056
00057 END_MESSAGE_MAP()
00058
00059 BOOL CPrg_MiscPage::OnInitDialog()
00060 {
00061 CPropertyPage::OnInitDialog();
00062
00063 CComboBox* pboxes [] = {
00064 &m_wndHangupTout, &m_wndExitTout, &m_wndShutdownTout, &m_wndLaunchDldTout
00065 };
00066
00067 for (int i = 0; i < sizeof (pboxes) / sizeof (CComboBox*); i++)
00068 {
00069 pboxes [i]->AddString (LS (L_DONTASKFORCONF));
00070
00071 UINT aSecs [] = {
00072 5, 15, 30, 60
00073 };
00074 for (int j = 0; j < sizeof (aSecs) / sizeof (UINT); j++)
00075 {
00076 CString str;
00077 str.Format (LS (L_N_SECONDS), aSecs [j]);
00078 pboxes [i]->AddString (str);
00079 }
00080
00081 pboxes [i]->AddString (LS (L_DISABLECONFTIMEOUT));
00082
00083 UINT uTimeout;
00084 switch (i) {
00085 case 0: uTimeout = _App.ConfTimeout_Hangup (); break;
00086 case 1: uTimeout = _App.ConfTimeout_Exit (); break;
00087 case 2: uTimeout = _App.ConfTimeout_Shutdown (); break;
00088 case 3: uTimeout = _App.ConfTimeout_LaunchDld (); break;
00089 default: ASSERT (FALSE); uTimeout = 0; break;
00090 }
00091
00092 SelectToutItem (pboxes [i], uTimeout);
00093 }
00094
00095 CheckDlgButton (IDC_ASKFORST, _App.WD_LastShutdownType_DontAsk () ? BST_UNCHECKED : BST_CHECKED);
00096 CheckDlgButton (IDC_DISABLEWDTASKAFTEREXEC, _App.WD_DisableAfterExec () ? BST_CHECKED : BST_UNCHECKED);
00097
00098 ApplyLanguage ();
00099
00100 return TRUE;
00101 }
00102
00103 void CPrg_MiscPage::OnContextMenu(CWnd* , CPoint point)
00104 {
00105 PrepareCHMgr (point);
00106 _CHMgr.ShowMenu ();
00107 }
00108
00109 void CPrg_MiscPage::ApplyLanguage()
00110 {
00111 fsDlgLngInfo lnginfo [] = {
00112 fsDlgLngInfo (IDC__TOUTSFORCONFS, L_TOUTSFORCONFS),
00113 fsDlgLngInfo (IDC__HANGUP, L_HANGUP),
00114 fsDlgLngInfo (IDC__EXIT, L_EXIT),
00115 fsDlgLngInfo (IDC__SHUTDOWN, L_SHUTDOWN),
00116 fsDlgLngInfo (IDC__LAUNCHDLD, L_LAUNCHDLD),
00117 fsDlgLngInfo (IDC_ASKFORST, L_ASKFORST),
00118 fsDlgLngInfo (IDC_DISABLEWDTASKAFTEREXEC, L_DISABLEWHENDONEAFTEREXEC),
00119
00120 };
00121
00122 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), 0);
00123 }
00124
00125 BOOL CPrg_MiscPage::OnHelpInfo(HELPINFO* pHelpInfo)
00126 {
00127 RECT rc;
00128 CWnd *pItem = GetDlgItem (pHelpInfo->iCtrlId);
00129 if (pItem == NULL)
00130 return TRUE;
00131 pItem->GetWindowRect (&rc);
00132 if (PtInRect (&rc, pHelpInfo->MousePos) == FALSE)
00133 {
00134 pHelpInfo->MousePos.x = rc.left + (rc.right - rc.left) / 2;
00135 pHelpInfo->MousePos.y = rc.top + (rc.bottom - rc.top) / 2;
00136 }
00137 PrepareCHMgr (pHelpInfo->MousePos);
00138 _CHMgr.OnWT ();
00139 return TRUE;
00140 }
00141
00142 void CPrg_MiscPage::PrepareCHMgr(CPoint point)
00143 {
00144 fsCtrlContextHelp aCH1 [] = {
00145 fsCtrlContextHelp (IDC__HANGUP, LS (L_HANGUP_TOUT_HERE)),
00146 fsCtrlContextHelp (IDC_HANGUP_TOUT, LS (L_HANGUP_TOUT_HERE)),
00147 fsCtrlContextHelp (IDC__EXIT, LS (L_EXIT_TOUT_HERE)),
00148 fsCtrlContextHelp (IDC_EXIT_TOUT, LS (L_EXIT_TOUT_HERE)),
00149 fsCtrlContextHelp (IDC__SHUTDOWN, LS (L_SHUTDOWN_TOUT_HERE)),
00150 fsCtrlContextHelp (IDC_SHUTDOWN_TOUT, LS (L_SHUTDOWN_TOUT_HERE)),
00151 fsCtrlContextHelp (IDC__LAUNCHDLD, LS (L_LAUNCHDLD_HERE)),
00152 fsCtrlContextHelp (IDC_LAUNCHDLD_TOUT, LS (L_LAUNCHDLD_HERE)),
00153 fsCtrlContextHelp (IDC_ASKFORST, LS (L_ASKFORST_HERE)),
00154 fsCtrlContextHelp (IDC_DISABLEWDTASKAFTEREXEC, LS (L_DISABLEWHENDONEAFTEREXEC_HERE)),
00155 };
00156
00157 static fsCtrlContextHelp aCH [sizeof (aCH1) / sizeof (fsCtrlContextHelp)];
00158 CopyMemory (aCH, aCH1, sizeof (aCH));
00159
00160 _CHMgr.PrepareContextMenu (this, point, aCH, sizeof (aCH) / sizeof (fsCtrlContextHelp));
00161 }
00162
00163 BOOL CPrg_MiscPage::OnApply()
00164 {
00165 _App.WD_LastShutdownType_DontAsk (IsDlgButtonChecked (IDC_ASKFORST) == BST_UNCHECKED);
00166
00167 _App.ConfTimeout_Hangup (GetTimeoutForToutItem (&m_wndHangupTout));
00168 _App.ConfTimeout_Exit (GetTimeoutForToutItem (&m_wndExitTout));
00169 _App.ConfTimeout_Shutdown (GetTimeoutForToutItem (&m_wndShutdownTout));
00170 _App.ConfTimeout_LaunchDld (GetTimeoutForToutItem (&m_wndLaunchDldTout));
00171
00172 int pos;
00173 if (m_bHangupToutChanged && _pwndScheduler->HangupWhenDone (&pos))
00174 {
00175 m_bHangupToutChanged = false;
00176 _pwndScheduler->GetMgr ()->GetTask (pos)->uWaitForConfirmation = _App.ConfTimeout_Hangup ();
00177 }
00178
00179 if (m_bExitToutChanged && _pwndScheduler->ExitWhenDone (&pos))
00180 {
00181 m_bExitToutChanged = false;
00182 _pwndScheduler->GetMgr ()->GetTask (pos)->uWaitForConfirmation = _App.ConfTimeout_Exit ();
00183 }
00184
00185 fsShutdownType enType = (fsShutdownType) _App.WD_LastShutdownType ();
00186 if (m_bShutdownToutChanged && _pwndScheduler->TurnoffWhenDone (enType, &pos))
00187 {
00188 m_bShutdownToutChanged = false;
00189 _pwndScheduler->GetMgr ()->GetTask (pos)->uWaitForConfirmation = _App.ConfTimeout_Shutdown ();
00190 }
00191
00192 if (m_bDTAEChanged)
00193 {
00194 m_bDTAEChanged = false;
00195 BOOL bDis = IsDlgButtonChecked (IDC_DISABLEWDTASKAFTEREXEC) == BST_CHECKED;
00196
00197 _App.WD_DisableAfterExec (bDis);
00198
00199 _pwndScheduler->HangupWhenDone (&pos);
00200 if (pos != -1) {
00201 if (bDis)
00202 _pwndScheduler->GetMgr ()->GetTask (pos)->dwFlags |= SCHEDULE_AUTODIS;
00203 else
00204 _pwndScheduler->GetMgr ()->GetTask (pos)->dwFlags &= ~SCHEDULE_AUTODIS;
00205 }
00206
00207 _pwndScheduler->ExitWhenDone (&pos);
00208 if (pos != -1) {
00209 if (bDis)
00210 _pwndScheduler->GetMgr ()->GetTask (pos)->dwFlags |= SCHEDULE_AUTODIS;
00211 else
00212 _pwndScheduler->GetMgr ()->GetTask (pos)->dwFlags &= ~SCHEDULE_AUTODIS;
00213 }
00214
00215 _pwndScheduler->TurnoffWhenDone (enType, &pos);
00216 if (pos != -1) {
00217 if (bDis)
00218 _pwndScheduler->GetMgr ()->GetTask (pos)->dwFlags |= SCHEDULE_AUTODIS;
00219 else
00220 _pwndScheduler->GetMgr ()->GetTask (pos)->dwFlags &= ~SCHEDULE_AUTODIS;
00221 }
00222 }
00223
00224 return CPropertyPage::OnApply();
00225 }
00226
00227 void CPrg_MiscPage::OnWhatisthis()
00228 {
00229 _CHMgr.OnWT ();
00230 }
00231
00232 void CPrg_MiscPage::SelectToutItem(CComboBox *pbox, UINT uTimeout)
00233 {
00234 switch (uTimeout) {
00235 case 0: pbox->SetCurSel (0); break;
00236 case 5: pbox->SetCurSel (1); break;
00237 case 15: pbox->SetCurSel (2); break;
00238 default:
00239 case 30: pbox->SetCurSel (3); break;
00240 case 60: pbox->SetCurSel (4); break;
00241 case UINT_MAX: pbox->SetCurSel (5); break;
00242 }
00243 }
00244
00245 void CPrg_MiscPage::OnAskforst()
00246 {
00247 SetModified ();
00248 }
00249
00250 void CPrg_MiscPage::OnSelchangeExitTout()
00251 {
00252 m_bExitToutChanged = true;
00253 SetModified ();
00254 }
00255
00256 void CPrg_MiscPage::OnSelchangeHangupTout()
00257 {
00258 m_bHangupToutChanged = true;
00259 SetModified ();
00260 }
00261
00262 void CPrg_MiscPage::OnSelchangeLaunchdldTout()
00263 {
00264 SetModified ();
00265 }
00266
00267 void CPrg_MiscPage::OnSelchangeShutdownTout()
00268 {
00269 m_bShutdownToutChanged = true;
00270 SetModified ();
00271 }
00272
00273 UINT CPrg_MiscPage::GetTimeoutForToutItem(CComboBox *pbox)
00274 {
00275 switch (pbox->GetCurSel ()){
00276 case 0: return 0;
00277 case 1: return 5;
00278 case 2: return 15;
00279 case CB_ERR:
00280 default:
00281 case 3: return 30;
00282 case 4: return 60;
00283 case 5: return UINT_MAX;
00284 }
00285 }
00286
00287 void CPrg_MiscPage::OnDisablewdtaskafterexec()
00288 {
00289 m_bDTAEChanged = true;
00290 SetModified ();
00291 }