00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Downloads_Groups.h"
00009 #include "DownloadsWnd.h"
00010 #include "GroupDlg.h"
00011 #include "ShedulerWnd.h"
00012 #include "system.h"
00013 #include "DlgDeletedProperties.h"
00014 #include "DlgDownloadsHistory.h"
00015 #include "DlgT1ToT2.h"
00016 #include "FolderBrowser.h"
00017
00018 extern CShedulerWnd* _pwndScheduler;
00019
00020 #ifdef _DEBUG
00021 #define new DEBUG_NEW
00022 #undef THIS_FILE
00023 static char THIS_FILE[] = __FILE__;
00024 #endif
00025
00026 extern CDownloadsWnd* _pwndDownloads;
00027
00028 CDownloads_Groups::CDownloads_Groups()
00029 {
00030 m_filterLastWeek.SetPeriod (7);
00031 m_filterLastMonth.SetPeriod (31);
00032 FILETIME time;
00033 ZeroMemory (&time, sizeof (time));
00034 m_filterCustomHist.SetTimeRange (time, time);
00035
00036 m_hContextMenuItem = NULL;
00037 m_cTotalDownloads = 0;
00038 }
00039
00040 CDownloads_Groups::~CDownloads_Groups()
00041 {
00042 }
00043
00044 BEGIN_MESSAGE_MAP(CDownloads_Groups, CTreeCtrl)
00045
00046 ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
00047 ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
00048 ON_WM_RBUTTONDOWN()
00049 ON_COMMAND(ID_GRPDELETE, OnGrpdelete)
00050 ON_COMMAND(ID_GRPPROPERTIES, OnGrpproperties)
00051 ON_COMMAND(ID_GRPSTARTALL, OnGrpstartall)
00052 ON_COMMAND(ID_GRPSTOPALL, OnGrpstopall)
00053 ON_COMMAND(ID_GRPCREATE, OnGrpcreate)
00054 ON_COMMAND(ID_GRPDELETEALL, OnGrpdeleteall)
00055 ON_COMMAND(ID_GRPDELETEALLSUCCESSFUL, OnGrpdeleteallsuccessful)
00056 ON_COMMAND(ID_OPENGROUPFOLDER, OnOpengroupfolder)
00057 ON_WM_LBUTTONDBLCLK()
00058 ON_WM_DRAWITEM()
00059 ON_WM_MEASUREITEM()
00060 ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown)
00061 ON_COMMAND(ID_DELETED_CLEAR, OnDeletedClear)
00062 ON_COMMAND(ID_DELETED_PROPERTIES, OnDeletedProperties)
00063 ON_COMMAND(ID_HISTORY_CLEAR, OnHistoryClear)
00064 ON_COMMAND(ID_HISTORY_SETTINGS, OnHistorySettings)
00065 ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
00066 ON_COMMAND(ID_GRPSETROOTFOLDER, OnSetGroupsRootFolder)
00067 ON_WM_TIMER()
00068 ON_COMMAND(ID_GRPDELETEALLDEADDLDS, OnGrpdeletealldeaddlds)
00069
00070 END_MESSAGE_MAP()
00071
00072 BOOL CDownloads_Groups::Create(CWnd *pParent)
00073 {
00074 CRect rc (0, 0, 150, 50);
00075
00076 if (FALSE == CTreeCtrl::Create (TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_SHOWSELALWAYS, rc, pParent, 0x9876))
00077 return FALSE;
00078
00079 CBitmap bmpg;
00080 bmpg.Attach (SBMP (IDB_GROUPS));
00081 m_images.Create (16, 15, ILC_COLOR24 | ILC_MASK, 8, 2);
00082 m_images.Add (&bmpg, RGB (255, 0, 255));
00083 SetImageList (&m_images, TVSIL_NORMAL);
00084
00085 m_hAllGroups = InsertItem (TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT, "", 0, 0,
00086 TVIS_BOLD | TVIS_EXPANDED, TVIS_BOLD | TVIS_EXPANDED, 0, TVI_ROOT, TVI_LAST);
00087
00088 SetItemData (m_hAllGroups, (ULONG) &m_filterAll);
00089
00090 InsertGroups ();
00091 InsertFilters ();
00092 InsertHistory ();
00093 InsertDeleted ();
00094
00095 switch (_pwndDownloads->Get_DWWN ())
00096 {
00097 case DWWN_LISTOFDOWNLOADS:
00098 int nId; nId = _App.View_DownloadsGroups_SelectedFilterId ();
00099 switch (nId)
00100 {
00101 case -2:
00102 SelectItem (m_hTasks);
00103 break;
00104
00105 case -1:
00106 SelectItem (m_hAllGroups);
00107 break;
00108
00109 default:
00110 vmsDownloadsGroupSmartPtr pGrp;
00111 pGrp = _DldsGrps.FindGroup (nId);
00112 if (pGrp != NULL)
00113 SetGroupFilter (pGrp);
00114 else
00115 SelectItem (m_hTasks);
00116 break;
00117 }
00118 break;
00119
00120 case DWWN_HISTORY:
00121 SelectItem (m_hHistory);
00122 Expand (m_hHistory, TVE_EXPAND);
00123 break;
00124
00125 case DWWN_DELETED:
00126 SelectItem (m_hDeleted);
00127 break;
00128 }
00129
00130 m_odmenuImages.Create (16, 15, ILC_COLOR24 | ILC_MASK, 5, 2);
00131 CBitmap bmp;
00132 bmp.Attach (SBMP (IDB_GROUPSMENU));
00133 m_odmenuImages.Add (&bmp, RGB (255, 0, 255));
00134
00135 CBitmap bmp1; bmp1.Attach (SBMP (IDB_GROUPSMENU_D));
00136 BITMAP bm; bmp1.GetBitmap (&bm);
00137 m_odmenuDImages.Create (16, bm.bmHeight, ILC_COLOR24|ILC_MASK, 3, 1);
00138 m_odmenuDImages.Add (&bmp1, RGB (255, 0, 255));
00139 m_odmenu.SetImageList (&m_odmenuImages, &m_odmenuDImages);
00140
00141 ApplyLanguage ();
00142
00143 ShowWindow (SW_SHOW);
00144
00145 SetTimer (1, 1000, NULL);
00146
00147 return TRUE;
00148 }
00149
00150 void CDownloads_Groups::InsertGroups()
00151 {
00152
00153 for (size_t i = 0; i < m_vGroups.size (); i++)
00154 delete m_vGroups [i].pGroupFilter;
00155 m_vGroups.clear ();
00156
00157 InsertGroups_tree (_DldsGrps.GetGroupsTree (), m_hAllGroups);
00158 }
00159
00160 void CDownloads_Groups::OnSelchanged(NMHDR*, LRESULT* pResult)
00161 {
00162
00163 HTREEITEM hItem = GetSelectedItem ();
00164 HTREEITEM hParent = GetParentItem (hItem);
00165
00166 if (hItem == m_hHistory || hParent == m_hHistory)
00167 {
00168 if (hItem == m_hHistCustom)
00169 CustomizeHistoryFilter ();
00170
00171 _pwndDownloads->Set_DWWN (DWWN_HISTORY);
00172 fsDldHistRecFilter* f = (fsDldHistRecFilter*) GetItemData (hItem);
00173 _pwndDownloads->m_wndHistory.ApplyFilter (f);
00174 }
00175 else if (hItem == m_hDeleted)
00176 {
00177 _pwndDownloads->Set_DWWN (DWWN_DELETED);
00178 }
00179 else
00180 {
00181
00182 fsDldFilter* filter = (fsDldFilter*) GetItemData (hItem);
00183 _pwndDownloads->Set_DWWN (DWWN_LISTOFDOWNLOADS);
00184
00185 if (filter->GetType () == DFT_GROUP)
00186 _App.View_DownloadsGroups_SelectedFilterId (((fsDldGroupFilter*)filter)->GetGroup ()->nId);
00187 else if (hItem == m_hTasks)
00188 _App.View_DownloadsGroups_SelectedFilterId (-2);
00189 else if (hItem == m_hAllGroups)
00190 _App.View_DownloadsGroups_SelectedFilterId (-1);
00191
00192 _pwndDownloads->FilterDownloads (filter);
00193 }
00194
00195 *pResult = 0;
00196 }
00197
00198 void CDownloads_Groups::OnRclick(NMHDR* , LRESULT* pResult)
00199 {
00200 HTREEITEM hItem;
00201
00202 hItem = HitTest (CPoint (m_rbX, m_rbY));
00203
00204 if (hItem)
00205 SelectItem (hItem);
00206
00207 ShowGrpContextMenu (hItem, FALSE);
00208
00209 *pResult = 0;
00210 }
00211
00212 void CDownloads_Groups::OnRButtonDown(UINT nFlags, CPoint point)
00213 {
00214 m_rbX = point.x;
00215 m_rbY = point.y;
00216
00217 CTreeCtrl::OnRButtonDown(nFlags, point);
00218 }
00219
00220 void CDownloads_Groups::OnGrpdelete()
00221 {
00222 HTREEITEM hItem = GetSelectedItem ();
00223
00224
00225 if (hItem == NULL || hItem == m_hOther)
00226 return;
00227
00228
00229 if (IsGroupItem (hItem) == FALSE)
00230 return;
00231
00232 fsDldGroupFilter *filter = (fsDldGroupFilter*) GetItemData (hItem);
00233
00234
00235 if (m_pWndDownloads->DeleteGroup (filter->GetGroup ()) == FALSE)
00236 {
00237 SetFocus ();
00238 return;
00239 }
00240
00241 SetFocus ();
00242
00243 SelectItem (GetParentItem (hItem));
00244
00245
00246 DeleteItem (hItem);
00247 }
00248
00249 void CDownloads_Groups::OnGrpproperties()
00250 {
00251 HTREEITEM hGroup = GetSelectedItem ();
00252 fsDldFilter *filter = (fsDldFilter*) GetItemData (hGroup);
00253 if (filter == NULL || filter->GetType () != DFT_GROUP)
00254 return;
00255
00256 fsDldGroupFilter *f = (fsDldGroupFilter*) filter;
00257
00258 CGroupDlg dlg (f->GetGroup (), NULL, this);
00259 _DlgMgr.DoModal (&dlg);
00260
00261 SetFocus ();
00262 }
00263
00264 void CDownloads_Groups::OnGrpstartall()
00265 {
00266 m_pWndDownloads->StartDownloadsInList ();
00267 }
00268
00269 void CDownloads_Groups::OnGrpstopall()
00270 {
00271 m_pWndDownloads->StopDownloadsInList ();
00272 }
00273
00274 void CDownloads_Groups::OnGrpcreate()
00275 {
00276 HTREEITEM hGroup = m_hContextMenuItem;
00277 vmsDownloadsGroupSmartPtr pParentGroup;
00278
00279 if (hGroup && IsGroupItem (hGroup))
00280 {
00281 fsDldFilter *filter = (fsDldFilter*) GetItemData (hGroup);
00282 if (filter == NULL || filter->GetType () != DFT_GROUP)
00283 return;
00284
00285 fsDldGroupFilter *f = (fsDldGroupFilter*) filter;
00286 pParentGroup = f->GetGroup ();
00287 }
00288
00289 CGroupDlg dlg (NULL, pParentGroup, this);
00290
00291 _DlgMgr.DoModal (&dlg);
00292 }
00293
00294 void CDownloads_Groups::OnGrpdeleteall()
00295 {
00296 _pwndDownloads->DeleteDownloadsInList ();
00297 }
00298
00299 void CDownloads_Groups::OnGrpdeleteallsuccessful()
00300 {
00301 _pwndDownloads->DeleteCompletedDownloadsInList ();
00302 }
00303
00304 void CDownloads_Groups::OnOpengroupfolder()
00305 {
00306 fsDldGroupFilter *filter = (fsDldGroupFilter*) GetItemData (GetSelectedItem ());
00307
00308 CString str = filter->GetGroup ()->strOutFolder;
00309 str.Replace ("%sdrive%", CString (vmsGetExeDriveLetter ()) + ":");
00310
00311 char sz [MY_MAX_PATH];
00312 lstrcpy (sz, str);
00313
00314 while (sz [2] != 0 && GetFileAttributes (sz) == DWORD (-1))
00315 {
00316 LPSTR psz = strrchr (sz, '\\');
00317 if (psz)
00318 *psz = 0;
00319 else
00320 return;
00321 }
00322
00323 if (sz [2] != 0)
00324 ShellExecute (::GetDesktopWindow (), "explore", sz, NULL, NULL, SW_SHOW);
00325 }
00326
00327 void CDownloads_Groups::InsertFilters()
00328 {
00329 for (size_t i = 0; i < m_vStateFilters.size (); i++)
00330 delete m_vStateFilters [i];
00331 m_vStateFilters.clear ();
00332
00333
00334 m_hFilters = InsertItem (TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT, LS (L_FILTERS), 0, 0,
00335 TVIS_BOLD | TVIS_EXPANDED, TVIS_BOLD | TVIS_EXPANDED, 0, TVI_ROOT, TVI_LAST);
00336
00337 SetItemData (m_hFilters, (ULONG) &m_filterAll);
00338
00339
00340 m_hTasks = InsertItem (LS (L_TASKS), 1, 1, TVI_ROOT, TVI_FIRST);
00341 SetItemData (m_hTasks, (ULONG) &m_filterTasks);
00342
00343
00344 m_hCompleted = InsertItem (LS (L_COMPLETED), 2, 2, m_hFilters, TVI_LAST);
00345 fsDldDoneFilter* f1 = new fsDldDoneFilter;
00346 m_vStateFilters.push_back (f1);
00347 SetItemData (m_hCompleted, (ULONG) m_vStateFilters [m_vStateFilters.size ()-1]);
00348
00349
00350 m_hInProgress = InsertItem (LS (L_INPROGRESS), 3, 3, m_hFilters, TVI_LAST);
00351 fsDldRunningFilter* f2 = new fsDldRunningFilter;
00352 m_vStateFilters.push_back (f2);
00353 SetItemData (m_hInProgress, (ULONG) m_vStateFilters [m_vStateFilters.size ()-1]);
00354
00355
00356 m_hStopped = InsertItem (LS (L_STOPPED), 4, 4, m_hFilters, TVI_LAST);
00357 fsDldStoppedFilter *f3 = new fsDldStoppedFilter;
00358 m_vStateFilters.push_back (f3);
00359 SetItemData (m_hStopped, (ULONG) m_vStateFilters [m_vStateFilters.size ()-1]);
00360
00361
00362 m_hScheduled = InsertItem (LS (L_SCHEDULED), 5, 5, m_hFilters, TVI_LAST);
00363 fsDldScheduledFilter *f4 = new fsDldScheduledFilter;
00364 m_vStateFilters.push_back (f4);
00365 SetItemData (m_hScheduled, (ULONG) m_vStateFilters [m_vStateFilters.size ()-1]);
00366 }
00367
00368 void CDownloads_Groups::ApplyNotGroupFilterForDownload(vmsDownloadSmartPtr dld)
00369 {
00370 HTREEITEM hItem = GetSelectedItem ();
00371 if (hItem == NULL)
00372 return;
00373
00374 if (hItem == m_hTasks || GetParentItem (hItem) == m_hFilters)
00375 {
00376 CDownloads_Tasks* tasks = &_pwndDownloads->m_wndDownloads.m_tasks;
00377 fsDldFilter *filter = (fsDldFilter*) GetItemData (hItem);
00378 if (filter->IsSatisfies (dld))
00379 tasks->AddDownload (dld);
00380 else
00381 tasks->DeleteDownload (dld);
00382 }
00383 }
00384
00385 void CDownloads_Groups::OnLButtonDblClk(UINT nFlags, CPoint point)
00386 {
00387 HTREEITEM hItem;
00388
00389 hItem = HitTest (point);
00390
00391 if (hItem)
00392 {
00393 if (IsGroupItem (hItem))
00394 {
00395 SelectItem (hItem);
00396 OnGrpproperties ();
00397 return;
00398 }
00399 else if (hItem == m_hDeleted)
00400 {
00401 SelectItem (hItem);
00402 OnDeletedProperties ();
00403 return;
00404 }
00405 }
00406
00407 CTreeCtrl::OnLButtonDblClk(nFlags, point);
00408 }
00409
00410 void CDownloads_Groups::OnDrawItem(int , LPDRAWITEMSTRUCT lpDrawItemStruct)
00411 {
00412 m_odmenu.OnDrawItem (lpDrawItemStruct);
00413 }
00414
00415 void CDownloads_Groups::OnMeasureItem(int , LPMEASUREITEMSTRUCT lpMeasureItemStruct)
00416 {
00417 m_odmenu.OnMeasureItem (lpMeasureItemStruct);
00418 }
00419
00420 void CDownloads_Groups::ApplyLanguage()
00421 {
00422 CString str;
00423 if (m_cTotalDownloads)
00424 str.Format ("%s (%d)", LS (L_ALLDLDS), m_cTotalDownloads);
00425 else
00426 str = LS (L_ALLDLDS);
00427 SetItemText (m_hAllGroups, str);
00428
00429 vmsDownloadsGroupSmartPtr pGroup = _DldsGrps.FindGroup (GRP_OTHER_ID);
00430 if (pGroup->cDownloads)
00431 str.Format ("%s (%d)", LS (L_OTHER), pGroup->cDownloads);
00432 else
00433 str = LS (L_OTHER);
00434 SetItemText (m_hOther, str);
00435
00436 SetItemText (m_hFilters, LS (L_FILTERS));
00437 SetItemText (m_hCompleted, LS (L_COMPLETED));
00438 SetItemText (m_hTasks, LS (L_TASKS));
00439 SetItemText (m_hInProgress, LS (L_INPROGRESS));
00440 SetItemText (m_hScheduled, LS (L_SCHEDULED));
00441 SetItemText (m_hStopped, LS (L_STOPPED));
00442
00443 SetItemText (m_hHistory, LS (L_HISTORY));
00444 SetItemText (m_hToday, LS (L_TODAY));
00445 SetItemText (m_hYesterday, LS (L_YESTERDAY));
00446 SetItemText (m_hLastWeek, LS (L_LASTWEEK));
00447 SetItemText (m_hLastMonth, LS (L_LASTMONTH));
00448 SetItemText (m_hHistCustom, LS (L_CUSTOMttt));
00449
00450 SetItemText (m_hDeleted, LS (L_DELETED));
00451 }
00452
00453 void CDownloads_Groups::ApplyLanguageToMenu(CMenu *menu)
00454 {
00455 menu->ModifyMenu (ID_GRPCREATE, MF_BYCOMMAND|MF_STRING, ID_GRPCREATE, LS (L_CREATEGRP));
00456
00457 CString str = LS (L_DELGRP); str += "\tDel";
00458 menu->ModifyMenu (ID_GRPDELETE, MF_BYCOMMAND|MF_STRING, ID_GRPDELETE, str);
00459
00460 menu->ModifyMenu (ID_GRPSTARTALL, MF_BYCOMMAND|MF_STRING, ID_GRPSTARTALL, LS (L_STARTALLDLDS));
00461 menu->ModifyMenu (ID_GRPSTOPALL, MF_BYCOMMAND|MF_STRING, ID_GRPSTOPALL, LS (L_STOPALLDLDS));
00462 menu->ModifyMenu (ID_GRPDELETEALL, MF_BYCOMMAND|MF_STRING, ID_GRPDELETEALL, LS (L_DELETEALLDLDS));
00463 menu->ModifyMenu (ID_GRPDELETEALLSUCCESSFUL, MF_BYCOMMAND|MF_STRING, ID_GRPDELETEALLSUCCESSFUL, LS (L_DELSUCCDLDS));
00464 menu->ModifyMenu (ID_GRPDELETEALLDEADDLDS, MF_BYCOMMAND|MF_STRING, ID_GRPDELETEALLDEADDLDS, LS (L_DELDEADDLDS));
00465 menu->ModifyMenu (ID_OPENGROUPFOLDER, MF_BYCOMMAND|MF_STRING, ID_OPENGROUPFOLDER, LS (L_OPENGRPFOLDER));
00466
00467 str = LS (L_GRPPROP); str += "\tEnter";
00468 menu->ModifyMenu (ID_GRPPROPERTIES, MF_BYCOMMAND|MF_STRING, ID_GRPPROPERTIES, str);
00469 }
00470
00471 void CDownloads_Groups::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult)
00472 {
00473 TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
00474
00475 HTREEITEM hItem = GetSelectedItem ();
00476
00477 switch (pTVKeyDown->wVKey)
00478 {
00479 case VK_DELETE:
00480 if (hItem)
00481 {
00482 if (hItem == m_hDeleted)
00483 OnDeletedClear ();
00484 else if (hItem == m_hHistory || GetParentItem (hItem) == m_hHistory)
00485 OnHistoryClear ();
00486 else if (IsGroupItem (hItem))
00487 OnGrpdelete ();
00488 }
00489 break;
00490
00491 case VK_RETURN:
00492 if (hItem)
00493 {
00494 if (hItem == m_hHistory)
00495 OnHistorySettings ();
00496 else if (hItem == m_hDeleted)
00497 OnDeletedProperties ();
00498 else if (IsGroupItem (hItem))
00499 OnGrpproperties ();
00500 }
00501
00502 break;
00503
00504 case VK_APPS:
00505 ShowGrpContextMenu ();
00506 break;
00507
00508 case VK_TAB:
00509 switch (_pwndDownloads->Get_DWWN ())
00510 {
00511 case DWWN_LISTOFDOWNLOADS:
00512 _pwndDownloads->m_wndDownloads.m_tasks.SetFocus ();
00513 break;
00514
00515 case DWWN_HISTORY:
00516 _pwndDownloads->m_wndHistory.SetFocus ();
00517 break;
00518
00519 case DWWN_DELETED:
00520 _pwndDownloads->m_wndDeleted.SetFocus ();
00521 break;
00522 }
00523 break;
00524 }
00525
00526 *pResult = 0;
00527 }
00528
00529 void CDownloads_Groups::ShowGrpContextMenu(HTREEITEM hItem, BOOL bAutoDetect)
00530 {
00531 if (bAutoDetect)
00532 {
00533 hItem = GetSelectedItem ();
00534 if (hItem)
00535 {
00536 RECT rc;
00537 GetItemRect (hItem, &rc, TRUE);
00538 m_rbX = rc.left;
00539 m_rbY = rc.top;
00540 }
00541 }
00542
00543 m_hContextMenuItem = hItem;
00544
00545 if (hItem)
00546 {
00547 if (hItem == m_hDeleted)
00548 {
00549 ShowDeletedContextMenu ();
00550 return;
00551 }
00552
00553 if (hItem == m_hHistory || GetParentItem (hItem) == m_hHistory)
00554 {
00555 ShowHistoryContextMenu ();
00556 return;
00557 }
00558 }
00559
00560 CMenu menu;
00561 menu.LoadMenu (IDM_GROUP);
00562 CMenu *pPopup = menu.GetSubMenu (0);
00563
00564 ApplyLanguageToMenu (pPopup);
00565
00566 pPopup->SetDefaultItem (ID_GRPPROPERTIES);
00567
00568 if (hItem)
00569 {
00570
00571
00572 if (hItem == m_hAllGroups || IsGroupItem (hItem))
00573 {
00574 if (hItem == m_hAllGroups)
00575 {
00576 pPopup->EnableMenuItem (ID_GRPDELETE, MF_BYCOMMAND | MF_GRAYED);
00577 pPopup->EnableMenuItem (ID_OPENGROUPFOLDER, MF_BYCOMMAND | MF_GRAYED);
00578 pPopup->ModifyMenu (ID_GRPPROPERTIES, MF_BYCOMMAND, ID_GRPSETROOTFOLDER, LS (L_SETGRPROOTFOLDER));
00579 }
00580
00581 if (hItem == m_hOther)
00582 {
00583 pPopup->EnableMenuItem (ID_GRPDELETE, MF_BYCOMMAND | MF_GRAYED);
00584 }
00585 }
00586 else
00587 {
00588 pPopup->EnableMenuItem (ID_GRPPROPERTIES, MF_BYCOMMAND | MF_GRAYED);
00589 pPopup->EnableMenuItem (ID_GRPDELETE, MF_BYCOMMAND | MF_GRAYED);
00590 pPopup->EnableMenuItem (ID_OPENGROUPFOLDER, MF_BYCOMMAND | MF_GRAYED);
00591
00592 if (hItem != m_hFilters && hItem != m_hCompleted && hItem != m_hAllGroups)
00593 {
00594 pPopup->EnableMenuItem (ID_GRPDELETEALLSUCCESSFUL, MF_BYCOMMAND | MF_GRAYED);
00595 pPopup->EnableMenuItem (ID_GRPDELETEALLDEADDLDS, MF_BYCOMMAND | MF_GRAYED);
00596 }
00597 else if (hItem == m_hCompleted)
00598 {
00599 pPopup->EnableMenuItem (ID_GRPSTARTALL, MF_BYCOMMAND | MF_GRAYED);
00600 pPopup->EnableMenuItem (ID_GRPSTOPALL, MF_BYCOMMAND | MF_GRAYED);
00601 pPopup->EnableMenuItem (ID_GRPDELETEALL, MF_BYCOMMAND | MF_GRAYED);
00602 }
00603 }
00604 }
00605 else
00606 {
00607 pPopup->EnableMenuItem (ID_GRPPROPERTIES, MF_BYCOMMAND | MF_GRAYED);
00608 pPopup->EnableMenuItem (ID_GRPDELETE, MF_BYCOMMAND | MF_GRAYED);
00609 pPopup->EnableMenuItem (ID_OPENGROUPFOLDER, MF_BYCOMMAND | MF_GRAYED);
00610 pPopup->EnableMenuItem (ID_GRPSTARTALL, MF_BYCOMMAND | MF_GRAYED);
00611 pPopup->EnableMenuItem (ID_GRPSTOPALL, MF_BYCOMMAND | MF_GRAYED);
00612 pPopup->EnableMenuItem (ID_GRPDELETEALL, MF_BYCOMMAND | MF_GRAYED);
00613 pPopup->EnableMenuItem (ID_GRPDELETEALLSUCCESSFUL, MF_BYCOMMAND | MF_GRAYED);
00614 pPopup->EnableMenuItem (ID_GRPDELETEALLDEADDLDS, MF_BYCOMMAND | MF_GRAYED);
00615 }
00616
00617 CPoint pt (m_rbX, m_rbY);
00618 ClientToScreen (&pt);
00619
00620 m_odmenu.Attach (&menu, FALSE);
00621
00622 fsSetImage images [] =
00623 {
00624 fsSetImage (ID_GRPCREATE, 0),
00625 fsSetImage (ID_GRPDELETE, 1),
00626 fsSetImage (ID_GRPDELETEALL, 2),
00627 fsSetImage (ID_GRPPROPERTIES, 3),
00628 };
00629
00630 m_odmenu.SetImages (images, sizeof (images) / sizeof (fsSetImage));
00631
00632 pPopup->TrackPopupMenu (TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN, pt.x, pt.y, this);
00633 m_odmenu.Detach ();
00634
00635 menu.DestroyMenu ();
00636 }
00637
00638 fsDldFilter* CDownloads_Groups::GetCurrentFilter()
00639 {
00640 HTREEITEM hItem = GetSelectedItem ();
00641
00642 if (hItem == m_hTasks)
00643 return &m_filterTasks;
00644
00645 if (hItem == m_hAllGroups || hItem == m_hFilters)
00646 return &m_filterAll;
00647
00648 if (hItem == m_hHistory || hItem == m_hDeleted)
00649 return NULL;
00650
00651 if (GetParentItem (hItem) == m_hFilters || IsGroupItem (hItem))
00652 return (fsDldFilter*) GetItemData (hItem);
00653
00654 return NULL;
00655 }
00656
00657 void CDownloads_Groups::InsertHistory()
00658 {
00659 m_hHistory = InsertItem (TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT, LS (L_HISTORY), 0, 0,
00660 TVIS_BOLD, TVIS_BOLD, 0, TVI_ROOT, TVI_LAST);
00661 SetItemData (m_hHistory, ULONG (&m_filterAllHist));
00662
00663 m_hToday = InsertItem (LS (L_TODAY), 1, 1, m_hHistory, TVI_LAST);
00664 SetItemData (m_hToday, ULONG (&m_filterToday));
00665
00666 m_hYesterday = InsertItem (LS (L_YESTERDAY), 1, 1, m_hHistory, TVI_LAST);
00667 SetItemData (m_hYesterday, ULONG (&m_filterYesterday));
00668
00669 m_hLastWeek = InsertItem (LS (L_LASTWEEK), 1, 1, m_hHistory, TVI_LAST);
00670 SetItemData (m_hLastWeek, ULONG (&m_filterLastWeek));
00671
00672 m_hLastMonth = InsertItem (LS (L_LASTMONTH), 1, 1, m_hHistory, TVI_LAST);
00673 SetItemData (m_hLastMonth, ULONG (&m_filterLastMonth));
00674
00675 m_hHistCustom = InsertItem (LS (L_CUSTOMttt), 1, 1, m_hHistory, TVI_LAST);
00676 SetItemData (m_hHistCustom, ULONG (&m_filterCustomHist));
00677 }
00678
00679 void CDownloads_Groups::InsertDeleted()
00680 {
00681 m_hDeleted = InsertItem (TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_STATE | TVIF_TEXT, LS (L_DELETED), 6, 6,
00682 0, 0, 0, TVI_ROOT, TVI_LAST);
00683
00684 SetItemData (m_hDeleted, NULL);
00685 }
00686
00687 void CDownloads_Groups::ShowDeletedContextMenu()
00688 {
00689 CMenu menu;
00690 menu.LoadMenu (IDM_GROUP);
00691 CMenu *pPopup = menu.GetSubMenu (1);
00692
00693 ApplyLanguageToMenu_Deleted (pPopup);
00694
00695 pPopup->SetDefaultItem (ID_DELETED_PROPERTIES);
00696
00697 if (_DldsMgr.Get_DeletedDownloadCount () == 0)
00698 pPopup->EnableMenuItem (ID_DELETED_CLEAR, MF_BYCOMMAND | MF_GRAYED);
00699
00700 CPoint pt (m_rbX, m_rbY);
00701 ClientToScreen (&pt);
00702
00703 m_odmenu.Attach (&menu, FALSE);
00704
00705 fsSetImage images [] =
00706 {
00707 fsSetImage (ID_DELETED_CLEAR, 2),
00708 fsSetImage (ID_DELETED_PROPERTIES, 3),
00709 };
00710
00711 m_odmenu.SetImages (images, sizeof (images) / sizeof (fsSetImage));
00712
00713 pPopup->TrackPopupMenu (TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN, pt.x, pt.y, this);
00714 m_odmenu.Detach ();
00715
00716 menu.DestroyMenu ();
00717 }
00718
00719 void CDownloads_Groups::OnDeletedClear()
00720 {
00721 if (0 == _DldsMgr.Get_DeletedDownloadCount ())
00722 return;
00723
00724 if (IDYES == MessageBox (LS (L_AREYOUSURE), LS (L_CONFIRMATION), MB_YESNO | MB_ICONQUESTION))
00725 {
00726 _pwndDownloads->m_wndDeleted.ShowWindow (SW_HIDE);
00727 try {
00728 _DldsMgr.ClearDeleted ();
00729 }catch (...) {}
00730 _pwndDownloads->m_wndDeleted.ShowWindow (SW_SHOW);
00731 }
00732
00733 SetFocus ();
00734 }
00735
00736 void CDownloads_Groups::OnDeletedProperties()
00737 {
00738 CDlgDeletedProperties dlg;
00739 _DlgMgr.DoModal (&dlg);
00740 SetFocus ();
00741 }
00742
00743 void CDownloads_Groups::ApplyLanguageToMenu_Deleted(CMenu *menu)
00744 {
00745 menu->ModifyMenu (ID_DELETED_PROPERTIES, MF_BYCOMMAND|MF_STRING, ID_DELETED_PROPERTIES, LS (L_PROPERTIES));
00746
00747 CString str = LS (L_CLEARDELETED); str += "\tDel";
00748 menu->ModifyMenu (ID_DELETED_CLEAR, MF_BYCOMMAND|MF_STRING, ID_DELETED_CLEAR, str);
00749 }
00750
00751 void CDownloads_Groups::ShowHistoryContextMenu()
00752 {
00753 CMenu menu;
00754 menu.LoadMenu (IDM_GROUP);
00755 CMenu *pPopup = menu.GetSubMenu (2);
00756
00757 ApplyLanguageToMenu_History (pPopup);
00758
00759 pPopup->SetDefaultItem (ID_HISTORY_SETTINGS);
00760
00761 if (_DldsMgr.m_histmgr.GetRecordCount () == 0)
00762 pPopup->EnableMenuItem (ID_HISTORY_CLEAR, MF_BYCOMMAND | MF_GRAYED);
00763
00764 CPoint pt (m_rbX, m_rbY);
00765 ClientToScreen (&pt);
00766
00767 m_odmenu.Attach (&menu, FALSE);
00768
00769 fsSetImage images [] =
00770 {
00771 fsSetImage (ID_HISTORY_CLEAR, 2),
00772 fsSetImage (ID_HISTORY_SETTINGS, 3),
00773 };
00774
00775 m_odmenu.SetImages (images, sizeof (images) / sizeof (fsSetImage));
00776
00777 pPopup->TrackPopupMenu (TPM_RIGHTBUTTON | TPM_TOPALIGN | TPM_LEFTALIGN, pt.x, pt.y, this);
00778 m_odmenu.Detach ();
00779
00780 menu.DestroyMenu ();
00781 }
00782
00783 void CDownloads_Groups::ApplyLanguageToMenu_History(CMenu *menu)
00784 {
00785 menu->ModifyMenu (ID_HISTORY_SETTINGS, MF_BYCOMMAND|MF_STRING, ID_HISTORY_SETTINGS, LS (L_SETTINGS));
00786
00787 CString str = LS (L_CLEARHISTORY2); str += "\tDel";
00788 menu->ModifyMenu (ID_HISTORY_CLEAR, MF_BYCOMMAND|MF_STRING, ID_HISTORY_CLEAR, str);
00789 }
00790
00791 void CDownloads_Groups::OnHistoryClear()
00792 {
00793 if (IDYES == MessageBox (LS (L_AREYOUSURE), LS (L_CONFIRMATION), MB_YESNO | MB_ICONQUESTION))
00794 _DldsMgr.m_histmgr.ClearHistory ();
00795 SetFocus ();
00796 }
00797
00798 void CDownloads_Groups::OnHistorySettings()
00799 {
00800 CDlgDownloadsHistory dlg;
00801 _DlgMgr.DoModal (&dlg);
00802 SetFocus ();
00803 }
00804
00805 fsDldHistRecFilter* CDownloads_Groups::GetHistoryCurrentFilter()
00806 {
00807 HTREEITEM hItem = GetSelectedItem ();
00808
00809 if (hItem == m_hHistory)
00810 return &m_filterAllHist;
00811
00812 if (GetParentItem (hItem) == m_hHistory)
00813 return (fsDldHistRecFilter*) GetItemData (hItem);
00814
00815 return NULL;
00816 }
00817
00818 void CDownloads_Groups::OnClick(NMHDR* , LRESULT* pResult)
00819 {
00820 *pResult = 0;
00821
00822 CPoint pt;
00823 if (FALSE == GetCursorPos (&pt))
00824 return;
00825
00826 ScreenToClient (&pt);
00827
00828 if (HitTest (pt) == m_hHistCustom)
00829 {
00830 if (GetSelectedItem () == m_hHistCustom)
00831 {
00832 CustomizeHistoryFilter ();
00833 _pwndDownloads->m_wndHistory.ApplyFilter (&m_filterCustomHist);
00834 }
00835 }
00836 }
00837
00838 void CDownloads_Groups::CustomizeHistoryFilter()
00839 {
00840 CDlgT1ToT2 dlg;
00841
00842 dlg.m_t1 = *m_filterCustomHist.Get_TFrom ();
00843 dlg.m_t2 = *m_filterCustomHist.Get_TTo ();
00844
00845 if (IDOK == _DlgMgr.DoModal (&dlg))
00846 m_filterCustomHist.SetTimeRange (dlg.m_t1, dlg.m_t2);
00847 }
00848
00849 void CDownloads_Groups::SetFilter_AllDownloads()
00850 {
00851 if (GetSelectedItem () != m_hAllGroups)
00852 SelectItem (m_hAllGroups);
00853 }
00854
00855 void CDownloads_Groups::SetFilter_AllHistory()
00856 {
00857 if (GetSelectedItem () != m_hHistory)
00858 SelectItem (m_hHistory);
00859 }
00860
00861 void CDownloads_Groups::SetFilter_DeletedDownloads()
00862 {
00863 if (GetSelectedItem () != m_hDeleted)
00864 SelectItem (m_hDeleted);
00865 }
00866
00867 void CDownloads_Groups::UpdateDeletedIcon()
00868 {
00869 int img = _DldsMgr.Get_DeletedDownloadCount () ? 7 : 6;
00870 int imgold;
00871 GetItemImage (m_hDeleted, imgold, imgold);
00872 if (img != imgold)
00873 SetItemImage (m_hDeleted, img, img);
00874 }
00875
00876 void CDownloads_Groups::SetGroupFilter(vmsDownloadsGroupSmartPtr pGroup)
00877 {
00878 HTREEITEM hGrp = NULL;
00879
00880 for (size_t i = 0; i < m_vGroups.size (); i++)
00881 {
00882 if (pGroup == m_vGroups [i].pGroupFilter->GetGroup ())
00883 {
00884 hGrp = m_vGroups [i].hGroup;
00885 break;
00886 }
00887 }
00888
00889 if (hGrp != NULL && hGrp != GetSelectedItem ())
00890 SelectItem (hGrp);
00891 }
00892
00893 void CDownloads_Groups::OnSetGroupsRootFolder()
00894 {
00895 CFolderBrowser *fb = CFolderBrowser::Create (LS (L_SELECTGRPSROOTFLDR),
00896 _DldsGrps.GetGroupsRootOutFolder (), NULL, this);
00897 if (fb == NULL)
00898 return;
00899 _DldsGrps.SetGroupsRootOutFolder (fb->GetPath ());
00900 }
00901
00902 void CDownloads_Groups::InsertGroups_tree(PDLDS_GROUPS_TREE pRoot, HTREEITEM hRoot)
00903 {
00904 for (int i = 0; i < pRoot->GetLeafCount (); i++)
00905 {
00906 PDLDS_GROUPS_TREE pGroup = pRoot->GetLeaf (i);
00907
00908 HTREEITEM hGroup = InsertGroup (pGroup->GetData (), hRoot);
00909
00910 if (pGroup->GetLeafCount ())
00911 InsertGroups_tree (pGroup, hGroup);
00912 }
00913 }
00914
00915 void CDownloads_Groups::OnNewGroupCreated(vmsDownloadsGroupSmartPtr pGroup)
00916 {
00917 ASSERT (FindGroupIndex (pGroup) == -1);
00918 if (FindGroupIndex (pGroup) != -1)
00919 return;
00920
00921 PDLDS_GROUPS_TREE pGrpInTree = _DldsGrps.FindGroupInTree (pGroup);
00922 ASSERT (pGrpInTree != NULL);
00923 PDLDS_GROUPS_TREE pRoot = pGrpInTree->GetRoot ();
00924
00925
00926 HTREEITEM hRoot;
00927
00928 if (pRoot == _DldsGrps.GetGroupsTree ())
00929 {
00930 hRoot = m_hAllGroups;
00931 }
00932 else
00933 {
00934 int nIndex = FindGroupIndex (pRoot->GetData ());
00935 if (nIndex == -1)
00936 return;
00937 hRoot = m_vGroups [nIndex].hGroup;
00938 }
00939
00940 InsertGroup (pGroup, hRoot);
00941
00942
00943 Expand (hRoot, TVE_EXPAND);
00944 }
00945
00946 void CDownloads_Groups::OnGroupNameChanged(vmsDownloadsGroupSmartPtr pGroup)
00947 {
00948 int nIndex = FindGroupIndex (pGroup);
00949 if (nIndex == -1)
00950 return;
00951 HTREEITEM hGroup = m_vGroups [nIndex].hGroup;
00952 CString str;
00953 if (pGroup->cDownloads)
00954 str.Format ("%s (%d)", pGroup->strName, pGroup->cDownloads);
00955 else
00956 str = pGroup->strName;
00957 SetItemText (hGroup, str);
00958 }
00959
00960 int CDownloads_Groups::FindGroupIndex(vmsDownloadsGroupSmartPtr pGroup)
00961 {
00962 for (size_t i = 0; i < m_vGroups.size (); i++)
00963 {
00964 if (m_vGroups [i].pGroupFilter->GetGroup ()->nId == pGroup->nId)
00965 return i;
00966 }
00967
00968 return -1;
00969 }
00970
00971 HTREEITEM CDownloads_Groups::InsertGroup(vmsDownloadsGroupSmartPtr pGroup, HTREEITEM hRoot)
00972 {
00973 _inc_GroupItem grpItem;
00974
00975 if (pGroup->nId == GRP_OTHER_ID)
00976 {
00977 CString str;
00978 if (pGroup->cDownloads)
00979 str.Format ("%s (%d)", LS (L_OTHER), pGroup->cDownloads);
00980 else
00981 str = LS (L_OTHER);
00982
00983 grpItem.hGroup = m_hOther = InsertItem (TVIF_IMAGE | TVIF_SELECTEDIMAGE |
00984 TVIF_STATE | TVIF_TEXT,
00985 str, 1, 1, 0, 0, 0, hRoot, TVI_LAST);
00986 }
00987 else
00988 {
00989 CString str;
00990 if (pGroup->cDownloads)
00991 str.Format ("%s (%d)", pGroup->strName, pGroup->cDownloads);
00992 else
00993 str = pGroup->strName;
00994
00995 grpItem.hGroup = InsertItem (str, 1, 1, hRoot, TVI_SORT);
00996 }
00997
00998
00999 grpItem.pGroupFilter = new fsDldGroupFilter;
01000 grpItem.pGroupFilter->SetGroup (pGroup);
01001 grpItem.cDownloads = pGroup->cDownloads;
01002 m_vGroups.push_back (grpItem);
01003 SetItemData (grpItem.hGroup, (ULONG) grpItem.pGroupFilter);
01004
01005 return grpItem.hGroup;
01006 }
01007
01008 BOOL CDownloads_Groups::IsGroupItem(HTREEITEM hItem)
01009 {
01010 if (hItem == m_hTasks)
01011 return FALSE;
01012
01013 if (hItem == m_hAllGroups || hItem == m_hFilters)
01014 return FALSE;
01015
01016 if (hItem == m_hHistory || hItem == m_hDeleted ||
01017 GetParentItem (hItem) == m_hHistory ||
01018 GetParentItem (hItem) == m_hDeleted)
01019 return FALSE;
01020
01021 fsDldFilter *filter = (fsDldFilter*) GetItemData (hItem);
01022 ASSERT (filter != NULL);
01023 if (filter == NULL)
01024 return FALSE;
01025 return filter->GetType () == DFT_GROUP;
01026 }
01027
01028 void CDownloads_Groups::OnTimer(UINT nIDEvent)
01029 {
01030 UpdateNumbersOfDownloadsInGroups ();
01031
01032 CTreeCtrl::OnTimer(nIDEvent);
01033 }
01034
01035 void CDownloads_Groups::UpdateNumbersOfDownloadsInGroups()
01036 {
01037 try {
01038
01039 size_t cTotalDownloads = 0;
01040
01041 for (size_t i = 0; i < m_vGroups.size (); i++)
01042 {
01043 cTotalDownloads += m_vGroups [i].pGroupFilter->GetGroup ()->cDownloads;
01044 if (m_vGroups [i].cDownloads != m_vGroups [i].pGroupFilter->GetGroup ()->cDownloads)
01045 {
01046 LPCSTR pszName = m_vGroups [i].pGroupFilter->GetGroup ()->nId == GRP_OTHER_ID ?
01047 LS (L_OTHER) : m_vGroups [i].pGroupFilter->GetGroup ()->strName;
01048
01049 m_vGroups [i].cDownloads = m_vGroups [i].pGroupFilter->GetGroup ()->cDownloads;
01050
01051 CString str;
01052 if (m_vGroups [i].cDownloads)
01053 str.Format ("%s (%d)", pszName, m_vGroups [i].cDownloads);
01054 else
01055 str = pszName;
01056
01057 SetItemText (m_vGroups [i].hGroup, str);
01058 }
01059 }
01060
01061 if (cTotalDownloads != m_cTotalDownloads)
01062 {
01063 m_cTotalDownloads = cTotalDownloads;
01064 CString str;
01065 if (m_cTotalDownloads)
01066 str.Format ("%s (%d)", LS (L_ALLDLDS), m_cTotalDownloads);
01067 else
01068 str = LS (L_ALLDLDS);
01069 SetItemText (m_hAllGroups, str);
01070 }
01071
01072 }catch (...) {}
01073 }
01074
01075 void CDownloads_Groups::OnGrpdeletealldeaddlds()
01076 {
01077 _pwndDownloads->DeleteDeadDownloadsInList ();
01078 }