00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Schedule_HTSPage.h"
00009 #include "fsScheduleMgr.h"
00010
00011 #ifdef _DEBUG
00012 #define new DEBUG_NEW
00013 #undef THIS_FILE
00014 static char THIS_FILE[] = __FILE__;
00015 #endif
00016
00017 IMPLEMENT_DYNCREATE(CSchedule_HTSPage, CPropertyPage)
00018
00019 CSchedule_HTSPage::CSchedule_HTSPage() : CPropertyPage(CSchedule_HTSPage::IDD)
00020 {
00021 m_psp.dwFlags |= PSP_USETITLE;
00022 m_psp.pszTitle = LS (L_HTS);
00023 }
00024
00025 CSchedule_HTSPage::~CSchedule_HTSPage()
00026 {
00027 }
00028
00029 void CSchedule_HTSPage::DoDataExchange(CDataExchange* pDX)
00030 {
00031 CPropertyPage::DoDataExchange(pDX);
00032
00033 DDX_Control(pDX, IDC_DATE, m_wndDate);
00034 DDX_Control(pDX, IDC_EVENT, m_wndEvent);
00035 DDX_Control(pDX, IDC_EVERYDIM, m_wndEveryDim);
00036
00037 DDX_Control(pDX, IDC_TIME, m_wndTime);
00038 }
00039
00040 BEGIN_MESSAGE_MAP(CSchedule_HTSPage, CPropertyPage)
00041
00042 ON_BN_CLICKED(IDC_ONCE, OnOnce)
00043 ON_BN_CLICKED(IDC_DAILY, OnDaily)
00044 ON_BN_CLICKED(IDC_ONEVERY, OnOnevery)
00045 ON_BN_CLICKED(IDC_ONEVENT, OnOnevent)
00046 ON_NOTIFY(DTN_DATETIMECHANGE, IDC_TIME, OnDatetimechangeTime)
00047 ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATE, OnDatetimechangeDate)
00048 ON_BN_CLICKED(IDC_SUN, OnSun)
00049 ON_BN_CLICKED(IDC_WED, OnWed)
00050 ON_BN_CLICKED(IDC_SAT, OnSat)
00051 ON_BN_CLICKED(IDC_MON, OnMon)
00052 ON_BN_CLICKED(IDC_THU, OnThu)
00053 ON_BN_CLICKED(IDC_TUE, OnTue)
00054 ON_BN_CLICKED(IDC_FRI, OnFri)
00055 ON_EN_CHANGE(IDC_EVERY, OnChangeEvery)
00056 ON_CBN_SELCHANGE(IDC_EVERYDIM, OnSelchangeEverydim)
00057 ON_CBN_SELCHANGE(IDC_EVENT, OnSelchangeEvent)
00058 ON_WM_CONTEXTMENU()
00059 ON_COMMAND(ID_WHATISTHIS, OnWhatisthis)
00060 ON_WM_HELPINFO()
00061
00062 END_MESSAGE_MAP()
00063
00064 BOOL CSchedule_HTSPage::OnInitDialog()
00065 {
00066 CPropertyPage::OnInitDialog();
00067
00068 UINT nChecked = IDC_ONEVENT;
00069
00070 switch (m_task->hts.enType)
00071 {
00072 case HTS_ONCE:
00073 nChecked = IDC_ONCE;
00074 break;
00075
00076 case HTS_DAILY:
00077 nChecked = IDC_DAILY;
00078 break;
00079
00080 case HTS_CONTINUOUSLY:
00081 nChecked = IDC_ONEVERY;
00082 break;
00083 }
00084
00085 CheckRadioButton (IDC_ONCE, IDC_ONEVENT, nChecked);
00086
00087 m_wndTime.SetFormat ("HH:mm");
00088
00089 m_wndEveryDim.AddString (LS (L_B_MINUTES));
00090 m_wndEveryDim.AddString (LS (L_B_HOURS));
00091 m_wndEveryDim.AddString (LS (L_B_DAYS));
00092 m_wndEveryDim.SetCurSel (0);
00093
00094 m_wndEvent.AddString (LS (L_ATSTARTUP));
00095 m_wndEvent.AddString (LS (L_AFTERDIALOK));
00096 m_wndEvent.AddString (LS (L_DIALWASFAILED));
00097 m_wndEvent.AddString (LS (L_WHENNOACTIVEDLDS));
00098 m_wndEvent.AddString (LS (L_WHENSPEEDSMALL));
00099 m_wndEvent.AddString (LS (L_WHENALLDLDSINERRSTATE));
00100 m_wndEvent.AddString (LS (L_WHENDONE_2));
00101 m_wndEvent.SetCurSel (0);
00102
00103 ((CSpinButtonCtrl*) GetDlgItem (IDC_EVERYSPIN))->SetRange (1, UD_MAXVAL);
00104 ((CSpinButtonCtrl*) GetDlgItem (IDC_DURINGSPIN))->SetRange (1, UD_MAXVAL);
00105
00106 SetDlgItemInt (IDC_DURING, 10);
00107 SetDlgItemInt (IDC_LOWSPEED, 100);
00108 SetDlgItemInt (IDC_EVERY, 1);
00109
00110 DataToDialog ();
00111
00112 UpdateEnabled ();
00113
00114 GetDlgItem (IDC_ONCE)->SetFocus ();
00115
00116 m_bNeedRecalcStartTime = FALSE;
00117
00118 ApplyLanguage ();
00119
00120 return FALSE;
00121 }
00122
00123 void CSchedule_HTSPage::UpdateEnabled()
00124 {
00125 BOOL b;
00126
00127 GetDlgItem (IDC_DATE)->EnableWindow (IsDlgButtonChecked (IDC_ONCE) == BST_CHECKED);
00128
00129 b = IsDlgButtonChecked (IDC_DAILY) == BST_CHECKED;
00130 UINT nIDs [] = {IDC_SUN, IDC_MON, IDC_TUE, IDC_WED, IDC_THU, IDC_FRI, IDC_SAT};
00131 for (int i = 0; i < sizeof (nIDs) / sizeof (UINT); i++)
00132 GetDlgItem (nIDs [i])->EnableWindow (b);
00133
00134 b = IsDlgButtonChecked (IDC_ONEVERY) == BST_CHECKED;
00135 GetDlgItem (IDC_EVERY)->EnableWindow (b);
00136 GetDlgItem (IDC_EVERYSPIN)->EnableWindow (b);
00137 GetDlgItem (IDC_EVERYDIM)->EnableWindow (b);
00138
00139 b = IsDlgButtonChecked (IDC_ONEVENT) == BST_CHECKED;
00140 GetDlgItem (IDC_EVENT)->EnableWindow (b);
00141 GetDlgItem (IDC_TIME)->EnableWindow (!b);
00142 GetDlgItem (IDC_STARTTIME)->EnableWindow (!b);
00143
00144 b = b && m_wndEvent.GetCurSel () > 3;
00145 GetDlgItem (IDC_DURING)->EnableWindow (b);
00146 GetDlgItem (IDC_DURINGSPIN)->EnableWindow (b);
00147 GetDlgItem (IDC__DURING)->EnableWindow (b);
00148 GetDlgItem (IDC__MINUTES)->EnableWindow (b);
00149
00150 b = b && m_wndEvent.GetCurSel () == 4;
00151 GetDlgItem (IDC__LOWSPEED)->EnableWindow (b);
00152 GetDlgItem (IDC_LOWSPEED)->EnableWindow (b);
00153 GetDlgItem (IDC__BPS)->EnableWindow (b);
00154 }
00155
00156 void CSchedule_HTSPage::OnOnce()
00157 {
00158 m_bNeedRecalcStartTime = TRUE;
00159 UpdateEnabled ();
00160 SetModified ();
00161 }
00162
00163 void CSchedule_HTSPage::OnDaily()
00164 {
00165 m_bNeedRecalcStartTime = TRUE;
00166 UpdateEnabled ();
00167 SetModified ();
00168 }
00169
00170 void CSchedule_HTSPage::OnOnevery()
00171 {
00172 m_bNeedRecalcStartTime = TRUE;
00173 UpdateEnabled ();
00174 SetModified ();
00175 }
00176
00177 void CSchedule_HTSPage::OnOnevent()
00178 {
00179 m_bNeedRecalcStartTime = TRUE;
00180 UpdateEnabled ();
00181 SetModified ();
00182 }
00183
00184 void CSchedule_HTSPage::DataToDialog()
00185 {
00186 UINT nIDs [] = {IDC_SUN, IDC_MON, IDC_TUE, IDC_WED, IDC_THU, IDC_FRI, IDC_SAT};
00187
00188 SYSTEMTIME time;
00189 FileTimeToSystemTime (&m_task->hts.next, &time);
00190
00191 switch (m_task->hts.enType)
00192 {
00193 case HTS_ONCE:
00194 m_wndDate.SetTime (&time);
00195 m_wndTime.SetTime (&time);
00196 break;
00197
00198 case HTS_DAILY:
00199 int i;
00200 for (i = 0; i < 7; i++)
00201 CheckDlgButton (nIDs [i], m_task->hts.aWeeklyDays [i] ? BST_CHECKED : BST_UNCHECKED);
00202 m_wndTime.SetTime (&time);
00203 break;
00204
00205 case HTS_CONTINUOUSLY:
00206 {
00207 UINT nInterval = m_task->hts.interval;
00208
00209 if (nInterval % (24*60) == 0)
00210 {
00211 SetDlgItemInt (IDC_EVERY, nInterval / 24 / 60);
00212 m_wndEveryDim.SetCurSel (2);
00213 }
00214 else if (nInterval % 60 == 0)
00215 {
00216 SetDlgItemInt (IDC_EVERY, nInterval / 60);
00217 m_wndEveryDim.SetCurSel (1);
00218 }
00219 else
00220 {
00221 SetDlgItemInt (IDC_EVERY, nInterval);
00222 m_wndEveryDim.SetCurSel (0);
00223 }
00224
00225 m_wndTime.SetTime (&time);
00226 }
00227 break;
00228
00229 default:
00230 m_wndEvent.SetCurSel (m_task->hts.enType - HTS_WHENISTART);
00231 if (m_task->hts.enType == HTS_WHENSPEEDLOW)
00232 {
00233 SetDlgItemInt (IDC_DURING, m_task->hts.speedLow.uTimeInterval);
00234 SetDlgItemInt (IDC_LOWSPEED, m_task->hts.speedLow.uLowSpeed);
00235 }
00236 else if (m_task->hts.enType == HTS_NOTHINGRECEIVED || m_task->hts.enType == HTS_WHENDONE)
00237 {
00238 SetDlgItemInt (IDC_DURING, m_task->hts.uTimeNothingReceived);
00239 }
00240
00241 break;
00242 }
00243 }
00244
00245 void CSchedule_HTSPage::OnDatetimechangeTime(NMHDR* , LRESULT* pResult)
00246 {
00247 m_bNeedRecalcStartTime = TRUE;
00248 SetModified ();
00249 *pResult = 0;
00250 }
00251
00252 BOOL CSchedule_HTSPage::OnApply()
00253 {
00254 SYSTEMTIME time;
00255 m_wndTime.GetTime (&time);
00256
00257 if (IsDlgButtonChecked (IDC_ONCE) == BST_CHECKED)
00258 {
00259 SYSTEMTIME date;
00260 m_wndDate.GetTime (&date);
00261
00262 date.wHour = time.wHour;
00263 date.wMinute = time.wMinute;
00264 date.wSecond = time.wSecond;
00265
00266 SystemTimeToFileTime (&date, &m_task->hts.next);
00267 m_task->hts.enType = HTS_ONCE;
00268 }
00269 else if (IsDlgButtonChecked (IDC_DAILY) == BST_CHECKED)
00270 {
00271 UINT nIDs [] = {IDC_SUN, IDC_MON, IDC_TUE, IDC_WED, IDC_THU, IDC_FRI, IDC_SAT};
00272 BOOL bOk = FALSE;
00273 for (int i = 0; i < 7; i++)
00274 {
00275 m_task->hts.aWeeklyDays [i] = IsDlgButtonChecked (nIDs [i]) == BST_CHECKED;
00276 bOk = bOk || m_task->hts.aWeeklyDays [i];
00277 }
00278 if (bOk == FALSE)
00279 {
00280
00281 MessageBox (LS (L_ENTERDAYS), LS (L_INPERR), MB_ICONEXCLAMATION);
00282 return FALSE;
00283 }
00284 m_task->hts.enType = HTS_DAILY;
00285 SystemTimeToFileTime (&time, &m_task->hts.next);
00286
00287 }
00288 else if (IsDlgButtonChecked (IDC_ONEVERY) == BST_CHECKED)
00289 {
00290 UINT u = GetDlgItemInt (IDC_EVERY);
00291 if (u == 0)
00292 {
00293 CString str; str.Format (LS (L_ENTERGREATER), 0);
00294 MessageBox (str, LS (L_ERR), MB_ICONEXCLAMATION);
00295 return FALSE;
00296 }
00297
00298 int i = m_wndEveryDim.GetCurSel ();
00299 int mul [] = {1, 60, 60*24};
00300 u *= mul [i];
00301 m_task->hts.interval = u;
00302 m_task->hts.enType = HTS_CONTINUOUSLY;
00303 SystemTimeToFileTime (&time, &m_task->hts.next);
00304 }
00305 else
00306 {
00307 m_task->hts.enType = (fsWhenToStartType) (HTS_WHENISTART + m_wndEvent.GetCurSel ());
00308 if (m_task->hts.enType == HTS_WHENSPEEDLOW)
00309 {
00310 m_task->hts.speedLow.uTimeInterval = GetDlgItemInt (IDC_DURING);
00311 m_task->hts.speedLow.uLowSpeed = GetDlgItemInt (IDC_LOWSPEED);
00312 }
00313 else if (m_task->hts.enType == HTS_NOTHINGRECEIVED || m_task->hts.enType == HTS_WHENDONE)
00314 {
00315 m_task->hts.uTimeNothingReceived = GetDlgItemInt (IDC_DURING);
00316 }
00317 }
00318
00319 return CPropertyPage::OnApply();
00320 }
00321
00322 void CSchedule_HTSPage::OnDatetimechangeDate(NMHDR* , LRESULT* pResult)
00323 {
00324 m_bNeedRecalcStartTime = TRUE;
00325 SetModified ();
00326 *pResult = 0;
00327 }
00328
00329 void CSchedule_HTSPage::OnSun()
00330 {
00331 m_bNeedRecalcStartTime = TRUE;
00332 SetModified ();
00333 }
00334
00335 void CSchedule_HTSPage::OnWed()
00336 {
00337 m_bNeedRecalcStartTime = TRUE;
00338 SetModified ();
00339 }
00340
00341 void CSchedule_HTSPage::OnSat()
00342 {
00343 m_bNeedRecalcStartTime = TRUE;
00344 SetModified ();
00345 }
00346
00347 void CSchedule_HTSPage::OnMon()
00348 {
00349 m_bNeedRecalcStartTime = TRUE;
00350 SetModified ();
00351 }
00352
00353 void CSchedule_HTSPage::OnThu()
00354 {
00355 m_bNeedRecalcStartTime = TRUE;
00356 SetModified ();
00357 }
00358
00359 void CSchedule_HTSPage::OnTue()
00360 {
00361 m_bNeedRecalcStartTime = TRUE;
00362 SetModified ();
00363 }
00364
00365 void CSchedule_HTSPage::OnFri()
00366 {
00367 m_bNeedRecalcStartTime = TRUE;
00368 SetModified ();
00369 }
00370
00371 void CSchedule_HTSPage::OnChangeEvery()
00372 {
00373 m_bNeedRecalcStartTime = TRUE;
00374 SetModified ();
00375 }
00376
00377 void CSchedule_HTSPage::OnSelchangeEverydim()
00378 {
00379 m_bNeedRecalcStartTime = TRUE;
00380 SetModified ();
00381 }
00382
00383 void CSchedule_HTSPage::OnSelchangeEvent()
00384 {
00385 SetModified ();
00386 UpdateEnabled ();
00387 }
00388
00389 void CSchedule_HTSPage::OnContextMenu(CWnd* , CPoint point)
00390 {
00391 PrepareCHMgr (point);
00392 _CHMgr.ShowMenu ();
00393 }
00394
00395 void CSchedule_HTSPage::OnWhatisthis()
00396 {
00397 _CHMgr.OnWT ();
00398 }
00399
00400 void CSchedule_HTSPage::ApplyLanguage()
00401 {
00402 fsDlgLngInfo lnginfo [] = {
00403 fsDlgLngInfo (IDC_STARTTIME, L_TIME),
00404 fsDlgLngInfo (IDC_ONCE, L_ONCE),
00405 fsDlgLngInfo (IDC_DAILY, L_INCERTAINDAYS),
00406 fsDlgLngInfo (IDC_SUN, L_SUNDAY),
00407 fsDlgLngInfo (IDC_MON, L_MONDAY),
00408 fsDlgLngInfo (IDC_TUE, L_TUESDAY),
00409 fsDlgLngInfo (IDC_WED, L_WEDNESDAY),
00410 fsDlgLngInfo (IDC_THU, L_THURSDAY),
00411 fsDlgLngInfo (IDC_FRI, L_FRIDAY),
00412 fsDlgLngInfo (IDC_SAT, L_SATURDAY),
00413 fsDlgLngInfo (IDC_ONEVERY, L_EVERY),
00414 fsDlgLngInfo (IDC_ONEVENT, L_ONEVENT),
00415 fsDlgLngInfo (IDC__DURING, L_DURING),
00416 fsDlgLngInfo (IDC__MINUTES, L_MIN),
00417 fsDlgLngInfo (IDC__LOWSPEED, L_LOWSPEED),
00418 };
00419
00420 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), 0);
00421 }
00422
00423 void CSchedule_HTSPage::PrepareCHMgr(CPoint point)
00424 {
00425 fsCtrlContextHelp aCH1 [] = {
00426 fsCtrlContextHelp (IDC_STARTTIME, LS (L_STARTTIMEHERE)),
00427 fsCtrlContextHelp (IDC_TIME, LS (L_TIMEHERE)),
00428 fsCtrlContextHelp (IDC_ONCE, LS (L_ONCEHERE)),
00429 fsCtrlContextHelp (IDC_DATE, LS (L_DATEHERE)),
00430 fsCtrlContextHelp (IDC_DAILY, LS (L_DAILYHERE)),
00431 fsCtrlContextHelp (IDC_SUN, LS (L_SUNHERE)),
00432 fsCtrlContextHelp (IDC_MON, LS (L_MONHERE)),
00433 fsCtrlContextHelp (IDC_TUE, LS (L_TUEHERE)),
00434 fsCtrlContextHelp (IDC_WED, LS (L_WEDHERE)),
00435 fsCtrlContextHelp (IDC_THU, LS (L_THUHERE)),
00436 fsCtrlContextHelp (IDC_FRI, LS (L_FRIHERE)),
00437 fsCtrlContextHelp (IDC_SAT, LS (L_SATHERE)),
00438 fsCtrlContextHelp (IDC_ONEVERY, LS (L_ONEVERYHERE)),
00439 fsCtrlContextHelp (IDC_EVERYDIM, LS (L_EVERYDIMHERE)),
00440 fsCtrlContextHelp (IDC_ONEVENT, LS (L_ONEVENTHERE)),
00441 fsCtrlContextHelp (IDC_EVENT, LS (L_EVENTHERE)),
00442 fsCtrlContextHelp (IDC__DURING, LS (L_DURINGHERE)),
00443 fsCtrlContextHelp (IDC_DURING, LS (L_DURINGHERE)),
00444 fsCtrlContextHelp (IDC__LOWSPEED, LS (L_LOWSPEEDHERE)),
00445 fsCtrlContextHelp (IDC_LOWSPEED, LS (L_LOWSPEEDHERE)),
00446 };
00447
00448 static fsCtrlContextHelp aCH [sizeof (aCH1) / sizeof (fsCtrlContextHelp)];
00449 CopyMemory (aCH, aCH1, sizeof (aCH));
00450
00451 _CHMgr.PrepareContextMenu (this, point, aCH, sizeof (aCH) / sizeof (fsCtrlContextHelp));
00452 }
00453
00454 BOOL CSchedule_HTSPage::OnHelpInfo(HELPINFO* pHelpInfo)
00455 {
00456 RECT rc;
00457 CWnd *pItem = GetDlgItem (pHelpInfo->iCtrlId);
00458 if (pItem == NULL)
00459 return TRUE;
00460 pItem->GetWindowRect (&rc);
00461 if (PtInRect (&rc, pHelpInfo->MousePos) == FALSE)
00462 {
00463 pHelpInfo->MousePos.x = rc.left + (rc.right - rc.left) / 2;
00464 pHelpInfo->MousePos.y = rc.top + (rc.bottom - rc.top) / 2;
00465 }
00466 PrepareCHMgr (pHelpInfo->MousePos);
00467 _CHMgr.OnWT ();
00468 return TRUE;
00469 }