00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Schedule_WTSPage.h"
00009 #include "fsScheduleMgr.h"
00010 #include "DownloadsWnd.h"
00011 #include "system.h"
00012
00013 extern CDownloadsWnd* _pwndDownloads;
00014
00015 #ifdef _DEBUG
00016 #define new DEBUG_NEW
00017 #undef THIS_FILE
00018 static char THIS_FILE[] = __FILE__;
00019 #endif
00020
00021 IMPLEMENT_DYNCREATE(CSchedule_WTSPage, CPropertyPage)
00022
00023 CSchedule_WTSPage::CSchedule_WTSPage() : CPropertyPage(CSchedule_WTSPage::IDD)
00024 {
00025 m_psp.dwFlags |= PSP_USETITLE;
00026 m_psp.pszTitle = LS (L_WTS);
00027 }
00028
00029 CSchedule_WTSPage::~CSchedule_WTSPage()
00030 {
00031 }
00032
00033 void CSchedule_WTSPage::DoDataExchange(CDataExchange* pDX)
00034 {
00035 CPropertyPage::DoDataExchange(pDX);
00036
00037 DDX_Control(pDX, IDC_BPS, m_wndBPS);
00038 DDX_Control(pDX, IDC_UNSELDLDS, m_wndUnselDlds);
00039 DDX_Control(pDX, IDC_SELDLDS, m_wndSelDlds);
00040 DDX_Control(pDX, IDC_TUM, m_wndTUM);
00041 DDX_Control(pDX, IDC_TOUNSEL, m_btnToUnsel);
00042 DDX_Control(pDX, IDC_TOSEL, m_btnToSel);
00043 DDX_Control(pDX, IDC_SHUTDOWNTYPE, m_wndShutdownType);
00044 DDX_Control(pDX, IDC_DIALCONNECTION, m_wndDialConnection);
00045 DDX_Control(pDX, IDC_CONNECTION, m_wndConnection);
00046 DDX_Control(pDX, IDC_CHOOSENAME, m_btnChoose);
00047 DDX_Control(pDX, IDC_WTS, m_wndWTS);
00048
00049 }
00050
00051 BEGIN_MESSAGE_MAP(CSchedule_WTSPage, CPropertyPage)
00052
00053 ON_CBN_SELCHANGE(IDC_WTS, OnSelchangeWts)
00054 ON_EN_CHANGE(IDC_PROGNAME, OnChangeProgname)
00055 ON_EN_CHANGE(IDC_ARGUMENTS, OnChangeArguments)
00056 ON_BN_CLICKED(IDC_CHOOSENAME, OnChoosename)
00057 ON_NOTIFY(NM_CLICK, IDC_UNSELDLDS, OnClickUnseldlds)
00058 ON_NOTIFY(NM_CLICK, IDC_SELDLDS, OnClickSeldlds)
00059 ON_BN_CLICKED(IDC_TOSEL, OnTosel)
00060 ON_BN_CLICKED(IDC_TOUNSEL, OnTounsel)
00061 ON_CBN_SELCHANGE(IDC_CONNECTION, OnSelchangeConnection)
00062 ON_BN_CLICKED(IDC_USEMAXATTEMPTS, OnUsemaxattempts)
00063 ON_BN_CLICKED(IDC_USEPAUSE, OnUsepause)
00064 ON_EN_CHANGE(IDC_REDIALPAUSE, OnChangeRedialpause)
00065 ON_EN_CHANGE(IDC_MAXREDIALS, OnChangeMaxredials)
00066 ON_CBN_SELCHANGE(IDC_DIALCONNECTION, OnSelchangeDialconnection)
00067 ON_BN_CLICKED(IDC_HANGUPALL, OnHangupall)
00068 ON_CBN_SELCHANGE(IDC_TUM, OnSelchangeTum)
00069 ON_CBN_SELCHANGE(IDC_SHUTDOWNTYPE, OnSelchangeShutdowntype)
00070 ON_CBN_SELCHANGE(IDC_BPS, OnSelchangeBps)
00071 ON_BN_CLICKED(IDC_HANGUPIFLESS, OnHangupifless)
00072 ON_BN_CLICKED(IDC_TRYAGAIN, OnTryagain)
00073 ON_BN_CLICKED(IDC_NOMORETHAN, OnNomorethan)
00074 ON_EN_CHANGE(IDC_TIMES, OnChangeTimes)
00075 ON_BN_CLICKED(IDC_FORCEEXIT, OnForceexit)
00076 ON_WM_CONTEXTMENU()
00077 ON_COMMAND(ID_WHATISTHIS, OnWhatisthis)
00078 ON_WM_HELPINFO()
00079
00080 END_MESSAGE_MAP()
00081
00082 BOOL CSchedule_WTSPage::OnInitDialog()
00083 {
00084 CPropertyPage::OnInitDialog();
00085
00086 m_btnChoose.SetIcon (SICO (IDI_CHOOSEFOLDER));
00087 m_btnToSel.SetIcon (SICO (IDI_TOSEL));
00088 m_btnToUnsel.SetIcon (SICO (IDI_TOUNSEL));
00089
00090 m_wndShutdownType.AddString (LS (L_SHUTDOWN));
00091 m_wndShutdownType.AddString (LS (L_RESTARTCOMP));
00092 m_wndShutdownType.AddString (LS (L_LOGOFF));
00093 m_wndShutdownType.AddString (LS (L_HIBERNATE));
00094 m_wndShutdownType.AddString (LS (L_STANDBY));
00095
00096 m_wndTUM.AddString (LS (L_LIGHT));
00097 m_wndTUM.AddString (LS (L_MEDIUM));
00098 m_wndTUM.AddString (LS (L_HEAVY));
00099
00100 m_wndBPS.AddString ("28.8K");
00101 m_wndBPS.AddString ("33.6K");
00102 m_wndBPS.AddString ("56K");
00103
00104 if (m_ras.EnumEntries ())
00105 {
00106 UINT c = m_ras.GetEntriesCount ();
00107 while (c--)
00108 {
00109 m_wndConnection.AddString (m_ras.GetEntry (c));
00110 m_wndDialConnection.AddString (m_ras.GetEntry (c));
00111 }
00112 }
00113
00114 m_wndConnection.SetCurSel (0);
00115 CheckRadioButton (IDC_RAD_ENABLE, IDC_RAD_INVERT, IDC_RAD_ENABLE);
00116
00117 CSpinButtonCtrl *pSpin = (CSpinButtonCtrl*) GetDlgItem (IDC_MAXREDIALSSPIN);
00118 pSpin->SetRange (1, UD_MAXVAL);
00119 SetDlgItemInt (IDC_MAXREDIALS, 1);
00120 pSpin = (CSpinButtonCtrl*) GetDlgItem (IDC_REDIALPAUSESPIN);
00121 pSpin->SetRange (1, UD_MAXVAL);
00122 SetDlgItemInt (IDC_REDIALPAUSE, 1);
00123 pSpin = (CSpinButtonCtrl*) GetDlgItem (IDC_TIMESSPIN);
00124 pSpin->SetRange (1, UD_MAXVAL);
00125 SetDlgItemInt (IDC_TIMES, 1);
00126
00127 CRect rc;
00128 m_wndSelDlds.GetClientRect (&rc);
00129 m_wndUnselDlds.InsertColumn (0, LS (L_ALLDLDS), LVCFMT_LEFT, rc.right);
00130 m_wndSelDlds.InsertColumn (0, "", LVCFMT_LEFT, rc.right);
00131
00132 m_wndWTS.AddString (LS (L_LAUNCHPRG));
00133 m_wndWTS.AddString (LS (L_STARTDLDS));
00134 m_wndWTS.AddString (LS (L_STOPDLDS));
00135 m_wndWTS.AddString (LS (L_STARTALLDLDS));
00136 m_wndWTS.AddString (LS (L_STOPALLDLDS));
00137 m_wndWTS.AddString (LS (L_DIALVIAMODEM));
00138 m_wndWTS.AddString (LS (L_HANGMODEM));
00139 m_wndWTS.AddString (LS (L_CHANGETUM));
00140 m_wndWTS.AddString (LS (L_EXITFROM));
00141 m_wndWTS.AddString (LS (L_SHUTDOWNCOMP));
00142 m_wndWTS.AddString (LS (L_PAUSEALLDOWNLOADS));
00143
00144 m_bNoRASNotified = FALSE;
00145
00146 for (int i = 0; i < 11; i++)
00147 ShowGroup (i, FALSE);
00148
00149 m_iWTS = m_task->wts.enType;
00150 m_wndWTS.SetCurSel (m_iWTS);
00151 OnSelchangeWts ();
00152
00153 if (m_task->wts.enType != WTS_PROGRAM)
00154 {
00155 SetDlgItemText (IDC_PROGNAME, _App.Scheduler_LastTask_ProgName ());
00156 SetDlgItemText (IDC_ARGUMENTS, _App.Scheduler_LastTask_ProgArgs ());
00157 }
00158
00159 ApplyLanguage ();
00160
00161 return TRUE;
00162 }
00163
00164 void CSchedule_WTSPage::ShowGroup(int iGrp, BOOL bShow, BOOL bEnabled)
00165 {
00166 static UINT ppGrpID [][20] = {
00167 {5, IDC__PROGNAME, IDC_PROGNAME, IDC_CHOOSENAME, IDC__ARGUMENTS, IDC_ARGUMENTS},
00168 {4, IDC_SELDLDS, IDC_TOSEL, IDC_TOUNSEL, IDC_UNSELDLDS},
00169 {4, IDC_SELDLDS, IDC_TOSEL, IDC_TOUNSEL, IDC_UNSELDLDS},
00170 {0},
00171 {0},
00172 {17, IDC__CONNECTION, IDC_DIALCONNECTION, IDC_USEMAXATTEMPTS, IDC_MAXREDIALS, IDC_MAXREDIALSSPIN, IDC_USEPAUSE, IDC_REDIALPAUSE, IDC_REDIALPAUSESPIN, IDC__DIALING, IDC__IFSUCCESSFULL, IDC_HANGUPIFLESS, IDC_BPS, IDC_TRYAGAIN, IDC_NOMORETHAN, IDC_TIMES, IDC_TIMESSPIN, IDC__TIMES},
00173 {3, IDC_HANGUPALL, IDC__HANGUP, IDC_CONNECTION},
00174 {2, IDC__TUM, IDC_TUM},
00175 {0},
00176 {3, IDC__TYPE, IDC_SHUTDOWNTYPE, IDC_FORCEEXIT},
00177 {3, IDC_RAD_ENABLE, IDC_RAD_DISABLE, IDC_RAD_INVERT},
00178 };
00179
00180 UINT nShow = bShow ? SW_SHOW : SW_HIDE;
00181
00182 for (UINT i = 0; i < ppGrpID [iGrp][0]; i++)
00183 {
00184 CWnd *pWnd = GetDlgItem (ppGrpID [iGrp][i+1]);
00185 pWnd->ShowWindow (nShow);
00186 if (bEnabled == FALSE)
00187 pWnd->EnableWindow (FALSE);
00188 }
00189 }
00190
00191 void CSchedule_WTSPage::OnSelchangeWts()
00192 {
00193
00194 ShowGroup (m_iWTS, FALSE);
00195
00196 m_iWTS = m_wndWTS.GetCurSel ();
00197
00198 LPCSTR psz1 = "", psz2 = "";
00199
00200 switch (m_iWTS)
00201 {
00202 case WTS_PROGRAM:
00203
00204 if (m_iWTS == m_task->wts.enType)
00205 {
00206 psz1 = m_task->wts.prog.pszName;
00207 psz2 = m_task->wts.prog.pszArgs;
00208 }
00209
00210 SetDlgItemText (IDC_PROGNAME, psz1);
00211 SetDlgItemText (IDC_ARGUMENTS, psz2);
00212 break;
00213
00214 case WTS_STARTDOWNLOAD:
00215 BuildDownloadsList ();
00216 LVCOLUMN col;
00217 col.mask = LVCF_TEXT;
00218 col.pszText = (LPSTR) LS (L_DLDSTOSTART);
00219 m_wndSelDlds.SetColumn (0, &col);
00220 break;
00221
00222 case WTS_STOPDOWNLOAD:
00223 BuildDownloadsList ();
00224 col.mask = LVCF_TEXT;
00225 col.pszText = (LPSTR) LS (L_DLDSTOSTOP);
00226 m_wndSelDlds.SetColumn (0, &col);
00227 break;
00228
00229 case WTS_DIAL:
00230 if (WTS_DIAL == m_task->wts.enType)
00231 {
00232 if (m_task->wts.dial.pszConnection)
00233 m_wndDialConnection.SelectString (-1, m_task->wts.dial.pszConnection);
00234 if (m_task->wts.dial.cAttempts != UINT_MAX)
00235 SetDlgItemInt (IDC_MAXREDIALS, m_task->wts.dial.cAttempts);
00236 CheckDlgButton (IDC_USEMAXATTEMPTS, m_task->wts.dial.cAttempts != UINT_MAX);
00237
00238 if (m_task->wts.dial.cPauseBetween != 0)
00239 SetDlgItemInt (IDC_REDIALPAUSE, m_task->wts.dial.cPauseBetween);
00240 CheckDlgButton (IDC_USEPAUSE, m_task->wts.dial.cPauseBetween != 0 ? BST_CHECKED : BST_UNCHECKED);
00241
00242 int iCur = -1;
00243 switch (m_task->wts.dial.dwHangupLess)
00244 {
00245 case 28800:
00246 iCur = 0;
00247 break;
00248
00249 case 33600:
00250 iCur = 1;
00251 break;
00252
00253 case 56000:
00254 iCur = 2;
00255 break;
00256 }
00257
00258 if (iCur != -1)
00259 m_wndBPS.SetCurSel (iCur);
00260 else
00261 m_wndBPS.SetCurSel (0);
00262
00263 CheckDlgButton (IDC_HANGUPIFLESS, iCur == -1 ? BST_UNCHECKED : BST_CHECKED);
00264
00265 CheckDlgButton (IDC_TRYAGAIN, m_task->wts.dial.cAgains > 0 ? BST_CHECKED : BST_UNCHECKED);
00266 CheckDlgButton (IDC_NOMORETHAN, m_task->wts.dial.cAgains == UINT_MAX || m_task->wts.dial.cAgains == 0 ? BST_UNCHECKED : BST_CHECKED);
00267
00268 SetDlgItemInt (IDC_TIMES, 1);
00269
00270 if (m_task->wts.dial.cAgains != UINT_MAX && m_task->wts.dial.cAgains)
00271 SetDlgItemInt (IDC_TIMES, m_task->wts.dial.cAgains, FALSE);
00272 }
00273 else
00274 {
00275 m_wndDialConnection.SetCurSel (0);
00276 SetDlgItemInt (IDC_MAXREDIALS, 100);
00277 CheckDlgButton (IDC_USEMAXATTEMPTS, BST_CHECKED);
00278
00279 SetDlgItemInt (IDC_REDIALPAUSE, 5);
00280 CheckDlgButton (IDC_USEPAUSE, BST_CHECKED);
00281
00282 CheckDlgButton (IDC_HANGUPIFLESS, BST_UNCHECKED);
00283 SetDlgItemInt (IDC_TIMES, 1);
00284 m_wndBPS.SetCurSel (0);
00285 }
00286
00287 if (m_ras.GetEntriesCount () == 0)
00288 {
00289 if (m_bNoRASNotified == FALSE)
00290 {
00291 MessageBox (LS (L_NODIALENTRIES), LS (L_ERR), MB_ICONEXCLAMATION);
00292 m_bNoRASNotified = TRUE;
00293 }
00294 }
00295
00296 break;
00297
00298 case WTS_HANGUP:
00299 if (WTS_HANGUP == m_task->wts.enType)
00300 {
00301 if (m_task->wts.pszHangupConnection)
00302 m_wndConnection.SelectString (-1, m_task->wts.pszHangupConnection);
00303
00304 CheckDlgButton (IDC_HANGUPALL, m_task->wts.pszHangupConnection ? BST_UNCHECKED : BST_CHECKED);
00305 }
00306 else
00307 {
00308 CheckDlgButton (IDC_HANGUPALL, BST_CHECKED);
00309 }
00310
00311 if (m_ras.GetEntriesCount () == 0)
00312 {
00313 if (m_bNoRASNotified == FALSE)
00314 {
00315 MessageBox (LS (L_NODIALENTRIES), LS (L_ERR), MB_ICONEXCLAMATION);
00316 m_bNoRASNotified = TRUE;
00317 }
00318 }
00319
00320 break;
00321
00322 case WTS_CHANGE_TUM:
00323 if (m_iWTS == m_task->wts.enType)
00324 m_wndTUM.SetCurSel (m_task->wts.enTUM);
00325 else
00326 m_wndTUM.SetCurSel (0);
00327 break;
00328
00329 case WTS_SHUTDOWN:
00330 if (m_iWTS == m_task->wts.enType)
00331 {
00332 m_wndShutdownType.SetCurSel (m_task->wts.shutdown.enShutdown);
00333 CheckDlgButton (IDC_FORCEEXIT, m_task->wts.shutdown.bForce ? BST_CHECKED : BST_UNCHECKED);
00334 }
00335 else
00336 {
00337 m_wndShutdownType.SetCurSel (0);
00338 CheckDlgButton (IDC_FORCEEXIT, BST_UNCHECKED);
00339 }
00340 break;
00341
00342 case WTS_RESTRAINALLDLDS:
00343 if (WTS_RESTRAINALLDLDS == m_task->wts.enType)
00344 {
00345 CheckRadioButton (IDC_RAD_ENABLE, IDC_RAD_INVERT, IDC_RAD_ENABLE +
00346 m_task->wts.enRAD);
00347 }
00348 break;
00349 }
00350
00351 if (m_bNoRASNotified &&
00352 (m_iWTS == WTS_DIAL || m_iWTS == WTS_HANGUP) )
00353 {
00354
00355 ShowGroup (m_iWTS, TRUE, FALSE);
00356 }
00357 else
00358 {
00359
00360 ShowGroup (m_iWTS);
00361 UpdateEnabled ();
00362 SetModified ();
00363 }
00364 }
00365
00366 void CSchedule_WTSPage::BuildDownloadsList()
00367 {
00368 _DldsMgr.LockList ();
00369 m_wndUnselDlds.DeleteAllItems ();
00370 m_wndSelDlds.DeleteAllItems ();
00371
00372 int cDlds = _DldsMgr.GetCount ();
00373
00374 int cSel = 0;
00375 int cUnSel = 0;
00376
00377 for (int i = 0; i < cDlds; i++)
00378 {
00379 vmsDownloadSmartPtr dld = _DldsMgr.GetDownload (i);
00380 BOOL bToUnsel = TRUE;
00381
00382 if (m_task->wts.enType == m_iWTS && m_task->wts.pvIDs != NULL)
00383 {
00384 for (int i = m_task->wts.pvIDs->size () - 1; i >= 0; i--)
00385 {
00386
00387 if (m_task->wts.pvIDs->at (i) == dld->nID)
00388 {
00389
00390 bToUnsel = FALSE;
00391 break;
00392 }
00393 }
00394 }
00395
00396 if (bToUnsel)
00397 {
00398 m_wndUnselDlds.InsertItem (cUnSel, dld->pMgr->get_URL (), 0);
00399 m_wndUnselDlds.SetItemData (cUnSel++, dld->nID);
00400 }
00401 else
00402 {
00403 m_wndSelDlds.InsertItem (cSel, dld->pMgr->get_URL (), 0);
00404 m_wndSelDlds.SetItemData (cSel++, dld->nID);
00405 }
00406 }
00407
00408 _DldsMgr.UnlockList ();
00409 }
00410
00411 void CSchedule_WTSPage::UpdateEnabled()
00412 {
00413 BOOL b;
00414
00415 switch (m_iWTS)
00416 {
00417 case WTS_STARTDOWNLOAD:
00418 case WTS_STOPDOWNLOAD:
00419 m_btnToSel.EnableWindow (m_wndUnselDlds.GetSelectedCount ());
00420 m_btnToUnsel.EnableWindow (m_wndSelDlds.GetSelectedCount ());
00421 break;
00422
00423 case WTS_DIAL:
00424 b = IsDlgButtonChecked (IDC_USEMAXATTEMPTS) == BST_CHECKED;
00425 GetDlgItem (IDC_MAXREDIALS)->EnableWindow (b);
00426 GetDlgItem (IDC_MAXREDIALSSPIN)->EnableWindow (b);
00427
00428 b = IsDlgButtonChecked (IDC_USEPAUSE) == BST_CHECKED;
00429 GetDlgItem (IDC_REDIALPAUSE)->EnableWindow (b);
00430 GetDlgItem (IDC_REDIALPAUSESPIN)->EnableWindow (b);
00431
00432 b = IsDlgButtonChecked (IDC_HANGUPIFLESS) == BST_CHECKED;
00433 GetDlgItem (IDC_BPS)->EnableWindow (b);
00434 GetDlgItem (IDC_TRYAGAIN)->EnableWindow (b);
00435 b = b && IsDlgButtonChecked (IDC_TRYAGAIN) == BST_CHECKED;
00436 GetDlgItem (IDC_NOMORETHAN)->EnableWindow (b);
00437 b = b && IsDlgButtonChecked (IDC_NOMORETHAN);
00438 GetDlgItem (IDC_TIMES)->EnableWindow (b);
00439 GetDlgItem (IDC_TIMESSPIN)->EnableWindow (b);
00440 GetDlgItem (IDC__TIMES)->EnableWindow (b);
00441 break;
00442
00443 case WTS_HANGUP:
00444 b = IsDlgButtonChecked (IDC_HANGUPALL) == BST_UNCHECKED;
00445 GetDlgItem (IDC__HANGUP)->EnableWindow (b);
00446 m_wndConnection.EnableWindow (b);
00447 break;
00448 }
00449 }
00450
00451 void CSchedule_WTSPage::OnChangeProgname()
00452 {
00453 SetModified ();
00454 }
00455
00456 void CSchedule_WTSPage::OnChangeArguments()
00457 {
00458 SetModified ();
00459 }
00460
00461 void CSchedule_WTSPage::OnChoosename()
00462 {
00463 CString strFilter;
00464 strFilter.Format ("%s (*.com; *.exe)|*.com;*.exe|%s (*.*)|*.*||", LS (L_APPS), LS (L_ALLFILES));
00465 CFileDialog dlg (TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR,
00466 strFilter, this);
00467
00468 _DlgMgr.OnDoModal (&dlg);
00469
00470 if (IDOK != dlg.DoModal ())
00471 {
00472 _DlgMgr.OnEndDialog (&dlg);
00473 return;
00474 }
00475
00476 _DlgMgr.OnEndDialog (&dlg);
00477
00478 SetDlgItemText (IDC_PROGNAME, dlg.GetPathName ());
00479 }
00480
00481 void CSchedule_WTSPage::OnClickUnseldlds(NMHDR* , LRESULT* pResult)
00482 {
00483 UpdateEnabled ();
00484 *pResult = 0;
00485 }
00486
00487 void CSchedule_WTSPage::OnClickSeldlds(NMHDR* , LRESULT* pResult)
00488 {
00489 UpdateEnabled ();
00490 *pResult = 0;
00491 }
00492
00493 void CSchedule_WTSPage::OnTosel()
00494 {
00495 POSITION pos = m_wndUnselDlds.GetFirstSelectedItemPosition ();
00496 int cItems = m_wndSelDlds.GetItemCount ();
00497 fs::list <int> vItems;
00498
00499 while (pos)
00500 {
00501 int iItem = m_wndUnselDlds.GetNextSelectedItem (pos);
00502 m_wndSelDlds.InsertItem (cItems, m_wndUnselDlds.GetItemText (iItem, 0), 0);
00503 m_wndSelDlds.SetItemData (cItems++, m_wndUnselDlds.GetItemData (iItem));
00504 vItems.add (iItem);
00505 }
00506
00507 for (int i = vItems.size () - 1; i >= 0; i--)
00508 {
00509 m_wndUnselDlds.DeleteItem (vItems [i]);
00510 }
00511
00512 UpdateEnabled ();
00513 SetModified ();
00514 }
00515
00516 void CSchedule_WTSPage::OnTounsel()
00517 {
00518 POSITION pos = m_wndSelDlds.GetFirstSelectedItemPosition ();
00519 int cItems = m_wndUnselDlds.GetItemCount ();
00520 fs::list <int> vItems;
00521
00522 while (pos)
00523 {
00524 int iItem = m_wndSelDlds.GetNextSelectedItem (pos);
00525 m_wndUnselDlds.InsertItem (cItems, m_wndSelDlds.GetItemText (iItem, 0), 0);
00526 m_wndUnselDlds.SetItemData (cItems++, m_wndSelDlds.GetItemData (iItem));
00527 vItems.add (iItem);
00528 }
00529
00530 for (int i = vItems.size () - 1; i >= 0; i--)
00531 {
00532 m_wndSelDlds.DeleteItem (vItems [i]);
00533 }
00534
00535 UpdateEnabled ();
00536 SetModified ();
00537 }
00538
00539 void CSchedule_WTSPage::OnSelchangeConnection()
00540 {
00541 SetModified ();
00542 }
00543
00544 void CSchedule_WTSPage::OnUsemaxattempts()
00545 {
00546 SetModified ();
00547 UpdateEnabled ();
00548 }
00549
00550 void CSchedule_WTSPage::OnUsepause()
00551 {
00552 SetModified ();
00553 UpdateEnabled ();
00554 }
00555
00556 void CSchedule_WTSPage::OnChangeRedialpause()
00557 {
00558 SetModified ();
00559 }
00560
00561 void CSchedule_WTSPage::OnChangeMaxredials()
00562 {
00563 SetModified ();
00564 }
00565
00566 void CSchedule_WTSPage::OnSelchangeDialconnection()
00567 {
00568 SetModified ();
00569 }
00570
00571 void CSchedule_WTSPage::OnHangupall()
00572 {
00573 UpdateEnabled ();
00574 SetModified ();
00575 }
00576
00577 void CSchedule_WTSPage::OnSelchangeTum()
00578 {
00579 SetModified ();
00580 }
00581
00582 void CSchedule_WTSPage::OnSelchangeShutdowntype()
00583 {
00584 SetModified ();
00585 }
00586
00587 void CSchedule_WTSPage::OnSelchangeBps()
00588 {
00589 SetModified ();
00590 }
00591
00592 void CSchedule_WTSPage::OnHangupifless()
00593 {
00594 if (fsSysGetOsMajorVersion () < 5)
00595 {
00596 MessageBox (LS (L_AVAILON2000), LS (L_ERR), MB_ICONEXCLAMATION);
00597 CheckDlgButton (IDC_HANGUPIFLESS, BST_UNCHECKED);
00598 return;
00599 }
00600
00601 SetModified ();
00602 UpdateEnabled ();
00603 }
00604
00605 void CSchedule_WTSPage::OnTryagain()
00606 {
00607 SetModified ();
00608 UpdateEnabled ();
00609 }
00610
00611 void CSchedule_WTSPage::OnNomorethan()
00612 {
00613 SetModified ();
00614 UpdateEnabled ();
00615 }
00616
00617 void CSchedule_WTSPage::OnChangeTimes()
00618 {
00619 SetModified ();
00620 }
00621
00622 BOOL CSchedule_WTSPage::OnApply()
00623 {
00624 switch (m_iWTS)
00625 {
00626 case WTS_PROGRAM:
00627 if (FALSE == ApplyProg ())
00628 return FALSE;
00629 break;
00630
00631 case WTS_STARTDOWNLOAD:
00632 case WTS_STOPDOWNLOAD:
00633 if (FALSE == ApplyStartStopDownloads ())
00634 return FALSE;
00635 m_task->wts.enType = (fsWhatToStartType) m_iWTS;
00636 break;
00637
00638 case WTS_STARTALLDOWNLOADS:
00639 case WTS_STOPALLDOWNLOADS:
00640 case WTS_EXIT:
00641 FreeSchedule ();
00642 m_task->wts.enType = (fsWhatToStartType) m_iWTS;
00643 break;
00644
00645 case WTS_DIAL:
00646 if (FALSE == ApplyDial ())
00647 return FALSE;
00648 break;
00649
00650 case WTS_HANGUP:
00651 if (FALSE == ApplyHangup ())
00652 return FALSE;
00653 break;
00654
00655 case WTS_CHANGE_TUM:
00656 FreeSchedule ();
00657 m_task->wts.enType = WTS_CHANGE_TUM;
00658 m_task->wts.enTUM = (fsTUM) m_wndTUM.GetCurSel ();
00659 break;
00660
00661 case WTS_SHUTDOWN:
00662 FreeSchedule ();
00663 m_task->wts.enType = WTS_SHUTDOWN;
00664 m_task->wts.shutdown.enShutdown = (fsShutdownType) m_wndShutdownType.GetCurSel ();
00665 m_task->wts.shutdown.bForce = IsDlgButtonChecked (IDC_FORCEEXIT) == BST_CHECKED;
00666 break;
00667
00668 case WTS_RESTRAINALLDLDS:
00669 FreeSchedule ();
00670 m_task->wts.enType = WTS_RESTRAINALLDLDS;
00671 if (IsDlgButtonChecked (IDC_RAD_ENABLE) == BST_CHECKED)
00672 m_task->wts.enRAD = RAD_ENABLE;
00673 else if (IsDlgButtonChecked (IDC_RAD_DISABLE) == BST_CHECKED)
00674 m_task->wts.enRAD = RAD_DISABLE;
00675 else
00676 m_task->wts.enRAD = RAD_INVERT;
00677 break;
00678 }
00679
00680 return CPropertyPage::OnApply();
00681 }
00682
00683 BOOL CSchedule_WTSPage::ApplyProg()
00684 {
00685 CString strProg, strArgs;
00686
00687 GetDlgItemText (IDC_PROGNAME, strProg);
00688 GetDlgItemText (IDC_ARGUMENTS, strArgs);
00689
00690 if (strProg.GetLength () == 0)
00691 {
00692 MessageBox (LS (L_ENTERPRGNAME), LS (L_INPERR), MB_ICONEXCLAMATION);
00693 return FALSE;
00694 }
00695
00696 FreeSchedule ();
00697
00698 m_task->wts.enType = (fsWhatToStartType) m_iWTS;
00699
00700 fsnew (m_task->wts.prog.pszName, char, strProg.GetLength () + 1);
00701 fsnew (m_task->wts.prog.pszArgs, char, strArgs.GetLength () + 1);
00702
00703 strcpy (m_task->wts.prog.pszName, strProg);
00704 strcpy (m_task->wts.prog.pszArgs, strArgs);
00705
00706 return TRUE;
00707 }
00708
00709 void CSchedule_WTSPage::FreeSchedule()
00710 {
00711 fsScheduleMgr::FreeTask (m_task);
00712 }
00713
00714 BOOL CSchedule_WTSPage::ApplyStartStopDownloads()
00715 {
00716 if (m_wndSelDlds.GetItemCount () == 0)
00717 {
00718 MessageBox (LS (L_ENTERDLDS), LS (L_INPERR), MB_ICONEXCLAMATION);
00719 return FALSE;
00720 }
00721
00722 FreeSchedule ();
00723
00724 fsnew1 (m_task->wts.pvIDs, fs::list <UINT>);
00725
00726 int cItems = m_wndSelDlds.GetItemCount ();
00727
00728 for (int i = 0; i < cItems; i++)
00729 m_task->wts.pvIDs->add (m_wndSelDlds.GetItemData (i));
00730
00731 return TRUE;
00732 }
00733
00734 BOOL CSchedule_WTSPage::ApplyDial()
00735 {
00736 if (m_ras.GetEntriesCount () == 0)
00737 return FALSE;
00738
00739 CString strConn;
00740 UINT uMaxAtt, uPause;
00741 DWORD dwHL = 0;
00742 UINT cAgains = 0;
00743
00744 m_wndDialConnection.GetLBText (m_wndDialConnection.GetCurSel (), strConn);
00745
00746 if (IsDlgButtonChecked (IDC_USEMAXATTEMPTS) == BST_CHECKED)
00747 uMaxAtt = GetDlgItemInt (IDC_MAXREDIALS);
00748 else
00749 uMaxAtt = UINT_MAX;
00750
00751 if (uMaxAtt == 0)
00752 {
00753 CString str; str.Format (LS (L_ENTERGREATER), 0);
00754 MessageBox (str, LS (L_INPERR), MB_ICONEXCLAMATION);
00755 CEdit *pEdit = (CEdit*) GetDlgItem (IDC_MAXREDIALS);
00756 pEdit->SetSel (0, -1);
00757 pEdit->SetFocus ();
00758 return FALSE;
00759 }
00760
00761 if (IsDlgButtonChecked (IDC_USEPAUSE) == BST_CHECKED)
00762 uPause = GetDlgItemInt (IDC_REDIALPAUSE);
00763 else
00764 uPause = 0;
00765
00766 if (IsDlgButtonChecked (IDC_HANGUPIFLESS) == BST_CHECKED)
00767 {
00768 int iCur = m_wndBPS.GetCurSel ();
00769 switch (iCur)
00770 {
00771 case 0:
00772 dwHL = 28800;
00773 break;
00774
00775 case 1:
00776 dwHL = 33600;
00777 break;
00778
00779 case 2:
00780 dwHL = 56000;
00781 break;
00782 }
00783
00784 if (IsDlgButtonChecked (IDC_TRYAGAIN) == BST_CHECKED)
00785 {
00786 if (IsDlgButtonChecked (IDC_NOMORETHAN) == BST_CHECKED)
00787 cAgains = GetDlgItemInt (IDC_TIMES);
00788 else
00789 cAgains = UINT_MAX;
00790
00791 if (cAgains == 0)
00792 {
00793 CString str; str.Format (LS (L_ENTERGREATER), 0);
00794 MessageBox (str, LS (L_INPERR), MB_ICONEXCLAMATION);
00795 CEdit *pEdit = (CEdit*) GetDlgItem (IDC_TIMES);
00796 pEdit->SetSel (0, -1);
00797 pEdit->SetFocus ();
00798 return FALSE;
00799 }
00800 }
00801 }
00802
00803 FreeSchedule ();
00804 m_task->wts.enType = WTS_DIAL;
00805
00806 fsnew (m_task->wts.dial.pszConnection, char, strConn.GetLength () + 1);
00807 strcpy (m_task->wts.dial.pszConnection, strConn);
00808
00809 m_task->wts.dial.cAttempts = uMaxAtt;
00810 m_task->wts.dial.cPauseBetween = uPause;
00811
00812 m_task->wts.dial.dwHangupLess = dwHL;
00813 m_task->wts.dial.cAgains = cAgains;
00814
00815 return TRUE;
00816 }
00817
00818 BOOL CSchedule_WTSPage::ApplyHangup()
00819 {
00820 if (m_ras.GetEntriesCount () == 0)
00821 return FALSE;
00822
00823 FreeSchedule ();
00824
00825 m_task->wts.enType = WTS_HANGUP;
00826
00827 if (IsDlgButtonChecked (IDC_HANGUPALL) == BST_CHECKED)
00828 {
00829 m_task->wts.pszHangupConnection = NULL;
00830 }
00831 else
00832 {
00833 CString strConn;
00834 m_wndConnection.GetLBText (m_wndConnection.GetCurSel (), strConn);
00835
00836 fsnew (m_task->wts.pszHangupConnection, char, strConn.GetLength () + 1);
00837 strcpy (m_task->wts.pszHangupConnection, strConn);
00838 }
00839
00840 return TRUE;
00841 }
00842
00843 void CSchedule_WTSPage::OnForceexit()
00844 {
00845 SetModified ();
00846 }
00847
00848 void CSchedule_WTSPage::OnContextMenu(CWnd* , CPoint point)
00849 {
00850 PrepareCHMgr (point);
00851 _CHMgr.ShowMenu ();
00852 }
00853
00854 void CSchedule_WTSPage::OnWhatisthis()
00855 {
00856 _CHMgr.OnWT ();
00857 }
00858
00859 void CSchedule_WTSPage::ApplyLanguage()
00860 {
00861 fsDlgLngInfo lnginfo [] = {
00862 fsDlgLngInfo (IDC_USEMAXATTEMPTS, L_MAXDIALATTEMPTS),
00863 fsDlgLngInfo (IDC_USEPAUSE, L_PAUSEBETWEENDIAL),
00864 fsDlgLngInfo (IDC_HANGUPIFLESS, L_HANGUPIFLESS),
00865 fsDlgLngInfo (IDC_TRYAGAIN, L_TRYAGAIN),
00866 fsDlgLngInfo (IDC_NOMORETHAN, L_NOMORETHAN),
00867 fsDlgLngInfo (IDC__CONNECTION, L_CONNECTIONTOUSE),
00868 fsDlgLngInfo (IDC__DIALING, L_DIAL),
00869 fsDlgLngInfo (IDC__IFSUCCESSFULL, L_IFSUCC),
00870 fsDlgLngInfo (IDC__TIMES, L_TIMES),
00871 fsDlgLngInfo (IDC_HANGUPALL, L_HANGUPALL),
00872 fsDlgLngInfo (IDC__HANGUP, L_CONNTOHANG),
00873 fsDlgLngInfo (IDC__PROGNAME, L_PRGNAME),
00874 fsDlgLngInfo (IDC__ARGUMENTS, L_ARGS),
00875 fsDlgLngInfo (IDC__TYPE, L_SHUTDOWNTYPE),
00876 fsDlgLngInfo (IDC_FORCEEXIT, L_FORCEAPPS),
00877 fsDlgLngInfo (IDC_RAD_ENABLE, L_ENABLE),
00878 fsDlgLngInfo (IDC_RAD_DISABLE, L_DISABLE),
00879 fsDlgLngInfo (IDC_RAD_INVERT, L_SWITCH),
00880 };
00881
00882 CString str = LS (L_CHANGETUMTO); str += ':';
00883 SetDlgItemText (IDC__TUM, str);
00884
00885 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), 0);
00886 }
00887
00888 void CSchedule_WTSPage::PrepareCHMgr(CPoint point)
00889 {
00890 fsCtrlContextHelp aCH1 [] = {
00891 fsCtrlContextHelp (IDC__TUM, LS (L_SETTUMHERE)),
00892 fsCtrlContextHelp (IDC_TUM, LS (L_SETTUMHERE)),
00893 fsCtrlContextHelp (IDC__CONNECTION, LS (L_CHOOSEENTRY)),
00894 fsCtrlContextHelp (IDC_DIALCONNECTION, LS (L_CHOOSEENTRY)),
00895 fsCtrlContextHelp (IDC_USEMAXATTEMPTS, LS (L_MAXDIALSHERE)),
00896 fsCtrlContextHelp (IDC_USEPAUSE, LS (L_USEPAUSEHERE)),
00897 fsCtrlContextHelp (IDC_HANGUPIFLESS, LS (L_HANGUPIFLESSHERE)),
00898 fsCtrlContextHelp (IDC_BPS, LS (L_MINBPSHERE)),
00899 fsCtrlContextHelp (IDC_TRYAGAIN, LS (L_TRYAGAINHERE)),
00900 fsCtrlContextHelp (IDC_NOMORETHAN, LS (L_NOMORETHANHERE)),
00901 fsCtrlContextHelp (IDC_SELDLDS, LS (L_SELDLDSHERE)),
00902 fsCtrlContextHelp (IDC_UNSELDLDS, LS (L_ALLDLDSHERE)),
00903 fsCtrlContextHelp (IDC_TOSEL, LS (L_TOSELHERE)),
00904 fsCtrlContextHelp (IDC_TOUNSEL, LS (L_TOUNSELHERE)),
00905 fsCtrlContextHelp (IDC__PROGNAME, LS (L_PROGNAMEHERE)),
00906 fsCtrlContextHelp (IDC_PROGNAME, LS (L_PROGNAMEHERE)),
00907 fsCtrlContextHelp (IDC_CHOOSENAME, LS (L_CHOOSEPROGHERE)),
00908 fsCtrlContextHelp (IDC__ARGUMENTS, LS (L_ARGSHERE)),
00909 fsCtrlContextHelp (IDC_ARGUMENTS, LS (L_ARGSHERE)),
00910 fsCtrlContextHelp (IDC__TYPE, LS (L_TYPEHERE)),
00911 fsCtrlContextHelp (IDC_SHUTDOWNTYPE, LS (L_TYPEHERE)),
00912 fsCtrlContextHelp (IDC_FORCEEXIT, LS (L_FORCEEXITHERE)),
00913 fsCtrlContextHelp (IDC_WTS, LS (L_WTSHERE)),
00914 fsCtrlContextHelp (IDC_HANGUPALL, LS (L_HANGALLHERE)),
00915 fsCtrlContextHelp (IDC__HANGUP, LS (L_CONNTOHANGHERE)),
00916 fsCtrlContextHelp (IDC_CONNECTION, LS (L_CONNTOHANGHERE)),
00917 fsCtrlContextHelp (IDC_RAD_INVERT, LS (L_RAD_INVERT_HERE)),
00918 };
00919
00920 static fsCtrlContextHelp aCH [sizeof (aCH1) / sizeof (fsCtrlContextHelp)];
00921 CopyMemory (aCH, aCH1, sizeof (aCH));
00922
00923 _CHMgr.PrepareContextMenu (this, point, aCH, sizeof (aCH) / sizeof (fsCtrlContextHelp));
00924 }
00925
00926 BOOL CSchedule_WTSPage::OnHelpInfo(HELPINFO* pHelpInfo)
00927 {
00928 RECT rc;
00929 CWnd *pItem = GetDlgItem (pHelpInfo->iCtrlId);
00930 if (pItem == NULL)
00931 return TRUE;
00932 pItem->GetWindowRect (&rc);
00933 if (PtInRect (&rc, pHelpInfo->MousePos) == FALSE)
00934 {
00935 pHelpInfo->MousePos.x = rc.left + (rc.right - rc.left) / 2;
00936 pHelpInfo->MousePos.y = rc.top + (rc.bottom - rc.top) / 2;
00937 }
00938 PrepareCHMgr (pHelpInfo->MousePos);
00939 _CHMgr.OnWT ();
00940 return TRUE;
00941 }