00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "FVDownloads_Tasks.h"
00009 #include "Downloads_Tasks.h"
00010 #include "MainFrm.h"
00011 #include "FlashVideoDownloadsWnd.h"
00012 #include "Dlg_CreateFVDownload.h"
00013 #include "plugincmds.h"
00014 #include "vmsDownloadsListHelper.h"
00015 #include "Dlg_Download.h"
00016
00017 #ifdef _DEBUG
00018 #define new DEBUG_NEW
00019 #undef THIS_FILE
00020 static char THIS_FILE[] = __FILE__;
00021 #endif
00022
00023 CFVDownloads_Tasks::CFVDownloads_Tasks()
00024 {
00025 }
00026
00027 CFVDownloads_Tasks::~CFVDownloads_Tasks()
00028 {
00029 }
00030
00031 BEGIN_MESSAGE_MAP(CFVDownloads_Tasks, CListCtrlEx)
00032
00033 ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetdispinfo)
00034 ON_WM_DRAWITEM()
00035 ON_WM_MEASUREITEM()
00036 ON_COMMAND(ID_FVDLD_CREATE, OnFvdldCreate)
00037 ON_COMMAND(ID_FVDLD_LAUNCH, OnFvdldLaunch)
00038 ON_COMMAND(ID_FVDLD_PASSTODLDS, OnFvdldPasstodlds)
00039 ON_COMMAND(ID_FVDLD_START, OnFvdldStart)
00040 ON_COMMAND(ID_FVDLD_STOP, OnFvdldStop)
00041 ON_WM_LBUTTONDBLCLK()
00042 ON_COMMAND(ID_FVDLD_AUTOSTART, OnFvdldAutostart)
00043 ON_COMMAND(ID_FVDLD_DELETE, OnFvdldDelete)
00044 ON_COMMAND(ID_FVDLD_OPENFOLDER, OnFvdldOpenfolder)
00045 ON_WM_RBUTTONDOWN()
00046 ON_COMMAND(ID_FVDLD_PROPERTIES, OnFvdldProperties)
00047 ON_WM_KEYDOWN()
00048 ON_COMMAND(ID_FVDLD_CONVERT, OnFvdldConvert)
00049
00050 END_MESSAGE_MAP()
00051
00052 BOOL CFVDownloads_Tasks::Create(CWnd *pwndParent)
00053 {
00054 CRect rc (0, 0, 50, 50);
00055
00056 if (FALSE == CListCtrlEx::Create (HDS_DRAGDROP | LVS_REPORT |
00057 LVS_OWNERDRAWFIXED | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_NOSORTHEADER,
00058 rc, pwndParent, 0x56783))
00059 return FALSE;
00060
00061 SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|
00062 LVS_EX_INFOTIP|0x00004000);
00063
00064 m_images.Create (16, 17, ILC_COLOR24 | ILC_MASK, 7, 1);
00065 CBitmap bmp;
00066 bmp.Attach (SBMP (IDB_DOWNLOADSTASKS));
00067
00068 m_images.Add (&bmp, RGB (255, 0, 255));
00069 SetImageList (&m_images, LVSIL_SMALL);
00070
00071 m_selimages.Create (16, 17, ILC_COLOR24 | ILC_MASK, 7, 1);
00072 CBitmap bmp2;
00073 bmp2.Attach (SBMP (IDB_DOWNLOADSTASKS_SEL));
00074 m_selimages.Add (&bmp2, RGB (255, 0, 255));
00075 SetSelectedImages (&m_selimages);
00076
00077 InsertColumn (0, "", LVCFMT_LEFT, 200, 0);
00078 InsertColumn (1, "", LVCFMT_LEFT, 50, 0);
00079 InsertColumn (2, "", LVCFMT_LEFT, 100, 0);
00080 InsertColumn (3, "", LVCFMT_LEFT, 60, 0);
00081 InsertColumn (4, "", LVCFMT_LEFT, 58, 0);
00082 InsertColumn (5, "", LVCFMT_LEFT, 70, 0);
00083 InsertColumn (6, "", LVCFMT_LEFT, 200, 0);
00084 InsertColumn (7, "", LVCFMT_LEFT, 120, 0);
00085
00086 ReadState ("FVDownloadsTasks");
00087
00088 ShowWindow (SW_SHOW);
00089
00090 return TRUE;
00091 }
00092
00093 void CFVDownloads_Tasks::AddDownload(vmsDownloadSmartPtr dld)
00094 {
00095 m_vDlds.push_back (dld);
00096
00097 VirtualView_ItemWillBeAdded (GetSysColor (COLOR_WINDOW), GetSysColor (COLOR_WINDOWTEXT), FALSE);
00098 SetItemCountEx (m_vDlds.size (), LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL);
00099 }
00100
00101 void CFVDownloads_Tasks::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
00102 {
00103 LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
00104 LV_ITEM* pItem = &(pDispInfo)->item;
00105
00106 try{
00107
00108 vmsDownloadSmartPtr dld = m_vDlds [pItem->iItem];
00109
00110 if (pItem->mask & LVIF_IMAGE)
00111 {
00112 pItem->iImage = CDownloads_Tasks::GetDownloadImage (dld);
00113
00114 }
00115
00116 if (pItem->mask & LVIF_TEXT)
00117 {
00118 int nSubItem = SubItemToSubItem (pItem->iSubItem);
00119 if (nSubItem != -1)
00120 lstrcpy (pItem->pszText, CDownloads_Tasks::GetDownloadText (dld, nSubItem));
00121 }
00122
00123 }catch (...) {}
00124 }
00125
00126 void CFVDownloads_Tasks::ApplyLanguage()
00127 {
00128 SetColumnText (0, LS (L_FILENAME));
00129 SetColumnText (1, LS (L_SIZE));
00130 SetColumnText (2, LS (L_DOWNLOADED));
00131 SetColumnText (3, LS (L_TIMELEFT));
00132 SetColumnText (4, LS (L_SECTIONS));
00133 SetColumnText (5, LS (L_SPEED));
00134 SetColumnText (6, LS (L_COMMENT));
00135 SetColumnText (7, LS (L_ADDED));
00136 }
00137
00138 void CFVDownloads_Tasks::OnRClick()
00139 {
00140 CMenu menu;
00141 menu.LoadMenu (IDM_FVDOWNLOADS);
00142 ApplyLanguageToMenu (&menu);
00143 CMenu *pPopup = menu.GetSubMenu (0);
00144
00145 UpdateActiveDownload (0);
00146
00147 UpdateMenu (pPopup);
00148
00149 ClientToScreen (&m_rbPt);
00150
00151 m_odmenu.Attach (&menu, FALSE);
00152
00153 m_odmenu.SetImageList (&((CMainFrame*)AfxGetApp ()->m_pMainWnd)->m_imgsMenu, &((CMainFrame*)AfxGetApp ()->m_pMainWnd)->m_dimgsMenu);
00154 fsSetImage *pImages;
00155 int cImages;
00156 CFlashVideoDownloadsWnd::Plugin_GetMenuImages (&pImages, &cImages);
00157 m_odmenu.SetImages (pImages, cImages);
00158
00159 fsSetImage img (11, 0, 0);
00160 m_odmenu.SetImages (&img, 3, NULL, TRUE);
00161
00162 pPopup->TrackPopupMenu (TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN,
00163 m_rbPt.x, m_rbPt.y, this);
00164 m_odmenu.Detach ();
00165
00166 menu.DestroyMenu ();
00167 }
00168
00169 void CFVDownloads_Tasks::UpdateMenu(CMenu *pPopup)
00170 {
00171 if (GetSelectedCount () == 0)
00172 {
00173 pPopup->EnableMenuItem (ID_FVDLD_START, MF_BYCOMMAND | MF_GRAYED);
00174 pPopup->EnableMenuItem (ID_FVDLD_STOP, MF_BYCOMMAND | MF_GRAYED);
00175 pPopup->EnableMenuItem (ID_FVDLD_AUTOSTART, MF_BYCOMMAND | MF_GRAYED);
00176 pPopup->EnableMenuItem (ID_FVDLD_DELETE, MF_BYCOMMAND | MF_GRAYED);
00177 pPopup->EnableMenuItem (ID_FVDLD_LAUNCH, MF_BYCOMMAND | MF_GRAYED);
00178 pPopup->EnableMenuItem (ID_FVDLD_CONVERT, MF_BYCOMMAND | MF_GRAYED);
00179 pPopup->EnableMenuItem (ID_FVDLD_OPENFOLDER, MF_BYCOMMAND | MF_GRAYED);
00180 pPopup->EnableMenuItem (ID_FVDLD_PASSTODLDS, MF_BYCOMMAND | MF_GRAYED);
00181 pPopup->EnableMenuItem (ID_FVDLD_PROPERTIES, MF_BYCOMMAND | MF_GRAYED);
00182 }
00183 else
00184 {
00185 DLDS_LIST v;
00186 GetSelectedDownloads (v);
00187
00188 BOOL bRunning, bStopped, bCompleted, bAuto, bNotAuto;
00189 vmsDownloadsListHelper::GetStat (v, &bRunning, &bStopped, &bCompleted, &bAuto, &bNotAuto);
00190
00191 if (bRunning == FALSE && bAuto == FALSE)
00192 pPopup->EnableMenuItem (ID_FVDLD_STOP, MF_BYCOMMAND | MF_GRAYED);
00193
00194 if (bStopped == FALSE)
00195 pPopup->EnableMenuItem (ID_FVDLD_START, MF_BYCOMMAND | MF_GRAYED);
00196
00197 if (v [0]->pMgr->IsDone () == FALSE)
00198 {
00199 pPopup->EnableMenuItem (ID_FVDLD_LAUNCH, MF_BYCOMMAND | MF_GRAYED);
00200 pPopup->EnableMenuItem (ID_FVDLD_CONVERT, MF_BYCOMMAND | MF_GRAYED);
00201 }
00202
00203 if (bNotAuto == FALSE)
00204 pPopup->CheckMenuItem (ID_FVDLD_AUTOSTART, MF_CHECKED | MF_BYCOMMAND);
00205 }
00206 }
00207
00208 void CFVDownloads_Tasks::ApplyLanguageToMenu(CMenu *menu)
00209 {
00210 CString str;
00211
00212 menu->ModifyMenu (0, MF_BYPOSITION|MF_STRING, 0, LS (L_FVDOWNLOADS));
00213
00214 str = LS (L_CREATEFVDLD); str += "\tIns";
00215 menu->ModifyMenu (ID_FVDLD_CREATE, MF_BYCOMMAND|MF_STRING, ID_FVDLD_CREATE, str);
00216
00217 str = LS (L_STARTDLDS); str += "\tShift+S";
00218 menu->ModifyMenu (ID_FVDLD_START, MF_BYCOMMAND|MF_STRING, ID_FVDLD_START, str);
00219 str = LS (L_STOPDLDS); str += "\tShift+O";
00220 menu->ModifyMenu (ID_FVDLD_STOP, MF_BYCOMMAND|MF_STRING, ID_FVDLD_STOP, str);
00221 str = LS (L_DELETEDLD); str += "\tDel (Shift+Del)";
00222 menu->ModifyMenu (ID_FVDLD_DELETE, MF_BYCOMMAND|MF_STRING, ID_FVDLD_DELETE, str);
00223 menu->ModifyMenu (ID_FVDLD_LAUNCH, MF_BYCOMMAND|MF_STRING, ID_FVDLD_LAUNCH, LS (L_LAUNCHFILE));
00224 menu->ModifyMenu (ID_FVDLD_CONVERT, MF_BYCOMMAND|MF_STRING, ID_FVDLD_CONVERT, LS (L_CONVERT_MEDIA_FILE));
00225 menu->ModifyMenu (ID_FVDLD_OPENFOLDER, MF_BYCOMMAND|MF_STRING, ID_FVDLD_OPENFOLDER, LS (L_OPENFOLDER));
00226 menu->ModifyMenu (ID_FVDLD_PASSTODLDS, MF_BYCOMMAND|MF_STRING, ID_FVDLD_PASSTODLDS, LS (L_PASSTODLDS));
00227
00228 str = LS (L_AUTOSTARTDLD); str += '\t';
00229 menu->ModifyMenu (ID_FVDLD_AUTOSTART, MF_BYCOMMAND|MF_STRING, ID_FVDLD_AUTOSTART, str);
00230
00231 str = LS (L_DLDPROP); str += "\tAlt+Enter";
00232 menu->ModifyMenu (ID_FVDLD_PROPERTIES, MF_BYCOMMAND|MF_STRING, ID_FVDLD_PROPERTIES, str);
00233 }
00234
00235 void CFVDownloads_Tasks::OnDrawItem(int , LPDRAWITEMSTRUCT lpDrawItemStruct)
00236 {
00237 m_odmenu.OnDrawItem (lpDrawItemStruct);
00238 }
00239
00240 void CFVDownloads_Tasks::OnMeasureItem(int , LPMEASUREITEMSTRUCT lpMeasureItemStruct)
00241 {
00242 m_odmenu.OnMeasureItem (lpMeasureItemStruct);
00243 }
00244
00245 void CFVDownloads_Tasks::OnFvdldCreate()
00246 {
00247 _pwndFVDownloads->CreateDownload ();
00248 SetFocus ();
00249 }
00250
00251 void CFVDownloads_Tasks::OnFvdldLaunch()
00252 {
00253 POSITION pos = GetFirstSelectedItemPosition ();
00254
00255 while (pos)
00256 {
00257 vmsDownloadSmartPtr dld = m_vDlds [GetNextSelectedItem (pos)];
00258 if (dld->pMgr->IsDone ())
00259 _DldsMgr.LaunchDownload (dld);
00260 }
00261 }
00262
00263 void CFVDownloads_Tasks::OnFvdldPasstodlds()
00264 {
00265 DLDS_LIST v;
00266 GetSelectedDownloads (v);
00267 if (v.size ())
00268 {
00269 _pwndDownloads->ShowDownloads (v);
00270 ((CMainFrame*)AfxGetApp ()->m_pMainWnd)->SetActivePlugin (0);
00271 }
00272 }
00273
00274 void CFVDownloads_Tasks::OnFvdldStart()
00275 {
00276 DLDS_LIST v;
00277 POSITION pos = GetFirstSelectedItemPosition ();
00278 while (pos)
00279 {
00280 int nItem = GetNextSelectedItem (pos);
00281 v.push_back (m_vDlds [nItem]);
00282 }
00283 _DldsMgr.StartDownloads (v, TRUE);
00284 }
00285
00286 void CFVDownloads_Tasks::OnFvdldStop()
00287 {
00288 DLDS_LIST v;
00289 POSITION pos = GetFirstSelectedItemPosition ();
00290 while (pos)
00291 {
00292 int nItem = GetNextSelectedItem (pos);
00293 vmsDownloadSmartPtr dld = m_vDlds [nItem];
00294 if (dld->pMgr->IsRunning ())
00295 v.push_back (dld);
00296 else if (dld->bAutoStart)
00297 {
00298 dld->bAutoStart = FALSE;
00299 _pwndDownloads->UpdateDownload (dld);
00300 }
00301 }
00302 if (v.size ())
00303 _DldsMgr.StopDownloads (v, TRUE);
00304 }
00305
00306 void CFVDownloads_Tasks::GetSelectedDownloads(DLDS_LIST_REF v)
00307 {
00308 POSITION pos = GetFirstSelectedItemPosition ();
00309 while (pos)
00310 {
00311 int nItem = GetNextSelectedItem (pos);
00312 v.push_back (m_vDlds [nItem]);
00313 }
00314 }
00315
00316 void CFVDownloads_Tasks::UpdateDownload(vmsDownloadSmartPtr dld)
00317 {
00318 int nIndex = FindIndex (dld);
00319 if (nIndex != -1)
00320 RedrawItems (nIndex, nIndex);
00321 }
00322
00323 void CFVDownloads_Tasks::WillBeDeleted(vmsDownloadSmartPtr dld)
00324 {
00325 int nIndex = FindIndex (dld);
00326 if (nIndex != -1)
00327 {
00328 m_vDlds.erase (m_vDlds.begin () + nIndex);
00329 DeleteItem (nIndex);
00330 }
00331 }
00332
00333 int CFVDownloads_Tasks::FindIndex(vmsDownloadSmartPtr dld)
00334 {
00335 for (size_t i = 0; i < m_vDlds.size (); i++)
00336 {
00337 if (m_vDlds [i] == dld)
00338 return i;
00339 }
00340
00341 return -1;
00342 }
00343
00344 void CFVDownloads_Tasks::OnLButtonDblClk(UINT nFlags, CPoint point)
00345 {
00346 CListCtrlEx::OnLButtonDblClk(nFlags, point);
00347 CallSelectedDownload (TRUE);
00348 }
00349
00350 void CFVDownloads_Tasks::OnFvdldAutostart()
00351 {
00352 DLDS_LIST v;
00353 GetSelectedDownloads (v);
00354 if (v.size () == 0)
00355 return;
00356
00357 BOOL b = TRUE;
00358 vmsDownloadsListHelper::GetStat (v, NULL, NULL, NULL, NULL, &b);
00359
00360 for (size_t i = 0; i < v.size (); i++)
00361 v [i]->bAutoStart = b;
00362
00363 _pwndDownloads->UpdateAllDownloads ();
00364 _DldsMgr.ProcessDownloads ();
00365 }
00366
00367 void CFVDownloads_Tasks::OnFvdldDelete()
00368 {
00369 DeleteSelected (FALSE);
00370 }
00371
00372 void CFVDownloads_Tasks::OnFvdldOpenfolder()
00373 {
00374 fs::list <CString> vOpened;
00375 POSITION pos = GetFirstSelectedItemPosition ();
00376
00377 while (pos)
00378 {
00379 vmsDownloadSmartPtr dld = m_vDlds [GetNextSelectedItem (pos)];
00380 CString strFileName = dld->pMgr->get_OutputFilePathName ();
00381
00382 for (int i = vOpened.size () - 1; i >= 0; i--)
00383 {
00384 if (vOpened [i] == strFileName)
00385 break;
00386 }
00387 if (i != -1)
00388 continue;
00389
00390 dld->pMgr->Do_OpenFolder ();
00391 vOpened.add (strFileName);
00392 }
00393 }
00394
00395 void CFVDownloads_Tasks::DeleteSelected(BOOL bDontConfirmFileDeleting)
00396 {
00397 if (bDontConfirmFileDeleting || _App.Deleted_ConfirmDeletion ())
00398 if (IDNO == MessageBox (bDontConfirmFileDeleting ? LS (L_DLDWBDELETEDFROMDISK) : LS (L_AREYOUSURE), LS (L_CONFIRMATION), MB_YESNO|MB_ICONQUESTION))
00399 {
00400 SetFocus ();
00401 return;
00402 }
00403
00404 DLDS_LIST v;
00405 GetSelectedDownloads (v);
00406 if (v.size () == 0)
00407 return;
00408
00409 _pwndDownloads->DeleteDownloads (v, TRUE, bDontConfirmFileDeleting);
00410 UpdateActiveDownload (0);
00411 }
00412
00413 void CFVDownloads_Tasks::OnKeyDown(WORD wVK)
00414 {
00415 switch (wVK)
00416 {
00417 case VK_DELETE:
00418
00419 DeleteSelected (GetKeyState (VK_SHIFT) & 0x8000);
00420 break;
00421
00422 case VK_RETURN:
00423 if (GetKeyState (VK_MENU) & 0x8000)
00424 ShowSelectedDldsProperties ();
00425 else
00426 CallSelectedDownload (TRUE);
00427 break;
00428
00429 case VK_APPS:
00430 CalcCoordsForCurSel ();
00431 OnRClick ();
00432 break;
00433 }
00434 }
00435
00436 void CFVDownloads_Tasks::CallSelectedDownload(BOOL bPropertiesInsteadOfPass)
00437 {
00438 POSITION pos = GetFirstSelectedItemPosition ();
00439 if (pos == NULL)
00440 return;
00441
00442 vmsDownloadSmartPtr dld = m_vDlds [GetNextSelectedItem (pos)];
00443
00444 if (pos == NULL && dld->pMgr->IsDone ())
00445 {
00446 OnFvdldLaunch ();
00447 }
00448 else if (pos == NULL && dld->pMgr->IsRunning () && _App.DownloadDialog_Use ())
00449 {
00450 if (dld->pdlg)
00451 {
00452 dld->pdlg->BringWindowToTop ();
00453 dld->pdlg->SetFocus ();
00454 }
00455 else
00456 {
00457 dld->AddRef ();
00458 _pwndDownloads->PostMessage (WM_DW_CREATEDLDDIALOG, 1, (LPARAM)(fsDownload*)dld);
00459 }
00460 }
00461 else
00462 {
00463 if (bPropertiesInsteadOfPass)
00464 ShowSelectedDldsProperties ();
00465 else
00466 OnFvdldPasstodlds ();
00467 }
00468 }
00469
00470 void CFVDownloads_Tasks::CalcCoordsForCurSel()
00471 {
00472
00473
00474 int iCurSel = GetSelectionMark ();
00475 if (iCurSel == -1)
00476 {
00477
00478 POSITION pos = GetFirstSelectedItemPosition ();
00479 if (pos)
00480 iCurSel = GetNextSelectedItem (pos);
00481 }
00482
00483 if (iCurSel != -1)
00484 {
00485 RECT rc;
00486 GetItemRect (iCurSel, &rc, LVIR_BOUNDS);
00487 m_rbPt.x = rc.left + 30;
00488 m_rbPt.y = rc.top;
00489 }
00490 else
00491 m_rbPt.x = m_rbPt.y = 30;
00492 }
00493
00494 void CFVDownloads_Tasks::OnRButtonDown(UINT nFlags, CPoint point)
00495 {
00496 m_rbPt = point;
00497 CListCtrlEx::OnRButtonDown(nFlags, point);
00498 }
00499
00500 void CFVDownloads_Tasks::ShowSelectedDldsProperties()
00501 {
00502 POSITION pos = GetFirstSelectedItemPosition ();
00503 DLDS_LIST vDlds;
00504 DLDS_LIST vBtDlds;
00505
00506 if (pos == NULL)
00507 return;
00508
00509 while (pos)
00510 {
00511 int iItem = GetNextSelectedItem (pos);
00512 vmsDownloadSmartPtr dld = m_vDlds [iItem];
00513 if (dld->pMgr->GetDownloadMgr () != NULL)
00514 vDlds.push_back (dld);
00515 else if (dld->pMgr->GetBtDownloadMgr () != NULL)
00516 vBtDlds.push_back (dld);
00517 }
00518
00519 if (vDlds.size () >= vBtDlds.size ())
00520 _pwndDownloads->OnDownloadProperties (vDlds);
00521 else
00522 _pwndDownloads->OnBtDownloadProperties (vBtDlds);
00523
00524 SetFocus ();
00525 }
00526
00527 void CFVDownloads_Tasks::OnFvdldProperties()
00528 {
00529 ShowSelectedDldsProperties ();
00530 }
00531
00532 void CFVDownloads_Tasks::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
00533 {
00534 BOOL bShift = GetKeyState (VK_SHIFT) & 0x8000;
00535 BOOL bCtrl = GetKeyState (VK_CONTROL) & 0x8000;
00536
00537 switch (nChar)
00538 {
00539 case 'S':
00540 if (bShift)
00541 {
00542 OnFvdldStart ();
00543 return;
00544 }
00545 break;
00546
00547 case 'O':
00548 if (bShift)
00549 {
00550 OnFvdldStop ();
00551 return;
00552 }
00553 break;
00554
00555 case 'A':
00556 if (bCtrl)
00557 {
00558 int cItems = GetItemCount ();
00559 for (int i = cItems-1; i >= 0; i--)
00560 SetItemState (i, LVIS_SELECTED, LVIS_SELECTED);
00561 return;
00562 }
00563 break;
00564 }
00565
00566 CListCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
00567 }
00568
00569 int CFVDownloads_Tasks::OnUpdateToolBar(UINT nID)
00570 {
00571 BOOL bEnabled = TRUE;
00572 BOOL bChecked = FALSE;
00573
00574
00575 if (nID == ID_DLD_VID_PLAY || nID == ID_DLD_VID_PAUSE ||
00576 nID == ID_DLD_VID_STOP || nID == ID_DLD_VID_MUTE)
00577 {
00578 _pwndFVDownloads->m_wndPreview.UpdateCommand (nID, &bEnabled, &bChecked);
00579
00580 int iState = bEnabled ? WGP_CMDITEMSTATE_ENABLED : WGP_CMDITEMSTATE_DISABLED;
00581 if (bChecked) iState |= WGP_CMDITEMSTATE_CHECKED;
00582 return iState;
00583 }
00584
00585 if (GetSelectedCount () == 0)
00586 {
00587 switch (nID)
00588 {
00589 case ID_FVDLD_START:
00590 case ID_FVDLD_STOP:
00591 case ID_FVDLD_DELETE:
00592 case ID_FVDLD_OPENFOLDER:
00593 case ID_FVDLD_PROPERTIES:
00594 case ID_FVDLD_LAUNCH:
00595 case ID_FVDLD_CONVERT:
00596 case ID_FVDLD_AUTOSTART:
00597 case ID_FVDLD_PASSTODLDS:
00598 bEnabled = FALSE;
00599 break;
00600 }
00601 }
00602 else
00603 {
00604 DLDS_LIST v;
00605 GetSelectedDownloads (v);
00606
00607 BOOL bRunning, bStopped, bCompleted, bAuto, bNotAuto;
00608 vmsDownloadsListHelper::GetStat (v, &bRunning, &bStopped, &bCompleted, &bAuto, &bNotAuto);
00609
00610 switch (nID)
00611 {
00612 case ID_FVDLD_STOP:
00613 if (bRunning == FALSE && bAuto == FALSE)
00614 bEnabled = FALSE;
00615 break;
00616
00617 case ID_FVDLD_START:
00618 if (bStopped == FALSE)
00619 bEnabled = FALSE;
00620 break;
00621
00622 case ID_FVDLD_LAUNCH:
00623 case ID_FVDLD_CONVERT:
00624 if (v [0]->pMgr->IsDone () == FALSE)
00625 bEnabled = FALSE;
00626 break;
00627
00628 case ID_FVDLD_AUTOSTART:
00629 if (bNotAuto == FALSE)
00630 bEnabled = FALSE;
00631 break;
00632 }
00633 }
00634
00635 int iState = bEnabled ? WGP_CMDITEMSTATE_ENABLED : WGP_CMDITEMSTATE_DISABLED;
00636 if (bChecked) iState |= WGP_CMDITEMSTATE_CHECKED;
00637
00638 return iState;
00639 }
00640
00641 void CFVDownloads_Tasks::SaveState()
00642 {
00643 CListCtrlEx::SaveState ("FVDownloadsTasks");
00644 }
00645
00646 void CFVDownloads_Tasks::OnDeleteItem(NM_LISTVIEW *pNM)
00647 {
00648 if (pNM->lParam == (LONG)(fsDownload*) m_pActiveDownload)
00649 {
00650 m_pActiveDownload = NULL;
00651 _pwndFVDownloads->SetActiveDownload (NULL);
00652 }
00653 }
00654
00655 void CFVDownloads_Tasks::OnDeleteAllItems()
00656 {
00657 m_pActiveDownload = NULL;
00658 _pwndFVDownloads->SetActiveDownload (NULL);
00659 }
00660
00661 void CFVDownloads_Tasks::UpdateActiveDownload(int adjSelected)
00662 {
00663 try {
00664
00665 POSITION pos = GetFirstSelectedItemPosition ();
00666 vmsDownloadSmartPtr dld;
00667
00668
00669 if (pos && GetSelectedCount () == 1)
00670 {
00671 int iItem = GetNextSelectedItem (pos);
00672
00673 iItem += adjSelected;
00674 if (iItem < 0)
00675 iItem = 0;
00676 else if (iItem >= GetItemCount ())
00677 iItem = GetItemCount () - 1;
00678
00679 dld = m_vDlds [iItem];
00680 }
00681 else
00682 {
00683 int iItem = GetSelectionMark ();
00684
00685 if (iItem == -1)
00686 dld = NULL;
00687 else
00688 {
00689 iItem += adjSelected;
00690
00691 if (iItem < 0)
00692 iItem = 0;
00693 else if (iItem >= GetItemCount ())
00694 iItem = GetItemCount () - 1;
00695
00696 dld = m_vDlds [iItem];
00697 }
00698 }
00699
00700
00701 if (dld != m_pActiveDownload)
00702 {
00703 m_pActiveDownload = dld;
00704 _pwndFVDownloads->SetActiveDownload (m_pActiveDownload);
00705 }
00706
00707 }
00708 catch (...) {}
00709 }
00710
00711 void CFVDownloads_Tasks::OnClick()
00712 {
00713 UpdateActiveDownload (0);
00714 }
00715
00716 void CFVDownloads_Tasks::OnItemChanged(NM_LISTVIEW *pLV)
00717 {
00718 if (pLV->uNewState != pLV->uOldState)
00719 UpdateActiveDownload (0);
00720 }
00721
00722 void CFVDownloads_Tasks::OnFvdldConvert()
00723 {
00724 _pwndFVDownloads->m_wndPreview.Convert ();
00725 }