00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "SpiderTasks.h"
00009 #include "SpiderWnd.h"
00010 #include "MainFrm.h"
00011 #include "WPDS_Sheet.h"
00012 #include "ShedulerWnd.h"
00013 #include "ScheduleSheet.h"
00014 #include "DownloadsWnd.h"
00015 #include "plugincmds.h"
00016
00017 extern CSpiderWnd *_pwndSpider;
00018 extern CShedulerWnd *_pwndScheduler;
00019 extern CDownloadsWnd* _pwndDownloads;
00020
00021 #ifdef _DEBUG
00022 #define new DEBUG_NEW
00023 #undef THIS_FILE
00024 static char THIS_FILE[] = __FILE__;
00025 #endif
00026
00027 CSpiderTasks::CSpiderTasks()
00028 {
00029 }
00030
00031 CSpiderTasks::~CSpiderTasks()
00032 {
00033 }
00034
00035 BEGIN_MESSAGE_MAP(CSpiderTasks, CListCtrlEx)
00036
00037 ON_COMMAND(ID_SPIDER_DL, OnSpiderDl)
00038 ON_WM_RBUTTONDOWN()
00039 ON_WM_MEASUREITEM()
00040 ON_WM_DRAWITEM()
00041 ON_COMMAND(ID_SPIDER_STOPDL, OnSpiderStopdl)
00042 ON_COMMAND(ID_SPIDER_STARTDL, OnSpiderStartdl)
00043 ON_COMMAND(ID_SPIDER_STARTAUTOMATICALLY, OnSpiderStartautomatically)
00044 ON_COMMAND(ID_SPIDER_SETTINGS, OnSpiderSettings)
00045 ON_COMMAND(ID_SPIDER_SCHEDULE, OnSpiderSchedule)
00046 ON_COMMAND(ID_SPIDER_OPENFOLDER, OnSpiderOpenfolder)
00047 ON_COMMAND(ID_SPIDER_DELETE, OnSpiderDelete)
00048 ON_WM_LBUTTONDBLCLK()
00049 ON_COMMAND(ID_SPIDER_OPENPAGE, OnSpiderOpenpage)
00050 ON_WM_KEYDOWN()
00051
00052 END_MESSAGE_MAP()
00053
00054 BOOL CSpiderTasks::Create(CWnd *pParent)
00055 {
00056 CRect rc (0, 0, 50, 50);
00057
00058 if (FALSE == CListCtrl::Create (LVS_REPORT|LVS_NOSORTHEADER|LVS_SHOWSELALWAYS|LVS_OWNERDRAWFIXED, rc, pParent, 0x7645329))
00059 return FALSE;
00060
00061 SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_INFOTIP);
00062
00063 m_images.Create (16, 17, ILC_COLOR24 | ILC_MASK, 6, 1);
00064 CBitmap bmp;
00065 bmp.Attach (SBMP (IDB_DOWNLOADSTASKS));
00066 m_images.Add (&bmp, RGB (255, 0, 255));
00067 SetImageList (&m_images, LVSIL_SMALL);
00068
00069 m_selimages.Create (16, 17, ILC_COLOR24 | ILC_MASK, 7, 1);
00070 CBitmap bmp2;
00071 bmp2.Attach (SBMP (IDB_DOWNLOADSTASKS_SEL));
00072 m_selimages.Add (&bmp2, RGB (255, 0, 255));
00073 SetSelectedImages (&m_selimages);
00074
00075 InsertColumn (0, LS (L_WEBPAGEURL), LVCFMT_LEFT, 250, 0);
00076 InsertColumn (1, LS (L_PROGRESS), LVCFMT_LEFT, 150, 0);
00077 InsertColumn (2, LS (L_FILES), LVCFMT_LEFT, 150, 0);
00078
00079 ReadState ("SpiderTasks");
00080
00081 ShowWindow (SW_SHOW);
00082
00083 return TRUE;
00084 }
00085
00086 void CSpiderTasks::UpdateMenu(CMenu* pMenu)
00087 {
00088 pMenu->SetDefaultItem (ID_SPIDER_SETTINGS);
00089
00090 if (GetSelectedCount () == 0)
00091 {
00092 pMenu->EnableMenuItem (ID_SPIDER_STARTDL, MF_BYCOMMAND | MF_GRAYED);
00093 pMenu->EnableMenuItem (ID_SPIDER_STOPDL, MF_BYCOMMAND | MF_GRAYED);
00094 pMenu->EnableMenuItem (ID_SPIDER_DELETE, MF_BYCOMMAND | MF_GRAYED);
00095 pMenu->EnableMenuItem (ID_SPIDER_OPENFOLDER, MF_BYCOMMAND | MF_GRAYED);
00096 pMenu->EnableMenuItem (ID_SPIDER_SETTINGS, MF_BYCOMMAND | MF_GRAYED);
00097 pMenu->EnableMenuItem (ID_SPIDER_STARTAUTOMATICALLY, MF_BYCOMMAND | MF_GRAYED);
00098 pMenu->EnableMenuItem (ID_SPIDER_SCHEDULE, MF_BYCOMMAND | MF_GRAYED);
00099 pMenu->EnableMenuItem (ID_SPIDER_OPENPAGE, MF_BYCOMMAND | MF_GRAYED);
00100 }
00101 else
00102 {
00103 POSITION pos = GetFirstSelectedItemPosition ();
00104 int iAutoStart = 3;
00105
00106 while (pos)
00107 {
00108 int iItem = GetNextSelectedItem (pos);
00109 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (iItem);
00110
00111 BOOL bAutoStart = wpd->IsOnAutoStart ();
00112 BOOL bRunning = wpd->IsRunning ();
00113 BOOL bDone = wpd->IsDone ();
00114
00115 if (iAutoStart == 3)
00116 iAutoStart = bAutoStart ? 1 : 0;
00117 else if (iAutoStart == 1 && bAutoStart == FALSE || iAutoStart == 0 && bAutoStart)
00118 iAutoStart = 2;
00119
00120 if (bRunning || bDone)
00121 pMenu->EnableMenuItem (ID_SPIDER_STARTDL, MF_BYCOMMAND | MF_GRAYED);
00122
00123 if (bRunning == FALSE)
00124 pMenu->EnableMenuItem (ID_SPIDER_STOPDL, MF_BYCOMMAND | MF_GRAYED);
00125
00126 if (bDone)
00127 pMenu->EnableMenuItem (ID_SPIDER_SCHEDULE, MF_BYCOMMAND | MF_GRAYED);
00128 }
00129
00130 if (iAutoStart == 1)
00131 pMenu->CheckMenuItem (ID_SPIDER_STARTAUTOMATICALLY, MF_CHECKED | MF_BYCOMMAND);
00132
00133 m_bAutoStart = iAutoStart != 1;
00134
00135 if (GetSelectedCount () != 1)
00136 pMenu->EnableMenuItem (ID_SPIDER_OPENPAGE, MF_BYCOMMAND | MF_GRAYED);
00137 else
00138 {
00139 pos = GetFirstSelectedItemPosition ();
00140 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00141 fsDLWebPage &wp = wpd->GetRootPage ()->GetData ();
00142 if (wp.dld && wp.dld->pMgr->IsDone () == FALSE)
00143 pMenu->EnableMenuItem (ID_SPIDER_OPENPAGE, MF_BYCOMMAND | MF_GRAYED);
00144 }
00145 }
00146 }
00147
00148 int CSpiderTasks::UpdateToolBar(UINT nID)
00149 {
00150 BOOL bEnabled = TRUE;
00151 int cSelected = GetSelectedCount ();
00152
00153 switch (nID)
00154 {
00155 case ID_SPIDER_DL:
00156 break;
00157
00158 case ID_SPIDER_STARTDL:
00159 if (cSelected == 0)
00160 bEnabled = FALSE;
00161 else
00162 {
00163 POSITION pos = GetFirstSelectedItemPosition ();
00164 while (pos)
00165 {
00166 int iItem = GetNextSelectedItem (pos);
00167 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (iItem);
00168
00169 BOOL bRunning = wpd->IsRunning ();
00170 BOOL bDone = wpd->IsDone ();
00171
00172 if (bRunning || bDone)
00173 bEnabled = FALSE;
00174 }
00175 }
00176 break;
00177
00178 case ID_SPIDER_STOPDL:
00179 if (cSelected == 0)
00180 bEnabled = FALSE;
00181 else
00182 {
00183 POSITION pos = GetFirstSelectedItemPosition ();
00184 while (pos)
00185 {
00186 int iItem = GetNextSelectedItem (pos);
00187 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (iItem);
00188
00189 BOOL bRunning = wpd->IsRunning ();
00190
00191 if (bRunning == FALSE)
00192 bEnabled = FALSE;
00193 }
00194 }
00195 break;
00196
00197 case ID_SPIDER_SCHEDULE:
00198 if (cSelected == 0)
00199 bEnabled = FALSE;
00200 else
00201 {
00202 POSITION pos = GetFirstSelectedItemPosition ();
00203 while (pos)
00204 {
00205 int iItem = GetNextSelectedItem (pos);
00206 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (iItem);
00207
00208 BOOL bDone = wpd->IsDone ();
00209
00210 if (bDone)
00211 bEnabled = FALSE;
00212 }
00213 }
00214 break;
00215 }
00216
00217 return bEnabled ? WGP_CMDITEMSTATE_ENABLED : WGP_CMDITEMSTATE_DISABLED;
00218 }
00219
00220 void CSpiderTasks::AddWebPage(fsWebPageDownloader *wpd)
00221 {
00222 int iItem = AddItem (wpd->GetStartURL ());
00223 SetItemData (iItem, (DWORD)wpd);
00224 UpdateWebPage (iItem);
00225 }
00226
00227 void CSpiderTasks::UpdateWebPage(int iItem)
00228 {
00229 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (iItem);
00230
00231 SetItemText (iItem, 0, wpd->GetStartURL ());
00232
00233 CString str;
00234 str.Format ("%d%%", (int) wpd->GetPercentDone ());
00235 SetItemText (iItem, 1, str);
00236
00237 str.Format ("%d/%d", wpd->GetDoneFileCount (), wpd->GetFileCount ());
00238 SetItemText (iItem, 2, str);
00239
00240 SetItemImage (iItem, GetWebPageImage (wpd));
00241 }
00242
00243 void CSpiderTasks::UpdateWebPage(fsWebPageDownloader *wpd)
00244 {
00245 int iItem = FindWebPage (wpd);
00246 if (iItem != -1)
00247 UpdateWebPage (iItem);
00248 }
00249
00250 int CSpiderTasks::FindWebPage(fsWebPageDownloader *wpd)
00251 {
00252 LVFINDINFO fi;
00253 fi.flags = LVFI_PARAM;
00254 fi.lParam = (LONG)wpd;
00255 return FindItem (&fi);
00256 }
00257
00258 int CSpiderTasks::GetWebPageImage(fsWebPageDownloader *wpd)
00259 {
00260 if (wpd->IsDone ())
00261 return 1;
00262
00263 if (wpd->IsRunning ())
00264 {
00265 if (wpd->IsDownloading ())
00266 return 3;
00267 else
00268 return 4;
00269 }
00270
00271 if (wpd->IsScheduled ())
00272 return 2;
00273
00274 return wpd->IsOnAutoStart () ? 5 : 0;
00275 }
00276
00277 void CSpiderTasks::OnSpiderDl()
00278 {
00279 _pwndSpider->AddWebPage ();
00280 SetFocus ();
00281 }
00282
00283 void CSpiderTasks::OnRClick()
00284 {
00285 CMenu menu;
00286 menu.LoadMenu (IDM_SPIDER);
00287 ApplyLanguageToMenu (&menu);
00288 CMenu *pPopup = menu.GetSubMenu (0);
00289
00290 UpdateActiveWPD ();
00291
00292 UpdateMenu (pPopup);
00293
00294 ClientToScreen (&m_rbPt);
00295
00296 m_odmenu.Attach (&menu, FALSE);
00297
00298 m_odmenu.SetImageList (&((CMainFrame*)AfxGetApp ()->m_pMainWnd)->m_imgsMenu, &((CMainFrame*)AfxGetApp ()->m_pMainWnd)->m_dimgsMenu);
00299 fsSetImage *pImages;
00300 int cImages;
00301 CSpiderWnd::Plugin_GetMenuImages (&pImages, &cImages);
00302 m_odmenu.SetImages (pImages, cImages);
00303
00304 pPopup->TrackPopupMenu (TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN, m_rbPt.x, m_rbPt.y, this);
00305 m_odmenu.Detach ();
00306
00307 menu.DestroyMenu ();
00308 }
00309
00310 void CSpiderTasks::OnRButtonDown(UINT nFlags, CPoint point)
00311 {
00312 m_rbPt = point;
00313 CListCtrlEx::OnRButtonDown(nFlags, point);
00314 }
00315
00316 void CSpiderTasks::OnMeasureItem(int , LPMEASUREITEMSTRUCT lpMeasureItemStruct)
00317 {
00318 m_odmenu.OnMeasureItem (lpMeasureItemStruct);
00319 }
00320
00321 void CSpiderTasks::OnDrawItem(int , LPDRAWITEMSTRUCT lpDrawItemStruct)
00322 {
00323 m_odmenu.OnDrawItem (lpDrawItemStruct);
00324 }
00325
00326 void CSpiderTasks::OnSpiderStopdl()
00327 {
00328 POSITION pos = GetFirstSelectedItemPosition ();
00329 while (pos)
00330 {
00331 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00332 wpd->StopDownloading ();
00333 }
00334 SetFocus ();
00335 }
00336
00337 void CSpiderTasks::OnSpiderStartdl()
00338 {
00339 POSITION pos = GetFirstSelectedItemPosition ();
00340 while (pos)
00341 {
00342 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00343 wpd->StartDownloading ();
00344 }
00345 SetFocus ();
00346 }
00347
00348 void CSpiderTasks::OnSpiderStartautomatically()
00349 {
00350 POSITION pos = GetFirstSelectedItemPosition ();
00351 while (pos)
00352 {
00353 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00354 wpd->SetAutoStartDownloading (m_bAutoStart);
00355 }
00356 SetFocus ();
00357 }
00358
00359 void CSpiderTasks::OnSpiderSettings()
00360 {
00361 CWPDS_Sheet sheet (LS (L_PROPOFDL), this);
00362
00363 POSITION pos = GetFirstSelectedItemPosition ();
00364 if (pos == NULL)
00365 return;
00366 fsWebPageDownloader* wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00367
00368 sheet.Init (wpd->GetWDPS (), TRUE, wpd);
00369
00370 _DlgMgr.DoModal (&sheet);
00371
00372 SetFocus ();
00373 }
00374
00375 void CSpiderTasks::OnSpiderSchedule()
00376 {
00377 POSITION pos = GetFirstSelectedItemPosition ();
00378 DLDS_LIST vDlds;
00379 fsScheduleMgr *mgr = _pwndScheduler->GetMgr ();
00380
00381 while (pos)
00382 {
00383 int iItem = GetNextSelectedItem (pos);
00384 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (iItem);
00385 for (int i = 0; i < wpd->GetDownloadCount (); i++)
00386 {
00387 vmsDownloadSmartPtr dld = wpd->GetDownload (i);
00388 if (dld != NULL && dld->pMgr->IsDone () == FALSE)
00389 vDlds.push_back (dld);
00390 }
00391 }
00392
00393 if (vDlds.size () == 0)
00394 return;
00395
00396 fsSchedule task;
00397 fsSchedule* pTask = mgr->GetScheduleDLTask (vDlds, TRUE);
00398 BOOL bCreate = pTask == NULL;
00399
00400 if (pTask == NULL)
00401 {
00402 task.hts.enType = HTS_ONCE;
00403 task.hts.last.dwHighDateTime = task.hts.last.dwLowDateTime = UINT_MAX;
00404 task.dwFlags = SCHEDULE_ENABLED;
00405 SYSTEMTIME time;
00406 GetLocalTime (&time);
00407 if (++time.wHour > 23)
00408 time.wHour = 0;
00409 time.wMinute = 0;
00410 SystemTimeToFileTime (&time, &task.hts.next);
00411 task.uWaitForConfirmation = 0;
00412 pTask = &task;
00413 }
00414
00415 CScheduleSheet sheet (LS (L_SCHEDULEDLDS), this);
00416 sheet.Init (pTask, FALSE);
00417 _DlgMgr.OnDoModal (&sheet);
00418 UINT uIDRet = sheet.DoModal ();
00419 _DlgMgr.OnEndDialog (&sheet);
00420
00421 if (uIDRet == IDOK)
00422 {
00423 if (bCreate)
00424 {
00425 pTask->wts.enType = WTS_STARTDOWNLOAD;
00426 fsnew1 (pTask->wts.pvIDs, fs::list <UINT>);
00427 for (size_t i = 0; i < vDlds.size (); i++)
00428 pTask->wts.pvIDs->add (vDlds [i]->nID);
00429
00430 _pwndScheduler->AddTask (pTask);
00431 }
00432 else
00433 {
00434 if (sheet.IsNeedRecalculateStartTime ())
00435 mgr->CalculateStartTime (pTask);
00436 _pwndScheduler->GetMgr ()->OnTaskUpdated (pTask);
00437 }
00438
00439 }
00440
00441 pos = GetFirstSelectedItemPosition ();
00442 while (pos)
00443 UpdateWebPage (GetNextSelectedItem (pos));
00444 }
00445
00446 void CSpiderTasks::OnSpiderOpenfolder()
00447 {
00448 POSITION pos = GetFirstSelectedItemPosition ();
00449 if (pos)
00450 {
00451 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00452 ShellExecute (m_hWnd, "explore", wpd->GetWDPS ()->strFolderSaveTo, NULL, NULL, SW_SHOW);
00453 }
00454 }
00455
00456 void CSpiderTasks::OnSpiderDelete()
00457 {
00458 POSITION pos = GetFirstSelectedItemPosition ();
00459 if (pos == NULL)
00460 return;
00461
00462 int iRet = MessageBox (LS (L_DELETEDLSALSO), LS (L_CONFIRMATION), MB_ICONQUESTION|MB_YESNOCANCEL);
00463
00464 SetFocus ();
00465
00466 if (iRet == IDCANCEL)
00467 return;
00468
00469 fs::list <int> vPages;
00470
00471 pos = GetFirstSelectedItemPosition ();
00472 while (pos)
00473 vPages.add (GetNextSelectedItem (pos));
00474
00475 for (int i = vPages.size () - 1; i >= 0; i--)
00476 {
00477 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (vPages [i]);
00478 if (iRet == IDYES)
00479 {
00480 ShowWindow (SW_HIDE);
00481 try {wpd->DeleteAllDownloads (TRUE);}catch (...){}
00482 ShowWindow (SW_SHOW);
00483 }
00484 else
00485 wpd->DetachFromDownloads ();
00486 DeleteItem (vPages [i]);
00487 _pwndSpider->GetMgr ()->Delete (wpd);
00488 }
00489 }
00490
00491 void CSpiderTasks::DeleteWebPage(fsWebPageDownloader *wp)
00492 {
00493 int iIndex = FindWebPage (wp);
00494 if (iIndex != -1)
00495 DeleteItem (iIndex);
00496 }
00497
00498 void CSpiderTasks::UpdateActiveWPD(int adj)
00499 {
00500 POSITION pos = GetFirstSelectedItemPosition ();
00501 fsWebPageDownloader* wpd;
00502
00503 if (pos && GetSelectedCount () == 1)
00504 {
00505 int iItem = GetNextSelectedItem (pos);
00506
00507 iItem += adj;
00508 if (iItem < 0)
00509 iItem = 0;
00510 else if (iItem >= GetItemCount ())
00511 iItem = GetItemCount () - 1;
00512
00513 wpd = (fsWebPageDownloader*) GetItemData (iItem);
00514 }
00515 else
00516 {
00517 int iItem = GetSelectionMark ();
00518
00519 if (iItem == -1)
00520 wpd = NULL;
00521 else
00522 {
00523 iItem += adj;
00524
00525 if (iItem < 0)
00526 iItem = 0;
00527 else if (iItem >= GetItemCount ())
00528 iItem = GetItemCount () - 1;
00529
00530 wpd = (fsWebPageDownloader*) GetItemData (iItem);
00531 }
00532 }
00533
00534 if (wpd != _pwndSpider->m_wndTaskTree.m_wpd)
00535 {
00536 _pwndSpider->m_wndTaskTree.m_wpd = wpd;
00537 _pwndSpider->m_wndTaskTree.UpdateAll ();
00538 }
00539 }
00540
00541 void CSpiderTasks::OnClick()
00542 {
00543 UpdateActiveWPD ();
00544 }
00545
00546 void CSpiderTasks::OnDeleteItem(NM_LISTVIEW *pNM)
00547 {
00548 if (pNM->lParam == (LONG) _pwndSpider->m_wndTaskTree.m_wpd)
00549 {
00550 _pwndSpider->m_wndTaskTree.m_wpd = NULL;
00551 _pwndSpider->m_wndTaskTree.UpdateAll ();
00552 }
00553 }
00554
00555 void CSpiderTasks::OnDeleteAllItems()
00556 {
00557 _pwndSpider->m_wndTaskTree.m_wpd = NULL;
00558 _pwndSpider->m_wndTaskTree.UpdateAll ();
00559 }
00560
00561 void CSpiderTasks::OnKeyDown(WORD wVK)
00562 {
00563 switch (wVK)
00564 {
00565 case VK_DELETE:
00566 OnSpiderDelete ();
00567 break;
00568
00569 case VK_UP:
00570 UpdateActiveWPD (-1);
00571 break;
00572
00573 case VK_DOWN:
00574 UpdateActiveWPD (1);
00575 break;
00576
00577 case VK_RETURN:
00578 CallSelectedPage ();
00579 break;
00580
00581 case VK_APPS:
00582 CalcCoordsForCurSel ();
00583 OnRClick ();
00584 break;
00585 }
00586 }
00587
00588 void CSpiderTasks::OnLButtonDblClk(UINT nFlags, CPoint point)
00589 {
00590 CListCtrlEx::OnLButtonDblClk(nFlags, point);
00591 CallSelectedPage ();
00592 }
00593
00594 void CSpiderTasks::ApplyLanguageToMenu(CMenu *menu)
00595 {
00596 menu->ModifyMenu (0, MF_BYPOSITION|MF_STRING, 0, LS (L_HTMLSPIDER));
00597
00598 CString str = LS (L_DLWEBPAGE); str += "\tCtrl+L";
00599 menu->ModifyMenu (ID_SPIDER_DL, MF_BYCOMMAND|MF_STRING, ID_SPIDER_DL, str);
00600
00601 str = LS (L_PROPOFDL); str += "\tEnter";
00602 menu->ModifyMenu (ID_SPIDER_SETTINGS, MF_BYCOMMAND|MF_STRING, ID_SPIDER_SETTINGS, str);
00603
00604 menu->ModifyMenu (ID_SPIDER_STARTDL, MF_BYCOMMAND|MF_STRING, ID_SPIDER_STARTDL, LS (L_STARTDL));
00605
00606 menu->ModifyMenu (ID_SPIDER_STOPDL, MF_BYCOMMAND|MF_STRING, ID_SPIDER_STOPDL, LS (L_STOPDL));
00607
00608 menu->ModifyMenu (ID_SPIDER_SCHEDULE, MF_BYCOMMAND|MF_STRING, ID_SPIDER_SCHEDULE, LS (L_SCHEDULEDL));
00609
00610 str = LS (L_DELETE); str += "\tDel";
00611 menu->ModifyMenu (ID_SPIDER_DELETE, MF_BYCOMMAND|MF_STRING, ID_SPIDER_DELETE, str);
00612
00613 menu->ModifyMenu (ID_SPIDER_OPENFOLDER, MF_BYCOMMAND|MF_STRING, ID_SPIDER_OPENFOLDER, LS (L_OPENFOLDER));
00614
00615 menu->ModifyMenu (ID_SPIDER_STARTAUTOMATICALLY, MF_BYCOMMAND|MF_STRING, ID_SPIDER_STARTAUTOMATICALLY, LS (L_STARTDLAUTO));
00616
00617 menu->ModifyMenu (ID_SPIDER_OPENPAGE, MF_BYCOMMAND|MF_STRING, ID_SPIDER_OPENPAGE, LS (L_OPENWEBPAGE));
00618 }
00619
00620 void CSpiderTasks::OnSpiderOpenpage()
00621 {
00622 POSITION pos = GetFirstSelectedItemPosition ();
00623 if (pos)
00624 {
00625 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00626
00627 fsDLWebPage* wp = &wpd->GetRootPage ()->GetData ();
00628 LPCSTR pszFile = wp->dld ? wp->dld->pMgr->GetDownloadMgr ()->GetDP ()->pszFileName : wp->strFile;
00629 ShellExecute (m_hWnd, "open", pszFile, NULL, NULL, SW_SHOW);
00630 }
00631 }
00632
00633 void CSpiderTasks::ApplyLanguage()
00634 {
00635 SetColumnText (0, LS (L_WEBPAGEURL));
00636 SetColumnText (1, LS (L_PROGRESS));
00637 SetColumnText (2, LS (L_FILES));
00638 }
00639
00640 void CSpiderTasks::CalcCoordsForCurSel()
00641 {
00642 int iCurSel = GetSelectionMark ();
00643 if (iCurSel == -1)
00644 {
00645 POSITION pos = GetFirstSelectedItemPosition ();
00646 if (pos)
00647 iCurSel = GetNextSelectedItem (pos);
00648 }
00649
00650 if (iCurSel != -1)
00651 {
00652 RECT rc;
00653 GetItemRect (iCurSel, &rc, LVIR_BOUNDS);
00654 m_rbPt.x = rc.left + 30;
00655 m_rbPt.y = rc.top;
00656 }
00657 else
00658 m_rbPt.x = m_rbPt.y = 30;
00659 }
00660
00661 void CSpiderTasks::UpdateIcons()
00662 {
00663 int cItems = GetItemCount ();
00664 for (int i = cItems-1; i >= 0; i--)
00665 {
00666 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (i);
00667 SetItemImage (i, GetWebPageImage (wpd));
00668 }
00669 }
00670
00671 void CSpiderTasks::OnForceUpdate()
00672 {
00673 DeleteAllItems ();
00674 fsWebPageDownloadsMgr *mgr = _pwndSpider->GetMgr ();
00675 for (int i = 0; i < mgr->GetWPDCount (); i++)
00676 AddWebPage (mgr->GetWPD (i));
00677 }
00678
00679 void CSpiderTasks::CallSelectedPage()
00680 {
00681 POSITION pos = GetFirstSelectedItemPosition ();
00682 if (pos == NULL)
00683 return;
00684
00685 fsWebPageDownloader *wpd = (fsWebPageDownloader*) GetItemData (GetNextSelectedItem (pos));
00686
00687 if (pos == NULL && wpd->IsDone ())
00688 OnSpiderOpenpage ();
00689 else
00690 OnSpiderSettings ();
00691 }
00692
00693 void CSpiderTasks::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
00694 {
00695 BOOL bShift = GetKeyState (VK_SHIFT) & 0x8000;
00696 BOOL bCtrl = GetKeyState (VK_CONTROL) & 0x8000;
00697
00698 switch (nChar)
00699 {
00700 case 'S':
00701 if (bShift)
00702 {
00703 OnSpiderStartdl ();
00704 return;
00705 }
00706 break;
00707
00708 case 'O':
00709 if (bShift)
00710 {
00711 OnSpiderStopdl ();
00712 return;
00713 }
00714 break;
00715
00716 case 'A':
00717 if (bCtrl)
00718 {
00719 int cItems = GetItemCount ();
00720 for (int i = cItems-1; i >= 0; i--)
00721 SetItemState (i, LVIS_SELECTED, LVIS_SELECTED);
00722 return;
00723 }
00724 break;
00725 }
00726
00727 CListCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
00728 }